Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep
原创
©著作权归作者所有:来自51CTO博客作者董哥的黑板报的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、which
- 功能:脚本文件的查找、查找执行文件
- 注意:which命令是根据PATH这个环境变量所规范的路径去查找执行文件的文件名
- -a:将所有由PATH目录中可以找到的命令均列出来,而不止第一个被找到的命令名称
演示案例
演示案例
- 查找之后显示没有,原因:因为which是在PATH所在的环境变量中查找,history是bash内置的命令,所以查不到
二、whereis
- 功能:查找一个命令的二进制、源代码和手册页文件
- 特点:
- whereis是在某些特定的目录下查找,查找速度较快
- whereis显示的内容包含:/bin/sbin下面的执行文件,该可执行文件的头文件、以及/usr/share/man下面的man page文件
whereis [options] [-BMS directory... -f] name...
- -l:可以列出whereis会去查询的几个主要目录(这个属性似乎已经不再使用)
- -b:只找二进制(binary)格式的文件
- -s:只找source源文件
- -m:只找在说明文件manual路径下的文件
- -u:查找不在上述3个项目当中的其它特殊文件
演示案例
演示案例
- 将passwd可执行程序的所有信息(可执行文件路径、源文件路径、man page路径)都显示出来
三、locate
- 重点:locate是根据输入的部分文件/目录名称进行查找,所有相关/包含输入名称文件/目录都会被列出来
- locate是利用已建立的/var/lib/mlocate数据库来查找文件名,所以查找速度较快
locate [OPTION]... PATTERN...
- -i:忽略大小写的差异
- -c:计算找到的文件数量
- -l:仅输出几行的意思,后面跟数字
- -S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
- -r:后面可接正则表达式的显示方式
演示案例
- 列出locate所使用的数据库文件之文件名与个数据数量:
附加:updatedb命令
- 功能:updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,去查找系统硬盘内的文件,并更新到/var/lib/mlocate内的数据库文件
- 使用场景:其中一种使用场景是:locate是根据数据库查找文件的,如果有些文件没有更新到数据库中,那么locate是不会查找到这些文件,所以可以使用updatedb来将数据更新到数据库
四、find
- find不常用,因为find直接去硬盘内查找文件,速度慢,而且影响硬盘的性能
- 但是find的功能很强大
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
时间选项
- -atime:查询关于读取时间的
- -ctime:查询关于状态时间的
- -mtime:查询关于修改时间的
- 上面三者的功能都是相同的,只是查找的时间内容不一样。下面以-mtime为例,n为数字
-mtime n :代表n天之前的[一天之内]被修改过内容的文件
-mtime +n :代表n天之前(不含n天本身)被修改过内容的文件
-mtime -n :代表n天之内(包含n天本身)被修改过内容的文件
# 如果n为0,代表目前的时间
演示案例
- 查找现在开始到24小时前之间的:find / -mtime 0
- 查找3天前的那一天24小时内的:find / -mitme 3
- +3代表大于等于4天前的文件:find -mtime +3
- -3代表小于等于3天内的文件:find -mtime -3
- 3代表3-4那一天内的文件:find -mtime 3
时间选项
find /mnt ‐cmin +10 # 查找/mnt中十分钟以上修改的
find /mnt ‐cmin ‐10 # 查找/mnt中十分钟以内修改的
find /mnt ‐ctime 10 # 查找/mnt中十天左右修改的
与使用者或用户名有关的参数
- -uid n:n为拥有者的账号ID(即UID,是记录在/etc/passwd里面与账号名称对应的数字)
- -gid n:n为用户组名称的ID(即GID,是记录在/etc/group里面与用户组名称对应的数字)
- -user name:查找拥有者名称为name的文件
- -group name:查找用户组名称为name的文件
- -nouser:查找文件中的拥有者不在/etc/passwd中的文件
- -nogroup:查找文件中的用户组不在/etc/group中的文件
- -nouser、-nogroup这两个选项常用于:查找系统中某个账号删除了但是还存放了很多残留文件。或者当你自行安装软件、下载文件时,该软件、文件的属性当中并没有文件拥有者
演示案例
- 查找/home下属于dongshao拥有者的文件:
find /home -user dongshao
与文件权限、名称有关的参数
- -name filename:查找文件名称为filename的文件
- -size [+-]SIZE:查找比SIZE大(+)或者小(-)的文件。SIZE的规格有:c代表Bytes,k代表1KB,M代表1MB
- -type TYPE:查找文件类型为TYPE的,TYPE的类型有:一般文件(f),设备文件(b,c),目录(d),链接文件(l),socket(s),FIFO(p)等
- -perm mode:查找文件权限恰好等于mode的文件,mode类似于chmod的属性值
- -perm -mode:查找文件权限囊括mode的文件。例如:-perm -0744(-rwxr--r--),那么-rwsr-xr-x也会被列出来,因为-rwsr-xr-x囊括了0744在内
- -perm /mode:查找文件权限包括任一mode的文件。例如:-perm /755(-rwxr-xr-x),那么-rw-------也会被列出来哦,因为-rw-------包括rw在内
演示案例
其他操作选项
- -exec command:command为其他命令,可以再接额外的命令来处理查找到的结果
- -print:将结果打印到屏幕上,find的默认属性
- -newer file:file为一个存在的文件,列出比file还要新的文件
演示案例
- 查找有没有比/etc目录下比passwd文件新的:
sudo find /etc -newer /etc/passwd
一个重要的例子
find /usr/bin -perm /7000 -exec ls -l {} \;
- {}代表将find /usr/bin -perm /7000查找的内容放置到{}中让ls -l命令处理
- -exec \都是关键词,两个放在一起分别代表开始(-exec)、结束(\),表示一个区间
五、grep
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] -e PATTERN ... [FILE...]
grep [OPTIONS] -f FILE ... [FILE...]
- -a:将二进制文件以文本文件的形式查看
- -c:计算出找到的'查找字符'的个数,总共有多少行(是行数,不是个数)
- -i:忽略文件中的大小写
- -v:反向选择,即输出没有‘查找字符’的那一行
- --color=auto:可以将找到的关键字部分加上颜色显示,这是默认的参数
- -A:后面接数字。代表除了有查找字符的那一行外,前面多少行也显示出来(after)
- -B:后面接数字。代表除了有查找字符的那一行外,后面多少行也显示出来(before)
- -r:递归查找,用于目录中的递归查找
- -n:将查找到的内容加上行号
- -w:全字匹配,只查找指定的字符串
- -C n:打印匹配行的前后n行
演示案例
- 例如:反向选择,把demo.txt文件中不含有'the'的行显示出来
- 例如:假设现在有一个文件1.txt,在1.txt中查找“abc”,并加上行号
- 例如:递归在当前路径的所有目录文件中查找带有“abc”内容的信息
- 例如:在1.txt中全字匹配“abc”,并显示前后2行的内容
演示案例(在管道中的使用)
- 但是最后一行是grep本身的命令,我们不想要,那么可以使用-v参数来取消显示带有“grep”的那一行
ps -ef | grep sshd | grep -v "grep"
- 例如:使用ls查看/etc目录下的内容,然后使用grep筛选出以'l'开头的行,即查看链接文件(因为文件权限前面为'l'代表这个文件为链接文件)
- 我是小董,V公众点击"笔记白嫖"解锁更多【Linux入门基础】资料内容。