当我们要对Linux下的某个文件做修改的时候,必须先知道文件的位置,这时候就可以使用文件搜索指令来完成。而指令的搜索则可以知道该指令文件的实际存放位置。
指令搜索
which
通过which可以知道指令的完整文件名放在哪里。语法:
1 | which [-a] command |
简单示例:
1 | mrbird@ubuntu:~$ which ls |
type
指令也可以实现指令搜索:
1 | mrbird@ubuntu:~$ type passwd |
文件档名的搜寻
whereis (由一些特定的目录中寻找文件文件名):
whereis
只找系统中某些特定目录底下的文件 ,基本语法:
1 | whereis [-bmsu] 文件或目录名 |
示例:
1 | #查看whereis搜寻的目录: |
locate / updatedb:
locate
则是利用数据库来搜寻文件名,并且没有实际的搜寻硬盘内的文件系统态。
locate
语法:
1 | locate [-ir] keyword |
示例:
1 | #找出系统中所有与passwd相关的档名,且只列出5个 |
为 locate
寻找的数据是由已建立的数据库 /var/lib/mlocate/里面的数据所搜寻到的, 所以不用直接在去硬盘当中存取数据。而数据库的建立默认是在每天执行一次,所以当你新建立起来的文件, 却还在数据库更新之前搜寻该文件,那么 locate
会告诉你找不到!可以使用updatedb
指令手动更新数据库,因为 updatedb
会去搜寻硬盘,所以当你执行 updatedb
时,可能会等待数分钟的时间。
find:
find
指令直接搜索硬盘,所以具体搜索时间根据硬盘性能而定。基本语法:
与时间有关的选项:
1 | find [PATH] [option] [action] |
举个例子,当n为4时:
+4 代表大于等于 5 天前的档名;-4 代表小于等于 4 天内的文件档名; 4 则是代表 4-5 那一天的文件档名。
示例:
1 | #列出24小时内有更改过内容(mtime)的文件档名: |
与使用者或组名有关的参数:
1 | 选项与参数: |
示例:
1 | #搜寻/home底下属于mrbird用户的文件 |
与文件权限及名称有关的参数:
1 | 选项与参数: |
示例:
1 | #找出档名为passwd这个文件 |
额外可进行的操作:
1 | 选项与参数: |
示例:
1 | #搜寻/run目录下文件权限为666的文件,并用ls -l命令查看其信息 |
{}
代表的是由 find
找到的内容,-exec
一直到\;
是执行额外动作的指令。
这里不能用管线来代替-exec
:
1 | root@ubuntu:~# find /run -perm 666 | ls -l |
《鸟哥的Linux私房菜》读书笔记