1. 前言
请关注本头条号,每天坚持更新原创干货技术文章。
如需学习视讯,请在微信搜寻公众号“智传网优”直接开始自助视讯学习
我们使用Linux过程中,经常会有搜寻档案的需求,那么Linux命令下有哪些工具可以快速查询档案呢?先来了解一下这些工具:
linux查询档案
1.1 find命令
Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按档名、档案型别、使用者甚至是时间戳查询档案。使用 find 命令,您不但可以找到具这些属性任意组合的档案,还可以对它找到的档案执行操作。
1.2 locate命令
Linux locate命令用于查询符合条件的文件,他会去储存文件和目录名称的数据库内,查询合乎范本样式条件的文件或目录。locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。
1.3 grep命令
Linux grep命令用于查询档案里符合条件的字串。grep也可以根据档名查询档案,但一般用于查询档案内的内容。
grep(global search regular expression(RE) and print out the line,全面搜寻正则表示式并把行打印出来)是一种强大的文字搜寻工具,它能使用正则表示式搜寻文字,并把匹配的行打印出来。
1.4 whereis命令
whereis命令只能用于程式名的搜寻,而且只搜寻二进位制档案(引数-b)、man说明档案(引数-m)和源代码档案(引数-s)。如果省略引数,则返回所有资讯。
1.5 which命令
which命令的作用是,在PATH变数指定的路径中,搜寻某个系统命令的位置,并且返回第一个搜寻结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
1.6 type命令
type命令其实不能算查询命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进位制档案提供的。如果一个命令是外部命令,那么使用-p引数,会显示该命令的路径,相当于which命令。
1.7 总结
which 检视可执行档案的位置。
whereis 检视档案的位置。
locate 配合数据库检视档案位置。
find 实际搜寻硬盘查询档名称。
type 区分命令型别
2. find命令使用案例
2.1 根据档名查询
查询zcwyou.txt这个档案,从/开始查询,即在Linux所有挂载的分割槽和目录中查询。
[[email protected] ~]# find / -name zcwyou.txt
只查询.txt结尾的档案
[[email protected] ~]# find / -name '*.txt'
查询txt和pdf结尾的档案
[[email protected] ~]# find . -name "*.txt" -o -name "*.pdf"
2.2 从某个目录开始查询档案
从当前使用者的家目录开始查询
[[email protected] ~]# find ~ -name zcwyou.txt
从当前目录开始查询
[[email protected] ~]# find . -name zcwyou.txt
从/var目录开始查询
[[email protected] ~]# find /var -name zcwyou.txt
2.3 忽略大小写
查询档名带有abc的档案,忽略大小写
使用选项-iname
[[email protected] ~]# find / -iname *abc*
2.4 根据档案型别查询
使用选项-type
查询某一型别的档案,例如:
b - 块装置档案。
d - 目录。
c - 字元装置档案。
p - 管道档案。
l - 符号连结档案。
f - 普通档案。
在/etc目录下查询所有的目录,并打印出来
[[email protected] ~]# find /etc -type d -print
在当前目录下查询除目录以外的所有型别的档案
[[email protected] ~]# find . ! -type d -print
在/etc目录下查询所有的符号连结档案
[[email protected] ~]# find /etc -type l -print
2.5 基于目录深度搜索
查询当前目录及向下最大深度限制为3的所有档案
[[email protected] ~]# find . -maxdepth 3 -type f
2.6 基本档案时间查询
使用格式:
find . -type f 时间型别
UNIX/Linux档案系统每个档案都有三种时间型别:
访问时间 (-atime/天,-amin/分钟):使用者最近一次访问时间。
修改时间 (-mtime/天,-mmin/分钟):档案最后一次修改时间。
变化时间 (-ctime/天,-cmin/分钟):档案资料元(例如许可权等)最后一次修改时间。
搜寻最近七天内被访问过的所有档案
[[email protected] ~]# find . -type f -atime -7
搜寻恰好在七天前被访问过的所有档案
[[email protected] ~]# find . -type f -atime 7
搜寻超过七天内被访问过的所有档案
[[email protected] ~]# find . -type f -atime +7
搜寻访问时间超过10分钟的所有档案
[[email protected] ~]# find . -type f -amin +10
找出比file.log修改时间更长的所有档案
[[email protected] ~]# find . -type f -newer file.log
2.7 根据档案大小查询
使用格式:
find . -type f -size 档案大小
档案大小单元:
b------块(512字节)
c------字节
w------字(2字节)
k------千字节
M------兆字节
G------吉字节
查询大于10KB的档案
[[email protected] ~]# find . -type f -size +10k
查询小于30M的档案
[[email protected] ~]# find . -type f -size -30M
搜寻等于55MB的档案
[[email protected] ~]# find . -type f -size 55M
2.8 查询后删除
删除当前目录下所有.test档案
[[email protected] ~]# find . -type f -name "*.test" -delete
2.9 根据档案许可权/所有权进行匹配
当前目录下搜寻出许可权为755的档案
[[email protected] ~]# find . -type f -perm 755
找出当前目录下许可权不是600的php档案
[[email protected] ~]# find . -type f -name "*.php" ! -perm 600
找出当前目录使用者zcwyou拥有的所有档案
[[email protected] ~]# find . -type f -user zcwyou
找出当前目录使用者组zcwyou拥有的所有档案
[[email protected] ~]# find . -type f -group zcwyou
3. find结合其他工具
3.1 借助-exec选项与其他命令结合使用
找出当前目录下所有root的档案,并把所有权更改为使用者zcwyou
[[email protected] ~]# find .-type f -user root -exec chown zcwyou {} ;
{} 用于与 -exec 选项结合使用来匹配所有档案,然后会被替换为相应的档名。
找出自己家目录下所有的.txt档案并删除
[[email protected] ~]# find $HOME/. -name "*.txt" -ok rm {} ;
示例中的-ok 和 -exec 行为一样,不过它会给出提示,是否执行相应的操作。
3.2 与xargs结合
在使用find命令的-exec选项处理匹配到的档案时, find命令将所有匹配到的档案一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令执行几分钟之后,就会出现溢位错误。错误资讯通常是“引数列太长”或“引数列溢位”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的档案传递给xargs命令,而xargs命令每次只获取一部分档案而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分档案,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的档案而发起一个相应的程序,并非将匹配到的档案全部作为引数一次执行;这样在有些情况下就会出现程序过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个程序。另外,在使用xargs命令时,究竟是一次获取所有的引数,还是分批取得引数,以及每一次获取引数的数目都会根据该命令的选项及系统核心中相应的可调引数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
查询系统中的每一个普通档案,然后使用xargs命令来测试它们分别属于哪类档案
[[email protected] ~]# find . -type f -print | xargs file
在整个系统中查询内存资讯转储档案(core dump) ,然后把结果储存到/tmp/core.log 档案中:
[[email protected] ~]# find / -name "core" -print | xargs echo "" >/tmp/core.log
用grep命令在所有的普通档案中搜索hostname这个词
[[email protected] ~]# find . -type f -print | xargs grep "hostname"
删除当前目录下30天以前的所有东西
[[email protected] ~]# find . -ctime +30 -exec rm -rf {} ;
或者
[[email protected] ~]# find ./ -mtime +30 -print|xargs rm -f -r
删除档案大小为零的档案
[[email protected] ~]# find ./ -size 0 | xargs rm -f &
find命令配合使用exec和xargs可以使使用者对所匹配到的档案执行几乎所有的命令。
4. locate命令
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜寻具体目录,而是搜寻一个数据库,CentOS7数据库的位置在/var/lib/locatedb,CentOS6数据库位置在/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有档案资讯。Linux系统自动建立这个数据库,预设情况下每天自动更新一次,所以使用locate命令查不到最新变动过的档案。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
以CentOS7.5最小化安装为例,预设情况下,系统并没有整合该工具,需要手动安装它:
安装locate工具:
[[email protected] ~]# yum -y install mlocate
看到以下输出表明安装成功:
Total download size: 113 k
Installed size: 379 k
Downloading packages:
mlocate-0.26-8.el7.x86_64.rpm | 113 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : mlocate-0.26-8.el7.x86_64 1/1
Verifying : mlocate-0.26-8.el7.x86_64 1/1
Installed:
mlocate.x86_64 0:0.26-8.el7
Complete!
更新数据库,即把系统中所有档案资讯写入数据库/var/lib/mlocate/mlocate.db
[[email protected] ~]# updatedb
检视以.txt结尾的档案:
[[email protected] ~]# locate *.txt
输出结果:
/root/abc.txt
/root/cisco1.txt
/root/cisco2.txt
/root/compress.txt
/root/cp1.txt
/root/cp2.txt
/root/cut.txt
/root/cut2.txt
/root/diff1.txt
/root/diff2.txt
/root/test.txt
/root/zcwyou.txt
5. grep命令查询文字内容
5.1 根据内容查询
显示所有以d开头的档案中包含test的行。
[[email protected] ~]# grep 'test' d*
显示在aa,bb,cc档案中匹配test的行。
[[email protected] ~]# grep 'test' aa bb cc
显示所有包含每行字串至少有5个连续小写字元的字串的行
[[email protected] ~]# grep ‘[a-z]{5}’ aa
显示/usr/src目录下的档案(不含子目录)包含test的行
[[email protected] ~]# grep test /usr/src
显示/usr/src目录下的档案(包含子目录)包含test的行
[[email protected] ~]# grep -r test /usr/src
在zcwyou.txt档案中查询整个单词,而不是字串的一部分(如匹配’test’,而不是’tester123’),
[[email protected] ~]# grep -w test zcwyou.txt
不区分大小写地搜寻。预设情况区分大小写
[[email protected] ~]# grep -i test zcwyou.txt
查询关键字test,列出包括test的档名,在当前目录找
[[email protected] ~]# grep -l test *.txt
查询关键字test,列出不包括test的档名,在当前目录找
[[email protected] ~]# grep -L test *.txt
5.2 以递回的方式查询符合条件的档案
在/var/log及其子目录里,查询带有shutdown关键字的档案
[[email protected] ~]# grep -r shutdown /var/log
5.3 反向查询
通过"-v"引数可以打印出不符合条件行的内容。
查询档名中包含 test 的档案中不包含test 的行,此时,使用的命令为:
[[email protected] ~]# grep -v test *test*
6. whereis命令
whereis命令只能用于程式名的搜寻,而且只搜寻二进位制档案(引数-b)、man说明档案(引数-m)和源代码档案(引数-s)。如果省略引数,则返回所有资讯。
whereis命令的使用例项:
检视pwd命令程式所有的位置以及说明档案所在的位置
[[email protected] ~]# whereis pwd
输出结果:
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz
7. which命令
which命令的作用是,在PATH变数指定的路径中,搜寻某个系统命令的位置,并且返回第一个搜寻结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
[[email protected] ~]# which wget
输出结果:
/usr/bin/wget
8. type命令
查询wget程式的位置
[[email protected] ~]# type wget
输出结果:
wget is /usr/bin/wget
查询du程式的位置,使用选项-p,相当于which命令
[[email protected] ~]# type -p du
输出结果
/usr/bin/du
查询cd程式的位置,显示为builtin,即为Linux内建命令
[[email protected] ~]# type cd
输出结果表明,cd命令为系统整合命令。
cd is a shell builtin
查询ll程式的位置
[[email protected] ~]# type ll
输出结果表示,ll是ls -l的别名。
ll is aliased to `ls -l --color=auto'/
本文已同步至部落格站,尊重原创,转载时请在正文中附带以下连结:
https://www.linuxrumen.com/rmxx/176.html
点选了解更多,快速检视更多的技术文章列表。