《Linux Shell脚本攻略》学习笔记-第三章
3.1 简介
Unix为所有的设备和系统功能提供了文件形式的借口。可以通过这些特殊文件直接访问设备以及系统功能。
3.2 生成任意大小的文件
创建特定大小的文件最简单的方法就是利用dd命令。dd命令会克隆给定的输出内容,然后将一模一样的一份副本写入输出。
if表示输入文件,of表示输出文件,bs指定了以字节为单位的块大小,count表示需要被复制的次数。
单元大小 | 代码 |
字节 | C |
字 | w |
块 | B |
千字节 | K |
兆字节 | M |
吉字节 | G |
/dev/zero是一个特殊的字符设备,它会返回0值字节。如果不指定输入参数,dd会从stdin中读取输入。如果不指定输出参数,则dd会使用stdout作为输出。
使用dd命令也可以用来测量内存操作的速度。
3.3 文本文件的交集与差集
comm命令可以用于比较两个已经排序的文件。它可以显示第一个文件和第二个文件所独有的行以及这两个文件所共有的行。
1)执行不带任何选项的comm
输出的第一列包含只在A.txt中出现的行,第二列包含只在B.txt中出现的行,第三列包含A.txt和B.txt中共有的行。
2)打印两个文件的交集(两个文件共有的行)
-1选项可以删除第一行,-2选项可以删除第二行。
3)打印两个文件中互不相同的那些行(求差)
使用tr删除制表符来合并两列
4)通过删除不需要的列,我们可以分别得到A.txt和B.txt的差集(包含在某一文件,但是不包含在另一个文件中的那些行)
5)比较多个文件的方法
3.4 查找并删除重复文件
内容相同的文件自然会生成相同的校验和。
3.5 文件权限、所有权和粘滞位
每一个文件都拥有多种类型的权限。在这些权限中,我们通常要和三组权限打交道(用户、用户组、其他用户)。
用户是文件的所有者,通常拥有所有的访问权。
用户组是多个用户的稽核,可能拥有文件的部分访问权。
其他用户是除文件所有者或用户组成员外的任何人。
1)
第一列表示文件类型。其中-表示普通文件,d表示目录,l表示符号链接。
第一组的三个字符对应用户权限,第二组对应用户组权限,第三组对应其他用户权限。
有三种常见的字符:
r:如果设置,表明该文件、设备或者目录可读。
w:如果设置,表明该文件、设备或者目录可以被修改。
x:如果设置,表明该文件可执行。
2)粘滞位
目录中有一个叫做粘滞位的特殊权限。如果目录设置了粘滞位,只有创建该目录的用户才能删除目录中的文件,就算用户组合其他用户也有写权限,仍无能为力。粘滞位出现在其他用户权限组中的执行权限位置。
3)设置文件权限
a表示给所有权限类别添加可执行权限。
读、写、执行权限都有与之对应的唯一的八进制数。
r=4,w=2,x=1
4)更改所有权
5)设置粘滞位
6)以递归方式设置文件权限和文件所有权
3.6 将文件设置为不可修改
设置不可修改的文件,一旦设置,包括root在内的任何用户都无法删除文件,除非撤销其不可修改属性。
chatter命令可以用于更改扩展属性。它能够将文件设置为不可修改,也可以修改其他属性来调节文件系统同步或压缩率。
3.7 批量生成空白文件
touch命令可以用来生成空白文件或是修改已有文件的时间戳。
1)调用touch命令并使用一个不存在的文件名作为参数,创建空白文件。
2)批量生成不同名字的空白文件
3)如果文件已经存在,那么touch命令会将与该文件相关的所有时间戳都更改为当前时间。
stat filename:查看文件的修改时间、访问时间、状态改变时间。
touch -a:只更改文件访问时间
touch -m:只更改文件修改时间
touch -d:指定特定的时间和日期
3.8 查找符号链接及其指向目标
符号链接是指向其他文件或目录的指针。它在功能上类似于MacOS中的
或Windows中的快捷方式。删除符号链接不会影响原始文件。
1)创建符号链接
2)打印符号链接
^表示字符串的起始位置,其后的l指定了字符串必须以l开头,这标识了一个符号链接,每个符号链接的权限标记快均以字母l起始。
3)打印符号链接指向的目标路径
3.9 枚举文件类型统计信息
Linxu系统中使用file命令,通过检查文件内容来确定其类型。
1)打印文件类型
file打印文件类型信息,file -b打印不包括文件名在内的文件类型信息。
2)
第一个<用于输入重定向,第二个<用于将子进程的输出转换成相应的文件名。这两个<之间有一个空格。
3.10 使用环回文件
执行过程:
挂载后:
卸载后:
注意:umount和mount都是特权命令,所以必须以root用户的身份来执行。
3.11 生成ISO及混合型ISO文件
ISO文件通常用于存储待刻录的数据。
1)创建ISO镜像:
2)用命令行刻录ISO
cdrecord命令可以将ISO文件刻录CD-ROM或DVD-ROM。
3)eject:弹出光驱托盘
eject -t:合上光驱托盘
3.12 查找并修补文件差异
diff命令可以生成两个文件之间的差异比较。
1)
-u用于生成一体化输出。在一体化输出中,+起始的是新加入的行,-开始的是被删除的行。
2)生成修补文件
3)文件修补
这样version1的内容就和version2的内容一模一样了。
4)撤销修补
5)diff命令也能够以递归的形式处理目录,它会对目录中的所有内容生成差异对比。
3.13 使用head和tail打印文件的前10行和后10行
1)head命令
2)tail命令
3)使用tail查看日志
-f:允许tail关注文件内容的更新并将其显示出来
-s:睡眠间隔
3.14 只列出当前目录的各种方法
3.15 在命令行中使用pushd和popd实现快速定位
pushd和popd命令可以用于在多个目录之间切换而无需重新输入目录路径。
3.16 统计文件的行数、单词数和字符数
wc是一个用于统计行、单词和字符数量的工具。
3.17 打印目录树
tree命令能够以图形化的树状结构打印文件和目录。
1)
2)-P选项可以只显示出匹配指定模式的文件,-I选项可以只显示出不匹配指定模式的文件
3)-h选项可以同时打印出文件和目录大小