---Linux在发展,算算从诞生到现在已经年过半百,但是你知道在你编辑完命令后,系统到底发生了什么吗?
在近年中,Linux凭借着其稳定,性能优异,在高端服务器市场占据着重要的地位,下面我们来简单介绍下linux命令执行的过程。
“一切皆文件”是Linux的基本哲学之一,不仅是普通文件,目录,字符设备,块设备,套接字等在其中都被认为是文件对待,所有的资源访问都是被统一表现为文件的访问,大概做以下总结。
在Linux中有三种命令,内部命令,外部命令,别名;
内部命令:
系统为了提高系统运行的效率,经常使用一些轻量命令在系统启动时候一起加载到内存中,随时等待着shell的调用,他们实际上是shell程序的一部分,主要包括一些相对简单的系统命令,这部分命令被称为内部命令。
外部命令:
外部命令是Linux中重要且实用的命令部分,因为其都是文件,且比较大,所以在开机时候不能加载,而是在需要的时候才加载调用文件,通常不包含在shell中,但是其运行的过程也是由shell程序控制的。
别名:
因为有些命令比较长,且在使用的过程键盘敲击不是很方便,所以定义一些别名,方便使用。
系统执行命令时候也会偷懒,按照如下逻辑和顺序来执行:
1 ,系统会判断路径
判断用户数是否 按照绝对路径或者相对路径方式执行,(bin/ls)判定是的话,便执行。
2 ,检查是否是别名,
因为设定别名的时候,就是在给之前的命令,替换一个名称我们可以通过输入 alias
#alias
执行结果如下
alias egrep=‘egrep --color=auto‘
alias fgrep=‘fgrep --color=auto‘
alias grep=‘grep --color=auto‘
alias l.=‘ls -d .* --color=auto‘
alias ll=‘ls -l --color=auto‘
alias ls=‘ls --color=auto‘
alias which=‘(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot‘
alias xzegrep=‘xzegrep --color=auto‘
alias xzfgrep=‘xzfgrep --color=auto‘
alias xzgrep=‘xzgrep --color=auto‘
alias zegrep=‘zegrep --color=auto‘
alias zfgrep=‘zfgrep --color=auto‘
alias zgrep=‘zgrep --color=auto‘
3 ,判断是内部命令还是外部命令
命令解释器shell会判断是不是内部命令,将查询的hash对应的缓冲区中,是否有这命令对应的路径,如果有就按照此路径到磁盘上查找此命令文件,并执行,如果找不到此文件,将提示," such fiel or directory"
type是我们检验的内部命令还是外部命令的朋友
# type alias
alias is a shell builtin
#type touch
touch is /usr/bin/touch
提示is a shell builtin 是内部命令
显示路径的是外部命令
4 , 如果hash对应的缓冲区中,没有找到相应的命令,将按照PATH系统环境变量指定路径顺序进行搜索,一旦有一个目录下找到此命令文件,将执行。并停止接续搜索其他的目录。这意味着,如果PATH变量指定的多个目录中有此命令文件,将只会执行排序在前的目录中的命令文件。
5 ,如果PATh变量中所有目录都无法找到此命令文件,将提示 “command not found....”,表示执行失败
.
.
.