CSDN完整文章(无表格、无截图板块,可直接复制发布,适配Linux Shell课程作业)
标题:Linux Shell基础全解|Shell类型、进程关系、内建命令history与alias实操(Xshell完整演示)
一、前言
本文基于Xshell远程连接Linux系统实操,完整梳理Shell核心知识点,搭建系统化知识框架,包含概念解析、完整操作命令、实验现象对比,覆盖课程全部考点:
- Shell的类型
- Shell进程、父子关系
- Shell两种运行模式
- 内建命令 vs 外部命令区分
- 内建命令history完整用法(配套课堂练习题)
- 内建命令alias别名配置实操
二、Shell基础体系知识框架
2.1 Shell的类型
Shell是用户与Linux内核之间的交互解释器,主流Shell分类与特点:
- sh:最原始的Bourne Shell,功能基础,早期Unix系统默认使用。
- bash:Bourne Again Shell,sh的增强版本,支持命令历史、别名、脚本拓展功能,CentOS、Ubuntu等主流Linux发行版默认Shell。
- csh/tcsh:语法贴近C语言,日常运维极少使用。
- zsh:高度自定义终端,拥有强大自动补全、界面美化功能,开发人员常用。
实操命令:
# 查看系统全部支持的Shell类型cat/etc/shells# 查看当前终端正在使用的Shellecho$SHELL2.2 Shell进程与父子关系
- 核心概念
打开Xshell连接服务器时,系统会创建父Shell进程;在父Shell中执行bash、sh会生成全新子Shell进程。子Shell会继承父Shell的环境变量,但拥有独立内存、独立命令历史;子进程退出不会对父Shell造成任何影响。 - 实操命令
# 打印当前Shell进程PID编号echo$$# 创建子Shellbash# 再次打印PID,数字发生变化,代表进入全新子进程echo$$# 退出子Shell,返回父Shell环境exit- 父子进程关键特性
- 子Shell无法修改父Shell的自定义变量、临时别名、内存中的命令历史;
- 父Shell进程关闭后,所有关联的子Shell会同步销毁。
2.3 Shell两种运行模式
1)交互式Shell(日常使用模式)
Xshell登录后默认进入该模式,支持人机交互,等待用户输入命令,会维护命令历史、临时别名等会话数据。
直观特征:终端存在$或#提示符,输入命令后实时输出执行结果。
2)非交互式Shell(脚本运行模式)
执行.sh脚本文件时自动启用,无交互界面,仅批量顺序执行脚本内预设命令。
直观特征:不会加载交互式专属配置文件~/.bashrc。
区分验证命令:
# 判断当前Shell是否为交互式echo$-# 输出内容包含字母i则为交互式,无i代表非交互式2.4 内建命令 vs 外部命令
1)概念区分
- 内建命令:直接集成在bash解释器内部,执行时不会创建子进程,运行速度更快,常见命令有history、alias、cd、exit。
- 外部命令:存放在磁盘中的独立可执行文件,执行时会新建子进程加载文件运行,常见命令有ls、cat、mkdir。
2)区分实操命令
# type命令可判断命令类型typehistory# 输出history is a shell builtin,代表内建命令typecat# 输出cat is /usr/bin/cat,代表外部命令三、核心内建命令实操(Xshell完整演示)
3.1 history 命令(课堂习题完整演示)
1)命令用途
记录当前终端所有执行过的操作命令,数据分为两部分存储:一部分存放在当前Shell内存缓存,另一部分持久化保存在磁盘文件~/.bash_history中。
2)核心参数说明
history:查看内存中全部命令历史,输出附带行号,可通过!行号快速重复执行历史命令。
history -a:将当前会话内存里新增、还未写入磁盘的命令,追加写入~/.bash_history文件末尾。
history -w:覆盖写入,用当前内存完整历史替换磁盘上的~/.bash_history文件原有内容。
history -r:读取磁盘文件内的历史命令,加载到当前Shell内存中。
history -c:清空当前Shell内存里的全部历史记录,不会删除磁盘文件内已保存的内容。
3)课堂习题实操演示
习题1:对比 history 与 cat ~/.bash_history 输出差异
操作步骤:
# 1. 输入两条全新测试命令(仅存入内存缓存,不会自动写入磁盘)echo"test1"echo"test2"# 2. 查看内存中的命令历史,带行号,包含刚输入的两条测试命令history# 3. 读取磁盘持久化历史文件,无行号,看不到本次新输入的两条命令cat~/.bash_history ```差异总结:1. 数据源不同:history读取当前Shell内存缓存;cat读取磁盘持久化文件。2. 输出格式不同:history每条命令前带有数字行号;~/.bash_history仅输出纯命令文本。3. 时效性不同:新终端会话内刚执行的命令仅存在内存,磁盘文件不会实时同步。##### 习题2:执行history -a后查看文件变化```bash# 将内存中未落盘的新增命令追加写入磁盘历史文件history-a# 再次读取文件,文件末尾会新增刚才两条测试命令cat~/.bash_history变化说明:history -a会手动同步当前会话内存缓存到磁盘文件,执行后磁盘文件内容与内存历史完全一致。
3.2 alias 别名内建命令
1)用途
给冗长的命令自定义简短别名,简化重复输入操作,临时别名仅保存在当前Shell内存中。
2)核心操作命令
# 1. 查看当前终端全部已定义的别名alias# 2. 创建临时别名,关闭终端后自动失效aliasll='ls -l --color=auto'# 直接输入ll即可执行ls -l --color=auto# 3. 删除指定单个别名unaliasll# 4. 配置永久生效别名(写入交互式Shell配置文件)vim~/.bashrc# 在文件末尾添加 alias ll='ls -l --color=auto'# 重载配置文件,无需重启终端即可生效source~/.bashrc知识点补充
alias属于内建命令,新开子Shell无法继承父Shell的临时别名;想要永久生效必须写入~/.bashrc并执行source重载配置。
四、完整知识体系总结
- Shell基础模块
Shell主流类型,系统默认bash;Shell父子进程隔离特性,PID区分父子进程;Shell分为交互式、非交互式两种运行模式。 - 命令分类模块
内建命令:history、alias、cd等,内存直接执行,不生成子进程;外部命令:cat、ls等,磁盘独立文件,执行新建子进程。 - 重点内建命令模块
history:内存+磁盘双存储机制,-a/-w/-r/-c参数功能,配套课堂实验对比演示;
alias:临时别名创建删除、永久别名配置方法,子进程别名继承规则。
五、实验总结
- Shell父子进程环境相互隔离,子进程无法修改父进程内存内的数据;
- 内建命令运行效率高于外部命令,无需创建子进程,执行速度更快;
- history命令区分内存缓存与磁盘持久化文件,history -a是手动同步缓存到磁盘的核心操作;
- alias临时别名仅当前会话生效,永久配置需要写入bash配置文件并重载。