当前位置:首页 » 《随便一记》 » 正文

Linux:查询类型的命令type

20 人参与  2024年04月09日 09:15  分类 : 《随便一记》  评论

点击全文阅读


相关阅读

Linuxicon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


        type命令是Linux中一个查询类型的命令,它可以查询name是alias别名、keyword关键字、function函数名、builtin内建命令名(这很有用)或是file文件名(这个文件需要是可执行状态)。

        下面是该命令的语法。

用法type [-aftp] [name...]选项Without options 指示每个名称被解释为什么类型,显示第一个被搜索到的类型-t 如果名称是别名(alias)、shell关键字(keyword)、函数名(function)、内建命令名(builtin)或磁盘文件名(file),则打印字符串为其中之一,显示第一个被搜索到的类型-p 如果第一个搜索到类型是file,则显示其路径,这意味着如果使用-t name时搜索到的不是file,则不会显示-P 强制在PATH进行搜索,即使使用-t name时显示的不是file-a 以上所有选项描述中的“第一个”变为“全部”

        type命令可以根据name进行搜索,这个name可以是以绝对路径(/开头)、相对路径(./开头)或者一个纯名字(没有/或./开头)的形式给出,即下面三种形式都可以接受,如下例所示。

[***@EDA bin]$ type /usr/bin/ls ./ls ls   #注意当前工作文件夹/usr/bin/ls is /usr/bin/ls./ls is ./lsls is aliased to `ls --color=auto'  #这体现了搜索顺序中别名(alias)大于文件名(file)

        可以看到在上面的例子中,使用纯名字ls搜索的结果显示为一个别名(alias),这就体现了type命令的搜索顺序。

        1、搜索name是否为别名(如name使用绝对路径或相对路径则不可能搜索到,因为/不能存在于alias的名字中)。

        2、搜索name是否为Shell关键字。

        3、搜索name是否为函数名(它在内建命令前,因为一个函数优先于同名内建命令)。

        4、搜索name是否为一个内建命令,如echo之类的内建命令是无法被whereis都搜索到的(注意,即使搜索到了,它也只是一个为了兼容设计的脚本而不是真正的二进制可执行文件)。

        5、搜索name是否为一个文件(这个文件需要是可执行状态),如提供的是纯名字,则会在$PATH的路径内搜索;否则按照name给出的路径搜索。可以留意的是,type命令显示的第一个文件搜索结果,也就是使用纯名字(不使用绝对路径和相对路径)时Bash在$PATH中搜索到的第一个搜索结到并执行的命令。

​        下面使用-t选项,打印搜索结果的类型名。

​[***@EDA bin]$ type -t /usr/bin/ls ./ls ls   #注意当前工作文件夹filefilealias

        下面使用了-p选项,但由于纯名字ls搜索到的第一个结果是别名(alias),所以没有结果。

​[***@EDA bin]$ type -p ls   (nothing output)​[***@EDA bin]$ type -p ./ls   #注意当前工作文件夹./ls​[***@EDA bin]$ type -p /usr/bin/ls   /usr/bin/ls

        下面的例子展示了使用-a选项和纯名字ls显示搜索到的所有结果,从显示的顺序也可以看出,在搜索的顺序中,别名(alias)优先于文件名(file)。

[zhangchen@EDA bin]$ type -a lsls is aliased to `ls --color=auto'ls is /usr/bin/lsls is /bin/ls[zhangchen@EDA bin]$ type -at lsaliasfilefile

        其实,上面说到的type的搜索顺序,也是一个命令解析和执行顺序:一条命令在解析时首先会经历别名(alias)替换,随后检查是否为关键字,然后检查命令名是否是一个函数、再检查是否是一个内建命令,最后才到$PATH定义的路径去搜索(如果是使用纯名字)。

        下面我们用系统内建命令cd做一个测试,首先创建一个叫cd的别名,然后创建一个叫cd的函数,最后使用-a选项和纯名字cd显示所有搜索结果(下例没有展示关键字的搜索情况)。

​[***@EDA bin]$ type -a cdcd is a shell builtin #第一个搜索到cd is /usr/bin/cd     #注意:作为内建命令,$PATH中的cd并不是二进制文件,而值是一个可执行脚本cd is /bin/cd​[***@EDA bin]$ [zhangchen@EDA ~]$ function cd() {  #创建一个函数> echo 111> }​[***@EDA bin]$ cd   #此时cd会优先被当做函数名而不是内建命令名111​[***@EDA bin]$ type -a cdcd is a function    #第一个搜索到cd () {     echo 111}cd is a shell builtincd is /usr/bin/cdcd is /bin/cd​[***@EDA bin]$ alias cd='echo 222' #创建一个别名​[***@EDA bin]$ cd   #此时cd会首先被当做别名(alias)展开,然后执行echo命令而不是直接作为函数名222​[***@EDA bin]$ type -a cdcd is aliased to `echo 222' #第一个搜索到cd is a function   cd () {     echo 111}cd is a shell builtincd is /usr/bin/cdcd is /bin/cd

​        通过本文的学习,我们知道了type命令可以很方便显示当你使用一个名字时,Bash执行的究竟是别名替换、关键字、函数、内建命令还是某个可执行文件。


点击全文阅读


本文链接:http://zhangshiyu.com/post/92543.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1