内容简要
1.Shell简介
2.内部命令与外部命令
3.hash缓存表
4.别名alias
1.Shell简介
Shell提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
显示当前使用的Shell
echo $SHELL
显示当前系统可以使用的Shell
cat /etc/shells
2.内部命令与外部命令
Shell中可以执行的命令分为内部命令与外部命令两种,内部命令内建于Shell中,外部命令是Shell外的可执行文件。
- 区分内部命令与外部命令
type COMMAND
- 查看全部内部命令
help
和enable
均可 - 启用某个内部命令
enable COMMAND
- 禁用某个内部命令
enable -n COMMAND
- 查看所有禁用的内部命令
enable -n
3.Hash缓存表
当一个Shell会话中第一次使用某个外部命令时,Shell会首先按照$PATH中的路径依次搜索,并将搜索到的路径缓存至hash表中。当此次会话再使用本命令时,直接使用内存中的hash表缓存,加快程序运行速度。
显示所有hash缓存命令和被命中(Hit)的次数
hash
显示所有hash的命令
hash -l
将命令的全路径path起别名name
hash -p path name
打印name的hash缓存
hash -t name
删除name的hash缓存
hash -d name
此处需要注意name并非一定是命令,应该使用hash -l
查看最后一列确认清空所有hash缓存
hash -r
4.别名alias
显示当前shell会话的所有别名
alias
命名别名NAME,等于执行命令VALUE
alias NAME=VALUE
撤销别名NAME,-a撤销所有别名
unalias [-a] NAME
alias和unalias操作只在此会话中有效,若要每次登录时别名都生效,需要在配置文件中进行修改
- 仅修改本用户的设置,
~/.bashrc
- 修改所有用户的设置,
/etc/.bashrc
**编辑后的配置文件不会立即生效,需要bash重新读取配置文件 **
. ~/.bashrc
或者
source ~/.bashrc
均可
- 若别名与原命令同名,强制使用原命令可以有如下三种方法
'COMMAND'
\COMMAND
-
/PATH/COMMAND
执行命令绝对路径
总结:命令在Shell中的执行过程
- 输入命令,回车执行
- 先判断本命令是否是别名:若是,则按照别名的定义解析后进入步骤3;若否,直接进入步骤3
- 判断命令是否为内部命令:若是,则直接运行;若否,则进入步骤4
- 查询hash缓存表中是否有记录:若有,则直接按照缓存记录的路径执行;若否,则进入步骤5
- 按照$PATH的路径顺序依次查询:若查询到,按照查询的地址执行命令并将地址缓存至hash表;若没有查询到,则报错。