一、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,如需转载请自行联系原作者