前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中find命令的使用详解(上)

Linux中find命令的使用详解(上)

作者头像
耕耘实录
发布2018-12-20 14:34:06
1.3K0
发布2018-12-20 14:34:06
举报
文章被收录于专栏:耕耘实录耕耘实录

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

find命令是各种Linux发现版中比较重要的、常用的一个命令,该命令功能强大,熟练掌握了这个命令的使用,对平时的系统运维、管理工作会起到事半功倍的效果。

一.获取帮助信息
代码语言:javascript
复制
[root@root@GeekDevOps-find ~]# find --help
[root@root@GeekDevOps-find ~]# man find

大家会发现帮助信息很多,但是不太好理解。

二.find命令的格式

通过find的在线帮助文档,我们可以知道,find命令的使用格式为:

代码语言:javascript
复制
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

我们将[path…]之前平时很少使用的部分归为一类,简称为:option,。如此,该命令的格式即可表示为:

代码语言:javascript
复制
find [option] [PATH] [expression]

其中,’-H’ ‘-L’ ‘-P’三个选项主要是用于处理符号连接。’-H’表示除了处理命令行参数之外,不跟随其他符号链接,也就是说只跟随命令行中指定的符号连接,’-L’表示跟随所有的符号连接,’-P’是默认的选项,表示从不跟随符号连接。 [-D debugoptions]主要用于打印诊断信息。能帮助我们诊断出find命令为何不执行我们想要其执行的任务。我们来大致了解一下:

代码语言:javascript
复制
[root@GeekDevOps-find system]# find -D help
Valid arguments for -D:
help       Explain the various -D options
tree       Display the expression tree
search     Navigate the directory tree verbosely
stat       Trace calls to stat(2) and lstat(2)
rates      Indicate how often each predicate succeeded
opt        Show diagnostic information relating to optimisation
exec       Show diagnostic information relating to -exec, -execdir, -ok and -okdir

[-Olevel]:启用查询优化。一共有从0-3四个优化级别。其中0和1级别是等价的,系统默认值为1,这个选项需要在O后面直接跟一个表示查询优化的十进制数字,如O2。 以上部分均来自于find在线帮助文档,本人仅进行了翻译、收集、整理工作,由于这一部分内容平时均使用的是默认值,其他值很少用到,点到为止,不作深入探讨。 下面让我们具体举一个例子来讨论一下find命令的格式。

代码语言:javascript
复制
[root@GeekDevOps-find system]# find /bin /etc -name shadow
/etc/shadow

由于[option]部分使用的默认值,因此命令后直接跟的是[PATH]部分的内容,在上面的例子中,PATH的值为/bin和/etc,即需要查找的文件或目录的路径,可以是绝对路径,也可以是相对路径,可以跟多个。 [expression]后跟的是需要查找的表达式。例子中用的是-name shadow这个表达式,指定条件为找到文件名是shadow的文件。这是find命令的核心内容,是需要我们重点学习的部分。表达式指定了我们要查找的是什么属性的文件。此外,表达式还可以指定一些操作,比如删除某些条件匹配的文件或内容。

三.表达式

由于关于find的在线手册有1100多行之多,非常详细,要一一做介绍的话需要花很多时间。因此,我选择性的选取在日常工作中常用的知识点进行学习。

(一)TESTS

find命令是通过文件属性查找文件的。find表达式的tests都是文件的属性条件,比如文件的各种时间,文件权限等。很多参数中会出现指定一个数字n,一般会出现以下三种写法: +n:表示大于n。 -n:表示小于n。 n:表示等于n。

(二)按照时间进行查找

-amin:以分钟为单位通过文件的最后存取时间(access time)查找文件。 -cmin:以分钟为单位通过文件的状态修改时间(change time)查找文件。 -mmin:以分钟为单位通过文件的数据修改时间(modify time)查找文件。 -atime:以天为单位通过文件的最后存取时间(access time)查找文件。 -ctime:以天为单位通过文件的状态修改时间(change time)查找文件。 -mtime:以天为单位通过文件的数据修改时间(change time)查找文件。 -newer:查找比当前文件数据修改时间更加新一点的另外的文件。 -anewer:查找比当前文件的最后存取时间更加新一点的另外的文件。 -cnewer:查找比当前文件的状态时间更加新一点的另外的文件。 现在的时间是16:55:

