脚本文件的查找
连按两次Tab能看到用户有多少命令可以执行。可以通过which或type指令来看某个指令的完整文件名
which
查找执行文件
which [-a] 指令
-a 将所有PATH目录中可以找到的命令全部列出,而不止第一个被找到的命令名称
找which中的alias是命令别名,意思是输入which会等于后面接的那串命令
这里找不到history指令,但是却能够执行history。因为which默认找PATH内设置的目录,而history是BASH内置的命令,所以找不到。
文件的查找
whereis
因为从一些特定的目录(可以用whereis -l确认哪些目录)中查找文件,所以比find快
where is [-bmsu] 文件/目录
-l 可以列出whereis会去查询的几个主要目录
-b 只找二进制(binary)格式的文件
-m 只找说明文件(manual)路径下的文件
-s 只找源文件(source)
-u 查找不在上述三个项目当中的其他特殊文件
最后加上-m查找passwd只显示man里面的文件名。
locate/updatedb
locate [-ir] 关键字
-i 忽略大小写差异
-c 不输出文件名,仅计算文件数量
-l 仅输出几行,比如-l 5输出5行
-S 输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量
-r 后面接正则表达式的显示方式
locate寻找的数据是由已建立的数据库/var/lib/mlocate
里的数据所查找到的,而centOS7.X每天更新一边数据库,所以当我新建立起来的文件却在数据库更新之前查找该文件,那locate会告诉我不存在。使用updatedb
命令可以更新数据库。
find
find [路径] [选项] [操作]
1. 与时间有关的选项:-atime,-ctime,-mtime。以-mtime举例
-mtime n 表示在n天之前的【一天之内】被修改过内容的文件
-mtime +n 列出在n天之前(不包含n天本身)被修改过内容的文件
-mtime -n 列出在n天之内(含n天本身)被修改过内容的文件
-newer file file为一个存在的文件,列出比file还新的文件
find / -mtime 0
//0代表目前的时间,这里-mtime 0表示从现在开始的24小时前
找出了在/etc
中比/etc/passwd
新的文件
2. 与使用者或用户组名称有关的参数
-uid n n表示使用者账号ID,即UID,UID记录在/etc/passwd中
-gid n n表示用户名称的ID,即GID,GID记录在/etc/passwd
-user name name为使用者账号名称,比如yzq
-group name name为用户组名称,比如users
-nouser 查找文件的拥有者不在/etc/passwd中
-nogroup 查找文件的拥有用户组不存在在/etc/group的文件
自行安装软件时这个软件属性中可能没有文件拥有者,这时候就用nouser或nogroup
3. 与文件权限及名称有关的参数
-name filename 查找文件名称为filename的文件
-size [+-]SIZE 查找比SIZE还大(小)的文件。SIZE的单位有
c 表示Bytes k 表示1KB 要找比50KB大的文件,使用【-size +50k】
-type TYPE 查找文件的类型为TYPE,类型主要有:一般正规文件(f),设备文件(b、c),目录文件(d),链接文件(l),socket(s),FIFO(p)等
-perm mode 查找文件权限等于mode的文件,这个mode可以当作chmod里面那个属性值
-perm -mode 查找文件囊括mode的文件,比如查找-rwxr--r--(744)的文件,也会列出-rwxr-xr-x(755)的文件,因为-rwxr-xr-x囊括了-rwxr--r--
-perm /mode 查找包含任一mode的权限的文件,比如查找-rwxr-xr-x,也会把-rw-------列出来,因为它有-rw.....属性
找文件名为passwd的文件
找到/run目录下的socket文件
用/6000找出/usr/bin
和/usr/sbin
下有SUID(4)和SGID(2)两个权限的文件
4. 额外可进行的操作
-exec command command为其他命令,-exec后面接额外的命令来处理查找到的结果
-print 将结果打印到屏幕上(默认操作)
在上面的示例中:
{}代表是由find找到的内容,find的结果会被放置到{}中
-exec一直到;是关键词,代表find额外操作开始(-exec)到结束(\;
),这中间的就是find命令内的额外操作,本例中额外操作是【ls -l {}】
因为;在bash环境中有特殊意义,所以这里\是用来转义的
还可以利用通配符查找文件名