参考书籍:《Shell脚本攻略.第3版》
1.创建特定大小的文件最简单的方法就是利用dd命令。dd命令会克隆给定的输入内容,然后将一模一样的一份副本写入到输出。
dd if=2 of=junk.data bs=10k count=1
if表示输入文件,of表示输出文件,bs指定了以字节为单位的块大小,count表示需要被复制的块数。
2.comm命令可用于比较两个已排序的文件。它可以显示出第一个文件和第二个文件所独有的行以及这两个文件所共有的行。
交集:打印出两个文件所共有的行;
求差:打印出指定文件所包含的互不相同的那些行;
差集:打印出包含在文件A中,但不包含在其他指定文件中的那些行。
3.首先执行不带任何选项的comm:
comm 1.txt 2.txt
输出结果的第一列包含只在1.txt中出现的行,第二列包含只在2.txt中出现的行,第三列包含在1.txt和2.txt中共有的行。各列之间以制表符(\t)作为分隔符。
4.为了打印两个文件的交集,我们需要删除前两列,只打印出第三列。-1选项删除第一列,-2选项删除第二列,最后留下的就是第三列。
comm 1.txt 2.txt -1 -2
5.为了输出两个文件中互不相同的行,并将两列合并成一列:
comm 1.txt 2.txt -3 | tr -d '\t'
6.比较3个文件的方法:
sort 2.txt 3.txt | comm - 1.txt
7.文件权限和所有权是Unix/Linux文件系统的显著特性之一。这些特性能够在多用户环境中保护你的个人信息。
ls -l的选项可以显示出包括文件类型、权限、所有者以及组在内的多方面信息。
-rw-rw-r-- 1 skysoft skysoft 36 11月 28 10:16 1.txt
第一列表明了文件类型
- -:普通文件 d:目录
- c:字符设备 b:块设备
- l:符号链接 s:套接字
- p:管道
接下来的9字符可以划分为3组,每组3个字符。第一组的3个字符对应用户权限(所有者),第二组对应用户组权限,第三组对应其他用户权限。9个子非鱼中的每一个字符指明是否设置了其中某种权限。如果已经设置,对应位置上会出现一个字符,否则出现一个-,表明没有设置对应的权限。
- r(read),如果设置,表明该文件、设备或目录可读。
- w(write):如果设置,表明该文件、设备或目录可以被修改。
- x(execute):如果设置,表明该文件可执行。对于目录而言,此权限指定了能否访问目录下的文件。
8.设置权限:
chmod u=rwx g=rw o=r 1.txt
- u,指定用户权限;
- g:指定用户组权限;
- o:指定其他用户权限;
9.为已经具有权限rwx rw- r-的文件添加可执行权限:
chmod o+x 1.txt
10.如果需要删除权限,则使用-:
chmod o-x 1.txt
11.读、写和执行权限都有对应的唯一的八进制数:
- r=4
- w=2
- x=1
可以使用八进制设置权限的命令:
chmod 755 1.txt
12.以递归的方式修改当前目录下的所有文件和子目录的权限。使用-R选项:
chmod 777 . -R
用“.”指定当前工作目录。
13.使用chatter将文件设置为不可修改:
chattr +i 1.txt
(有时候没有权限,可在前加上sudo)
14.如果需要恢复文件可写状态,撤销不可修改属性即可:
chattr -i 1.txt
15.打印文件类型信息:
file 1.txt
16.打印不包括文件名在内的文件类型信息:
file -b 1.txt
17.Linux文件系统通常存在于磁盘或记忆棒这种设备上。文件其实也可以作为文件系统挂载。这种存在于文件中的文件系统可用于测试、文件系统定制或者是作为机密信息的加密盘。
- 使用dd命令创建一个1GB大小的文件:
dd if=/dev/zero of=1.img bs=1G count=1
- 用mkfs命令将1GB的文件格式化成ext4文件系统:
mkfs.ext4 1.img
- 挂载环回文件系统
sudo mount -o loop 1.img loopback
-o loop用来挂载环回文件系统
- 卸载:
sudo umount loopback
18.创建ISO镜像,最好用dd命令:
dd if=1.img of=image.iso
19.diff命令可以生成两个文件之间的差异对比
diff v1.txt v2.txt
20.一体化形式的diff输出(带时间版本和不同的行数):
diff -u v1.txt v2.txt
21.修改文件可以通过将diff的输出重定向到一个文件来生成:
diff -u v1.txt v2.txt > v.patch
22.然后通过patch命令将变更应用于其中任意一个文件,应用于v1.txt,就可以得到v2.txt”:
patch -p1 v1.txt < v.patch
现在v1.txt的内容和v2.txt一模一样了。
23.在输一次,可以撤销做出的变更。
patch -p1 v1.txt < v.patch
如上,对已修补过的文件在修补将撤销做出的变更。如果使用patch命令的-R,则不会提示用户y/n
24.打印前10行:
head newwork.xml
25.从stdin读取数据:
cat newwork.xml | head
26.指定打印前几行:
head -n 4 newwork.xml
27.打印处理最后5行之外所有行:
head -n -5 newwork.xml
28.打印11除了最后5行的其他数
seq 11 | head -n -5
29.打印文件的最后10行,(tail用法跟head大致相同):
tail newwork.xml
30.tail常见用法是监视一个内容不断增加的文件,因为新增加的行都是出现在文件的尾部,可以在其被写入的时候使用tail将这些行显示出来。为了能够监视文件的增长,tail有一个特殊的选项-f或–follow,允许tail关注文件内容的更新并将其显示出来:
tail -f newwork.xml
31.列出当前路径下的目录。
- ls -d
- ls -F | grep “/$”(输出的目录换了行)
- ls -l | grep “d”(列出了目录的详细信息,^是行首标记)
- find . -type d -maxdepth 1 -print(列出当前)
32.统计行数
wc -l newwork.xml
33.统计单词数:
wc -w newwork.xml
34.统计字符数:
wc -c newwork.xml
35.-h选项可以同时打印出文件和目录的大小
tree -h