大量示例彻底搞懂 Linux 查找,which,whereis
PATH 环境变量存放着一些路径信息,例如/usr/bin,当你在 shell 终端敲入一个命令,但是在 PATH 中包含的路径下没有时并且也不是内置命令时,就会提示:command not found。
当你已经安装了一个命令,但是使用时却提示找不到该命令,可以查看该环境变量,是否有你安装命令的路径。
所以是不是明白了为什么有些命令或程序需要添加环境变量才能直接使用了吧?
whereis
===========
whereis 命令用于搜索程序的二进制文件,源代码文件或帮助文档。例如:
whereis ls #如果上述三者有,则三者都会显示。
ls: /bin/ls /usr/share/man/man1/ls.1.gz
whereis -m ls #只查看 ls 的帮助手册
ls: /usr/share/man/man1/ls.1.gz
wh Java 开源项目【ali1024.coding.net/public/P7/Java/git】 ereis -b ls #只查找 ls 的二进制文件
ls: /bin/ls
whereis stdio.h #查找 stdio.h 头文件,和帮助手册
stdio: /usr/include/stdio.h /usr/share/man/man3/stdio.3.gz
同样地,它不能查找到内置命令。
type
========
type 用于查看命令类型,一般有以下类型:
alias:别名
keyword:关键字
builtin:内置命令
file:外部命令
而常见参数如下:
-t 输出类型名,如 file
-p 如果是外部命令,则显示其所在路径
-a 对于外部命令,它会显示命令路径,命令类型等信息
我们来看几个例子:
type ls #ls 是一个别名
ls is aliased to `ls --color=auto'
type cd #cd 是一个内置命令
cd is a shell builtin
type find
find is /usr/bin/find
type function #function 是一个 shell 关键字
function is a shell keyword
type -a which #显示所有路径
which is /usr/bin/which
which is /bin/which
loc 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 ate
==========
前面所说的命令都限于查找命令,帮助手册或源文件,而 locate 用于快速查找任何文件。它从一个系统数据库进行文件查找,而不需要遍历磁盘,因此速度极快。通常该系统数据库每天更新一次(可以查看系统的/etc/cron.daily/mlocate,不同系统可能不一样)。
常见选项如下:
-e 仅查找存在的文件
-q 安静模式,不会显示任何错误讯息
-n 至多显示 n 个输出
-r 使用正规运算式
-i 查找忽略大小写
-c 打印匹配结果数量
假设当前目录早已存在以下文件:
locate.txt locate.log LOCATE.zip
我们来看一些实例。
快速查找文件
locate locate.txt #查找 locate.txt
/home/hyb/workspaces/shell/locate/locate.txt
查找存在的文件
locate locate.txt #查找之前删除 locate.txt
#虽然文件不存在,但是仍然被查找出来
/home/hyb/workspaces/shell/locate/locate.txt
locate -e locate.txt #-e 参数可以查找只存在的文件
(由于该文件不存在,因此也不会被查找出来)
查找计算文件的数量
locate -c locate.log #只计算查找到的数量
1
忽略大小写查找
locate -i locate.zip
/home/hyb/workspaces/shell/locate/LOCATE.zip
使用正则表达式
普通的查找是模糊匹配的,因此只要目标名称中包含要搜索的名称,都会被搜索出来,但是我们可以利用正则表达式,来精确查找。
locate -r /locate.log$ #查找以/locate.log 结尾的文件
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司 21 年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
评论