一、linux可以用于查找的相关命令(本次重点在于说明find用法)
1、find:
是最为强大的查找命令,可以查找到你所想要找的所有文件
2、locate
同样也是一个文件查找命令,locate命令其实是"find-name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。
3、whereis
whereis命令只能用于程序名称的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
1
2
|
[root@localhost ~]
yum: /usr/bin/yum /etc/yum /etc/yum .conf /usr/share/man/man8/yum .8.gz
|
4、which
which命令的作用是,在PATH环境变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以查看某个系统命令是否存在,以及执行的到底是哪一个位置的可执行文件(即命令)
1
2
|
[root@localhost ~]
/usr/bin/yum
|
5、type
type命令其实不能算查找命令,它是用来查找某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。
1
2
|
[root@localhost ~]
yum is /usr/bin/yum
|
从以上各命令的功能可以看出,虽然在linux中有诸多可以用于查找的命令,但能够基于文件(命令也是一个可执行文件之一)层次查找的只有find与locate,两者区别也比较明显。
find与loacte的区别
find:
优点:可实时查找,精确匹配
缺点:范围遍历,速度慢
locate:
优点:查找速度快
缺点:依赖于数据库、非实时查找
二、find 用法
格式:
find [options] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
1、条件查找(支持文件名通配)
-name "File_name" |
按名称查找 |
1
2
3
4
5
6
7
8
|
[root@localhost lib]
/var/lib
[root@localhost lib]
. /rpm
[root@localhost lib]
drwxr-xr-x. 2 root root 4096 Feb 26 08:06 rpm/
[root@localhost lib]
|
|
-name "*" |
查找任意长度的任意字符 |
1
2
3
4
5
6
7
8
|
[root@localhost lib]
. /yum/history/2014-02-23/5
. /rpm/Sigmd5
[root@localhost lib]
-rw-r--r--. 1 root root 77824 Feb 24 22:08 rpm /Sigmd5
[root@localhost lib]
drwx------ 2 root root 4096 Feb 23 19:47 yum /history/2014-02-23/5/
|
|
-name "?" |
包含任意单个定符 |
1
2
3
4
5
|
[root@localhost log]
. /sa
[root@localhost log]
drwxr-xr-x. 2 root root 4096 Feb 26 00:00 sa
|
|
-name "[]" |
范围内的任意字符 |
1
2
3
4
5
6
7
8
|
[root@localhost sa]
/var/log/sa
[root@localhost sa]
. /sa23
. /sa25
. /sa26
. /sa24
|
|
-name "[^]" |
范围外的任意字符 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@localhost rpm]
/var/lib/rpm
[root@localhost rpm]
.
. /Filedigests
. /Sha1header
. /Provideversion
. /Dirnames
. /Packages
. /Obsoletename
. /Providename
. /Conflictname
. /Requirename
......
|
|
-iname "File_name" |
查找时不区分字符大小写 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@localhost log]
/var/log
[root@localhost log]
...
. /anaconda .syslog
. /prelink
. /prelink/prelink .log
. /dmesg .old
. /lastlog
. /anaconda .ifcfg.log
. /cron
. /dracut .log
. /messages
. /ConsoleKit
. /ConsoleKit/history
. /cups
....
|
|
-user UserName |
根据属主查找 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@localhost tmp]
/tmp
total 92
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rw-rw-r-- 1 docker docker 0 Feb 26 12:08 Device.c
-rw-rw-r-- 1 docker docker 0 Feb 26 12:08 device.h
-rw-rw-r-- 1 docker docker 0 Feb 26 12:08 device.txt
-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r-- 1 openstack openstack 720 Feb 26 09:23 mounts.txt
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
|
|
-group GroupName |
根据属组查找 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@localhost tmp]
-rw-r--r-- 1 openstack openstack 720 Feb 26 09:23 mounts.txt
drwxr-xr-x 2 root root 4096 Feb 25 18:39 repo
-rw-r--r-- 1 root openstack 242 Feb 23 21:23 scprit.sh
drwxr-xr-x 2 root root 4096 Feb 25 22:53 script
-rw-r--r-- 1 root root 106 Feb 24 11:46 tast.txt
drwxr-xr-x 2 root root 4096 Feb 25 12:32 test
-rw-r--r-- 1 root openstack 145 Feb 24 16:49 test2.sh
-rw-r--r-- 1 root openstack 125 Feb 24 16:56 test3.sh
-rw-r--r-- 1 root openstack 721 Feb 24 17:04 test4.sh
-rw-------. 1 root root 0 Feb 23 19:12 yum.log
[root@localhost tmp]
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
. /mounts .txt
|
|
-uid UID |
按照用户的UID查找 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@localhost tmp]
total 92
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt
-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.l
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
|
|
-gid GID |
按照用户的的GID查找 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@localhost tmp]
-rw-r--r-- 1 501 501 720 Feb 26 09:23 mounts.txt
drwxr-xr-x 2 root root 4096 Feb 25 18:39 repo
-rw-r--r-- 1 root 501 242 Feb 23 21:23 scprit.sh
drwxr-xr-x 2 root root 4096 Feb 25 22:53 script
-rw-r--r-- 1 root root 106 Feb 24 11:46 tast.txt
drwxr-xr-x 2 root root 4096 Feb 25 12:32 test
-rw-r--r-- 1 root 501 145 Feb 24 16:49 test2.sh
-rw-r--r-- 1 root 501 125 Feb 24 16:56 test3.sh
-rw-r--r-- 1 root 501 721 Feb 24 17:04 test4.sh
[root@localhost tmp]
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
. /mounts .txt
|
|
-nouser |
查无有效属主的文件,即文件的属主在/etc/passwd中不存在 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@localhost include]
/root/Download/httpd-2 .2.26 /include
[root@localhost include]
total 404
-rw-r--r-- 1 501 games 1075 Jul 12 2006 ap_compat.h
-rw-r--r-- 1 root root 7371 Feb 24 20:29 ap_config_auto.h
-rw-r--r-- 1 501 games 6850 Nov 14 00:51 ap_config_auto.h. in
-rw-r--r-- 1 501 games 9472 Apr 15 2011 ap_config.h
-rw-r--r-- 1 root root 2704 Feb 24 21:58 ap_config_layout.h
-rw-r--r-- 1 501 games 2784 Jul 12 2006 ap_config_layout.h. in
-rw-r--r-- 1 501 games 4167 May 10 2007 ap_listen.h
-rw-r--r-- 1 501 games 9803 Jun 28 2013 ap_mmn.h
[root@localhost include]
.
. /http_request .h
. /util_xml .h
. /util_ldap .h
. /ap_mmn .h
. /ap_release .h
./.indent.pro
. /ap_config .h
. /util_script .h
. /httpd .h
. /ap_listen .h
. /ap_mpm .h
|
|
-nogroup |
查无有效属组的文件,即文件的属组在/etc/group中不存在 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
total 92
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt
-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r-- 1 501 501 720 Feb 26 09:23 mounts.txt
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
. /mounts .txt
|
|
2、组合条件
-a |
与,同时满足(and) |
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
[root@localhost tmp]
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
|
|
-o |
或(or) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
total 92
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt
drwxr-xr-x 2 root root 4096 Feb 25 22:53 script
-rw-r--r-- 1 root root 106 Feb 24 11:46 tast.txt
drwxr-xr-x 2 root root 4096 Feb 25 12:32 test
-rw-r--r-- 1 root 501 145 Feb 24 16:49 test2.sh
-rw-r--r-- 1 root 501 125 Feb 24 16:56 test3.sh
-rw-r--r-- 1 root 501 721 Feb 24 17:04 test4.sh
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
. /mounts .txt
|
|
-not, ! |
非,取反 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
total 92
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt
-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r-- 1 501 501 720 Feb 26 09:23 mounts.txt
drwxr-xr-x 2 root root 4096 Feb 25 18:39 repo
-rw-r--r-- 1 root 501 242 Feb 23 21:23 scprit.sh
drwxr-xr-x 2 root root 4096 Feb 25 22:53 script
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
. /mounts .txt
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
. /mounts .txt
|
|
3、文件类型查找(type)
-type f |
普通文件 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@localhost tmp]
total 92
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt
-rw-r--r-- 1 501 501 720 Feb 26 09:23 mounts.txt
drwxr-xr-x 2 root root 4096 Feb 25 18:39 repo
-rw-r--r-- 1 root 501 242 Feb 23 21:23 scprit.sh
drwxr-xr-x 2 root root 4096 Feb 25 12:32 test
-rw-r--r-- 1 root 501 145 Feb 24 16:49 test2.sh
-rw-r--r-- 1 root 501 125 Feb 24 16:56 test3.sh
-rw-r--r-- 1 root 501 721 Feb 24 17:04 test4.sh
-rw-------. 1 root root 0 Feb 23 19:12 yum.log
[root@localhost tmp]
. /device .h
. /Device .c
. /device .txt
. /scprit .sh
. /test4 .sh
. /test2 .sh
. /test3 .sh
. /mounts .txt
|
|
-type f |
目录
|
-type b |
块设备 |
-type c
|
字符设备 |
-type l |
符号链接文件 |
-type p |
命名管道 |
-type s |
套接 |
其它文件类型查找方法与f用法相同。
4、文件大小查找(-size [+|-]#),Unit(c:字节,k:KB,M:MB,G:GB
-size # |
指定大小(取值是不大于) |
-size +# |
大于# |
1
2
3
4
5
6
7
|
[root@localhost tmp]
/etc/selinux/targeted/modules/active/policy .kern
/etc/selinux/targeted/policy/policy .24
[root@localhost tmp]
-rw-r--r--. 1 root root 7.0M Feb 23 19:19 /etc/selinux/targeted/modules/active/policy .kern
-rw-r--r--. 1 root root 7.0M Feb 23 19:19 /etc/selinux/targeted/policy/policy .24
|
|
-size: -# |
小于# |
5、时间戳查找
以天为单位(time):
-atime [+|-]#
-mtime [+|-]# |
修改时间 |
-ctime [+|-]# |
改变时间 |
-atime [+|-]# |
访问时间 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
.
. /device .h
. /Device .c
. /device .txt
. /script
. /script/b .sh
. /script/yum_install .sh
. /script/show_uid .sh
. /test4 .sh
./.ICE-unix
. /test2 .sh
. /test3 .sh
. /mounts .txt
. /cat
. /test
. /repo
. /repo/CentOS-Base .repo
|
|
以分钟为单位(min)[+|-]#:
-amin [+|-]# |
访问时间 |
-mmin [+|-]#
|
修改时间 |
1
2
3
4
5
6
|
[root@localhost script]
total 12
-rw-r--r-- 1 root root 630 Feb 26 16:37 b.sh
-rw-r--r-- 1 root root 232 Feb 26 16:36 show_uid.sh
-rw-r--r-- 1 root root 795 Feb 26 16:36 yum_install.sh
|
|
-cmin [+|-]#
|
改变时间 |
6、权限查找
-perm [+|-]MODE
-perm MODE |
精确匹配 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
-rwxr-xr-x 1 root root 48568 Feb 25 12:31 cat
-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd
-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.log
-rw-r--r-- 1 root root 106 Feb 24 11:46 tast.txt
-rw-r--r-- 1 root 501 145 Feb 24 16:49 test2.sh
-rw-r--r-- 1 root 501 125 Feb 24 16:56 test3.sh
-rw-r--r-- 1 root 501 721 Feb 24 17:04 test4.sh
[root@localhost tmp]
. /ks-script-rxXCJd .log
. /cat
|
|
-perm +MODE |
任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@localhost etc]
total 1912
drwxr-xr-x. 3 root root 4096 Feb 23 19:15 abrt
drwxr-xr-x. 4 root root 4096 Feb 23 19:21 acpi
-rw-r--r--. 1 root root 46 Feb 26 12:16 adjtime
-rw-r--r--. 1 root root 1512 Jan 12 2010 aliases
-rw-r--r-- 1 root root 12288 Feb 23 19:27 aliases.db
drwxr-xr-x. 2 root root 4096 Feb 23 19:19 alsa
drwxr-xr-x. 2 root root 4096 Feb 24 22:08 alternatives
-rw-------. 1 root root 541 Nov 23 20:43 anacrontab
-rw-r--r--. 1 root root 148 May 15 2009 asound.conf
-rw-r--r--. 1 root root 1 Jan 30 2012 at.deny
-rw-r--r-- 1 root root 0 Feb 26 14:01 A.txt
.....
|
|
-MODE |
每类用户的指定要检查的权限位都匹配 |
1
2
3
4
5
6
7
8
|
[root@localhost tmp]
393983 4 -rwxr-xr-x 1 root root 3196 Oct 10 22:48 /etc/ppp/ipv6-up
393978 4 -rwxr-xr-x 1 root root 386 Oct 10 22:48 /etc/ppp/ip-down
393982 4 -rwxr-xr-x 1 root root 1687 Oct 10 22:48 /etc/ppp/ipv6-down
393981 8 -rwxr-xr-x 1 root root 6517 Oct 10 22:48 /etc/ppp/ip-up .ipv6to4
393980 4 -rwxr-xr-x 1 root root 430 Oct 10 22:48 /etc/ppp/ip-up
393979 4 -rwxr-xr-x 1 root root 3262 Oct 10 22:48 /etc/ppp/ip-down .ipv6to4
|
|
7、处理动作:
-print |
打印在标准输出上(默认); |
-ls |
以长格式输出各文件信息 |
-exec COMMAND {} \; |
对查找到的文件执行指定的命令 |
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@localhost tmp]
/tmp
[root@localhost tmp]
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 . /device .h
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 . /Device .c
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 . /device .txt
-rw-r--r-- 1 root root 629 Feb 25 18:32 . /script/b .sh
-rw-r--r-- 1 root root 794 Feb 25 22:53 . /script/yum_install .sh
-rw-r--r-- 1 root root 231 Feb 25 17:32 . /script/show_uid .sh
-rw-r--r-- 1 501 501 720 Feb 26 09:23 . /mounts .txt
-rw-r--r-- 1 root root 1926 Feb 25 18:37 . /repo/CentOS-Base .repo
|
|
-ok COMMAND {} \; |
交互式的-exec |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost tmp]
< ls ... . /device .h > ? Y
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 . /device .h
< ls ... . /Device .c > ? Y
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 . /Device .c
< ls ... . /device .txt > ? Y
-rw-rw-r-- 1 502 502 0 Feb 26 12:08 . /device .txt
< ls ... . /script/b .sh > ? Y
-rw-r--r-- 1 root root 629 Feb 25 18:32 . /script/b .sh
< ls ... . /script/yum_install .sh > ? Y
-rw-r--r-- 1 root root 794 Feb 25 22:53 . /script/yum_install .sh
< ls ... . /script/show_uid .sh > ? Y
|
|
find把查找到的所有文件一次性地传递给-exec所指定的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost tmp]
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc
[root@localhost tmp]
[root@localhost tmp]
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc
[root@localhost tmp]
[root@localhost tmp]
-rw-r--r-- 1 root root 0 Feb 26 16:47 asdfadf.docx
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.docx
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.docx
-rw-r--r-- 1 root root 0 Feb 26 16:47 xxx.docx
|
注:find:把查找到的所有文件一次性地传递给-exec所指定的文件
管道传递的是字符串,不能使用文件操作指令处理,
如果要用可以使用以下命令
1
2
3
4
5
6
7
8
9
|
[root@localhost tmp]
[root@localhost tmp]
[root@localhost tmp]
[root@localhost tmp]
[root@localhost tmp]
[root@localhost tmp]
[root@localhost tmp]
[root@localhost tmp]
|
find |xargs COMMAND(查找大文件很有用)
====================================完===================================================
本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1363882,如需转载请自行联系原作者