|
|
51CTO旗下网站
|
|
移动端

1.5.2 Linux下命令分类

《跟老韩学Linux运维》第1章Linux应用运维指令概述,本书完全按照实际的Linux应用运维中的工作命令来讲解并加以实践,力求让读者看完此书后,能掌握运维工作中使用频率比较高的实战类型的运维指令。本节为大家介绍Linux下命令分类。

作者:韩艳威来源:人民邮电出版社|2018-11-10 17:16

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

1.5.2  Linux下命令分类

1.Linux命令类型分类

Linux的命令可以分为内部命令和外部命令。内部命令在系统启动时调入内存,是常驻内存的,所以执行效率高;而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。

内部命令:Shell内部命令是指bash(或其他版本)工具集中的命令。一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管它们行为大体相仿。内部命令比系统论命令的执行效率更高,外部命令执行时往往需要fork一个子进程,而内部命令一般不用。

type命令用来显示指定命令的类型,命令的类型可以是如下之一。

alias别名。

keyword关键字,Shell保留字。

function函数,Shell函数。

builtin内建命令,Shell内建命令。

file文件,磁盘文件,外部命令。

unfound没有找到。

type命令是Linux系统的一种自省机制,知道了是哪种类型,我们就可以针对性地获取帮助。比如内建命令可以用help命令来获取帮助,外部命令用man或者info来获取帮助。

type命令的基本使用方式就是直接跟上命令名字。

type命令常用参数如表1-2所示。

表1-2 type命令常用参数

【实例1-25】判断是否为内部命令

  1. [root@linux_command ~]# type type  
  2. type is a shell builtin  
  3. [root@linux_command ~]# type -t type  
  4. builtin  
  5. [root@linux_command ~]# type cd  
  6. cd is a shell builtin  
  7. [root@linux_command ~]# type -t cd  
  8. builtin 

如上代码所示,命令执行结果返回builtin,是系统内置命令。

内部命令用户输入时系统调用的速率快,不是内置命令,系统将会读取环境变量文件.bash_profile、/etc/profile去找PATH路径。

Linux中所有的内置命令,可以通过enable命令来查看系统中所有的内置命令。

【实例1-26】查看所有内部命令

  1. [root@linux_command ~]# enable  
  2. enable .  
  3. enable :  
  4. enable [  
  5. enable alias  
  6. enable bg  
  7. enable bind  
  8. enable break  
  9. enable builtin  
  10. enable caller  
  11. enable cd  
  12. enable command  
  13. enable compgen  
  14. enable complete  
  15. enable compopt  
  16. enable continue  
  17. enable declare  
  18. enable dirs  
  19. enable disown  
  20. enable echo  
  21. enable enable  
  22. enable eval  
  23. enable exec  
  24. enable exit  
  25. enable export  
  26. enable false  
  27. enable fc  
  28. enable fg  
  29. enable getopts  
  30. enable hash  
  31. enable help  
  32. enable history  
  33. enable jobs  
  34. enable kill  
  35. enable let  
  36. enable local  
  37. enable logout  
  38. enable mapfile  
  39. enable popd  
  40. enable printf  
  41. enable pushd  
  42. enable pwd  
  43. enable read  
  44. enable readarray  
  45. enable readonly  
  46. enable return  
  47. enable set  
  48. enable shift  
  49. enable shopt  
  50. enable source  
  51. enable suspend  
  52. enable test  
  53. enable times  
  54. enable trap  
  55. enable true  
  56. enable type  
  57. enable typeset  
  58. enable ulimit  
  59. enable umask  
  60. enable unalias  
  61. enable unset  
  62. enable wait  
  63. [root@linux_command ~]# enable |wc -l  
  64. 61 

如上代码所示,当前操作系统中共有61个内部命令。

【实例1-27】判断是否为外部命令

  1. [root@linux_command ~]# whereis nginx  
  2. nginx: /usr/local/nginx  
  3. [root@linux_command ~]# type -t /usr/local/nginx/sbin/nginx   
  4. file 

如上代码所示,显示结果为file,代表nginx是外部命令。

Linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。***次执行命令shell,解释器默认会从PATH路径下寻找该命令的路径;当第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找。输入hash可以查看hash表的内容,hash -p a b添加一项a改名为b,执行b时实际会执行a命令。

再提一下命令的调用,有些历史命令使用过后,会存在hash表中,当你再次输入该命令时,它的调用会是这样一个过程:hash->内置命令->PATH。

【实例1-28】hash表不存放内部命令

  1. [root@linux_command ~]# pwd  
  2. /root  
  3. [root@linux_command ~]# ls  
  4. anaconda-ks.cfg  install.log  install.log.syslog  
  5. [root@linux_command ~]# hash –l  
  6. builtin hash -p /bin/cat cat  
  7. builtin hash -p /bin/ls ls  
  8. builtin hash -p /usr/bin/whereis whereis 

从上述代码返回结果中可以看到,hash表不存放系统内置命令。

2.Linux命令执行优先级

Linux命令执行的优先级为:

  1. alias > 内部命令> hash > PATH  

当然,如果PATH中也找不到相关命令路径,那么Linux终端就会返回类似“command not found”的错误提示。

3.内置命令和外部命令总结

在RHEL6操作系统中,which指令只在PATH变量中搜索命令的绝对路径,内置命令是内置在bash中的,找不到命令的绝对路径。RHEL7操作系统中优化了这一特性,内置命令在PAHT环境中能找出命令的绝对路径。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

Linux标准教程

本书以Linux Redhat 9.0中文版为基础编写,从易用性和实用性角度出发主要介绍Linux Redhat 9.0中文版的应用知识,通过本书的学习,相信初中...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客