Linux 用户配置与环境变量
配置登录与欢迎信息
通过终端 tty(teletypewriter)登录后的显示信息在 /etc/issue
配置,telnet 的在 /etc/issue.net
,通告在 /etc/motd
目录:
[root@101c7 ~]$ cat /etc/issue
\S
Kernel \r on an \m
可以使用反斜杠调用变量,自定义显示登录后显示信息。
Bash 环境变量配置文件
为了让自定义变量和别名在登录时便已准备好,可以将它们写入到配置文件。
交互式 shell 有两种类型:
-
登录 shell(login shell)
取得 bash 时需要完整登录流程,比如通过 ssh 登录,通过
su -l
命令切换用户。 -
非登录 shell(non-login shell)
取得 bash 接口的方法不需要重复登录,也叫做交互式 shell。比如在原本的 bash 环境下再执行的 bash,或使用
su
命令直接切换用户。
还有一种 shell 是非交互式 shell,系统执行 shell 脚本时用的就是这种 shell。可以通过 BASH_ENV 环境变量来设置一些初始值。
login shell
下面两个文件只有 login shell 能读取:
-
/etc/profile
保存着系统整体的设置,对所有用户都有效。设置的主要变量有:
- PATH:依据 UID 决定 PATH 变量要不要含有 sbin 的系统命令目录;
- MAIL:依据账号设置好用户的 mailbox 到 /var/spool/mail/账号名;
- USER:根据用户的账号设置此变量内容;
- HOSTNAME:依据主机的 hostname 命令决定此变量内容;
- HISTSIZE:历史命令记录条数;
- 调用 /etc/profile.d/*.sh 中的脚本,里面存放了比如 ll 与 ls 命令的别名,颜色配置等;
- 调用 /etc/locale.conf 来决定 bash 使用的语言;
- 调用 /usr/share/bash-completion/completions/* 下面和参数补齐有关的脚本。
不建议修改这个文件,因为此文件内容会随着系统更新而自动更新。
-
~/.bash_profile(或 bash_login,profile)
保存着用户的个人设置。默认设置有:
- PATH:定义了用户主文件夹 ~/bin/ 为额外的执行文件放置目录,并且设为了环境变量;
- 调用 ~/.bashrc 的设置内容,一般个性化配置写在 .bashrc 中。
一般来说,上两文件中适合记录:
- 创建或修改环境变量的命令,例如 PATH 变量,umask 设置等。
- 执行所有一次性操作的命令。
non-login shell
non-login shell 仅会读取 ~/.bashrc 文件:
-
~/.bashrc
以 rc 结尾的隐藏配置文件,代表 run commands,也就是特定程序每次启动时自动运行的命令。bashrc 会调用 /etc/bashrc 这个文件,主要根据不同 UID 规定了 umask 值,PS1 变量。
其他一些配置文件:
-
~/.bash_history
记录历史命令。记录的数量与 HISTSIZE 变量有关。
-
~/.bash_logout
记录当注销 Bash 后进行的操作,可以自己加入一些命令(如清空 /tmp)在其中。
读入环境配置文件
通常修改了 .bashrc 文件配置后,需要注销登录才会生效。也可以利用 source 命令让配置文件立即生效。
例如让 /etc/profile 配置文件立马生效:
[root@101c7 ~]$ source /etc/profile
使用小数点(.)也可以达到同样效果:
[root@101c7 ~]$ . ~/.bash_profile
利用这个特性,可以将多个配置文件定义不同环境变量,需要切换时用 source 运行使其立刻生效。
终端机和环境设置
我们可以使用 stty
命令来设置终端机的输入按键代表意义。
首先,查看所有可设置参数:
[root@101c7 ~]$ stty -a
speed 38400 baud; rows 20; columns 107; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
其中,有几个比较重要的设置如下:
字符 | 含义 |
---|---|
eof | end of file 代表文件结束,输入终止。 |
erase | 向后删除字符。 |
intr | 向当前正在运行的程序发送一个中断信号(interrupt)。 |
kill | 删除当前命令行上的所有文字。 |
quit | 向当前正在运行的进程发送一个 quit 信号。 |
start | 重新启动当前屏幕的输出显示。 |
stop | 停止当前屏幕的输出显示。 |
susp | 向正在运行的进程发送一个 terminal stop 信号。 |
^
代表 Ctrl 键,我们可以自定义按键。例如,将删除字符的组合键设置为 Ctrl+9:
[root@101c7 ~]$ stty erase ^9
除了 stty
,还有 set
命令可以设置一些终端机设置值。我们可以使用 set -o
来查询可用选项:
[root@server3 ~]$ set -o
allexport off
braceexpand on
emacs on