Linux查找命令

 一 whereis 

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

-b 只查找二进制文件 

-B 只在设置的目录下查找二进制文件 

-f 不显示文件名前的路径名称 

-m 只查找说明文件 

-M 只在设置的目录下查找说明文件 

-s 只查找原始代码文件 

-S 只在设置的目录下查找原始代码文件 

-u 查找不包含指定类型的文件 

二 locale

locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点。

-i//查找文件的时候不区分大小写 比如:locate  –i   passwd

-n//只显示查找结果的前N行 比如:locate  -n  5   passwd

-u 建立数据库,由根目录开始 

-U 建立数据库,可以指定开始的位置 

-e 将排除在寻找的范围之外 

-f 将特定的档案系统排除在外 

-q 安静模式,不会显示任何错误讯息 

-n 至多显示n个输出 

-r 使用正规运算式 做寻找的条件 

-o 指定数据库存的名称 

-d 指定数据库的路径 

-h 显示辅助讯息 

-v 显示更多的讯息 

-V 显示程序的版本讯息

当使用whereis或locate命令查找时,都会以此数据库文件的内容为准,因此有时用这两个命令查找文件时,会找到已被删除的文件

而且在数据库更新(默认是一周更新一次)之前建的文件,会找不到,必须手动更新下数据库才行。

updatedb 

三 find 

一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录

-name 按照文件名查找文件 

-perm 按照文件权限来查找文件 

-prune 不在当前指定的目录中查找 

-user 按照文件属主来查找文件 

-group 按照文件所属的组来查找文件 

-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前. 

-nogroup 查找无有效所属组的文件,即该文件所属的组不存在 

-nouser 查找无有效属主的文件 

-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件 

-type 查找某一类型的文件 

[ 文件类型: 

b 块设备文件 

d 目录 

c 字符设备文件 

p 管道文件 

l 符号链接文件 

f 普通文件 

-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计 

-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找 

-mount 在查找文件时不跨越文件系统mount点 

-follow 如果find命令遇到符号链接文件,就跟踪到链接所指向的文件 

-cpio 对匹配的文件使用cpio命令,就将这些文件备份到磁盘设备中 

1.在某目录下查找名为“elm.cc”的文件

find /home/lijiajia/ -name elm.cc

2.查找文件名中包含某字符(如"elm")的文件

find /home/lijiajia/ -name '*elm*'

find /home/lijiajia/ -name 'elm*'

find /home/lijiajia/ -name '*elm'

3.根据文件的特征进行查询

find /home/lijiajia/ -amin -10        #查找在系统中最后10分钟访问的文件

find /home/lijiajia/ -atime -2        #查找在系统中最后48小时访问的文件

find /home/lijiajia/ -empty           #查找在系统中为空的文件或者文件夹

find /home/lijiajia/ -group cat       # 查找在系统中属于groupcat 的文件(试了,命令不对。)

find /home/lijiajia/ -mmin -5         # 查找在系统中最后5 分钟里修改过的文件

find /home/lijiajia/ -mtime -1        #查找在系统中最后24 小时里修改过的文件

find /home/lijiajia/ -nouser          #查找在系统中属于作废用户的文件(不明白是什么意思)

find /home/lijiajia/ -amin 10         #查找在系统中最后10分钟访问的文件

find /home/ftp/pub -user lijiajia     #查找在系统中属于lijiajia这个用户的文件

(PS:以上都是在 /home/lijiajia/文件夹下进行的操作)

4.使用混合查找方式查找文件

find /tmp -size +10000000c -and -mtime +2      #查找/tmp目录中大于10000000字节并且在48小时内修改的某个文件

find /tmp -user tom -or -user george           #查找/tmp目录中属于tom或者george这两个用户的文件

find /tmp ! -usr fred                          #查找/tmp目录中不属于fred的文件

5.查找并显示文件

find /home/lijiajia/ -name 'elm.cc' -ls        #在目录下查找名为“elm.cc”的文件,并显示这些文件的信息

四 which

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

五 grep

-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

-r: 递归查找

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

pattern正则表达式主要参数:

\: 忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$: 匹配正则表达式的结束行。

\<:从匹配正则表达 式的行开始。

\>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]即A符合要求 。

[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。

。:所有的单个字符。

* :有字符,长度可以为0

grep 'test' d*  #显示所有以d开头的文件中包含 test的行

grep ‘test’ aa bb cc    #显示在aa,bb,cc文件中包含test的行

grep ‘[a-z]\{5\}’ aa   #显示所有包含每行字符串至少有5个连续小写字符的字符串的行

grep magic /usr/src  #显示/usr/src目录下的文件(不含子目录)包含magic的行

grep -r magic /usr/src  #显示/usr/src目录下的文件(包含子目录)包含magic的行

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

grep -rn "hello,world!" ./

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,

grep -l pattern files :只列出匹配的文件名,

grep -L pattern files :列出不匹配的文件名,

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

grep -C number pattern files :匹配的上下文分别显示[number]行,

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep -n pattern files  即可显示行号信息

grep -c pattern files  即可查找总行数

相关推荐