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 其 himBH 这几个开关是打开的。

查看当前进程所有的环境变量

~]# 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 partprobewhatis,查询命令简要说明及章节号

man -k "partition table" 忘记命令名的情况下,根据关键字反向查询

mandb 更新 man page 缓存