• 21.云计算&大数据_linux基础知识(20)什么是linux_Linux 命令与文件的搜寻


    • which (寻找『运行档』)
    [root@www ~]# which [-a] command
    选项或参数:
    -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
    
    范例一:分别用root与一般帐号搜寻 ifconfig 这个命令的完整档名
    [root@www ~]# which ifconfig
    /sbin/ifconfig            <==用 root 可以找到正确的运行档名喔!
    [root@www ~]# su - vbird <==切换身份成为 vbird 去!
    [vbird@www ~]$ which ifconfig
    /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin
    :/home/vbird/bin)         <==见鬼了!竟然一般身份帐号找不到!
    # 因为 which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,
    # 不同的 PATH 配置内容所找到的命令当然不一样啦!因为 /sbin 不在 vbird 的 
    # PATH 中,找不到也是理所当然的啊!了乎?
    [vbird@www ~]$ exit      <==记得将身份切换回原本的 root
    
    范例二:用 which 去找出 which 的档名为何?
    [root@www ~]# which which
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot '
            /usr/bin/which
    # 竟然会有两个 which ,其中一个是 alias 这玩意儿呢!那是啥?
    # 那就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令啦!
    # 更多的数据我们会在 bash 章节中再来谈的!
    
    范例三:请找出 cd 这个命令的完整档名
    [root@www ~]# which cd
    /usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin
    :/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
    # 瞎密?怎么可能没有 cd ,我明明就能够用 root 运行 cd 的啊!
    

    这个命令是根据『PATH』这个环境变量所规范的路径,去搜寻『运行档』的档名~ 所以,重点是找出『运行档』而已!且 which 后面接的是『完整档名』喔!若加上 -a 选项,则可以列出所有的可以找到的同名运行档,而非仅显示第一个而已!

    • hereis (寻找特定文件)
    [root@www ~]# whereis [-bmsu] 文件或目录名
    选项与参数:
    -b    :只找 binary 格式的文件
    -m    :只找在说明档 manual 路径下的文件
    -s    :只找 source 来源文件
    -u    :搜寻不在上述三个项目当中的其他特殊文件
    
    范例一:请用不同的身份找出 ifconfig 这个档名
    [root@www ~]# whereis ifconfig 
    ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [root@www ~]# su - vbird        <==切换身份成为 vbird
    [vbird@www ~]$ whereis ifconfig <==找到同样的结果喔!
    ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [vbird@www ~]$ exit              <==回归身份成为 root 去!
    # 注意看,明明 which 一般使用者找不到的 ifconfig 却可以让 whereis 找到!
    # 这是因为系统真的有 ifconfig 这个『文件』,但是使用者的 PATH 并没有加入 /sbin
    # 所以,未来你找不到某些命令时,先用文件搜寻命令找找看再说!
    
    范例二:只找出跟 passwd 有关的『说明文件』档名(man page)
    [root@www ~]# whereis -m passwd
    passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
    

    等一下我们会提到 find 这个搜寻命令, find 是很强大的搜寻命令,但时间花用的很大! (因为 find 是直接搜寻硬盘,为如果你的硬盘比较老旧的话,嘿嘿!有的等!) 这个时候 whereis 就相当的好用了!另外, whereis 可以加入选项来找寻相关的数据, 例如如果你是要找可运行档( binary )那么加上 -b 就可以啦! 如果不加任何选项的话,那么就将所有的数据列出来罗!

    • locate
    [root@www ~]# locate [-ir] keyword
    选项与参数:
    -i  :忽略大小写的差异;
    -r  :后面可接正规表示法的显示方式
    
    范例一:找出系统中所有与 passwd 相关的档名
    [root@www ~]# locate passwd
    /etc/passwd
    /etc/passwd-
    /etc/news/passwd.nntp
    /etc/pam.d/passwd
    ....(底下省略)....
    

    这个 locate 的使用更简单,直接在后面输入『文件的部分名称』后,就能够得到结果。 举上面的例子来说,我输入 locate passwd ,那么在完整档名 (包含路径名称) 当中,只要有 passwd 在其中, 就会被显示出来的!这也是个很方便好用的命令,如果你忘记某个文件的完整档名时~~

    但是,这个东西还是有使用上的限制呦!为什么呢?你会发现使用 locate 来寻找数据的时候特别的快, 这是因为 locate 寻找的数据是由『已创建的数据库 /var/lib/mlocate/』 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,呵呵!当然是很快速罗!

    那么有什么限制呢?就是因为他是经由数据库来搜寻的,而数据库的创建默认是在每天运行一次 (每个 distribution 都不同,CentOS 5.x 是每天升级数据库一次!),所以当你新创建起来的文件, 却还在数据库升级之前搜寻该文件,那么 locate 会告诉你『找不到!』呵呵!因为必须要升级数据库呀!

    那能否手动升级数据库哪?当然可以啊!升级 locate 数据库的方法非常简单,直接输入『 updatedb 』就可以了! updatedb 命令会去读取 /etc/updatedb.conf 这个配置档的配置,然后再去硬盘里面进行搜寻档名的动作, 最后就升级整个数据库文件罗!因为 updatedb 会去搜寻硬盘,所以当你运行 updatedb 时,可能会等待数分钟的时间喔!

    • updatedb:根据 /etc/updatedb.conf 的配置去搜寻系统硬盘内的档名,并升级 /var/lib/mlocate 内的数据库文件;
    • locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字档名。
  • 相关阅读:
    python3.4 + pycharm 环境安装 + pycharm使用
    ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字
    re模块
    LeetCode Weekly Contest 12
    求解强连通分量
    几道题-找规律-记录并查找
    欧几里德算法
    树上二分
    几道题-博弈
    随便写一些东西-缩边
  • 原文地址:https://www.cnblogs.com/zhimahu/p/12051625.html
Copyright © 2020-2023  润新知