用此笔记记录学习过程中的心得及小技巧
命令总结片
- chgrp chown chmod命令
参考linux|chmod,chown,chgrp文件安全与权限
语法:chown [选项] [所有者][:用户组] 文件
普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。
一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以
改变别人的档案拥有者,也没有权限将自己的文档拥有者改设为别人。只有系统管理者(root)才有这样的权限设置属主用户名称或用户识别码(用户ID)皆可,设置群组则用群组名称或群组识别码(组ID)。
文件是以空格分开的要改变权限的文件列表,支持通配符。 ``` 如果仅仅给定“所有者”,执行此语句后,仅仅改变选定文件的拥有者,文件的组是没有改变的。 liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l 总用量 0 -rw-rw-r-- 1 liujl liujl 0 2012-06-20 09:31 mytest.txt liujl@liujl-Rev-1-0:~/mycode/TEST$ sudo chown juanzhang mytest.txt [sudo] password for liujl: liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l 总用量 0 -rw-rw-r-- 1 juanzhang liujl 0 2012-06-20 09:31 mytest.txt
如果“所有者:所有组”,执行此语句后,用户和组拥有者都会发生改变
注意:在:两边不要有空格
liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l
总用量 0
-rw-rw-r– 1 liujl liujl 0 2012-06-20 09:31 mytest.txt
liujl@liujl-Rev-1-0:~/mycode/TEST$ sudo chown liujl:liujl mytest.tx
[sudo] password for liujl:
liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l
总用量 0
-rw-rw-r– 1 liujl liujl 0 2012-06-20 09:31 mytest.txt
如果“所有者:”,但后面没有组名,系统会改变文件的拥有者及此拥有者所在的组。
liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l
总用量 0
-rw-rw-r– 1 liujl liujl 0 2012-06-20 09:31 mytest.txt
liujl@liujl-Rev-1-0:~/mycode/TEST$ sudo chown juanzhang: mytest.txt
[sudo] password for liujl:
liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l
总用量 0
-rw-rw-r– 1 juanzhang juanzhang 0 2012-06-20 09:31 mytest.txt
如果“:所有组”,但是没有拥有者,仅有组名被修改 liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l 总用量 0 -rw-rw-r– 1 juanzhang juanzhang 0 2012-06-20 09:31 mytest.txt iujl@liujl-Rev-1-0:~/mycode/TEST$ sudo chown :liujl mytest.txt liujl@liujl-Rev-1-0:~/mycode/TEST$ ls -l 总用量 0 -rw-rw-r– 1 juanzhang liujl 0 2012-06-20 09:31 mytest.txt 如果仅“:”或者整个操作数为空,文件拥有者或者组名都不会改变 ```
命令格式:chgrp [选项] [组] [文件]
在linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理。可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以。Chgrp命令就是change group的缩写!要被改变的组名必须要在/etc/group文件内存在才行。
命令功能:chgrp命令可采用群组名称或群组识别码的方式改变文件或目录的所属群组。使用权限是超级用户。
- 几个磁盘,文件系统,内存有关的命令 ``` 查看机器所挂硬盘个数及分区情况 1.fdisk -l 检查文件系统的磁盘空间占用情况 2.df -h 列出superblock和block group信息 3.dumpe2fs 用来增大/收缩未加载的“ext2/ext3”文件系统的大小。如果文件系统是处于mount状态下,那么它只能做到扩容,前提条件是内核支持在线resize。 4.resize2fs 显示内存使用情况 5.free -m 对于LVM的设置(scan、display) 6.pv,vg,lv 创建文件系统 7.mkfs 用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。 8.mkswap ext2/ext3类型的文件系统强制磁盘检查修复命令 9.e2fsck -f
其实 LV 的名称建置成为 /dev/vbirdvg/vbirdlv 是为了让使用者直觉式的找到我们所需要的数据, 实际上 LVM 使用的装置是放置到 /dev/mapper/ 目录下的!所以你才会看到上表当中的特殊字体部分。
## 遇到的问题
### 正则表达式与文件格式化处理
>正则表达式是处理字符串的,通配符是bash的功能
- awk命令学习中(数据处理工具):
>所有awk的动作,即在{}内的动作,如果需要多个命令辅助时,可利用分号“;”间隔,或者直接以[ENTER]按键来隔开每个命令。
与bash、shell的变量不同,在awk当中,变量可以直接使用,不需要加上$符号。
$0代表一整行数据的意思。
awk的格式内容如想要以print打印,记得非变量的文字部分,包含printf小节提到的格式中,都需要使用双引号来定义出来。
默认分隔符空格键,如想变默认分隔符,需要使用BEGIN关键字。
` awk 'BEGIN {FS=":"} $3<10 {print $1 "\t " $3}'`
- sed命令学习中:
>sed后面接的动作,务必以''两个单引号括住。
sed后面如果要接超过两个以上动作时,每个动作前面得加-e才行。
可以通过sed的以行为单位的显示功能,就能够将某一个文件内的某些行号找出来查阅。
- printf
> printf并不是管道命令得用类似$()的方式,先将文件内容提出来,作为后续的数据才行。
%s代表一个不固定长度的字符串。
print可以将数值转换成为字符,例如
`printf '\x45\n'`结果为E
printf中的特殊按键同样可以用在echo中:
\a \t \n \f \r
- pr文件打印工具
- 查看ip的命令别名myip,以及记录查看结果过的变量MYIP
**可以将alias和MYIP的设置那两行写入 ~/.bashrc 即可每次登录生效!**
[root@localhost vitest]# ifconfig eno1 | grep ‘inet’ | sed ‘s/^.inet//g’ | cut -d ‘ ‘ -f2 202.117.16.191 fe80::3640:b5ff:febe:c8b0 [root@localhost vitest]# alias myip=”ifconfig eno1 | grep ‘inet’ | sed ‘s/^.inet//g’ | cut -d ‘ ‘ -f2” [root@localhost vitest]# echo ${myip}
[root@localhost vitest]# MYIP=$(myip) [root@localhost vitest]# echo ${MYIP} 202.117.16.191 fe80::3640:b5ff:febe:c8b0 [root@localhost vitest]# ```
学习shell script
- 关于bash子进程与父进程
1.子进程仅会继承父进程的环境变量 2.子进程完成后,子进程内的各项变量或操作将会结束而不会传回到父进程中。 (直接命令执行(绝对路径/相对路径/$PATH)或者利用bash/sh执行脚本都是利用子进程执行脚本)
- 利用source执行脚本:会在父进程中执行
语系编码的转换实例讲解
参考《鸟哥的私房菜basic》第446与448页脚本实例。脚本用zh_TW.big5语系,本机环境位zh_CN.UTF-8,所以直接下载鸟哥脚本会出现乱码,需要转码。
待写。。。。。。。。。。
经常升级系统导致/boot分区空间不足
理论上,除正在用的其它的都可以卸载,但刚升级的东西可能不稳定,为保险起见,保留1-2个之前版本备用吧。
转载内核清理](http://blog.csdn.net/zht666/article/details/8776316) [转载内核清理2 转载*ubuntu磁盘空间清理
经常升级Linux内核,导致更新时警告/boot分区空间不足。这是以为多次升级内核后,导致内核版本太多,清理一下没用的内核文件就行了。命令如下:
查看现有系统的内核
dpkg --get-selections|grep linux-image
查看现在使用的内核
uname -a
清理/boot分区
主要的思路就是选择性删除你不想继续使用的内核,清理出/boot分区空间即可
sudo apt-get purge 内核名称
虽然在卸载旧内核的时候提示信息说已经帮我们更新了系统启动项,但为了保险起见我们执行更新开机启动控制文件命令: `sudo update-grub`
清理/usr/src目录,删除你已经卸载的内核目录 上面就是Ubuntu清理boot分区的方法介绍了,如果你出现了磁盘空间不足的情况,不妨试试本文介绍的方法吧。
清理Linux磁盘空间的4种方法
Linux系统的硬盘并没有它所能达到的一样轻巧。例如,在你安装完软件后,APT软件包管理器会把软件包文件保存下来,除非你计划卸载或者重装它们,否则这将是空间上的浪费。
- 删除临时文件
BleachBit几乎是一个Linux上的CCleaner。你可以通过Ubuntu软件中心安装BleachBit。如果你没用以root权限打开它,这个工具是不能删除APT软件包和其他系统级别的东西的。可以通过在终端上
运行sudo bleachbit
来以root身份运行它。 BleachBit最棒的功能是它能够自动执行一些只有有经的Linuxe用户经通常的事情。例如,对你不在需要用到的APT软件包执行autoclean, autoremove, clean命令,以及删除已经安装完成的缓存的软件包文件。
- 分析磁盘使用情况
Ubuntu自带了一个能够扫描你的系统并显示出占用空间最大的目录和文件的图像概览. 这个工具也是自带的——启动磁盘使用分析(Disk Usage Analyzer)来打开它。如果你使用的是非Ubuntu的Linux分支,它也可能自带了,因为他是GNOME的一部分。如果找不到它的话,你可以尝试看看安装Baobab包。 (
sudo apt-get install baobab
)
- 查看哪个应用占用最多磁盘空间
你所安装的应用——以软件包的形式安装的应用——也在你的硬盘上占了空间。如果你安装了很多的应用,它们可能占用不少的空间。为了确定各个包占用了多少空间,我们可以使用 Synaptic (新立得包管理工具)软件包管理器。它以前曾是Ubuntu的一部分,但是为了为其他工具腾出空间而被移除了。你可以打开Ubuntu软件中心查找安装Synaptic。(
sudo apt-get install synaptic
).基于Debian的(deb-based)分支也可以用。
查看哪个软件包占用了最大的空间,选择 Status > Installed > Size column 可以让列表按软件包的大小排序。(如果你看不到 Size column,点击 Settings > Preferences 然后勾选 Columns and Fonts 分页下的 Size column。) 。一些软件包是系统运作的关键,比如Linux内核,不可轻易卸除。不过,我们可以看到像LibreOffice, Firefox, 和Thunderbird这些软件包在里面占用了大块的空间——如果我们空间实在吃紧并且我们很少用这些软件,那么就可以卸掉它们来释放空间。以后我们可以重新安装它们。
- 删除旧的内核
Ubuntu会在安装新版本的内核后保存旧的Linux内核。当新的Linux内核有些东西损坏了,你可以回到旧的内核中。
注意:在删除任何内核文件前,保证你在安装完新内核后已经重启过了,而不是正在使用旧内核。Ubuntu回自动启动进入最新的内核中,但是如果你在内核更新过后没用重启过, 你将仍然在使用旧的内核。
使用 **Synaptic** 软件包管理工具删除旧的Linux内核是非常简单的。在Synaptic使用Ctrl+F,告诉它你要查找的文件名linux- 没错,有破折号。然后按软件包的名字排序,你便能看到列表前端的大概的那几个软件包了。
记住我们有好几个不同版本的linux-image-extra,linux-headers和linux-软件包。我们可以删除这些软件包里面的旧的版本——每个内核都有多个不同的软件包与它关联。选择旧版本,右键,然后标记为移除(removal)。之后只要应用修改便能释放那些空间了。
千万记住——只删除旧版本的内核文件!留下最新的那个版本否则你的系统将无法启动。
关于开机进入initramfs
卸了3个旧版本的内核,用Bleachbit清除磁盘临时文件,非常漫长的时间,直到KTV唱3小时歌回来还没好。最后关机睡觉,今天开机照样让输密码解锁磁盘(以前装系统的时候我为什么非要加密磁盘,又不涉密,哎!!),我去发现大写指示灯不亮了,各种是密码,最后光荣进入了initramfs,内容大致如下:
Gave Up waiting for root device. common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enought?)
- Check root= (did the system wait for the right device?)
-Missing modules (cat /proc/modules; ls /dev)
Alert! /dev/mapper/ubuntu--vg-root does not exist. Dropping to a shell!
BusyBox v1.21.1 (ubuntu ...) built-in shell (ash)
(initramfs)_
认真看看发现,ubuntu很人性啊,出现问题的可能都告诉你了,那就从最简单的开始排查(狗屎运,真的好了)。
(initramfs)reboot
这命令能用,真好,exit失败。。
重启后,F2进GRUB,一般默认选第一个(我的好像是ubuntu),按‘e’进入编辑界面。
找到
```
linux /boot/vmlinuz-**-generic root=UUID=a2ce51b0-935b-4ba5-9151-8674fd7dd277 ro quiet splash
后面加一句:
rootdelay=90
变成
linux /boot/vmlinuz-***-generic root=UUID=a2ce51b0-935b-4ba5-9151-8674fd7dd277 ro quiet splash rootdelay=90
这个rootdelay=90参数的位置也可以写在quiet splash前面. ```
修改后在grub的编辑框中按ctrl+x就可以让grub执行这个编辑框里的引导命令啦,这样后,机器还真的成功引导硬盘上面的ubuntu…(果然是狗屎运啊)
解决这个问题的时候也查询到引导时uuid没有设置好也会出现类似的情况…但是我这里的uuid明显是没有问题的…于是没有管这个咯…
清理系统垃圾,SWAP丢失为0
#具体现象如下:
研究下列参考博客。 调整SWAP分区大小后,SWAP丢失为0的解决 一个问题引发对Linux swap和内存的思考 fdisk -l与free查出来的swap分区大小 fdisk -l没信息问题
#最后机智的我发现问题了:
装系统时采用的默认分区。实际上采用的P+E的结构,将/dev/sda分为主分区/dev/sda1和扩展分区/dev/sda2,然后整个扩展分区上分出一个逻辑分区/dev/sda5。 机智的ubuntu将这个/dev/sda1作为/boot分区,蓝后唻,将整个逻辑分区/dev/sda5作为了PV,在其上建立VG名字为 ubuntu–vg 。再之后将ubuntu–vg分为两个LV,分别为/dev/ubuntu–vg/root和/dev/ubuntu–vg/swap1。
通过下列命令来查查看是不是这样的
df -h
fdisk -l
fdisk -l /dec/sda
pvscan
pvdisplay
vgscan
vgdisplay
lvscan
lvdisplay
如上我们看到了,事实上咱们的swap分区很正常,并木有消失。
free -m
或者cat /proc/swaps
可以看到 swap 0 0 0
说明swap并没有开启。因为前几天清理系统垃圾,顺便把swap清了(此处不需嘲笑),蓝后本本就不正常这么多天。好吧,既然swap空了现在,就把它当做原始盘对待吧。
参考*调整Linux下的LVM,以及Swap控件大小 CentOS6.x 通过LVM增加与缩小Swap分区操作
先来个格式化
mkswap /dev/ubuntu--vg/swap1
重新打卡swap
swapon -va
(忽略此处警告信息)
free -m或者cat /proc/swaps
明显就有swap大小数据了,哈哈好了,真是千辛万苦啊