SHELL 的环境配置
因为 CentOS 的默认 shell 为 bash,本文中会把 shell 与 bash 混用。
Bash 默认快捷键
| 组合按键 | 执行结果 |
|---|---|
| Ctrl + C | 终止当前命令 |
| Ctrl + D | 输入结束,如邮件结束的时候 |
| Ctrl + M | 回车 |
| Ctrl + S | 暂停屏幕输出 |
| Ctrl + Q | 恢复屏幕输出 |
| Ctrl + U | 删除整行命令 |
| Ctrl + Z | 暂停当前命令 |
启动 Bash 时常用的选项
在启动 /bin/bash 时,可以通过指定不同的选项,来实现不同的环境。
--noprofile :让 shell 在启动时不执行任何脚本
--norc :禁止读取 Bashrc 文件
--rcfile filename :强制 Bash 使用指定的配置文件,而不用 ~/.Bashrc
-login :以登陆方式运行,会进行用户身份的验证
配置文件
在 shell 启动时,会自动执行一系列脚本,即配置文件,以进行特定的环境设定。具体见 BASH 入门 01。
重新加载配置文件
配置文件发生修改后,要想重新加载,需要用 source 命令,可以简写为句点 .。
$ source ~/.Bashrc
$ . ~/.Bashrc
一些特殊的配置文件
登陆提示信息
TTY 登陆前 信息
/etc/issue
SSH 登陆前 信息
/etc/issue.net
SSH 服务的配置文件为 /etc/ssh/sshd_config,修改其中的参数 Banner为 /etc/issue.net 或其它文件,然后重启 SSH 服务即生效。
成功 登陆后 的信息
/etc/motd
提示信息中各代码含义:
\d 本地时间的日期
\l 终端机接口序号
\m 硬件等级
\n 主机的网络名称
\O 域名
\r 内核版本
\t 本地时间
\S 操作系统名称
\v 操作系统版本
环境变量
bashrc 用于交互式非登陆 Shell,profile 用于交互式登陆 Shell。
/etc/profile,/etc/bashrc 是设置系统 全局环境变量,对所有用户可见。
~/.profile,~/.bashrc 用于设置用户的 私有环境变量,仅对登陆用户自己可见。
export
该命令用于把自定义变量 导出为环境变量,供子进程使用。
$ export CustomVar
常用的环境变量
HOME 家目录
SHELL 当前 SHELL,默认 /bin/bash
HISTSIZE 历史列表最大条数,内存
HISTFILESIZE 历史文件最大条数,文件
MAIL 邮箱文件
PATH 可执行文件查找的路径
LANG 语系
RANDOM 随机数变量
$ 当前 Shell 的 PID
? 上一个命令的返回值
OSTYPE 操作系统类型
HOSTTYPE 主机类型,架构
MACHTYPE 系统硬件
stty
stty 用于修改、显示 终端命令行的设置,如快捷键的设置等。
语法
stty [选项] [参数]
-a 以容易阅读的方式显示当前的所有配置
-g 以 stty 可读方式显示当前的所有配置
范例
- 查看当前所有 stty 设置
stty -a
- 禁止输出大写
stty iuclc 开启
stty -iuclc 恢复
- 禁止输出小写
stty olcuc 开启
stty -olcuc 恢复
- 打印出终端的行数和列数
stty size
- 改变 Ctrl+D 的方法
stty eof "shit"
系统默认用 Ctrl+D 来表示文件的结束,通过这种方法,可以自定义。
- 屏蔽显示
stty -echo 禁止回显,即打字时屏幕不显示,类似输入密码时的状态
stty echo 打开回显,恢复在屏幕上显示键入的字符
- 忽略回车符
stty igncr 开启,此时需用 ctl + enter 代替回车
stty -igncr 恢复
常用设置项目
^ 符号代表 Ctrl 键。
intr = ^C 中止当前程序
quit = ^\ 退出当前运行程序
quit = ^\ 向后删除
kill = ^U 删除命令行上所有文字
eof = ^D 结束输入
start = ^Q 在某个程序停止后,重新启动其输出
stop = ^S 停止屏幕输出
susp = ^Z 给正在运行的程序发送一个 terminal stop 的信号
set
set 是 shell 的 内建命令,用于 配置 shell。
启用、禁用一些 shell 的选项及位置参数,修改 shell 属性和位置参数,查询 shell 变量。
shell 内部属性维护
set 通过维护一系列现有 shell 内部变量,来 设置 shell 解释器的属性,从而能够 控制 shell 解释器的一些行为。
每个选项可以视为一个开关,用一个字母表示。开关的状态用 + 和 - 表示,- 表示 开,+ 表示 关。
$- 变量用于表示 set 当前打开的参数,默认值为 himBH,这是多个选项的组合。
shell 本地变量
set 能够看到当前 shell 的 所有本地变量,包括 shell 函数、所有用户自定义变量、环境变量。
set 无法定义新的 shell 变量。如要定义新的变量,可用 declare 变量名=值。
语法
set [选项]
-u 当执行时使用到未定义过的变量,则显示错误信息。默认不启用。
-v 显示shell所读取的输入值。默认不启用。
-x 执行指令后,会先显示该指令及所下的参数。。默认不启用。
-h 自动记录函数的所在位置。默认启用。
-H 可用 !命令编号 的方式来执行历史命令。默认启用。
-C 使用 > 操作符时,文件如果存在,不会被覆盖。默认不启用。
-m 启用作业控制,即监控模式。默认启用。
-m 监控模式:启动作业控制,该选项支持系统 shell 交互,后台进程以单独的进程组运行,在每次完成任务时,会返回文字反馈,其中包含退出状态。
查看当前被 set 启用的选项
echo $-
~]# echo $-
himBH
表示当前的 shell 其 h,i,m,B,H 这几个开关是打开的。
查看当前进程所有的环境变量
~]# set
输出当前 shell 的所有变量,输出格式:name=value。set 命令的输出可以直接作为 stdin。
若使用未定义变量,则显示错误信息
~]# set -u
echo $vbirding
-bash: vbirding: unbound variable
取消用 set +u
执行前,先回显该命令本身
$ set -x
++ printf '\033\]0;%s@%s:%s\007' dmtsai study '~' \# 列出提示符的控制码
echo ${HOME}
+ echo /home/dmtsai
/home/dmtsai
++ printf '\033\]0;%s@%s:%s\007' dmtsai study '~'
env
env 用于 以修改过的环境来运行命令,或显示系统中已存在的环境变量。
env 是 外部命令,它只能看到 shell 传递给它的变量,以及环境变量。
使用 env 命令可以新增变量、删除变量、为变量赋值。
语法
env [ -i | - ] [Name=Value ]... [Command [ Argument ... ] ]
-i 或 - : 不使用任何环境变量,以空的环境运行命令。
查看当前环境变量
不带参数运行,显示当前的所有环境变量。
$ env
以空的环境运行命令
不使用任何环境变量运行命令:
$ env -i command
可以 简写 为 env -。
反向显示 grep 的查询结果
$ env GREP_OPTIONS='-v' grep one test.txt
显示文件中 不含 one 的行。
用空的环境运行新 shell
$ env -i /bin/sh
让程序在另一个显示器显示
$ env DISPLAY=foo.bar:1.0 xcalc
实际上没有必要以这种方式打开程序,因为 shell 大多支持在执行命令之前临时指定环境变量。如:
$ DISPLAY=foo.bar:1.0 xcalc
在脚本中定义脚本解释器
如:使用 #!/usr/bin/env python3,而不是直接使用 python3 的绝对路径,允许系统在 PATH 变量中查找 python 解释器。
bash 常用工具
history
- 历史列表:内存 中的命令历史列表,保存 本次登陆 bash 后键入的命令
- 历史文件:
~/.bash_history本次登陆之前的历史命令
默认情况下,历史列表中的记录只有在退出 bash 时才会被追加到历史文件中,因此本次登陆后,历史文件中只能看到上次登陆及更早的历史命令。
查看历史文件中所有记录
$ history
查看最近 5 条记录
$ history 5
清空历史列表
$ history -c
把历史列表追加到历史文件中
$ history -a
把历史文件中的命令追加到历史列表
$ history -r
用历史列表覆盖历史文件
$ history -w
##### 运行上一个命令
$ !!
运行第 66 条命令
$ !66
运行最近以 al 开头的命令
$ !al
type
查询 命令的类别
type command
🍎 查询指定命令的类别,是别名、内建命令,还是外部程序。
返回的结果是一句描述。
$ type ls
ls is aliased to 'ls --color=auto'
$ type date
date is /usr/bin/date
$ type echo
echo is a shell builtin
type -t command
查询指定命令的类型,会返回一个字符串,用以表示命令类型。
返回的命令类型:
alias:别名keyword:shell 保留的关键字function:函数builtin:shell 内建命令file:外部程序
$ type -t ls
alias
type -p command
查看 外部命令的完整路径。
$ type -p date
/usr/bin/date
type -a command
按 别名 > bash 内建命令 > 外部程序 顺序在系统中查找包含该命令的路径,所有的匹配都会列出来。
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
whatis
该命令用于显示所查询命令帮助文档中的 描述 文字,简要说明该命令是做什么用的。
whatis command 查询命令简要说明,及其章节号
$ whatis echo
echo (1) - display a line of text
echo (1p) - write arguments to standard output
man
命令帮助文档。
man 8 partprobe 指定章节号查询
man -f partprobe 同 whatis,查询命令简要说明及章节号
man -k "partition table" 忘记命令名的情况下,根据关键字反向查询
mandb 更新 man page 缓存