目录
【文件搜索命令:find】
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法:find [搜索范围] [匹配条件]
功能描述:文件搜索
使用建议:不要再服务器高峰时期使用find命令;搜索时范围越小越好。
【根据文件名搜索 -name】
$ find /etc -name init (在目录/etc中查找文件init)
扩展:
① -iname 不区分大小写
② 如果是全盘搜索就是:find / -name [文件名] (不建议)
注意:这样是精确搜索,如果是initabc 就不会被搜索到,如果需要模糊搜索,就是 *[关键词]*
分析扩展1: 查找以init开头的: init*
分析扩展2:查找以init开头,后面紧跟3个字符的: init???
原理:* 匹配多个字符,? 匹配单个字符
分析扩展3:默认搜索是区分大小写的,如果要忽略大小写,使用 -iname
【根据文件大小搜索 -size】
$ find / -size +204800 (在根目录下查找大于100MB的文件)
+n 大于 -n 小于 n 等于
备注:Linux中,文件大小的单位是:1数据块 = 512字节 = 0.5KB,因此 100MB = 102400KB = 204800 块
【根据所有者查找 -user】
$ find /home -user zhangsan (在home目录下查找所有者为zhangsan的文件)
【根据所属组查找 -group】
案例略
【根据时间属性查找 -amin/-cmin/-mmin】
$ find /etc -cmin -5 (在/etc下查找5分钟内被修改过属性的文件和目录)
+n 大于 -n 小于 n 等于(单位:分钟)
-amin 访问时间 access
-cmin 文件属性 change
-mmin 文件内容 modify
案例触发情景:想知道某个用户30分钟内在/etc 目录下 改动过哪些文件:
【根据文件类型查找 -type 】
f 文件 d 目录 l 软链接文件
例如:在/home目录下 查找所有的目录(d) 、所有文件(f);/tmp 目录下查找所有软链接(l)
find /home/ -type d
find /home/ -type f
find /tmp/ -type l
【根据i节点查找 -inum 】
说明:用这个方法也可以查找任何一个文件的硬连接(因为硬连接不能跨分区),因为某个文件和它的硬连接的i节点是相同的。
【多条件查找】
在/etc下查找大于80MB小于100MB的文件
$ find /etc -size +163840 -a -size -204800
-a 两个条件同时满足 (and)
-o 两个条件满足任意一个即可 (or)
案例:查找 /etc 目录下 name为init 并且是目录的:
【查找文件并执行某项操作(例如:显示其详细信息)】
记住固定格式:-exec 命令 {} \; 或 -ok 命令 {} \;
$ find /etc -name inittab -exec ls -l {} \; (在/etc下查找inittab文件并显示其详细信息)
当然,也可以对查找到的文件进行删除:
find /tmp/ -name 1.txt -exec rm {} \;
当然,也可以多条件查询后,对其执行某些操作(显示详情 ls -l):
这里。-ok 虽然和 -exec 类似,但也有区别,-ok 执行会有提示,一般在删除(rm) 时最好用 -ok
【其他文件搜索命令】
在文件资料库中查找文件:locate
命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate 文件名
功能描述:在文件资料库中查找文件
范例:$ locate inittab
备注:如果出现 locate:can not stat() 错误,执行 updatedb 命令即可!
这种方式执行效率较快,因为是直接找资料库(类似于Windows下的everything 工具)。
但是看下面,明明新创建了一个文件但是locate却找不到,但是用find却能找到!
原因就是,创建了一个新文件,却没有更新资料库。这是需要使用上面说的 updatedb 命令,然后就可以找到了。
需要说明的是,保存在 /tmp 目录中的文件用locate 是找不到的:
默认情况下,locate 是区分大小写的,如果想要忽略大小写,使用 locate -i [文件名]
搜索命令所在目录及别名信息:which
命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which 命令
功能描述:搜索命令所在目录及别名信息
范例:$ which ls
alias : 别名
rm 本身 是 /bin/rm 执行删除,本身是没有提示的,只不过 rm -i 是加了提示功能,然后给了rm 这个 “符号”
例如使用 /bin/rm [文件] 是不会提示的:
搜索命令所在目录及帮助文档路径:whereis
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径
范例:$ whereis ls
在文件中搜寻字串匹配的行并输出:grep
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -iv [指定字串] [文件]
功能描述:在文件中搜寻字串匹配的行并输出
-i 不区分大小写
-v 排除指定字串
范例:# grep mysql /root/install.log
如果要忽略大小写,使用 grep -i ...
如果要排除指定字符,使用 grep -v ... (注意:本例中^# 表示 以 # 开头,表示只查看某个配置文件中除去注释的内容(行) )