Shell之alias别名
在说alias之前,先大致说一下shell的相关知识点。
Shell与bash
Shell是用户与Linux系统进行交互的媒介。
bash是目前Linux最常用的Shell。除了bash之外,还有例如 sh、csh、ksh、zsh等。
查看自己使用的是哪一个shell
1 | echo $SHELL |
查看系统安装了哪些shell
1 | cat /etc/shells |
切换shell
1 | 切换至bash |
profile和rc文件的解释
***注意***:以下文件解释是以bash shell为准。
(1)/etc/profile:(系统环境变量) 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2) /etc/bashrc:(用户变量)为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。
(3) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。随后该文件会显式调用 .bashrc. 其内容主要为设置环境变量。
(4) ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
理解交互式与登录
交互式shell等待你输入命令, 然后执行并返回结果。
非交互式shell则只是执行预设的命令, 比如读取脚本中的命令并执行, 执行到文件的末尾时shell即结束。
登录通常就是指输入了用户名或者密码后启动的shell(比如系统启动, 远程登录等), 或者用-l
或者--login
方式启动的shell。
非登录就是比如图形界面启动的终端, su
切换的用户, 通过bash
等命令的启动的shell。
二者启动的条件及顺序
bash的加载顺序如下:
- 登录式SHELLL配置文件加载顺序:/etc/profile ⇒ ~/.bash_profile ⇒ ~/.bash_login ⇒ ~/.profile ⇒ ~/.bash_logout
- 非登录式SHELL配置文件加载顺序:/etc/bash.bashrc(/etc/bashrc)⇒ ~/.bashrc
zsh的加载顺序如下(登录式和非登录时都是一样的):
- /etc/zshenv
- ~/.zshenv
- /etc/zprofile
- ~/.zprofile
- /etc/zshrc
- ~/.zshrc
- /etc/zlogin
- ~/.zlogin
- ~/.zlogout
- /etc/zlogout
Linux之souce命令
source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。
功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句 source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
source filename、sh filename、./filename三者之间的区别
- source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
- sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
- 当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
举例说明:
- 新建一个test.sh脚本,内容为:A=1
- 然后使其可执行chmod +x test.sh
- 运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
- 运行./test.sh后,也是一样的效果
- 运行source test.sh 或者 . ./test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell(当前终端)中
Shell之alias别名
语法:alias name=value
语法解释:其中name表示命令别名的名称,value表示命令别名的值。当用户输入name时,系统会自动将其转换为value。
语法注意点:
- name不能有空格
- =前后也不能有空格
- value命令携带参数(或者携带空格时),需要使用单引号或双引号括起来
- alias只生效于当前shell会话,要想每次一直生效,可以将其放到shell的startup文件中,例如zsh的~/.zshrc,或者bash的~/.bashrc中。
alias命令
- alias :列出已定义的所有alias别名
- alias name=value :设置别名
- unalias name :取消别名(只对当前shell终端生效)