Linux中的bash命令行
在Linux的bash shell 命令行,我们都知道,命令有三种类型.到底那种类型的命令优先级级高一些呢???
shell中可执行的两类命令
- 内部命令:由shell自带的,而且通过某命令形式提供
- 外部命令:在文件系统路径下有对应的可执行程序文件
内部命令
内部命令: 指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令.属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指令也就自动载入内存了
help #内部命令列表
enable #管理内部命令
enable cmd #启用内部命令
enable –n cmd #禁用内部命令
enable –n #查看所有禁用的内部命令
查看内部命令
外部命令
指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,称为外部命令。
image.png别名
我们将一些需要频繁使用的但又比较长的命令设置一个别名,只要需输入一个简短的别名就可以达到和"执行比较长的命令"得到同样的作用。
查看别名命令:alias
#定义别名
[root@oldboy ~]# alias net='cat /etc/sysconfig/network-scripts/ifcfg-eth0
#取消别名
[root@oldboy ~]# unalias net
#永久保存别名
#全局[环境变量]文件
/etc/profile
/etc/bashrc 优先于/etc/profile
#用户[环境变量]文件
~/.bash_profile
~/.bashrc
#如何不使用别名
命令全路径,用which查看
命令开头加反斜线。
取消别名
缓存命令
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率
查看hash缓存表
hash 命令常见用法
hash #显示hash缓存
hash -l #显示hash缓存,可作为输入使用
hash -p path name #将命令全路径path起别名为name
hash -t name #打印缓存中name的路径
hash -d name #清除name缓存
hash -r #清除缓存
#hash为了加快外部命令的执行过程会放入缓存表
如何判断一个命令是外部命令还是内部命令?
用type来区分是否是外部命令
[root@jian ~]# type find
find 是 /usr/bin/find
[root@jian ~]# type pwd
pwd 是 shell 内嵌
[root@jian ~]# type ls
ls 是 `ls --color=auto' 的别名
[root@jian ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
它们的优先级
别名与内部命令
[root@jian ~]# pwd
/root
[root@jian ~]# type pwd
pwd 是 shell 内嵌
[root@jian ~]# alias pwd='ls -l /etc/hosts'
[root@jian ~]# pwd
-rw-r--r--. 1 root root 352 6月 28 20:00 /etc/hosts
[root@jian ~]# unalias pwd
[root@jian ~]# pwd
/root
#得出结论,别名优先于内部命令
hash缓存的命令与外部命令
[root@jian ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@jian ~]# which head
/usr/bin/head
[root@jian ~]# hash -r
[root@jian ~]# hash
hash: 哈希表为空
[root@jian ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@jian ~]# hash
命中 命令
1 /usr/bin/head
[root@jian ~]# mv /usr/bin/head /usr/local/sbin/
[root@jian ~]# head -1 /etc/passwd
-bash: /usr/bin/head: 没有那个文件或目录
[root@jian ~]# mv /usr/local/sbin/head /usr/bin/
[root@jian ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
#得出结论 hash缓存的命令优先于外部命令
内键命令与外部命令
#找一个特殊的命令echo,即是内部命令,也是外部命令
[root@jian ~]# hash -r
[root@jian ~]# hash
hash: 哈希表为空
[root@jian ~]# echo
[root@jian ~]# type echo
echo 是 shell 内嵌
[root@jian ~]# enable -n echo
[root@jian ~]# hash
hash: 哈希表为空
[root@jian ~]# echo
[root@jian ~]# hash
命中 命令
1 /usr/bin/echo
[root@jian ~]# type echo
echo 已被哈希 (/usr/bin/echo)
[root@jian ~]# enable echo
[root@jian ~]# type echo
echo 是 shell 内嵌
#得出结论:内部命令优先于外部命令
总结
alias>shell内部>hash>外部路径
网友评论