代码语言:javascript
复制
[root@GeekDevOps-find ~]# ll -al
总用量 48
dr-xr-x---.  3 root root   251 1月  23 16:15 .
dr-xr-xr-x. 18 root root   238 1月  22 16:00 ..
-rw-------.  1 root root 13536 1月  23 09:03 .bash_history
-rw-r--r--.  1 root root    18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root   176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root   176 12月 29 2013 .bashrc
-rw-r--r--.  1 root root   100 12月 29 2013 .cshrc
-rw-r--r--.  1 root root     0 1月  23 16:14 GeekDevOps.doc
-rw-r--r--.  1 root root     0 1月  23 16:15 GeekDevOps.docx
-rw-r--r--.  1 root root     0 1月  23 16:14 GeekDevOps.txt
-rw-r--r--.  1 root root     0 1月  23 16:15 GeekDevOps.wps
-rw-r--r--.  1 root root    86 1月  23 10:40 .nmcli-history
drwxr-----.  3 root root    19 1月  11 15:43 .pki
-rw-r--r--.  1 root root   129 12月 29 2013 .tcshrc
-rw-------.  1 root root  4888 1月  23 15:12 .viminfo
[root@GeekDevOps-find ~]# find ./ -amin -50
./
./GeekDevOps.txt
./GeekDevOps.doc
./GeekDevOps.docx
./GeekDevOps.wps
[root@GeekDevOps-find ~]# find ./ -amin +50
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./.bash_history
./.pki
./.pki/nssdb
./.nmcli-history
./.viminfo
[root@GeekDevOps-find ~]# find ./ -mtime +1 
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./.pki
./.pki/nssdb
[root@GeekDevOps-find ~]# find ./ -newer GeekDevOps.doc
./
./GeekDevOps.docx
./GeekDevOps.wps

-newer还有一种特殊用法,可以用来做各种时间之间的比较。比如,我想找到文件修改时间比/etc/passwd文件的change time更新的文件:

代码语言:javascript
复制
[root@GeekDevOps-find ~]# find /etc/ -newermc /etc/shadow

这个用法的原型是:find /etc/ -newerXY file。其中Y表示的是跟后面file的什么时间比较,而X表示使用查找文件什么时间进行比较。-newermc就是拿文件的modify time时间跟file的change time进行比较。X和Y可以使用的字母为: a:文件access time。 c:文件change time。 m:文件modify time。

(三)根据用户、组查找

-uid n:文件的所属用户uid为n。 -user name:文件的所属用户为name。 -gid n:文件的所属组gid为n。 -group name:所属组为name的文件。 -nogroup:没有所属组的文件。 -nouser:没有所属用户的文件。

代码语言:javascript
复制
[GeekDevOps@GeekDevOps-find /]$ find / -uid `id -u`
...
/home/GeekDevOps
/home/GeekDevOps/.bash_logout
/home/GeekDevOps/.bash_profile
/home/GeekDevOps/.bashrc
(四)根据权限查找

-executable:文件可执行。 -readable:文件可读。 -writable:文件可写。

代码语言:javascript
复制
[GeekDevOps@GeekDevOps-find /]$ find / -writable #显示内容过多,不展示。

-perm mode:查找权限为mode的文件,mode的写法可以是数字,也可以是ugo的方式如:

代码语言:javascript
复制
[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm 700 -ls
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 1月 23 17:09 /home/GeekDevOps

这个写法的等效写法为:

代码语言:javascript
复制
[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm u=rwx -ls
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 1月 23 17:09 /home/GeekDevOps

另外要注意,mode指定的是完全符合这个权限的文件。 mode还可以使用/或-作为前缀进行描述。如果指定了-mode,就表示没指定的权限是忽略的,就是说,权限中只要包涵相关权限即可。如:

代码语言:javascript
复制
[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm 644 -ls
534196    4 -rw-r--r--   1 GeekDevOps GeekDevOps       18 8月  3 05:11 /home/GeekDevOps/.bash_logout
534197    4 -rw-r--r--   1 GeekDevOps GeekDevOps      193 8月  3 05:11 /home/GeekDevOps/.bash_profile
534198    4 -rw-r--r--   1 GeekDevOps GeekDevOps      231 8月  3 05:11 /home/GeekDevOps/.bashrc
代码语言:javascript
复制
[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm -600 -ls
16803401    0 drwxr-xr-x   3 root     root           24 1月 23 17:09 /home/
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 1月 23 17:09 /home/GeekDevOps
534196    4 -rw-r--r--   1 GeekDevOps GeekDevOps       18 8月  3 05:11 /home/GeekDevOps/.bash_logout
534197    4 -rw-r--r--   1 GeekDevOps GeekDevOps      193 8月  3 05:11 /home/GeekDevOps/.bash_profile
534198    4 -rw-r--r--   1 GeekDevOps GeekDevOps      231 8月  3 05:11 /home/GeekDevOps/.bashrc

以上代码块中,前面一个代码块找到所有只有644权限的文件,后面一个代码块-600就表示只要是包括了rw的其他位任意的文件。mode加/前缀表示的是,指定的权限只要某一位复合条件就可以,其他位跟-一样忽略,就是说-perm /600还可以找到400或者600这样权限的文件。目前CentOS7前缀+已经被弃用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年01月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.获取帮助信息
  • 二.find命令的格式
  • 三.表达式
    • (一)TESTS
      • (二)按照时间进行查找
        • (三)根据用户、组查找
          • (四)根据权限查找
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档