02---命令与文件查找命令:which、whereis、locate、find、grep

一、which

    功能:脚本文件的查找、查找执行文件
    注意:which命令是根据PATH这个环境变量所规范的路径去查找执行文件的文件名

 

     格式:

which [-a] filename ...

    相关选项:
        -a:将所有由PATH目录中可以找到的命令均列出来,而不止第一个被找到的命令名称

    演示案例

        查找pwd命令所在路径:

    which pwd

    演示案例

        查找history这个命令所在路径:

    which history

        查找之后显示没有,原因:因为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个项目当中的其它特殊文件

    演示案例

        查找ifconfig在何处:

    whereis ifconfig

 

 
    演示案例



        将passwd可执行程序的所有信息(可执行文件路径、源文件路径、man page路径)都显示出来

    whereis passwd

        只列出程序的可执行文件路径

    whereis -b passwd

        只列出程序的源文件

    whereis -s passwd

        只查找man page路径

    whereis -m passwd

三、locate

    功能:根据文件名进行查找
    特点:
        重点:locate是根据输入的部分文件/目录名称进行查找,所有相关/包含输入名称文件/目录都会被列出来
        locate是利用已建立的/var/lib/mlocate数据库来查找文件名,所以查找速度较快
    格式:

locate [OPTION]... PATTERN...

    相关选项:
        -i:忽略大小写的差异
        -c:计算找到的文件数量
        -l:仅输出几行的意思,后面跟数字
        -S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
        -r:后面可接正则表达式的显示方式

    演示案例

        输出5行:

    loacte -l 5 passwd

        输出查找到的包含passwd名称的文件数量:

    locate -c passwd

        列出locate所使用的数据库文件之文件名与个数据数量:

    locate -S

    附加: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

    时间选项

        -cmin n:查找指定n分钟内的文件
        例如:

        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

        查找系统中不属于任何人的文件:

    find / -nouser

    与文件权限、名称有关的参数

        -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在内

    演示案例

        找出系统中,文件大小大于100MB的文件:

    find ~/ -size +100M

 

         查找/目录下文件类型为soceket的文件:

    find / -type s

        查找文件属性囊括---s--s--t在内的文件:

    find / -perm -7000

    其他操作选项

        -exec command:command为其他命令,可以再接额外的命令来处理查找到的结果
        -print:将结果打印到屏幕上,find的默认属性
        -newer file:file为一个存在的文件,列出比file还要新的文件

    演示案例

        查找有没有比/etc目录下比passwd文件新的:

    sudo find /etc -newer /etc/passwd

    一个重要的例子

        找出符合条件的并用ls -l列出来:

    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行
    附加:
        在管道中的使用参阅:https://blog.csdn.net/qq_41453285/article/details/88066090
        结合Linux通配符、正则表达式的使用参阅:https://blog.csdn.net/qq_41453285/article/details/88081134

    演示案例

        反向选择,把不含有'root'的行显示出来

 

         使用ls查看/etc目录时,每一行以'l'开头的行,即查看链接文件(因为文件权限前面为'l'代表这个文件为连接文件)

        承上,查看有几个链接文件,再加上wc

 

     演示案例

        查找与sshd有关的进程

    ps -ef | grep sshd

        但是最后一行是grep本身的命令,我们不想要,那么可以使用-v参数来取消显示带有“grep”的那一行

 

     ps -ef | grep sshd | grep -v "grep"

 

     演示案例

        假设现在有一个文件1.txt,内容如下

 

        在1.txt中查找“abc”,并加上行号

    grep -n "abc" 1.txt

 

         递归在当前路径的所有目录文件中查找带有“abc”内容的信息

    grep -rn "abc" * | more

 

         在1.txt中全字匹配“abc”

    grep -nw "abc" 1.txt

 

         在1.txt中全字匹配“abc”,并显示前后2行的内容

    演示案例(在管道中的使用)

        案例一:查找含有'boot'的行

 

         案例二:取出不包含'boot'的行

 

         案例三:取出'boot'的行并分割取出第一部分

 

posted @ 2020-07-12 21:46  武装小灰灰  阅读(333)  评论(0编辑  收藏  举报