linux中有很多查找工具,今天主要讲解locate,find两个工具,有需要的小伙伴可以参考一下。
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。
1. 命令格式:
Locate[选择参数][样式]
2.命令功能:
locate命令可以在搜寻数据库时快速找到档案,locate为模糊查找,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)
locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,locate查询文件时,会去搜索/var/lib/mlocate/mlocage.db,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如” ” 或”?”等)来指定范本样式,如指定范本为kcpa ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为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~/etc/shadow/etc/shadow-/etc/shells[root@centos7~/etc/shadow/etc/shadow-/etc/shells[root@centos7~
实例2:忽略大小写
[root@centos7~/root/Desktop/root/Documents/root/Downloads/root/d1/root/dd/var/lib/pcp/pmdas/root/domain.h[root@centos7~
实例3:更新数据库
[root@centos7~/root/anaconda-ks.cfg[root@centos7~[root@centos7~/root/a.sh/root/anaconda-ks.cfg[root@centos7~
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. -fls file: 查找到的所有长格式的信息保存至指定文件中 \5. -ok COMMMAND {} ; 对查找到的每个文件执行由Command指定的命令,且都会交互式要求用户确认 \6. -exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令; \7. {}: 用于引用查找至的文件名称自身 \8. find 传递查找到的文件至后面指定的命令时,查找到所有符号条件的文件一次性传递给后面的命令 \9. 有些命令不能接受过多的参数,此时命令执行可能会失败,用 xargs 来规避此问题 find |xargs COMMAND
5.常用参数:
文件名和inode类:
-name:支持使用glob,*,?,[],[^]-iname:不区分字母大小写-inumn:按inode号查找-somefilename:相同的inode号文件-linksn:链接数为n的文件-regex:以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
属主属组类:
-userUSERNAME:查找属主为指定用户(UID)的文件-groupGROUPNAME:查找属组为指定组(GID)的文件-uidUserID:查找属主为指定的UID号的文件-gidGroupID:查找属组为指定的GID号的文件-nouser:查找没有属主的文件-nogroup:查找没有属组的文件
文件类型类:
bblock(buffered)specialccharacter(unbuffered)specialddirectorypnamedpipe(FIFO)fregularfilelsymboliclinkssocket
逻辑组合条件类:
组合条件:
与:-a或:-o非:-not,!
摩根定律:
(非P)或(非Q)=非(P且Q)(非P)且(非Q)=非(P或Q)
文件大小类:
-size[+|-]常用单位:k,M,G如:5M表示(4M,5M]-如:-5M表示[0,5M]+如:+5M表示(6M,oo)
关于文件大小类的解释:为什么-size 5M 还是找精确的5M而是表示(4M,5M], 试想文件的大小指什么?是指文件数据的大小还是包括了元数据后的大小,那你找元数据的大小有意义吗?但文件的大小肯定是包含元数据大小的,而我们一般以文件大小找文件时往往考虑的是文件数据的大小;另外,精确查找一定大小的文件意义不大;所以这里的大小会有1个单位的浮动。
时间戳类:
以”天”为单位:-atime[+|-]+--mtime-ctime以“分钟”为单位:-amin-mmin-cmin
Linux文件查找命令之locate与findLinux文件查找命令之locate与find
关于时间戳类的解释:为什么-atime 3 表示的是 [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~][root@localhost~][root@localhosttestdir]a.conf.orgb.conf.org[root@localhosttestdir]
实例2:.提示删除存在时间超过3天以上的属主为young的临时文件
[root@localhost~][root@localhost~]
实例3:在主目录中查找可被其它用户写入的文件
[root@localhost~]/root/num[root@localhost~][root@localhost~]--w--w----1rootroot35Jan2105:55num
实例4:查找/var目录下属主为root,且属组为mail的所有文件
[root@localhost~]11796524drwxrwxr-x2rootmail4096Jan2311:04/var/spool/mail
实例5:查找/var目录下不属于root、lp、gdm的所有文件
[root@localhost~]
实例6:查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@localhost~]11796764drwx------3daemondaemon4096Jan2311:04/var/spool/at5243994drwx------2nginxnginx4096Jan2303:16/var//nginx5244130-rw-r--r--1nginxroot0Jan2303:16/var//nginx/access.log5243910-rw-r--r--1nginxroot0Jan2103:44/var//nginx/error.log1321744drwx------3nginxnginx4096Jan2103:44/var/lib/nginx1321754drwx------7nginxnginx4096Jan2103:44/var/lib/nginx/tmp1321734drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/client_body1322194drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/proxy1322214drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/uwsgi1322224drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/scgi1322204drwx------2nginxroot4096Jan2103:44/var/lib/nginx/tmp/fastcgi
实例7:查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
[root@bash~]
实例8:查找/etc目录下大于1M且类型为普通文件的所有文件
[root@bash~]/etc/selinux/targeted/policy/policy.29/etc/udev/hwdb.bin
实例9:查找/etc目录下所有用户都没有写权限的文件
[root@bash~]/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目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@bash~]
或者
[root@bash~]/etc/init.d
实例12:摩根定律找出/tmp目录下,属主不是root,且文件名不以f开头的文件
[root@centos7~]即[root@centos7~]
实例13:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
[root@bash~]
实例14:匹配文件路径或文件
[root@bash~]/usr/bin/abrt-action-analyze-ccpp-local/usr/share/doc/postfix-2.10.1/examples/qmail-local/usr/share/aclocal/usr/libexec/postfix//usr/
实例15:基于正则表达式匹配文件路径
[root@bash~]./.mozilla/firefox/4dqu966q.default/revocations.txt./vimrc/spf13-vim/LICENSE.txt./a.txt
linux下如何查看某个软件 是否安装?安装路径在哪
如果是桌面软件的话一般可以从全局菜单等一些菜单界面中找到相应的启动项如果正常启动则表示安装或者可以使用在命令行输入说软件的名称(有时可能软件名称与程序/命令名称并不相同)如果可以执行则表示安装或者使用相应发行版所提供的包管理器可以通过安装该软件来确定是否已经安装(如果该软件并非使用包管理器安装的话就会不准)不同发行版也会提供相应的工具进行查询比如debian系可以使用dpkg进行查询(dpkg -l | grep 软件名称)安装的位置,一般情况下安装的位置多在/usr/share或者/usr/local/share或者/opt等等目录而且一般情况下我们可以使用whereis这个命令来进行软件位置定位如果是自己手动安装的比如很多软件都是通过configure、make、make install三步曲从源码编译安装这样的则可以根据configure是否使用--prefix参数指定相应的安装目录如果以上的方法都找不到我们还可以使用find或者locate的方法对根目录进行整体搜索搜索相应的软件名称再通过grep等进行过滤匹配来手动定位
Linux shell 执行这句 find 命令总是报错,怎么修改呢
在 Linux 系统中,find 的使用方法一般是:#find / -name *.c -print其中:/ 表示从根目录开始查找文件;*.c 表示查找以 *.c 为后缀的 C 语言源程序;-print 表示将查找到的结果显示在屏幕上。 至于说关于 shell 编程方面的程序调试,由于 shell 的语法相当严格,所以你必须要严格按照 shell 的语法和结构来书写才行。 哪怕差一点都不能够通过。 你再仔细检查一下你的 shell 文件。
Linux下怎样搜索文件
在linux中我们通常使用两个命令来搜索文件 这个命令呢是根据索引来搜索文件的,所以非常快,但!不是实时的而find命令则是实时的搜索文件,命令使用格式:find [搜索位置] [搜索模式]例如:find /etc -user root 搜索/etc目录下所有属主是root的文件。 find命令非常强大,推荐你看下《linux就该这么学》这本书的第二章,有详细介绍find的使用方法和高级技巧等。
发表评论