1、which命令
which - shows the full path of (shell) commands.(显示(shell)命令的完整路径)
在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which [选项] [–] 程序名 […]
没有常用选项哦!
查找ls命令的位置
[root@localhost ~]# which ls
alias ls='ls --color=auto' //命令别名
/usr/bin/ls //ls命令的绝对路径
2、whereis命令
whereis - locate the binary, source, and manual page files for a command(查找命令的二进制、源代码和手册文件)
whereis [选项] [-BMS 目录… -f] 命令名…
选 项 | 作 用 |
---|---|
-b | 只查找二进制文件 |
-B | 只在设置的目录下查找二进制文件 |
-m | 只查找帮助手册文件 |
-M | 只在设置的目录下查找帮助手册文件 |
-s | 只查找原始代码文件 |
-S | 只在设置的目录下查找原始代码文件 |
-f | 不显示文件名前的路径名称 |
① 查找ls命令的二进制文件和帮助手册文件
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
//输出信息从左到右:命令名、bash路径、bash的man手册页路径
② 只查找ls命令的二进制文件
[root@localhost ~]# whereis -b ls
ls: /usr/bin/ls
3、locate命令
locate - find files by name(按名称查找文件)
查找速度快,模糊查找,依赖于事先构建好的索引库,但查找并不是实时的,以系统周期更新数据库为准,同时也可以手动更新数据库(updatedb)。
tips:locate需要安装的哦!使用命令:yum install mlocate。
locate [选项]… 模式…
选 项 | 作 用 |
---|---|
-b | 只匹配路径中的基名 |
-c | 统计出共有多少个符合条件的文件 |
① 更新数据库
[root@localhost ~]# updatedb
② 查找/etc/sysconfig/目录下所有以net开头的文件
[root@localhost ~]# locate /etc/sysconfig/net
/etc/sysconfig/netconsole
/etc/sysconfig/network
/etc/sysconfig/network-scripts
/etc/sysconfig/network-scripts/.ifcfg-ens33.swp
/etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts/ifcfg-lo
...
4、find命令
find - search for files in a directory hierarchy(在目录层次结构中搜索文件)
查找速度慢,实时精确查找,通过遍历指定路径下的文件系统层级结构完成查找。
find [起始查找路径] [选项(查找条件)] [ 处理动作 ]
起始查找路径:指定具体的搜索起始路径,默认为当前目录;
查找条件:指定查找的标准,大小、文件名、类型等,默认是指定路径下的所有文件;
处理动作:对符合查找条件的文件做出的操作,例如:cp、rm等,默认为输出到标准输出;
① 根据文件名查找(精确查找)
选 项 | 作 用 |
---|---|
-name | 根据文件名搜索 |
-iname | 根据文件名搜索,不区分大小写 |
-inode | 根据iNode节点号搜索 |
②根据文件从属关系查找
选 项 | 作 用 |
---|---|
-uid UID | 查找所有者是指定 ID 的文件 |
-gid GID | 查找属组是指定 ID 的文件 |
-user 用户名 | 查找所有者是指定用户的文件 |
-group 组名 | 查找属组是指定用户组的文件 |
-nouser | 查找没有所有者的文件 |
-nogroup | 查找没有属组的文件 |
③ 根据文件类型查找
-type TYPE
TYPE | 作 用 |
---|---|
f | 普通文件 |
d | 目录文件 |
l | 符号链接文件 |
b | 块设备文件 |
c | 字符设备文件 |
p | 管道文件 |
s | 套接字文件 |
④ 根据文件大小查找
-size [ + | - ] n 常用单位:k、M、G;
[ + |/ - ] n 的含义 | 作 用 |
---|---|
n | ( n–1 , n ] |
-n | [ 0 , n–1 ] |
+n | ( n , ∞ ) |
⑤ 根据修改时间查找
Ⅰ、以"天"为单位
选 项 | 作 用 |
---|---|
-atime [ + | - ] 天数 | 根据文件访问时间搜索 |
-mtime [ + | - ] 天数 | 根据文件修改时间搜索 |
-ctime [ + | - ] 天数 | 根据文件改变时间搜索 |
Ⅱ、以"分钟"为单位
选 项 | 作 用 |
---|---|
-amin [ + | - ] 分钟数 | 根据文件访问时间搜索 |
-mmin [ + | - ] 分钟数 | 根据文件修改时间搜索 |
-cmin [ + | - ] 分钟数 | 根据文件改变时间搜索 |
tips:改变时间,表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等。
※ [ + | - ] 时间 的含义比较难理解,下面重点解释一下:
[ + | - ] 时间 的含义 | 作 用 |
---|---|
-n | n天内修改的文件 |
n | n ~ n+1那天修改的文件 |
+n | n天之前修改的文件 |
⑥ 根据权限查找
-perm [ / | - ] mode
[ / | - ] mode 的含义 | 作 用 |
---|---|
mode | 精确匹配,查找文件权限刚好等于"权限模式"的文件 |
-mode | 查找文件权限全部包含"权限模式"的文件,即任何高于此权限的文件 |
/mode | 查找文件权限包含"权限模式"的任意一个权限的文件,即只要包含任意一个指定权限 |
⑦ 根据目录层级查找
选 项 | 作 用 |
---|---|
-depth | 从指定目录下最深层的子目录开始查找 |
-maxdepth levels | 设置查找范围的最大目录层级 |
-mindepth levels | 设置查找范围的最小目录层级 |
⑧ 逻辑运算符
选 项 | 作 用 |
---|---|
-a | 逻辑与(and) |
-o | 逻辑或(or) |
-not 或 ! | 逻辑非(not) |
动 作 | 作 用 |
---|---|
输出至标准输出,默认动作 | |
-ls | 输出文件的详细信息,相当于对查找到的文件执行"ls -l"命令 |
-delete | 删除查到的文件 |
-fls /PATH/TO/SOMEFILE | 把查找到的所有文件的长格式信息保存至指定文件中 |
-ok COMMAND {} \; | 对查找到的每个文件执行由COMMAND表示的命令,每次操作都由用户进行确认 |
-exec COMMAND {} \; | 对查找到的每个文件执行由COMMAND表示的命令,无需确认 |
tips:find传递查找到的文件路径至后面的命令时,是先查找出所有符合的文件路径,并一次性传递给后面的命令。但是有些命令不能接受过长的参数,此时命令执行会失败,可以使用这种方法规避此问题:find | xargs COMMAND
① 查找/var目录下属主不为root,且文件大小大于1K的文件;
[root@localhost /]# find /var ! -user root -a -size +1k -ls
② 查找系统中,没有属主或没有属组的文件,且最近5分钟被访问过;
[root@localhost /]# find / \( -nouser -o -nogroup \) -a -amin -5
③ 查找系统中所有用户均没有读写权限的文件,并且拷贝至/tmp目录;
[root@localhost ~]# find / ! -perm /666 -exec cp /tmp {} \;
④ 查找/etc目录下大于1M,且为普通文件或管道文件的所有文件,并且列出文件的所有详细信息及iNode节点号;
[root@localhost ~]# find /etc/ -size +1M -a \( -type f -o -type p \) | xargs ls -li {} /;