7、文件查找和压缩/解压
文件查找
which:查找命令文件的路径
which命令的功能是查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。
语法格式:which 参数 文件名
常用参数
| 参数 | 描述 |
|---|---|
| -a | 显示PATH变量中所有匹配的可执行文件 |
| -n | 设置文件名长度(不含路径) |
| -p | 设置文件名长度(含路径) |
| -V | 显示版本信息 |
| -w | 设置输出时栏位的宽度 |
| --help | 显示帮助信息 |
| --read-functions | 从标准输入中读取shell函数定义 |
| --show-tilde | 使用波浪线代替路径中的家目录 |
| --skip-dot | 跳过PATH变量中以点号开头的目录 |
使用示例
-
查找命令文件:passwd的路径
[root@localhost rootdir]# which passwd /usr/bin/passwd -
一次查找多个命令文件
[root@localhost rootdir]# which cat mkdir /usr/bin/cat /usr/bin/mkdir
locate:快速查找文件或目录
locate命令的功能是快速查找文件或目录。与find命令进行全局搜索不同,locate命令是基于数据文件(/var/lib/locatedb)进行的定点查找,由于缩小了搜索范围,因此速度快很多。 要想让locate命令查询的结果更加准确,建议定期执行updatedb命令对数据库文件进行更新。
语法格式:locate 参数 文件名
常用参数
| 参数 | 描述 |
|---|---|
| -b | 仅匹配文件名 |
| -c | 不输出文件名 |
| -d | 设置数据库所在目录 |
| -i | 忽略大小写 |
| -l | 限制最大查找数量 |
| -q | 静默执行模式 |
| -r | 使用正则表达式 |
| -S | 显示数据库的统计信息 |
| -w | 匹配完整的文件路径 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
使用示例
-
搜索带有关键字:network的文件
[root@localhost rootdir]# locate network /etc/networks /etc/libvirt/qemu/networks /etc/libvirt/qemu/networks/autostart /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/autostart/default.xml /etc/rc.d/init.d/network /etc/rc.d/rc0.d/K90network /etc/rc.d/rc1.d/K90network /etc/rc.d/rc2.d/S10network /etc/rc.d/rc3.d/S10network /etc/rc.d/rc4.d/S10network /etc/rc.d/rc5.d/S10network ...........省略后面的输出 -
在指定目录:/etc下搜索带有自定关键字:networ的文件
[root@localhost rootdir]# locate /etc/network /etc/networks
find:根据路径和条件搜索指定文件
find命令的功能是根据给定的路径和条件查找相关文件或目录,其参数灵活方便,且支持正则表达式,结合管道符后能够实现更加复杂的功能,是Linux系统运维人员必须掌握的命令之一。
find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate等有条件或部分文件的搜索。
对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,这会相对消耗较多的系统资源。
语法格式:find 路径 条件 文件名
注意:以文件类型查找文件时,普通文件的类型是:f,而不是 “ - ”
条件
| 条件 | 描述 |
|---|---|
| -name | 匹配文件名 |
| -perm | 匹配文件权限 |
| -user | 匹配文件所属主 |
| -group | 匹配文件所属组 |
| -mtime | 匹配最后修改文件内容时间 |
| -atime | 匹配最后读取文件内容时间 |
| -ctime | 匹配最后修改文件属性时间 |
| -nouser | 匹配无所属主的文件 |
| -nogroup | 匹配无所属组的文件 |
| -newer | 匹配比指定文件更新的文件 |
| -type | 匹配文件类型 |
| -size | 匹配文件大小 |
| -prune | 不搜索指定目录 |
| -exec…… {}; | 进一步处理搜索结果 |
使用示例
-
全盘搜索以 .sh 结尾的文件
[root@localhost rootdir]# find / -name "*.sh" -
在路径/root 中搜索 不是以 .log 结尾的文件
[root@localhost rootdir]# find /root ! -name "*.log" -
全盘搜索文件权限为0000的文件
[root@localhost rootdir]# find / -perm 0000 -
在路径/home 下查找文件属主是user01的文件
[root@localhost rootdir]# find /home -user user01 -
在路径/root 下查找最近7天被修改过的文件
[root@localhost rootdir]# find /root -mtime +7 -
在路径/root/rootdir 下查找文件类型是目录的文件
[root@localhost rootdir]# find /root/rootdir -type d -
在路径/root 下查找文件大小超过1M的文件
[root@localhost rootdir]# find /root -size +1M -
在全盘搜索以“.log"结尾、文件大小超过10k、文件权限为0600的文件,并显示他们的详细信息
[root@localhost rootdir]# find / -name "*.log" -size +10k -perm 0600 |xargs ls -l -rw-------. 1 root root 22804 4月 17 03:46 /var/log/anaconda/anaconda.log -rw-------. 1 root root 2181976 4月 17 03:46 /var/log/anaconda/journal.log -rw-------. 1 root root 573556 4月 17 03:46 /var/log/anaconda/packaging.log -rw-------. 1 root root 32724 4月 17 03:46 /var/log/anaconda/program.log -rw-------. 1 root root 89377 4月 17 03:46 /var/log/anaconda/storage.log -rw-------. 1 root root 31032 4月 17 03:46 /var/log/anaconda/X.log -rw-------. 1 root root 1463032 4月 30 03:40 /var/log/audit/audit.log -rw-------. 1 root root 1985951 4月 30 03:40 /var/log/vmware-vmsvc-root.log -
在路径/root/rootdir 中查找所有文件结尾是“。sh”的文件,并删除他们
[root@localhost rootdir]# find /root/rootdir -name "*.sh" -exec rm -r {} \;{}用于指代find查找到的文件,也就是占位符,相当于把find查找到的文件放到这里\;是结束符,规定的语法
打包、压缩、解压缩文件
Linux的压缩与解压缩
在windows中,打包、压缩是一步完成的,而Linux打包、压缩是可以分开的两步,也就是只打包,不压缩
有两种常用的压缩方式:gzip和bzip2
与之对应的解压方式是:gunzip和bunzip2
使用gzip和gunzip压缩和解压缩文件:file
[root@localhost rootdir]# ls
file // 未压缩的文件file
[root@localhost rootdir]# gzip file // 使用gzip的方式压缩文件file
[root@localhost rootdir]# ls
file.gz // 使用gzip压缩方式压缩后的文件,会加上后缀.gz便于区分
[root@localhost rootdir]# gunzip file.gz // 解压缩文件:file.gz
[root@localhost rootdir]# ls
file // 解压后的文件
使用bzip2和bunzip2压缩和解压缩文件:file
[root@localhost rootdir]# ls
file // 未压缩的文件:file
[root@localhost rootdir]# bzip2 file // 使用bzip2的方式压缩文件file
[root@localhost rootdir]# ls
file.bz2 // 使用bzip2压缩方式压缩后的文件,会加上后缀.bz2便于区分
[root@localhost rootdir]# bunzip2 file.bz2 // 解压缩文件:file.bz2
[root@localhost rootdir]# ls
file // 解压后的文件
tar:Linux专业的压缩和解压缩
tar命令的功能是压缩和解压缩文件,能够制作出Linux系统中常见的tar、tar.gz、tar.bz2等格式的压缩包文件。
对于RHEL 7、CentOS 7版本及以后的系统,解压缩时不添加格式参数(如z或j),系统也能自动进行分析并解压。把要传输的文件先压缩再传输,能够很好地提高工作效率,方便分享。
语法格式:tar 参数 压缩包名 文件或目录名
注意:
- -f 后面要跟压缩包的文件名,不能跟其他参数,所以f放在参数的最后一个,不要把顺序弄错了
- -x和-c放在在参数的开头
常用参数
| 参数 | 描述 |
|---|---|
| -A | 添加文件到已存在的压缩包 |
| -B | 设置区块大小 |
| -c | 创建新的压缩 |
| -C | 解压缩到指定目录 |
| -d | 记录文件的差别 |
| -f | 指定压缩包文件 |
| -j | 使用bzip2压缩格式 |
| -J | 使用xzip压缩格式 |
| -l | 设置文件系统边界 |
| -m | 保护文件不被覆盖 |
| -N | 只将较新日期的文件保存到压缩包中 |
| -p | 保留原来的文件权限与属性 |
| -P | 使用绝对路径 |
| -t | 直接查看压缩包的内容 |
| -u | 更新压缩包内的文件 |
| -v | 显示执行过程详细信息 |
| -w | 确认压缩包的完整性 |
| -x | 从压缩包内提取文件 |
| -z | 使用gzip压缩格式 |
| --exclude | 排除指定的文件不压缩 |
| --remove-files | 操作完成后删除源文件 |
使用示例
- 压缩文件
-
对目录:dir1打包,但是不压缩
[root@localhost rootdir]# tar -cf dir1.tar dir1 [root@localhost rootdir]# ls dir1 dir1.tar注意:打包的文件我们约定俗成使用
.tar作为后缀,方便管理。不使用该后缀也可以,但是不便于管理
-
对目录:dir1使用gzip的方式打包压缩,并显示过程
[root@localhost rootdir]# tar -czvf dir1.tar.gz dir1 dir1/ dir1/file1 dir1/file2 // 查看压缩情况 [root@localhost rootdir]# ls -lh 总用量 17M drwxr-xr-x. 2 root root 32 4月 30 05:53 dir1 -rw-r--r--. 1 root root 15M 4月 30 05:54 dir1.tar -rw-r--r--. 1 root root 1.5M 4月 30 05:58 dir1.tar.gz注意:使用gzip压缩的文件,约定俗成使用
.tar.gz的后缀dir1.tar是上一个例子的打包文件
-
对目录:dir1使用bzip2的方式打包压缩,并显示过程
[root@localhost rootdir]# tar -cvjf dir1.tar.bz2 dir1 dir1/ dir1/file1 dir1/file2 // 查看压缩的情况 [root@localhost rootdir]# ls -lh 总用量 18M drwxr-xr-x. 2 root root 32 4月 30 05:53 dir1 -rw-r--r--. 1 root root 15M 4月 30 05:54 dir1.tar -rw-r--r--. 1 root root 1.2M 4月 30 06:03 dir1.tar.bz2 -rw-r--r--. 1 root root 1.5M 4月 30 05:58 dir1.tar.gz注意:使用bzip2压缩的文件,约定俗成使用
.tar.bz2的后缀dir1.tar.gz和dir1.tar分别是前面两个例子的打包文件和gz压缩文件
-
对目录:dir1使用xzip的格式打包压缩
[root@localhost rootdir]# tar -cJf dir1.tar.xz dir1 [root@localhost rootdir]# ls -lh 总用量 19M drwxr-xr-x. 2 root root 32 4月 30 05:53 dir1 -rw-r--r--. 1 root root 15M 4月 30 05:54 dir1.tar -rw-r--r--. 1 root root 1.2M 4月 30 06:03 dir1.tar.bz2 -rw-r--r--. 1 root root 1.5M 4月 30 05:58 dir1.tar.gz -rw-r--r--. 1 root root 901K 4月 30 06:22 dir1.tar.xz // 这是xzip压缩的文件
- 解压文件
-
将压缩包:dir1.tar.gz解压到当前目录下
[root@localhost rootdir]# tar -xf dir1.tar.gz对于RHEL 7、CentOS 7版本及以后的系统,解压缩时不添加格式参数,系统也能自动进行分析并解压。
-
将压缩包:dir1.tar.bz2解压到指定目录:dir2
[root@localhost rootdir]# tar -xf dir1.tar.bz2 -C dir2

浙公网安备 33010602011771号