一、系统与用户的 shell 配置

  1. 合法 shell 清单
    系统支持的合法 shell 列表存储于 /etc/shells 配置文件中。常见类型包括已被替代的 /bin/sh(现多指向 /bin/bash)、Linux 标准默认 shell /bin/bash、集成 C 语言特性的 /bin/tcsh,以及逐步被取代的 /bin/csh。在基础安装的 RockyLinux 训练环境中,该文件内容通常仅包含 bashsh 两项。
  2. 默认 shell 查询机制
    用户账户的默认 shell 配置存储于 /etc/passwd 文件,具体表现为以冒号分隔的第七字段。可通过 cut 命令实现精准提取,例如执行 cut -d: -f1,7 /etc/passwd 指令,即可输出用户名与对应 shell 信息。
  3. shell 切换技术
    用户可根据需求切换 shell 环境,但不同 shell 在变量定义语法上存在显著差异(如 bash 采用 var='content'csh 使用 set var = 'content')。切换前需确保目标 shell 已完成安装,以 tcsh 为例,安装后可通过 /bin/csh 指令实现环境切换。使用 echo $0 可查询当前 shell 执行文件路径,而 /sbin/nologin 作为系统账户的非交互 shell,默认未列入 /etc/shells,以此增强系统安全性。

二、变量定义规范

  1. 基础操作范式
    变量定义遵循 变量="变量内容" 格式,调用时可采用 echo $变量echo ${变量} 两种等价形式。
  2. 语法约束规则
  • 变量与内容间必须以等号直接连接,禁止存在空白字符。
  • 变量名称由英文字母与数字构成,且首字符不得为数字。
  • 包含空白字符的变量内容需使用引号界定(双引号保留特殊字符功能,单引号视为纯文本)。
  • 特殊字符可通过转义字符 \ 进行普通化处理。
  • 支持嵌入指令输出结果,实现方式包括反单引号 指令$(指令) 两种语法。
  • 变量扩展推荐使用 "$变量名称"${变量} 格式。
  • 需在子进程中生效的变量需通过 export 命令转换为环境变量。
  • 系统预设变量通常采用大写命名,自定义变量建议使用小写字母。
  • 变量删除操作通过 unset 变量名称 指令完成。

三、环境变量的系统影响

  1. 关键环境变量解析
  • LANGLC_ALL:控制系统本地化设置,直接影响 date 等指令的输出语言。
  • PATH:定义可执行文件搜索路径,目录间以冒号分隔,搜索优先级遵循配置顺序。
  • HOME:指向用户主目录,与 ~ 符号形成映射关系。
  • MAIL:指定 mail 指令读取的邮件存储路径。
  • HISTSIZE:设定历史命令缓存数量。
  • RANDOM:生成 0 - 32767 范围内的随机整数。
  • PS1:定义命令行提示符格式,详细设置可查阅 man bash 文档的 PS1 章节。
  • $?:存储上一条指令的返回状态码,0 表示执行成功,非 0 表示执行异常。
  1. 典型应用场景
    PATH 变量配置错误可能导致系统功能失效,例如将其仅设置为 /bin 会致使部分指令无法正常调用;通过修改 PS1 变量可实现命令提示符的个性化定制。

四、变量作用域与进程间通信

  1. 变量作用域特性
  • 局部变量:仅在当前 shell 会话中生效,无法被子进程继承。
  • 全局变量:存储于共享内存空间,可通过 export 命令实现跨进程传递。
  1. 父子进程变量传递机制
    bash 创建的子进程仅继承父进程的全局变量,子进程的局部变量默认不回传至父进程。可使用 setenvexport 等指令追踪变量在进程间的传递状态。

五、进程管理技术

kill 命令通过向进程发送信号实现管理功能,其中默认信号 15 用于正常终止进程,信号 9 用于强制终止。可结合 jobs -l 命令获取进程 PID,执行 kill PID号码kill -9 PID号码 实现特定进程的关闭操作,如终止后台暂停的 vim 进程。

六、login shell 与 non-login shell

  1. 概念区分
  • login shell:需进行用户认证的 shell 会话(如通过 tty2 登录或使用 su - 命令切换账户),启动时依次加载系统级配置文件 /etc/profile 与用户级配置文件 ~/.bash_profile(或 ~/.bash_login~/.profile)。
  • non-login shell:在现有交互环境中启动的 shell 会话(如图形界面终端),仅加载用户级配置文件 ~/.bashrc
  1. 配置文件使用策略
    建议将通用配置项置于 ~/.bashrc 文件以确保跨环境生效。在用户登出时,login-shell 环境会执行 ~/.bash_logout 文件,而 non-login shell 环境则无此操作。
认识 bash 基础与系统救援