文件查找
命令比较
命令 | 使用场景 | 优缺点 |
---|---|---|
find | 查找某一类文件,比如文件名部分一致 | 功能强大,速度慢 |
locate | 只能查找单个文件 | 功能单一,速度快 |
whereis | 查找程序的可执行文件、帮助文档等 | 不常用 |
which | 只查找程序的可执行文件 | 常用于查找程序的绝对路径 |
Locate命令
Locate可以让用户快速查找到所需要的文件或目录,它不会搜索全部数据信息,而是搜索数据库 /var/lib/mlocate/mlocate.db。此数据库是本地系统内所有文件名称及路径。系统会自动创建这个数据库,并且每天更新一次。
安装
遇到错误“locate: 未找到命令”先安装
代码语言:javascript复制 yum install mlocate -y
更新后台数据库(缓存)
代码语言:javascript复制 updatedb
运行“locate inittab”查看是否成功
代码语言:javascript复制[root@localhost /]# locate inittab
/etc/inittab
/usr/share/vim/vim74/syntax/inittab.vim
命令格式
命令格式
代码语言:javascript复制 locate [参数] [文件]
参数 | 作用 |
---|---|
-e | 将排除在寻找的范围之外。 |
-1 | 如果是1.则启动安全模式。在安全模式下,使用者只能看到权限范围内的档案。这会使速度减慢,因为locate必须从实际的档案系统中取得档案的权限资料。 |
-f | 将特定的档案系统排除在外,例如我们没有道理要把proc档案系统中的档案放在资料库中。 |
-q | 安静模式,不会显示任何错误讯息。 |
-n | 最多显示n个输出。 |
-r | 使用正规运算式做寻找的条件。 |
-o | 指定资料库的名称。 |
-d | 指定资料库的路径 |
-h | 显示辅助讯息 |
-V | 显示程式的版本讯息 |
-i | 忽略大小写 |
-c | 只输出找到的数量 |
用户更新 /var/lib/mlocate/mlocate.db,所使用配置文件 /etc/updatedb.conf 【不想搜索的文件可以写入到 updatedb.conf 中】
使用示例
查找和crontab相关的所有文件并且只展示一个
代码语言:javascript复制[root@localhost /]# locate crontab -n 1
/etc/anacrontab
locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。
Find 命令
Find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
命令格式
代码语言:javascript复制 find [路径] [选项] [操作]
选项
选项 | 含义 |
---|---|
-name | 根据文件名查找 |
-perm | 根据文件权限查找 |
-prune | 该选项可以排除某些查找目录 -path xxx -prune -o -path xxx -prune -o |
-user | 根据文件属主查找 |
-group | 根据文件属组查找 |
-mtime -n | n | 根据文件更改时间查找 |
-nogroup | 查找无有效属组的文件 |
-nouser | 查找无有效属主的文件 |
-newer file1 ! file2 | 查找更改时间比 file1 新但比 file2 旧 IDE 文件 |
-type | 按文件类型查找 f:文件;d:目录;c:字符设备文件;b:块设备文件;l:链接文件;p:管道文件; |
-size -n n | 按文件大小查找 |
-mindepth n | 从n级子目录开始搜索 |
-maxdepth n | 最多搜索到n级子目录 |
操作
操作 | 含义 |
---|---|
打印输出(默认) | |
-exec | 对搜索到的文件执行特定的操作 -exec 'command' {} ; |
-ok | 和 exec 功能-样,只是每次操作都会给用户提示 |
使用示例
1).查找ifcfg-ens33网卡文件
代码语言:javascript复制[root@localhost ~]# find / -name "ifcfg-ens33"
/etc/sysconfig/network-scripts/ifcfg-ens33
2).在/etc、/usr、/home 目录下搜索ifcfg-ens33(其中*为通配符)
代码语言:javascript复制[root@localhost /]# find /etc /usr /home -name "ifcfg-en*"
/etc/sysconfig/network-scripts/ifcfg-ens33
3).根据时间查找(atime、mtime、ctime)查找大于、等于、小于 5天的文件
代码语言:javascript复制# 小于5天(-5) 大于5天( 5) 等于 5天 (5)
[root@localhost /]# find /etc/ -mtime -5
/etc/
/etc/resolv.conf
/etc/rc.d/init.d/bt
/etc/group
/etc/gshadow
/etc/pki/nssdb
/etc/sysconfig/network-scripts
/etc/cron.daily
/etc/tuned/active_profile
/etc/tuned/profile_mode
4).在/etc下的3级子目录开始搜索
代码语言:javascript复制[root@localhost /]# find /etc -mindepth 3
/etc/rdma/modules/roce.conf
/etc/rdma/modules/opa.conf
...
/etc/nftables/osf/pf.os
5).查找当前目录下所有普通文件,但排除test目录
代码语言:javascript复制[root@localhost /]# find . -path ./test -prune -o -type f
6).搜索 /etc 下的文件(非目录),文件名以 conf 结尾,且大于 10k,然后将其删除|
代码语言:javascript复制[root@localhost /]# cp -r /etc /home/etc
[root@localhost /]# find /home/etc/ -type f -name '*.conf' -size 10k -exec rm -rf {}
[root@localhost /]# find /home/etc/ -type f -name '*.conf' -size 5k -ok rm -rf {} ;
< rm ... /home/etc/man_db.conf > ? y
< rm ... /home/etc/kdump.conf > ? n
< rm ... /home/etc/tcsd.conf > ? n
使用Find命令时尽量在指定目录下进行搜索,否则会占用很多系统资源
Which命令
which命令用于查找文件。
which指令会在环境变量$PATH
设置的目录里查找符合条件的文件。且可查找存在以及执行位置
echo 命令可以查看$PATH的值
代码语言:javascript复制 [root@localhost /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
which会根据上面7个文件返回
命令格式
代码语言:javascript复制 which [文件...]
为什么which后面是文件?因为Linux一起皆为文件,执行文件也是文件
参数 | 作用 |
---|---|
-n<文件名长度> | 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。 |
-p<文件名长度> | 与-n参数相同,但此处的<文件名长度>包括了文件的路径。 |
-w | 指定输出时栏位的宽度。 |
-V | 显示版本信息。 |
使用示例
查找“find”的绝对路径
代码语言:javascript复制[root@localhost /]# which find
/usr/bin/find
查看指令”bash”的绝对路径
代码语言:javascript复制[root@localhost /]# which bash
/usr/bin/bash
值得注意的是which查找文件会根据/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 这七个目录进行查找,优先查找到后返回。
Whereis 命令
在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。该指令只能用于查找二进制文件、源代码文件和man手册页。
命令格式
代码语言:javascript复制whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]
|参数 | 作用|
| —|—| |-b | 只查找二进制文件。| | -B<目录> | 只在设置的目录下查找二进制文件。| |-f | 不显示文件名前的路径名称。| |-m | 只查找说明文件。| |-M<目录> | 只在设置的目录下查找说明文件。| |-s | 只查找原始代码文件。| |-S<目录> | 只在设置的目录下查找原始代码文件。| |-u | 查找不包含指定类型的文件。|
代码语言:javascript复制#### 使用示例
查看"bash"的位置
```
[root@localhost /]# whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz
# 只查找二进制文件
[root@localhost /]# whereis -b bash
bash: /usr/bin/bash
# 只查找说明文件
[root@localhost /]# whereis -m bash
bash: /usr/share/man/man1/bash.1.gz
```
压缩
Linux 系统支持的打包压缩命令有很多种,不同命令所用的压缩技术不同,彼此无法相互压缩。压缩文件的名称会添加后缀。如.gz、.bz2、.tar.xz、.tar.gz
gizp
代码语言:javascript复制[root@localhost home]# touch /home/root/file{1..20}
[root@localhost home]# gizp /home/root/*
[root@localhost home]# ls /home/root/
file10.gz file11.gz file12.gz file13.gz file14.gz file15.gz file16.gz file17.gz file18.gz file19.gz file1.gz file20.gz file2.gz file3.gz file4.gz file5.gz file6.gz file7.gz file8.gz file9.gz
gzip 命令只能对单一的文件进行压缩,并不能将多个文件打包为一个大文件
tar
tar(英文全拼:tape archive )命令用于备份文件。
tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
tar 命令可将多个目录与文件打包在一起,同时还可以使用gzip命令对文件进行压缩。
命令格式
格式太长不一一介绍把常用的参数介绍一下
参数 | 作用 |
---|---|
-c | 打包一个文件 |
-z | 调用gzip进行压缩 |
-j | 调用bzip2进行压缩 |
-J | 调用xz进行压缩 |
-f | 表示后面被处理的名称 |
使用示例
代码语言:javascript复制[root@localhost home]# tar -czf root-gzip.tar.gz root
[root@localhost home]# tar -cjf root-bzip.tar.gz root
[root@localhost home]# tar -cJf root-xz.tar.gz root
[root@localhost home]# ll -h root*
-rw-r--r-- 1 root root 368 Apr 2 15:46 root-bzip.tar.gz
-rw-r--r-- 1 root root 492 Apr 2 15:45 root-gzip.tar.gz
-rw-r--r-- 1 root root 384 Apr 2 15:47 root-xz.tar.gz
Linux 系统中并不存在文件拓展名,但是为了用户识别方便,创建文件名应该添加后缀。
解压
tar解压
当解压某个压缩文件时,首先需要知道文件是由何种压缩方式创建出来的,然后用相应的解压方式解压。
确定压缩方式
代码语言:javascript复制[root@localhost home]# file root-bzip.tar.gz
root-bzip.tar.gz: bzip2 compressed data, block size = 900k
[root@localhost home]# file root-gzip.tar.gz
root-gzip.tar.gz: gzip compressed data, from Unix, last modified: Sat Apr 2 15:45:02 2022
[root@localhost home]# file root-xz.tar.gz
root-xz.tar.gz: XZ compressed data
不解压的情况可以通过“-t” 查看打包的文件
代码语言:javascript复制[root@localhost home]# tar -tf root-bzip.tar.gz
root/
root/file1.gz
root/file10.gz
root/file11.gz
root/file12.gz
root/file13.gz
root/file14.gz
root/file15.gz
root/file16.gz
root/file17.gz
root/file18.gz
root/file19.gz
root/file2.gz
root/file20.gz
root/file3.gz
root/file4.gz
root/file5.gz
root/file6.gz
root/file7.gz
root/file8.gz
root/file9.gz
命令格式
不一一介绍只介绍几个常用的参数
参数 | 作用 |
---|---|
-C | 解压的指定目录 |
-x | 解打包或解压缩 |
-v | 显示解压过程 |
使用示例
代码语言:javascript复制[root@localhost home]# file root-bzip.tar.gz
root-bzip.tar.gz: bzip2 compressed data, block size = 900k
[root@localhost home]# tar -xvf root-bzip.tar.gz -C /home/
root/
root/file1.gz
root/file10.gz
root/file11.gz
root/file12.gz
root/file13.gz
root/file14.gz
root/file15.gz
root/file16.gz
root/file17.gz
root/file18.gz
root/file19.gz
root/file2.gz
root/file20.gz
root/file3.gz
root/file4.gz
root/file5.gz
root/file6.gz
root/file7.gz
root/file8.gz
root/file9.gz
直接打包并解压
代码语言:javascript复制tar -czf - root | tar -xzf - -C /tmp
unzip
后缀为zip的文件,直接使用zip解压即可
代码语言:javascript复制unzip xxx.zip