这一节还是一样学习操作目录文件的命令
在这一节, 我会讲到解压压缩 tar 以及 zip 命令, 以及文本查找命令 grep
tar 打包压缩命令
tar 命令可以为 linux 的文件和目录创建档案
首先要弄清两个概念: 打包和压缩. 打包是指将一大堆文件或目录变成一个总的文件; 压缩则是将一个大的文件通过一些压缩算法变成一个小文件.
为什么要区分这两个概念呢? 这源于 Linux 中很多压缩程序只能针对一个文件进行压缩, 这样当你想要压缩一大堆文件时, 你得先将这一大堆文件先打成一个包 (tar 命令), 然后再用压缩程序进行压缩 (结合 gzip, bzip2 命令).
tar(选项)(参数)
他的主要选项如下
-A 或 --catenate: 新增文件到以存在的备份文件;
-B: 设置区块大小;
-c 或 --create: 建立新的备份文件;
-C < 目录 >: 这个选项用在解压缩, 若要在特定目录解压缩, 可以使用这个选项.
-d: 记录文件的差别;
-x 或 --extract 或 --get: 从备份文件中还原文件;
-t 或 --list: 列出备份文件的内容;
-z 或 --gzip 或 --ungzip: 通过 gzip 指令处理备份文件;
-Z 或 --compress 或 --uncompress: 通过 compress 指令处理备份文件;
-f < 备份文件 > 或 --file=< 备份文件 >: 指定备份文件;
-v 或 --verbose: 显示指令执行过程;
-r: 添加文件到已经压缩的文件;
-u: 添加改变了和现有的文件到已经存在的压缩文件;
-j: 支持 bzip2 解压文件;
-v: 显示操作过程;
-l: 文件系统边界设置;
-k: 保留原有文件不覆盖;
-m: 保留文件不被覆盖;
-w: 确认压缩文件的正确性;
-p 或 --same-permissions: 用原来的文件权限还原文件;
-P 或 --absolute-names: 文件名使用绝对名称, 不移除文件名称前的 "/" 号;
-N < 日期格式 > 或 --newer=< 日期时间 >: 只将较指定日期更新的文件保存到备份文件里;
--exclude=< 范本样式 >: 排除符合范本样式的文件.
例如我们将一个文件打包
tar -cvf log.tar somelogs.log
注意这样是只打包, 不压缩
打包后, 以 gzip 压缩
tar -zcvf log.tar.gz somelogs.log
打包后, 以 bzip2 压缩
tar -jcvf log.tar.bz2 somelogs.log
注意, 第一个参数也就是文件名, 可以自己定义, 但按照常理需要以特定后缀结尾, 这样更容易区分
查阅 tar 包内有哪些文件
tar -ztvf log.tar.gz
将 tar 包解压缩
tar -zxvf /opt/soft/test/log.tar.gz
只将 tar 内的部分文件解压出来
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
我们可以通过以下命令查看压缩包里的文件名
tar -ztvf
事实上, 我们最常用的命令也就是压缩和解压缩
压 缩: tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询: tar -jtv -f filename.tar.bz2
解压缩: tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
zip 解压缩命令
zip 命令可以用来解压缩文件, 或者对文件进行打包操作. zip 是个使用广泛的压缩程序, 文件经它压缩后会另外产生具有 ".zip" 扩展名的压缩文件.
zip(选项)(参数)
所有选项如下
-A: 调整可执行的自动解压缩文件;
-b < 工作目录 >: 指定暂时存放文件的目录;
-c: 替每个被压缩的文件加上注释;
-d: 从压缩文件内删除指定的文件;
-D: 压缩文件内不建立目录名称;
-f: 此参数的效果和指定 "-u" 参数类似, 但不仅更新既有文件, 如果某些文件原本不存在于压缩文件内, 使用本参数会一并将其加入压缩文件中;
-F: 尝试修复已损坏的压缩文件;
-g: 将文件压缩后附加在已有的压缩文件之后, 而非另行建立新的压缩文件;
-h: 在线帮助;
-i < 范本样式 >: 只压缩符合条件的文件;
-j: 只保存文件名称及其内容, 而不存放任何目录名称;
-J: 删除压缩文件前面不必要的数据;
-k: 使用 MS-DOS 兼容格式的文件名称;
-l: 压缩文件时, 把 LF 字符置换成 LF+CR 字符;
-ll: 压缩文件时, 把 LF+cp 字符置换成 LF 字符;
-L: 显示版权信息;
-m: 将文件压缩并加入压缩文件后, 删除原始文件, 即把文件移到压缩文件中;
-n < 字尾字符串 >: 不压缩具有特定字尾字符串的文件;
-o: 以压缩文件内拥有最新更改时间的文件为准, 将压缩文件的更改时间设成和该文件相同;
-q: 不显示指令执行过程;
-r: 递归处理, 将指定目录下的所有文件和子目录一并处理;
-S: 包含系统和隐藏文件;
-t < 日期时间 >: 把压缩文件的日期设成指定的日期;
-T: 检查备份文件内的每个文件是否正确无误;
-u: 更换较新的文件到压缩文件内;
-v: 显示指令执行过程或显示版本信息;
-V: 保存 VMS 操作系统的文件属性;
-w: 在文件名称里假如版本编号, 本参数仅在 VMS 操作系统下有效;
-x < 范本样式 >: 压缩时排除符合条件的文件;
-X: 不保存额外的文件属性;
-y: 直接保存符号连接, 而非该链接所指向的文件, 本参数仅在 UNIX 之类的系统下有效;
-z: 替压缩文件加上注释;
-$: 保存第一个被压缩文件所在磁盘的卷册名称;
-< 压缩效率 >: 压缩效率是一个介于 1~9 的数值.
下面通过几个例子熟悉一下这个命令
将 / home/susmtoe/python / 这个目录下所有文件和文件夹打包为当前目录下的 python.zip:
zip -q -r python.zip /home/susmote/python
grep 文本搜索命令
grep(global search regular expression(RE) and print out the line, 全面搜索正则表达式并把行打印出来) 是一种强大的文本搜索工具, 它能使用正则表达式搜索文本, 并把匹配的行打印出来.
他的选项如下
-a 不要忽略二进制数据.
-A < 显示列数 > 除了显示符合范本样式的那一行之外, 并显示该行之后的内容.
-b 在显示符合范本样式的那一行之外, 并显示该行之前的内容.
-c 计算符合范本样式的列数.
-C < 显示列数 > 或 -< 显示列数 > 除了显示符合范本样式的那一列之外, 并显示该列之前后的内容.
-d < 进行动作 > 当指定要查找的是目录而非文件时, 必须使用这项参数, 否则 grep 命令将回报信息并停止动作.
-e < 范本样式 > 指定字符串作为查找文件内容的范本样式.
-E 将范本样式为延伸的普通表示法来使用, 意味着使用能使用扩展正则表达式.
-f < 范本文件 > 指定范本文件, 其内容有一个或多个范本样式, 让 grep 查找符合范本条件的文件内容, 格式为每一列的范本样式.
-F 将范本样式视为固定字符串的列表.
-G 将范本样式视为普通的表示法来使用.
-h 在显示符合范本样式的那一列之前, 不标示该列所属的文件名称.
-H 在显示符合范本样式的那一列之前, 标示该列的文件名称.
-i 忽略字符大小写的差别.
-l 列出文件内容符合指定的范本样式的文件名称.
-L 列出文件内容不符合指定的范本样式的文件名称.
-n 在显示符合范本样式的那一列之前, 标示出该列的编号.
-q 不显示任何信息.
-R/-r 此参数的效果和指定 "-d recurse" 参数相同.
-s 不显示错误信息.
-v 反转查找.
-w 只显示全字符合的列.
-x 只显示全列符合的列.
-y 此参数效果跟 "-i" 相同.
-o 只输出文件中匹配到的部分.
下面通过几个例子熟悉 grep 命令
在文件中搜索一个单词, 命令会返回一个包含 "match_pattern" 的文本行:
- grep match_pattern file_name
- grep "match_pattern" file_name
也可以同时在多个文件中查找
grep "match_pattern" file_1 file_2 file_3 ...
输出除之外的所有行 -v 选项:
grep -v "match_pattern" file_name
标记匹配颜色 --color=auto 选项:
grep "match_pattern" file_name --color=auto
使用正则表达式 -E 选项:
grep -E "[1-9]+"
或
egrep "[1-9]+"
注意 egrep 命令与 grep -E 效果相似
只输出文件中匹配到的部分 -o 选项:
echo this is a test line. | grep -o -E "[a-z]+\."
line.
echo this is a test line. | egrep -o "[a-z]+\."
line.
注意, 在这里我们用到了联合命令, 通过一个 "|" 连接两个命令, 注意是按照从左到右的顺序执行的
echo 命令代表输出的命令, 相当与程序设计中的 print
统计文件或者文本中包含匹配字符串的行数 -c 选项:
grep -c "text" file_name
输出包含匹配字符串的行数 -n 选项:
grep "text" -n file_name
或
- cat file_name | grep "text" -n
- # 多个文件
- grep "text" -n file_1 file_2
打印样式匹配所位于的字符或字节偏移:
- echo gun is not unix | grep -b -o "not"
- 7:not
- # 一行中字符串的字符便宜是从该行的第一个字符开始计算, 起始值为 0. 选项 -b -o 一般总是配合使用.
搜索多个文件并查找匹配文本在哪些文件中:
grep -l "text" file1 file2 file3...
grep 还可以用来递归搜索文件
在多级目录中对文本进行递归搜索:
grep "text" . -r -n
忽略匹配样式中的字符大小写:
- echo "hello world" | grep -i "HELLO"
- hello
选项 -e 制动多个匹配样式:
- echo this is a text line | grep -e "is" -e "line" -o
- is
- line
- # 也可以使用 - f 选项来匹配多个样式, 在样式文件中逐行写出需要匹配的字符.
- cat patfile
- aaa
- bbb
- echo aaa bbb ccc ddd eee | grep -f patfile -o
在 grep 搜索结果中包括或者排除指定文件:
- # 只在目录中所有的. php 和. html 文件中递归搜索字符 "main()"
- grep "main()" . -r --include *.{php,html}
- # 在搜索结果中排除所有 README 文件
- grep "main()" . -r --exclude "README"
- # 在搜索结果中排除 filelist 文件列表里的文件
- grep "main()" . -r --exclude-from filelist
使用 0 值字节后缀的 grep 与 xargs:
- # 测试文件:
- echo "aaa"> file1
- echo "bbb"> file2
- echo "aaa"> file3
- grep "aaa" file* -lZ | xargs -0 rm
- # 执行后会删除 file1 和 file3,grep 输出用 - Z 选项来指定以 0 值字节作为终结符文件名 (\0),xargs -0 读取输入并用 0 值字节终结符分隔文件名, 然后删除匹配文件,-Z 通常和 - l 结合使用.
grep 静默输出:
- grep -q "test" filename
- # 不会输出任何信息, 如果命令运行成功返回 0, 失败则返回非 0 值. 一般用于条件测试.
打印出匹配文本之前或者之后的行:
- # 显示匹配某个结果之后的 3 行, 使用 -A 选项:
- seq 10 | grep "5" -A 3
- 5
- 6
- 7
- 8
- # 显示匹配某个结果之前的 3 行, 使用 -B 选项:
- seq 10 | grep "5" -B 3
- 2
- 3
- 4
- 5
- # 显示匹配某个结果的前三行和后三行, 使用 -C 选项:
- seq 10 | grep "5" -C 3
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- # 如果匹配结果有多个, 会用 "--" 作为各匹配结果之间的分隔符:
- echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
- a
- b
- --
- a
- b
来源: https://www.cnblogs.com/susmote/p/8947559.html