以下是阅读鸟哥的 Linux 私房菜第四版做的笔记。
一、Linux 入门
1. man 命令
虽然绝大多数数的命令带有–help 选项,但是想查看某命令的详细信息还是 man 比较详细。
1 | man man #查看man命令的manual |
2.info 命令
虽然 man 命令很强大,但是一大段的文字在 bash 中展现出来难免难以查阅。info 命令将 man 的内容拆成多个 node 可以让使用者像操作 html 一样来查看命令的使用详情。
1 | info info #查看info命令的.info文件 |
进入 info 的使用界面,为了方便操作,info 的使用界面带有很多快捷键。
1 | n #Next 跳到下一个Node |
二、文件权限
1.改变文件属性和权限
1 | chgrp #change group |
1.改变文件所属组
Linux 的所有组的信息保留在/etc/group 文件内。该文件内的内容格式为:
1 | #组名:密码:组id:组内所有成员 |
为了安全,密码实际显示的是”X”,真正的密码保存在了/etc/shadow 内(该文件只有 root 才能打开)。
修改文件所属组方法如下
1 | #用法 |
2.改变文件所属用户
linux 的所有用户信息保留在/etc/passwd 文件内。改文件内的内容格式为:
1 | #用户名:密码:用户id:用户的主要组id:可选字段,通常为了存放信息:home目录所在地址:shell |
同样,这里的密码显示的是’x’.
修改文件所属用户的方法如下
1 | #用法 |
3.改变文件权限
修改文件的权限有两种方法,数字和符号
- 数字
r:4 w:2 x:1,根据需要,将权限对应的数字相加即可得到一个数字。
1 | #用法 |
- 符号
a:所有对象 u:所属用户 g:所属组 o:其他人,根据需要,将对应的权限赋值给对应的对象就好
1 | #用法 |
如果想去掉或添加某个对象的某个权限,可以用’-‘和’+’
1 | #index.html的权限为rwxrwxrwx,现在想去掉其他用户的可执行权限 |
- 隐藏权限
在老的 Ext 文件系统上,可以添加与查看隐藏权限,在 xfs 文件系统(CentOS 7 默认)内仅支持部分参数
1 | chattr #添加隐藏权限 |
- 默认权限 umask
用户创建文件和文件是都会带有默认的权限。
1 | umask #查看默认权限 4位数 |
一般用户的默认 umask 是 0002,要如何解读这 4 位数呢。第一位是特殊权限的位置,后三位就是我们平时理解的 user group others。但是有所不同的是显示的数字是表示要排除的特权。
最后一位是 2,那表是要排除掉可写权限。于是 0002 对于新创建的文件,它的默认权限是-rw-rw-r;对于新创建的目录,它的默认权限是-rwxrwxr-x。
注意这里的文件和目录的默认权限有所不同,文件本身就默认没有可执行权限的,而目录默认是有可执行权限。因为对大部分文件来说,可执行权限没有意义,但对于目录来说就很有必要。
root 用户的默认 umask 是 0022,这是为了安全考虑,这样 root 创建的文件或目录,在默认情况下,其同组成员是无法修改的。
- 特殊权限
SUID SGID TBIT 是三个特殊权限。
有时候会看到 rwsr-xr-x 的权限,这里的 s 就是 SUID。该权限的作用就是其他用户在执行的时候可以获得该文件所属用户的权限(注意仅在文件执行期间)。,SUID 仅可用在 binary program 上, 不能够用在 shell script 上面!以下是设置方法。
1 | #将权限为 rwxr-xr-x的test修改为rwsr-xr-x |
有时候会看到 rwx–s–x 的权限,这里的 s 就是 SUID。其作用类似 SUID,就是在文件的执行期间其他用户可以获得该程序群组的支持。
SUID 同时也可以用在目录上,其作用就是使用者进入该目录时,它的有效群组会变为该目录的群组。同时,使用者在该目录下创建的文件群组和该目录的群组相同。
以下是设置方法。
1 | #将权限为 rwxr-xr-x的test修改为rwxr-sr-x |
查看/tmp 的权限是,会看到 drwxrwxrwt,这个 t,这里的 t 就是 TBIT。它可以让使用者在它下面创建的文件仅有使用者自己和 root 能删除。
以下是设置方法。
1 | #将权限为 rwxr-xr-x的test修改为rwxr-xr-t |
其实权限设置是有 4 位的,第一位表示的是特殊权限。SUID:4,SGID:2,TBIT:1。把他们相应的数字相加就能组合使用。注意如果出现大写的 S 或 T,那说明这是无效的特殊权限,因为其所在的位置没有设置可执行权限。
三、文件与目录管理
1.路径与文件、目录管理
1.路径
1 | cd #变换目录 |
特殊的目录一览
1 | . #代表此层目录 |
2.文件、目录管理
1 | mkdir #创建文件夹 |
2.文件内容查看
查看文件内容可以用各种编辑器例如 nano、vim 等。在 X window 下还可以用 gedit 编辑器。
如果仅仅只是查看文件,用编辑器就有点小题大做。linux 有直接查看文件的命令
1 | cat #查看文件 |
3.指令文件名的搜索
1 | which #查看指令的可执行文件所在目录,它是按PATH的所规范的路径寻找 |
4.文件的查找
1 | find #强大的查找功能,但比较消耗性能和时间 |
四、磁盘与文件系统管理
1.查看文件系统的 superblock
ext 文件系统
1 | dumpe2fs [options] 设备文件名 |
xfs 文件系统
1 | xfs_info 挂载点 | 设备文件名 |
2.查看磁盘或目录的容量
1 | df #列出文件系统的整体磁盘使用量 |
1 | #用法 |
1 | #用法 |
3.创建连接
1 | #用法 |
4.查看磁盘分区情况
1 | #查看磁盘分区情况 |
1 | #查看分区uuid |
1 | #列出磁盘的分区表类型与分区信息 |
5.磁盘分区:gdisk/fdisk
注意 MBR 分区表用 fdisk;GPT 分区表用 gdisk。
1 | gdisk 设备名 |
分区完毕并写入后,分区表并没有更新。可以通过重启来更新,或者 partprobe 更新 linux 核心的分区表信息。
1 | partprobe [-s] |
我们可以用 lsblk 来查看分区表的姿态,也可以:
1 | cat /proc/partitions #核心的分区纪录 |
5.磁盘格式化
make filesysytem 创建文件系统即是格式化。
这部分理解比较吃力,请查阅鸟哥的 linux 382 页
格式化为 xfs 文件系统
1 | mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] [-r parms] 设备名 |
格式化为 ext4 文件系统
1 | mkfs.ext4 [-b size] [-L label] 设备名称 |
格式化为其他文件系统
1 | mkfs |
6.文件系统挽救
每个文件系统都有其对应的指令
xfs
1 | xfs_repair [-fnd] 设备名称 |
ext4。fsck.ext4 这是个综合指令
1 | fsck.ext4 [-pf] [-b superblock] 设备名称 |
7.文件系统挂载与卸载
进行挂载前要确定好几件事:
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
- 单一目录不应该重复挂载多个文件系统;
- 要作为挂载点的目录,理论上应该都是空目录才是。
1 | mount #比较复杂 请用man来查看 |
1 | #鸟哥现在比较推荐UUID的方式来挂载,应为UUID是唯一标识符,不会发生重复 |
有挂载就有卸载
1 | umount [-fn] 设备文件名或挂载点 |
7.磁盘/文件系统参数修订
1 | mknod |
一个有趣的命令 uuidgen
1 | uuidgen #生成一个新的uuid |
8.开机挂载 /etc/fstab 及 /etc/mtab
修改/etc/fstab 即可开机自动挂载
五、文件与文件系统的压缩,打包与备份
1.文件压缩
压缩指令 gzip,bzip2,xz
1.gzip/zcat/zmore/zless/zgrep
gzip 同时可以解压 compress zip gzip 文件。
1 | #用法 |
zcat/zmore/zless/zgrep 分别对应 cat/more/less/grep。用来直接查看压缩文件内容。
1 | #查看services.gz的内容 |
压缩的时候配合上 time 命令,还可以了解压缩用的时间。
1 | time gzip services |
2.bzip2/bzcat/bzmore/bzless/bzgrep
用法和 gizp 相同,更多信息可以 man 它。它的优点是压缩率比 gzip 更高,同时花的时间也会多一些。
3.xz/xzcat/xzmore/xzless/xzgrep
用法和 gizp/bzip2 相同,它的压缩比例比 bzip2 还要高,因此比较花费时间。
它还提供了一些更方便的 option
1 | #列出压缩文件详细息信息 |
2.打包指令
打包命令有点复杂,以下列出了常用的简单命令。高级用法请自行 man 它。
1 | #压缩 将z改成j可以用bzip2压缩,改成J可以用xz压缩 |
tar 可以用来备份文件
1 | #备份/etc目录,这里的time命令只是为了查看时间开销 |
tar 可以取出压缩包内的某个文件
1 | #以上面备份好的文件为例 |
tar 打包的时候可以将不需要的文件排除在外
1 | tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/sysytem.tar.bz2 /etc /root |
tar 可以仅备份比某个时刻要新的文件
1 | #查找比/etc/passwd的变更日期还新的文件 |
3.XFS 文件系统的备份与还原
使用 tar 通常是针对目录系统来进行备份的工作,如果想针对整个 xfs 文件系统进行备份需要 xfsdump。
还原的话用 xfsrestore。
该部分内容比较麻烦,请看鸟哥第四版 8.5 部分。
拷贝还可以用 dd。dd 该方法是一个扇区一个扇区拷的。
1 | dd -if input_file -of output_file -bs 每个block的大小(默认一个扇区的大小) count 多少个block |