linux下有很多查找命令, 如which, whatis, whereis, find, locate, grep
看视频每一个都看了, 听说find与grep比较有用, 那就说说这两个吧:
关于find:
格式:
find 搜索路径 关键字
如: find /etc -name inittab (在/etc目录下查找inittab文件)
如果我想找/etc下所有in开头的所有文件, 要怎么找呢?
用“*”吧, 它能匹配所有字符:
可以这样找: find /etc -name in*
不过, 如果我相找 /etc 下in开头的, 只有五个字符的文件呢?
用“?”吧, 它能匹配一个字符:
可以这样:find /etc -name in???
find 可以加参数, 这里说说常用的几个:
-name 文件名 (上面的例子)
-perm 权限 (如: find / -perm 654 查找/下权限为654的所有文件与目录)
-user 用户名 (如: find /etc -user root 查找/etc下所有者为root的文件)
-nouser 查找系统中不属于任何用户的文件: find / -nouser
-size 文件大小
对于上面的文件大小, 单位应为数据块, 而linux下, 默认的一个数据块为512字节, 即0.5KB
比如, 我们要查找在/home下大于100M的文件, 可以这样查找:
首先, 100M = 102400KB = 102400 * 2 个数据块, 即204800数据块, 即100M = 204800block
所以: find /home -size +204800
+ 大于
- 小于
什么也不写, 就相当于等于了, 不过, 一般都不会这么写, 一般不是查找大于, 就是小于, 再就是大于多少, 小于多少。
在这里, 如果要我们查找大于100M而小于300M的文件呢, 要怎么查找呢?
关于 - a, - o这两个参数:
-a (and, 逻辑与)
-o (or, 逻辑或)
有了这两个参数, 那要找出/home下大于100M而小于300M的文件, 这样找就行了:
find /home -size +204800 -a -size -614400
如果我们要在/etc目录下找出inittab 文件, 同时再将它用ls -l 列出来, 那要用怎么样的查找方式呢?
-exec 指令
例:
find /etc -name inittab -exec ls -l {} \;
对于上面这条命令, {} \ ; 都是固定的格式。
{} 大括号其实代表find的查找结果, 这个结果交给-exec 所指定的指令去执行
\ 代表了转义字符
; 代表结果
比如, 如果有人在/home下创建了一些奇怪的文件名, 我们用rm无法删除, 那要怎么删除呢?(奇怪的名字如"a b ", "--ab"等)
首先, 我们用ls -i 来显示文件对应的inumber(i节点):
如ls -il
2390711 -rw-r--r-- 1 root root 0 Dec 28 14:16 a b
2390708 -rw-r--r-- 1 root root 0 Dec 27 14:01 abc
再用find 加-exec参数配合来删除:
find /home -inum 2390711 -exec rm -f {} \;
这样, 奇怪名字的文件就删除了。
-inum 参数后面加 i 节点, 查找指定 i 节点的文件
find / -inum 11 (在根目录下查找 i 节点为11的文件)
关于grep:
格式为: grep 关键字 查找位置
对于grep , 我只记一个参数: - i (忽略大小写)
如:
grep root /etc/shadow
或
grep -i ABcd* /home (查找/home下abcd开头的所有文件, 忽略大小写)