虚拟系统:CentOS6.8
目录
命令路径:/usr/bin/which
执行权限:所有用户
功能描述:查找系统命令的可执行文件所在目录并显示
语法:which [命令名称]
在Linux中,当我们使用一条命令时,实际上是执行了相关的脚本文件。
测试1:
测试2:
可见,我们使用which是找不到cd的命令文件的,其实这就涉及到内置命令和外部命令。
内置命令在系统启动时就调入内存,是常驻内存的,没有相关的可执行文件,所以执行效率高。
外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。
那么问题来了,如何查看命令是否为内置命令呢?
命令路径:内置命令
执行权限:所有用户
功能描述:用于显示命令的类型或命令的所在位置
语法格式:type [命令名称]
测试:
命令路径:/usr/bin/whereis
执行权限:所有用户
功能描述:用于查看与命令有关的路径以及命令的帮助文档所在的位置
语法格式:whereis [命令名称]
选项:
- s:只找source来源文件
- b:只找binary格式的文件
- m:只查找在说明目录manual(man)里的文件
- u:查找不在上述三个选项当中的其他特殊文件
在linux下维护的一个文件数据库内进行查看的,执行效率高
此命令只在几个目录下进行查询:/bin、/sbin、/usr/share/man/,因此执行速度非常快。没有添加任何选项时,就会显示所有的文件。
测试:
命令路径:/usr/bin/whatis
执行权限:所有用户
功能描述:查看命令的作用。但是不像man命令显示很多内容,还能显示帮助文档名。
语法格式:whatis [命令名称]
在linux下维护的一个文件数据库内进行查看的,执行效率高
测试:
命令路径:/usr/bin/apropos
执行权限:所有用户
功能描述:查看命令的简介信息,与whatis功能相似
语法格式:apropos [命令名称]
与whatis相同在linux下维护的一个文件数据库内进行查看的,执行效率高
那么如果是一个新安装的软件,这两个命令可能就查不到这个软件的简介信息
这时候我们需要使用makewhatis更新上述两个命令对应的数据库
命令路径:/usr/bin/find
执行权限:所有用户
功能描述:查看linux系统下的任意文件,会遍历整个磁盘(效率低)
语法格式:find [path] [option] [filename]
选项:
- name:按照名称查找
- user:按照文件所有者查找
- size:按照文件的大小查找。默认是按照文件的数据块的个数进行查找的,数据块:512字节
- -type:查找并列出文件详细,文件类型:bcdlps
- -exec:对find命令查找到的文件进行额外的命令操作
- -ok:与-exec相似,只是在每次执行操作前询问是否执行
- perm:查找完全符合数字权限的文件或目录
- atime:访问时间(access time)。显示的是文件中的内容最后被访问的时间。默认单位是天
- mtime:修改时间(modify time)。显示的是文件内容被修改的最后时间。默认单位是天
- ctime:状态数据修改时间(change time),显示的是文件的属性,如权限,所有者,链接数等等发生改变的时间默认单位是天
- amin:与atime相似,默认单位是分钟
- mmin:与mtime相似,默认单位是分钟
- cmin:与ctime相似,默认单位是分钟
……
测试1:以文件名的形式 -name 在某一目录下查找文件
测试2:以文件大小的形式 -size 在某一目录下查找文件
测试3:使用 -exec 对find命令查找到的文件进行额外的命令操作
格式:-exec 【command】【选项】 {} \;
{}:固定写法,集合的含义,表示find查询出来的结果集。
\:为转义字符,对;进行转义,表示命令结束。注意:集合和转义字符之间需要有空格
find功能虽然强大,但是因为要从磁盘上进行查找,因此当文件系统内的文件数量很多时,性能低,速度慢。指定目录后,也会遍历子目录,因此建议要尽可能的精确指定查询的目录,以便提高效率。尽量不要在根目录下直接查询文件。
命令路径:/usr/bin/locate
执行权限:所有用户
功能描述:通过关键字来查找文件或目录的(只要文件名或目录名中含有此关键字
语法格式:locate [关键字]
选项:
- i:忽略大小写;
- c:不输出文件名,只返回文件的数量
- l:只输出查找出来的文件的前几个。如:-l 5,输出前五个文件
- r:列出数据库中维护的文件数目和数据。
- S:查询文件数据库里的数据
其实是“find -name”的另一种写法,但是要比find快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb)
测试:
要注意的是实际搜索的是文件名包含ls的文件!
locate命令不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
搜索效率比较:whereis、whatis、apropos、locate效率相对比find较高,因为它们都是在对应的数据库中查找