命令在Linux中的执行分为4步:
第一步:判断路径
判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话直接执行。
第二步:检查别名
Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用alias命令来创建一个属于自己的别名,格式为“alias 别名=命令”。如果想取消一个命令别名,则用unalias格式为“unalias 别名”。
第三步:判断内外部
Bash解释器会判断用户输入的命令是内部命令还是外部命令。内部命令是解释器内部的命令,会被直接执行;但是用户在多数时间输入的命令都是外部命令,这些命令交给步骤四继续处理。
可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。
第四步:路径查找文件
道理很简单, 你想在任何时候都使用%java_home%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %java_home%\bin添加到path路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和path变量目录里查找相应的应用程序, 并且执行.。脚本在当前shell执行的时候,使用命令时会去查找环境变量,管路径的环境变量正是path,echo $path就可以查看。说明:本调用将参数string传递给一个命令解释器(一般为sh)执行, 即string被解释为一条命令, 由sh执行该命令.若参数string为一个空指针则为检查命令解释器是否存在. 该命令可以同命令行命令相同形式, 但由于命令做为一个参数放在系统调用中, 应注意编译时对特殊意义字符的处理. 命令的查找是按path环境变量的定义的. 命令所生成的后果一般不会对父进程造成影响.。
注意:不要将当前目录(.)加入到PATH中!!
因为,虽然当前目录是可以加到PATH中的,但是,这样做是不安全的。例如linux命令,当黑客在比较常用的公共目录中如/tmp中存放了一个与ls或cd命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那就GG了。
所以,作为运维人员linux命令,当接手一个新的Linux系统后,首先,应该看一下PATH变量中有无可疑的目录。