Linux的命令分为内部命令和外部命令:
内部命令:指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令,也成为内建(Built-IN)指令。内部命令 属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指令也就自动载入内存了,用户可以直接使用。内部命令无需从硬 盘中重新读取文件,因此执行效率更高。
内部命令举例:
命令
作用
echo [args]
显示args并换行。
enable
启用或禁用Shell内置的命令。
exit [n]
以状态n退出Shell。
hash
控制用于加速命令查找的内部哈希表。
help
显示关于内置命令的有用信息。如果指定了一个命令,则将显示该命令的详细信息。
history
显示带行号的命令历史列表。
pwd
打印出当前的工作目录。
type [command]
显示命令的类型,例如:pwd是Shell的一个内置命令。
外部命令:指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,是属于Shell解释器程序之外的命令,所以称为外部命令。Linux系统必须知道外部命令对应的文件位置,才能够由Shell加载并执行。
外部命令举例:
命令
作用
chvt
虚拟终端之间的切换。
df
显示磁盘的相关信息。
free
显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
rm
删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。
screen
用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
who
查看当前在线用户。
缓存命令:缓存命令分为内部缓存命令与外部缓存命令。内部缓存命令即为系统每次执行玩一次外部命令都会将其加载到内存中缓存,以便下次调取命令的时候省去去硬盘寻找命令的时间,直接从内存中读取命令执行。外部缓存命令即为每次注销、关机或者重启的时候,系统都会将缓存在内存中的外部命令与执行过的内部命令写入到硬盘的.bash_history文件中,这跟日志文件差不多,记录下来系统的命令使用历史,以便在系统非正常情况下排错。
别名命令:Linux系统提供了一个有用的工具叫alias,可以让我们将一些需要频繁使用的但又过于冗长的命令设置一个别名,这样一来,以后只需输入一个简短的别名就可以达到同样的作用。
别名命令举例:
别名
原始命令
作用
cp
cp -i
复制当前文件到其他路径
ll
ls -l
显示当前文件属性
ls
ls --color=auto
给不同格式文件变换颜色显示
rm
rm -i
删除当前文件
mv
mv -i
移动当前文件到其他路径
Linux系统默认会将存放外部命令、程序的目录(如/bin、/usr/bin、/usr/local/bin等)添加到用户“搜索路径”中,当使用 位于这些目录中的外部命令时,用户不需要指定具体的位置。因此在大多数情况下,不用刻意去分辨内部、外部命令,其使用方法是基本类似的。
对于Shell来说,可以识别三种基本命令:内建命令、Shell函数以及外部命令。(1)内建命令就是由Shell本身所执行的命令。有些命令是由于其必要性才内建的,例如cd用来改变目录,read会将来自用户(和文件)的输入数据传给Shell外亮。
另一种内建命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时经常会用到它。另外还有I/O命令,例如echo于printf.
(2)Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用。
(3)外部命令就是由Shell副本(新的进程)所执行的命令,基本的过程如下:
a. 建立一个新的进程。此进程即为Shell的一个副本。
b. 在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。
当命令名称包含有斜杠(/)符号时,将略过路径查找步骤。
c. 在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。
d. 程序完成后,最初的Shell会接着从终端读取下一条命令,和执行脚本里的下一条命令。
使用type可以查看是否是内建命令:
type (不带参数)会显示命令是内建命令还是外部命令。
-t :file 外部命令;alias 命令别名;builtin 内置命令。
-a :会将命令PATH路径显示出来。
未完待续。。。下期将补充实验环境中比较内部命令、外部命令、别名命令以及缓存命令的优先级比较。