在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习。我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直达问题本质,把大家从大海捞针的痛苦中解脱出来。
1. find
功能:
查找包含指定字符匹配的文件或路径。
指令:
# find the files or directories
# which include "file" tag in filename
find ./ -name "*file*" #在当前目录查找文件名或子目录名中包含“file"字符串的的文件和子目录
find ./ -iname "*file*" #忽略大小写
find ./ -name "*file*" -type f #只查找文件
find ./ -iname "*file*" -type d #只查找目录
说明:
1)如果查找当前目录,./可以省略不写。
2)"file"中可以使用任何通配符;双引号还可以省略不写。
3)-type支持的参数如下(不过常用的还是f和d,其他的可以暂时忽略,用到的时候再看):
参数 | 含义 |
---|---|
f | 普通文件 |
d | 目录 |
l | 符号连接 |
c | 字符设备 |
b | 块设备 |
2. grep
功能:
查找包含指定内容匹配的文件。
Tips:全程是Global Regular Expression Print,所以熟悉正则表达式的小伙伴们可以肆意发挥grep的强大搜索功能了。
指令:
# find the files containing "interrupt" at head of a line
grep "^interrupt" ./ -r
说明:
1)如果查找当前目录,./可以省略不写。
2)双引号可以省略不写。
3)-r选项是支持递归查找的意思,r的全拼是recursively。
Tips:注意grep和find指令很像,所以比较容易混淆。这里有一个记忆技巧:grep重在文件内容过滤,所以指令后面先跟内容再跟路径;find重在找文件和路径(名),所以路径在前,名称在后。
其实在使用时一般都是在当前目录下,所以直接省掉目录即可,只要记得find后面需要加-name选项即可。
3. diff
功能:
比较文件或目录,也可生成补丁文件。
指令:
# compare two files
diff file_old file_new
# compare tow folders recursively
diff dir_old dir_new -r
# compare & creat a patch file
diff dir_old dir_new -urwNB > file_name.patch
说明:
参数 | 含义 |
---|---|
u | 标准格式(含上下文) |
r | 递归比较 |
w | 忽略空格 |
N | 将不存在的文件视为空文件 |
B | 忽略空行(换行符) |
4. patch
功能:
打补丁。
指令:
# patch
cd old_dir
patch -p1 < file_name.patch
说明:
该指令的关键是目录的正确性:p1中的数字1代表的是忽略补丁文件中的顶层目录(忽略old_dir);如果是2就是忽略补丁文件中的顶层和次顶层目录,以此类推。
p1是典型应用场景——比如小明基于小红的old_dir目录拷贝了一份副本,命名new_dir,然后将里面的文件做了修改,并用diff指令(参考diff指令)生成补丁文件file_name.patch。当小明给小红共享自己的修改时就可以只提供file_name.patch文件给小红,小红拿到这个补丁文件后,进入old_dir目录下,然后执行示例中的指令即可将小明的改动“补”到old_dir中。
5. tar
功能:
压缩解压缩gzip和bzip2格式的文件。
指令:
# creat gzip file
tar -czf file_name.tar.gz dir_name
# creat bzip2 file
tar -cjf file_name.tar.bz2 dir_name
# uzip gzip file
tar -xzf file_name.tar.gz
# uzip bzip2 file
tar -xjf file_name.tar.bz2
说明:
参数 | 含义 |
---|---|
c | 创建 |
x | 解压 |
z | gzip类型 |
j | bzip2类型 |
f | 文件(后接文件名) |
未完待续。。。