Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
Linux专题第15篇:搜索查找类命令
相关专辑:
Linux专题
<div style="display:none"></div> ## 15.1、find:查找文件或者目录 find指令将从指定的目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。 **1)基本语法** ```shell find [path...] [选项] ``` **2)选项说明** | 选项 | 说明 | | ------------------- | ------------------------------------------------------------ | | -name 文件名称 | 按文件名查找文件 | | -user 用户名 | 查找属于指定用户名的所有文件 | | -size [+-]n[bcwkMG] | 按照指定多文件大小查找文件<br />n:数字,表示文件大小,n后面可以跟单位<br />单位为(区分大小写):<br />b:块(512字节)<br />c:字节<br />w:字(2字节)<br />k:千字节<br />M:兆字节<br />G:吉字节 | **3)案例** | 案例 | 说明 | | ------------------------------------------- | ------------------------------------------------------- | | `find -name 1.txt` | 在当前目录及其所有子目录中查询1.txt文件 | | `find / -name 1.txt` | 在/目录及其所有子目录中递归查找1.txt文件 | | `find / -name *.txt` | 在/目录及其所有子目录中递归查找.txt结尾的文件 | | `find /opt/ /home/ -name *.txt` | 在[/opt,/home]两个目录中递归查找.txt结尾的文件 | | `find / -size 10M` | 在/目录递归查找文件大小为10M的文件 | | `find / -size +10M` | 在/目录递归查找大于10M的文件 | | `find / -size +10M -size -100M` | 在/目录递归查找大于10M且小于100M的文件 | | `find / -name *.log -size +50M -size -100M` | 在/opt目录中查找名称以.log结尾的且大于50M小于100M的文件 | ## 15.2、locate:快速定位文件路径 `locate` 命令和`find`命令一样都是用来在系统下查找文件或目录。但 locate命令要比find -name快得多,原因在于`locate`命令在查找文件时并不扫描具体目录,而是搜索一个已经创建好的数据库`/var/lib/mlocate/mlocate.db` 。这个数据库中含有本地几乎所有文件信息(一些被排除在外的目录或刚创建的目录可能不会包含在数据库中。Linux系统会自动创建这个数据库,并且通过定时任务每天自动更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用`locate`之前,先使用`updatedb`命令,手动更新数据库,但这也需要一定的时间,时间长短和空间大小文件数量有关。整个locate工作其实是由四部分组成的: 1. `/usr/bin/updatedb` 主要用来更新数据库,通过crontab自动完成的 2. `/usr/bin/locate` 查询文件位置 3. `/etc/updatedb.conf` updatedb的配置文件 4. `/var/lib/mlocate/mlocate.db` 存放文件索引信息的数据文件 **1)语法** ```shell locate [OPTION]... [PATTERN]... ``` **2)选项** ```shell -b, --basename match only the base name of path names -c, --count 只输出找到的数量 -d, --database DBPATH 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db -e, --existing only print entries for currently existing files -L, --follow follow trailing symbolic links when checking file existence (default) -h, --help 显示帮助 -i, --ignore-case 忽略大小写 -l, --limit, -n LIMIT limit output (or counting) to LIMIT entries -m, --mmap ignored, for backward compatibility -P, --nofollow, -H don't follow trailing symbolic links when checking file existence -0, --null separate entries with NUL on output -S, --statistics don't search for entries, print statistics about eachused database -q, --quiet 安静模式,不会显示任何错误讯息 -r, --regexp REGEXP 使用基本正则表达式 --regex 使用扩展正则表达式 -s, --stdio ignored, for backward compatibility -V, --version 显示版本信息 -w, --wholename match whole path name (default) ``` **3)经验技巧** 由于 locate 指令基于数据库进行查询, 所以第一次运行前, 必须使用 updatedb 指令创建 locate 数据库。 **4)查找文件** ```shell [root@testx ~]# updatedb [root@testx ~]# locate 1.txt /etc/brltty/brl-ts-pb65_pb81.txt /etc/pki/nssdb/pkcs11.txt /home/jack/1.txt /home/jack/b/1.txt /home/tom/1.txt ``` ## 15.3、grep:过滤查找即“|”管道符 管道符,“|”,表示将前一个命令的处理结果输出通过管道传递给后面的命令进行处理。 **1)基本语法** ```shell grep 选项 查找内容 源文件 ``` **2)选项说明** | 选项 | 功能 | | ---- | ---------------- | | -n | 显示匹配行及行号 | | -v | 反向匹配 | **3)案例** **查找1.txt中ready在哪些行** > 下面先使用cat命令查看1.txt的内容。 > > 然后后面有使用了2种方式检索ready位于1.txt中所在行号及内容。 > > 第1种:`grep -n ready 1.txt ` > > 第2种:`cat 1.txt | grep -n ready`,这里使用到了管道命令,将cat 1.txt的结果通过管道命令传递给 grep,grep将传递过来的内容作为查找目标。 ```shell [root@testx ~]# cat 1.txt hello 不错哦 ready ok ready [root@testx ~]# grep -n ready 1.txt 2:不错哦 ready 4:ready [root@testx ~]# cat 1.txt | grep -n ready 2:不错哦 ready 4:ready [root@test001 ~]# grep -v ready 1.txt hello ok ``` ## 15.4、which:在PATH下查找命令位置 这条命令主要是用来查找系统***PATH目录下***的可执行文件,说白了就是查找那些我们已经安装好的可以直接执行的命令,比如 ```shell [root@testx ~]# which useradd /usr/sbin/useradd [root@testx ~]# which ls alias ls='ls --color=auto' /usr/bin/ls ``` `which` 查找的可执行文件,必须是要在 PATH 下的可执行文件,而不能是没有加入 PATH 的可执行文件,即使他就是可执行文件,但是没有加入到系统搜索路径,他仍然无法被 `which` 发现(好吧,有点啰嗦了)。 ## 15.5、whereis:查找可执行文件路径 `which`和`whereis`命令都是Linux操作系统下查找可执行文件路径的命令。 `whereis`这个命令可以用来查找二进制(命令)、源文件、man文件。与`which`不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比`which`要广。例如: ```shell [root@testx ~]# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz [root@testx ~]# whereis useradd useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz ``` 可以看到,`whereis`不仅找到了 ls 可执行文件的位置,还找到了其 `man` 帮助文件,可见其搜索范围比较广,不局限于PATH。 <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
相关专辑:
Linux专题