Linux命令的执行必须依赖于Shell命令解释器。Shell实际上是在Linux系统中运行的一种特殊程序,它位于操作系统内核与用户之间,负责接受用户输入的命令并进行解释,将需要执行的操作传递给系统内核执行,Shell在用户和内核之间充当了一个“翻译官”的角色。当用户登陆到Linun系统时,会自动加载一个Shell程序,以便给用户提供可以输入命令的操作环境。

  Bash是Linux系统中默认使用的Shell程序,文件位于/bin/bash。根据Linux命令与Shell程序的关系,一般分为以下两种类型:

  内部命令:指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令,也成为内建(Built-IN)指令。内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指令也就自动载入内存了,用户可以直接使用。内部命令无需从硬盘中重新读取文件,因此执行效率更高。

  外部命令:指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,是属于Shell解释器程序之外的命令,所以称为外部命令。Linux系统必须知道外部命令对应的文件位置,才能够由Shell加载并执行。

  Linux系统默认会将存放外部命令、程序的目录(如/bin、/usr/bin、/usr/local/bin等)添加到用户的“搜索路径”中,当使用位于这些目录中的外部命令时,用户不需要指定具体的位置。因此在大多数情况下,不用刻意去分辨内部、外部命令,其使用方法是基本类似的。

type用途说明

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

  • alias 别名

  • keyword 关键字,Shell保留字

  • function 函数,Shell函数

  • builtin 内建命令,Shell内建命令

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

  • unfound 没有找到

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

常用参数

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

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

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

type -f只返回shell函数的信息。

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

使用示例

示例一 type自己是什么类型的命令

[root@new55 ~]# type -a type 

type is a shell builtin

[root@new55 ~]# help type 

type: type [-afptP] name [name ...]

    For each NAME, indicate how it would be interpreted if used as a

    command name.

    

    If the -t option is used, `type' outputs a single word which is one of

    `alias', `keyword', `function', `builtin', `file' or `', if NAME is an

    alias, shell reserved word, shell function, shell builtin, disk file,

    or unfound, respectively.

    

    If the -p flag is used, `type' either returns the name of the disk

    file that would be executed, or nothing if `type -t NAME' would not

    return `file'.

    

    If the -a flag is used, `type' displays all of the places that contain

    an executable named `file'.  This includes aliases, builtins, and

    functions, if and only if the -p flag is not also used.

    

    The -f flag suppresses shell function lookup.

    

    The -P flag forces a PATH search for each NAME, even if it is an alias,

    builtin, or function, and returns the name of the disk file that would

    be executed.

typeset: typeset [-afFirtx] [-p] name[=value] ...

    Obsolete.  See `declare'.

[root@new55 ~]#

示例二 常见命令的类型

[root@new55 ~]# type -a cd 

cd is a shell builtin

[root@new55 ~]# type -a pwd 

pwd is a shell builtin

pwd is /bin/pwd

[root@new55 ~]# type -a time 

time is a shell keyword

time is /usr/bin/time

[root@new55 ~]# type -a date 

date is /bin/date

[root@new55 ~]# type -a which 

which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

which is /usr/bin/which

[root@new55 ~]# type -a whereis 

whereis is /usr/bin/whereis

[root@new55 ~]# type -a whatis 

whatis is /usr/bin/whatis

[root@new55 ~]# type -a function 

function is a shell keyword

[root@new55 ~]# type -a ls 

ls is aliased to `ls --color=tty'

ls is /bin/ls

[root@new55 ~]# type -a ll 

ll is aliased to `ls -l --color=tty'

[root@new55 ~]# type -a echo 

echo is a shell builtin

echo is /bin/echo

[root@new55 ~]# type -a bulitin 

-bash: type: bulitin: not found

[root@new55 ~]# type -a builtin 

builtin is a shell builtin

[root@new55 ~]# type -a keyword 

-bash: type: keyword: not found

[root@new55 ~]# type -a command 

command is a shell builtin

[root@new55 ~]# type -a alias 

alias is a shell builtin

[root@new55 ~]# type -a grep 

grep is /bin/grep

[root@new55 ~]#