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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY