linux管道命令(在linux中管道分为2种类型)

Linux命令类型分类

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

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

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

alias 别名;

keyword 关键字,shell 保留字;

function 函数,shell 函数;

builtin 内建命令,shell 内建命令;

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

unfound 没有找到。

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

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

type命令常用参数如下:

-a 可以显示所有可能的类型,比如pwd是shell内建命令,也可以是外部命令;

-p 只返回外部命令的信息,相当于which命令;

-f 只返回shell函数的信息

-t 只返回指定类型的信息。

例子 — 判断是否为内部命令:

$ type typetype is a shell builtin$ type -t typebuiltin$ type cdcd is a shell builtintype -t cdbuiltin

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

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

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

$ enableenable .enable :enable [enable aliasenable bgenable bindenable breakenable builtinenable callerenable cdenable commandenable compgenenable completeenable compoptenable continueenable declareenable dirsenable disownenable echoenable enableenable evalenable execenable exit… 此处省略…$ enable |wc -l61

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

例子– 判断是否为外部命令:

$ whereis nginxnginx: /usr/local/nginx$ type -t /usr/local/nginx/sbin/nginxfile

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

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

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

例子 — hash表不存放内部命令

$ pwd/root$ lsanaconda-ks.cfg install.log install.log.syslog$ hash -lbuiltin hash -p /bin/cat catbuiltin hash -p /bin/ls lsbuiltin hash -p /usr/bin/whereis whereis

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

Linux命令执行优先级

Linux命令执行的优先级为:

alias -> 内部命令 -> hash -> PATH

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

内置命令和外部命令总结

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

发表评论

登录后才能评论