locate
locate让使用者可以很快速的搜救档案系统内是否有指定的档案。其方式是先构建一个包括系统内所有档案名称及路径的数据库,然后当找寻时就只需查询这个数据库,而毋须实际深入档案系统之中了。在通常的distribution之中,数据库的构建都被置于crontab中手动执行。
1.命令格式:
Locate[选择参数][式样]
2.命令功能:
locate命令可以在搜救数据库时快速找到档案,locate为模糊查找,数据库由updatedb程序来更新,updatedb是由crondaemon周期性构建的,locate命令在搜救数据库时比由整个由硬碟资料来搜救资料来得快,但较差劲的是locate所找到的档案若是近来才完善或刚改名的,可能会找不到,在内定值中,updatedb每晚会跑一次,可以由更改crontab来更新设定值。(etc/crontab)
locate指定用在搜救符合条件的档案,它会去储藏档案与目录名称的数据库内linux内存管理,locate查询文件时,会去搜索/var/lib/mlocate/mlocage.db,找寻合乎范本式样条件的档案或目录录,可以使用特殊字元(如”*”或”?”等)来指定范本式样,如指定范本为kcpa*ner,locate会找出所有起始字串为kcpa且结尾为ner的档案或目录linux服务器代维,如名称为kcpartner若目录录名称为kcpa_ner则会列举该目录下包括子目录在内的所有档案。
locate指令和find寻找档案的功能类似,但locate是透过update程序将硬碟中的所有档案和目录资料先构建一个索引数据库,在执行loacte时直接找该索引,查询速率会较快,索引数据库通常是由操作系统管理,但也可以直接下达update逼迫系统立刻更改索引数据库。
3.命令参数:
-e将排除在找寻的范围之外。
-1若果是1.则启动安全模式。在安全模式下,使用者不会见到权限难以见到的档案。这会始速率减缓,由于locate必须至实际的档案系统中取得档案的权限资料。
-f将特定的档案系统排除在外,比如我们没有到理要把proc档案系统中的档案放到资料库中。
-q安静模式,不会显示任何错误讯息。
-n至多显示n个输出。
-r使用正规运算式做寻觅的条件。
-o指定资料库存的名称。
-d指定资料库的路径
-h显示辅助讯息
-V显示程式的版本讯息
4.使用实例:
实例1:搜索etc目录下所有以sh开头的文件
[root@CentOS7~#]locate/etc/sh/etc/shadow/etc/shadow-/etc/shells[root@centos7~#]locate-r"/etc/sh"#正则linux 搜索文件内容,锚定词首/etc/shadow/etc/shadow-/etc/shells[root@centos7~#]
实例2:忽视大小写
[root@centos7~#]locate-i~/d
/root/Desktop/root/Documents/root/Downloads
/root/d1
/root/dd
/var/lib/pcp/pmdas/root/domain.h
[root@centos7~#]
实例3:更新数据库
[root@centos7~#]locate~/a
/root/anaconda-ks.cfg
[root@centos7~#]updatedb
[root@centos7~#]locate~/a
/root/a.sh
/root/anaconda-ks.cfg
[root@centos7~#]
find
1.主要用途:
find命令是一个实时查找工具,通过遍历指定路径而完成对文件的查找;在使用该命令时,假若不选取参数,则在当前目录下查找子目录与文件并显示之;另外,任何坐落参数之前的字符串,都将视为欲查找的目录名。因为是实时遍历查找,find有如下特点:精确实时查找,速率慢可能只搜索用户具备读取和执行权限的目录。
2.find句型:
find[OPTION]...[查找路径][查找条件][处理动作]
查找路径:指定具体目标路径,默认为当前目录
查找条件:指定的查找标准,可以是文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
3.查找条件:
1.依照文件名和inode查找
2.依照属主、属组查找
3.依照文件类型查找
4.依照逻辑组合条件查找
5.依照文件大小来查找
6.按照时间戳来查找
7.按照权限来查找
4.处理动作:
1.-print:默认动作,显示至屏幕
2.-ls:类似于对查找到的文件执行ls-l命令
3.-delete:删掉查找到的文件
4.-flsfile:查找到的所有长格式的信息保存至指定文件中
5.-okCOMMMAND{};对查找到的每位文件执行由COMMAND指定的命令,且还会交互式要求用户确认
6.-execCOMMAND{};对查找到的每位文件执行由COMMAND指定的命令;
7.{}:用于引用查找至的文件名称自身
8.find传递查找到的文件至前面指定的命令时,查找到所有符号条件的文件一次性传递给前面的命令
9.有些命令不能接受过多的参数,此时命令执行可能会失败,用xargs来规避此问题
find|xargsCOMMAND
5.常用参数:
文件名和inode类:
-name"文件名称":支持使用glob,*,?,[],[^]
-iname"文件名称":不分辨字母大小写
-inumn:按inode号查找
-somefilename:相同的inode号文件
-linksn:链接数为n的文件
-regex"PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
属主属组类:
-userUSERNAME:查找属主为指定用户(UID)的文件
-groupGROUPNAME:查找属组为指定组(GID)的文件
-uidUserID:查找属主为指定的UID号的文件
-gidGroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
文件类型类:
bblock(buffered)special
ccharacter(unbuffered)special
ddirectory
pnamedpipe(FIFO)fregularfile
lsymboliclink
ssocket
逻辑组合条件类:
组合条件:
与:-a
或:-o
非:-not,!
摩根定理:
(非P)或(非Q)=非(P且Q)
(非P)且(非Q)=非(P或Q)
文件大小类:
-size[+|-]#UNIT
常用单位:k,M,G
#UNIT:(#-1,#]
如:5M表示(4M,5M]
-#UNIT:[0,#-1]
如:-5M表示[0,5M]
+#UNIT:(#,oo)
如:+5M表示(6M,oo)
关于文件大小类的解释:为何-size5M还是找精确的5M而是表示(4M,5M],试想文件的大小指哪些?是指文件数据的大小还是包括了元数据后的大小,那你找元数据的大小有意义吗?但文件的大小肯定是包含元数据大小的,而我们通常以文件大小找文件时常常考虑的是文件数据的大小;另外,精确查找一定大小的文件意义不大;所以这儿的大小会有1个单位的浮动。
时间戳类:
以”天”为单位:
-atime[+|-]#
#:[#,#+1)
+#:[#+1,oo)
-#:[0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
关于时间戳类的解释:为何-atime3表示的是[3,4),这个就挺好解释了,我们这里所说的时间是指时间段而非时刻,一“天”与一“分钟”都是指一个时间段,只有[3,4)这个半闭半开的区间能够完整地表示第七天。
权限类:
-perm[/|-]MODEMODE:精确匹配权限/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,属于或关系。曾经用'+',CentOS7以'/'取代之-MODE:每一类对象都必须同时拥有指定权限,属于与关系0:表示不关注
示例:
find-perm644表示要严格匹配644的文件
find-perm+222表示u,g,o任何一类用户有写权限即匹配
find-perm-222表示仅严格匹配写权限,即每位用户必需要有写权限
find-perm-002表示仅严格匹配other用户的写权限
6.使用示例:
实例1:将配置文件备份到指定目录下并添加扩充名.org
[root@localhost~]#find.-name"*.conf"-execcp-r{}/testdir/{}.org;
[root@localhost~]#cd/testdir/
[root@localhosttestdir]#ls
[root@localhosttestdir]#
实例2:.提示删掉存在时间超过3天以上的属主为young的临时文件
[root@localhost~]#find/tmp-ctime+3-useryoung-execrm-fr{};
[root@localhost~]#
实例3:在主目录中查找可被其它用户写入的文件
[root@localhost~]#find~-perm-002
/root/num
[root@localhost~]#find~-perm-002-execchmodo-w{};
[root@localhost~]#llnum
--w--w----1rootroot35Jan2105:55num
实例4:查找/var目录下属主为root,且属组为mail的所有文件
[root@localhost~]#find/var-userroot-groupmail-ls#默认关系就是与
11796524drwxrwxr-x2rootmail4096Jan2311:04/var/spool/mail
实例5:查找/var目录下不属于root、lp、gdm的所有文件
[root@localhost~]#find/var!-userroot!-userlp!-usergdm
实例6:查找/var目录下近来一周内其内容更改过,同时属主不为root,也不是postfix的文件
[root@localhost~]#find/var/-mtime-7!-userroot!-userpostfix-ls
11796764drwx------3daemondaemon4096Jan2311:04/var/spool/at
5243994drwx------2nginxnginx4096Jan2303:16/var/log/nginx
5244130-rw-r--r--1nginxroot0JanJan2303:16/var/log/nginx/access.log
5243910-rw-r--r--1nginxroot0JanJan2103:44/var/log/nginx/error.log
1321744drwx------3nginxnginx4096Jan2103:44/var/lib/nginx
1321754drwx------7nginxnginx4096Jan2103:44/var/lib/nginx/tmp
1321734drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/client_body
1322194drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/proxy
1322214drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/uwsgi
1322224drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/scgi
1322204drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/fastcgi
实例7:查找当前系统上没有属主或属组,且近来一个周内曾被访问过的文件
[root@bash~]#find/-nouser-o-nogroup-a-atime-7
实例8:查找/etc目录下小于1M且类型为普通文件的所有文件
[root@bash~]#find/etc/-size+1M-typef
/etc/selinux/targeted/policy/policy.29
/etc/udev/hwdb.bin
实例9:查找/etc目录下所有用户都没有写权限的文件
[root@bash~]#find/etc/!-perm/222
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
/etc/lvm/profile/cache-mq.profile
/etc/lvm/profile/cache-smq.profile
/etc/lvm/profile/command_profile_template.profile
/etc/lvm/profile/metadata_profile_template.profile
/etc/lvm/profile/thin-generic.profile
/etc/lvm/profile/thin-performance.profile
/etc/openldap/certs/password
/etc/gshadow
/etc/dbus-1/system.d/cups.conf
/etc/shadow
/etc/gshadow-
/etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
/etc/shadow-
/etc/udev/hwdb.bin
/etc/machine-id
/etc/pam.d/cups
/etc/sudoers
实例10:查找/etc目录下起码有一类用户没有执行权限的文件
[root@bash~]#find/etc/!-perm-111#起码有一类用户没有就是所有用户都没有
实例11:.查找/etc/init.d目录下,所有用户都有执行权限linux 搜索文件内容,且其它用户有写权限的文件
[root@bash~]#find/etc/init.d-perm-113
/etc/init.d
或则
[root@bash~]#find/etc/init.d-perm-111-perm-002
/etc/init.d
实例12:摩根定理找出/tmp目录下,属主不是root,且文件名不以f开头的文件
[root@centos7~]#find/tmp(-not-userroot-a-not-name'f*')-ls
即
[root@centos7~]#find/tmp-not(-userroot-o-name'f*')-ls
实例13:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
[root@bash~]#find/etc-path'/etc/sane.d'-prune-o-name'*.conf'
实例14:匹配文件路径或文件
[root@bash~]#find/usr/-path'*local'
/usr/bin/abrt-action-analyze-ccpp-local
/usr/share/doc/postfix-2.10.1/examples/qmail-local
/usr/share/aclocal
/usr/libexec/postfix/local
/usr/local
实例15:基于正则表达式匹配文件路径
[root@bash~]#find.-regex".*txt$"
./.mozilla/firefox/4dqu966q.default/revocations.txt
./vimrc/spf13-vim/LICENSE.txt
./a.txt