Linux下的查找功能

一、概论

  • find命令:根据文件的属性进行查找,如文件名、文件大小,所有者,所属组,访问时间,修改时间等
  • grep命令:根据文件的内容进行查找,会对文件的每一行按照给定的模式进行匹配查找
  • which命令:查看可执行文件的位置,只有设置了环境变量的程序才可用
  • whereis命令:寻找特定的文件,如二进制文件、源文件和man手册页
  • locate命令:配合数据库查看文件位置

一、文件查找(find)

1、格式

find [指定目录] [指定条件] [指定动作]

  • 指定目录:要搜索的目录及其所有的子目录,默认当前目录。
  • 指定条件:搜索文件的特征
  • 指定动作:搜索结果的特定处理

2、条件参数

条件参数 作用 备注
-name 匹配名称
-perm 匹配权限 mode为完全匹配,-mode为包含即可
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间 -n指n天以内,+n指n天以前
-atime -n +n 匹配访问文件的时间 -n指n天以内,+n指n天以前
-ctime 匹配修改文件权限的时间 -n指n天以内,+n指n天以前
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-type b/d/c/p/l/f 匹配文件类型 (b)块设备、(d)目录、(c)字符设备、(p)管道、(l)链接文件、(f)文本文件
-size 匹配文件的大小 +50KB:超过50KB的文件,-50KB:小于50KB的文件
-prune 忽略某个目录

3、示例

  • 按照文件名查找
# 在根目录查找httpd.conf文件,即全盘查找
find / -name httpd.conf

# 在/etc目录下查找httpd.conf文件
find /etc -name httpd.conf

# 在当前目录下查找包含test的文件
find . -name "*test*"
  • 按照文件特征查找
// 在当前目录下查找最近48小时访问的文件
find . -atime -2

//在当前目录下查找最后十分钟访问过的文件(access time)
find . -amin -10

//在当前目录下查找为空的文件或文件夹
find . -empty

//在当前目录下查找group为gp的文件
find . -group gp

//在当前目录下查找最后5分钟里修改过的文件(modify time)
find . -mmin -5

//在当前目录下查找最后24小时修改过的文件
find . -mtime -1

//在当前目录下查找大于100字节的文件
//(c:字节、w:双字、k:KB、M:MB、G:GB)
find . -size +100c
find . -size -100M
  • 按照混合查找方式

参数:!、-and(-a)、-or(-o)

//在tmp目录下查找文件大于1000KB并且最近2分钟修改点文件
find /tmp -size +1000KB -and -mtime +2

//在根目录下查找用户为u1或u2的文件
find / -user u1 -or -user u2

//在tmp目录下查找所有不属于u1用户的文件
find /tmp ! -user u1
  • 帮助文档
[11:45@zhouchao ~/xg205_application/user205]$find --help
Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]

default path is the current directory; default expression is -print
expression may consist of: operators, options, tests, and actions:
operators (decreasing precedence; -and is implicit where no others are given):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2
positional options (always true): -daystart -follow -regextype

normal options (always true, specified before other expressions):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xdev -ignore_readdir_race -noignore_readdir_race
tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
      -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
      -readable -writable -executable
      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
      -used N -user NAME -xtype [bcdpfls]      -context CONTEXT

actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

Valid arguments for -D:
exec, opt, rates, search, stat, time, tree, all, help
Use '-D help' for a description of the options, or see find(1)

二、内容查找(grep、egrep、fgrep)

1、格式

grep [选项] [模式] [文件]

  • 选项
常见选项 含义 备注
-E 开启扩展的正则表达式
-i 忽略大小写
-v 翻转过来,只打印没有匹配的
-n 显示行号
-w 被匹配的文本只能是单词,而不是单词中的某一部分
-c 显示总共有多少行被匹配到了,而不是显示被匹配的内容 如果使用-cv,则显示有多少行没有被匹配到
-o 只显示被模式匹配到的字符串
- A n 显示匹配到的字符串所在的行及其后n行 after
-B n 显示匹配到的字符串所在的行及其前n行 before
-C n 显示匹配到的字符串所在的行及其前后各n行 context
  • 模式

直接输入要匹配的字符串,可使用fgrep来替代提高查找速度,或者使用基本正则表达式。

正则表达式 含义 备注
\ 忽略正则表达式中特殊字符的原有含义 转义字符
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
[ ] 单个字符
[ - ] 范围
. 所有的单个字符
* 0或多个字符
? 0次或1次
{m, n} 匹配前面出现字符串范围为m到n次

三、搜索系统命令的位置(which)

在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令

[14:29@zhouchao ~]$which egrep
/usr/bin/egrep
[14:30@zhouchao ~]$which grep
/usr/bin/grep
[14:30@zhouchao ~]$which ls
/usr/bin/ls
[14:30@zhouchao ~]$_

四、程序名搜索(whereis)

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

[14:32@zhouchao ~]$whereis grep
grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/share/info/grep.info.gz
[14:32@zhouchao ~]$whereis egrep
egrep: /usr/bin/egrep /usr/share/man/man1/egrep.1.gz
[14:32@zhouchao ~]$whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[14:32@zhouchao ~]$_

五、查找文件名称(locate)

locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),该数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

六、类型识别指令(type)

它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的.

[14:37@zhouchao ~]$type cd
cd is a shell builtin
[14:37@zhouchao ~]$type ls
ls is aliased to `ls --color=auto'
[14:37@zhouchao ~]$type grep
grep is aliased to `grep --color=auto'
[14:38@zhouchao ~]$type egrep
egrep is aliased to `egrep --color=auto'
[14:39@zhouchao ~]$type pwd
pwd is a shell builtin
[14:39@zhouchao ~]$type -p egrep
[14:39@zhouchao ~]$which egrep
alias egrep='egrep --color=auto'
        /bin/egrep
[14:39@zhouchao ~]$
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容