Linux:查询范例的命令type

饭宝  论坛元老 | 2024-6-25 01:07:40 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1784|帖子 1784|积分 5352

相干阅读
Linux
https://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


        type命令是Linux中一个查询范例的命令,它可以查询name是alias别名、keyword关键字、function函数名、builtin内建命令名(这很有用)或是file文件名(这个文件必要是可执行状态)。
        下面是该命令的语法。
  1. 用法
  2. type [-aftp] [name...]
  3. 选项
  4. Without options 指示每个名称被解释为什么类型,显示第一个被搜索到的类型
  5. -t 如果名称是别名(alias)、shell关键字(keyword)、函数名(function)、内建命令名(builtin)或磁盘文件名(file),则打印字符串为其中之一,显示第一个被搜索到的类型
  6. -p 如果第一个搜索到类型是file,则显示其路径,这意味着如果使用-t name时搜索到的不是file,则不会显示
  7. -P 强制在PATH进行搜索,即使使用-t name时显示的不是file
  8. -a 以上所有选项描述中的“第一个”变为“全部”
复制代码
        type命令可以根据name举行搜索,这个name可以是以绝对路径(/开头)、相对路径(./开头)大概一个纯名字(没有/或./开头)的形式给出,即下面三种形式都可以接受,如下例所示。
        本文随后的所有实验是在ReadHat 7操作系统下举行的。 
  1. [***@EDA bin]$ type /usr/bin/ls ./ls ls   #注意当前工作文件夹
  2. /usr/bin/ls is /usr/bin/ls
  3. ./ls is ./ls
  4. ls is aliased to `ls --color=auto'  #这体现了搜索顺序中别名(alias)大于文件名(file)
复制代码
        可以看到在上面的例子中,使用纯名字ls搜索的结果表现为一个别名(alias),这就体现了type命令的搜索序次。
        1、搜索name是否为别名(如name使用绝对路径或相对路径则不可能搜索到,由于/不能存在于alias的名字中)。
        2、搜索name是否为Shell关键字。
        3、搜索name是否为函数名(它在内建命令前,由于一个函数优先于同名内建命令)。
        4、搜索name是否为一个内建命令,如history之类的内建命令是无法被whereis都搜索到的(留意,某些内建命令可能会提供可执行的文件,比如echo、alias等)。
        5、搜索name是否为一个文件(这个文件必要是可执行状态),如提供的是纯名字,则会在$PATH的路径内搜索;否则按照name给出的路径搜索。可以留意的是,type命令表现的第一个文件搜索结果,也就是使用纯名字(不使用绝对路径和相对路径)时Bash在$PATH中搜索到的第一个搜索结到并执行的命令。
​        下面使用-t选项,打印搜索结果的范例名。
  1. ​[***@EDA bin]$ type -t /usr/bin/ls ./ls ls   #注意当前工作文件夹
  2. file
  3. file
  4. alias
复制代码
        下面使用了-p选项,但由于纯名字ls搜索到的第一个结果是别名(alias),所以没有结果。
  1. ​[***@EDA bin]$ type -p ls   
  2. (nothing output)
  3. ​[***@EDA bin]$ type -p ./ls   #注意当前工作文件夹
  4. ./ls
  5. ​[***@EDA bin]$ type -p /usr/bin/ls   
  6. /usr/bin/ls
复制代码
        下面的例子展示了使用-a选项和纯名字ls表现搜索到的所有结果,从表现的序次也可以看出,在搜索的序次中,别名(alias)优先于文件名(file)。
  1. [zhangchen@EDA bin]$ type -a ls
  2. ls is aliased to `ls --color=auto'
  3. ls is /usr/bin/ls
  4. ls is /bin/ls
  5. [zhangchen@EDA bin]$ type -at ls
  6. alias
  7. file
  8. file
复制代码
        实在,上面说到的type的搜索序次,也是一个命令剖析和执行序次:一条命令在剖析时首先会经历别名(alias)替换,随后检查是否为关键字,然后检查命令名是否是一个函数、再检查是否是一个内建命令,最后才到$PATH界说的路径去搜索(如果是使用纯名字)。
        下面我们用系统内建命令cd做一个测试,首先创建一个叫cd的别名,然后创建一个叫cd的函数,最后使用-a选项和纯名字cd表现所有搜索结果(下例没有展示关键字的搜索环境)。
  1. ​[***@EDA bin]$ type -a cd
  2. cd is a shell builtin #第一个搜索到
  3. cd is /usr/bin/cd     #注意,即使内建命令,$PATH中也可搜索到cd
  4. cd is /bin/cd
  5. ​[***@EDA bin]$ [zhangchen@EDA ~]$ function cd() {  #创建一个函数
  6. > echo 111
  7. > }
  8. ​[***@EDA bin]$ cd   #此时cd会优先被当做函数名而不是内建命令名
  9. 111
  10. ​[***@EDA bin]$ type -a cd
  11. cd is a function    #第一个搜索到
  12. cd ()
  13. {
  14.     echo 111
  15. }
  16. cd is a shell builtin
  17. cd is /usr/bin/cd
  18. cd is /bin/cd
  19. ​[***@EDA bin]$ alias cd='echo 222' #创建一个别名
  20. ​[***@EDA bin]$ cd   #此时cd会首先被当做别名(alias)展开,然后执行echo命令而不是直接作为函数名
  21. 222
  22. ​[***@EDA bin]$ type -a cd
  23. cd is aliased to `echo 222' #第一个搜索到
  24. cd is a function   
  25. cd ()
  26. {
  27.     echo 111
  28. }
  29. cd is a shell builtin
  30. cd is /usr/bin/cd
  31. cd is /bin/cd
  32. ​[***@EDA bin]$ type -a alias
  33. alias is a shell builtin #第一个搜索到
  34. alias is /usr/bin/alias  #注意,即使内建命令,$PATH中也可搜索到alias
  35. alias is /bin/alias
  36. ​[***@EDA bin]$ type -a history
  37. history is a shell builtin #不是所有内建命令,$PATH中都可搜索到
复制代码
​        通过本文的学习,我们知道了type命令可以很方便表现当你使用一个名字时,Bash执行的究竟是别名替换、关键字、函数、内建命令还是某个可执行文件。






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表