Shell学习小结

📅 2026/7/8 5:10:17
Shell学习小结
一、Shell的类型Shell在计算机科学中指的是为用户提供操作界面的软件通常表现为命令行界面CLI它作为命令语言解释器接收用户输入的命令并调用相应程序 。在Linux世界中Shell有多种实现我们最常见的BashBourne Again Shell是Linux系统的默认Shell它是GNU计划的一部分用来替代早期的Bourne Shell 。你可以通过cat /etc/shells命令来查看当前系统支持的所有Shell类型。二、理解Shell进程及其关系父子关系在Linux系统中进程管理是基于父子关系的。当我们在当前Shell称为父Shell中执行某些操作时系统会创建一个新的子进程子Shell。子Shell会继承父Shell的环境变量但子Shell中对变量的修改不会影响父Shell 。这种关系至关重要它解释了为什么在脚本中定义的变量在脚本执行结束后就消失了。三、Shell的父子关系什么情况会创建子Shell理解父子关系关键在于知道什么时候会触发创建子Shell。常见情况如下执行外部脚本当我们运行bash test.sh时系统会fork一个子Shell去执行脚本内的命令 。管道命令管道符|连接的每个命令通常都在独立的子Shell中执行 。后台任务使用将命令放入后台运行时会在子Shell中执行 。命令替换使用$()或反引号时也会产生子Shell 。为了直观验证我们可以在Xshell中进行实操。首先用echo $$打印当前Shell的进程IDPID。然后输入bash进入一个子Shell再次输入echo $$会发现PID变了。接着在子Shell中定义一个变量nameson再用exit退回父Shell输入echo $name会发现变量为空这就完美印证了父子进程环境隔离的特性 。四、Shell的运行模式Shell的运行模式可以分为两个维度交互式/非交互式 和 登录式/非登录式组合起来共有四种模式 。交互式 vs 非交互式交互式指Shell等待用户输入命令并立即执行即我们平时打开的终端非交互式通常指执行Shell脚本此时Shell只读取文件中的命令并执行 。登录式 vs 非登录式登录式Shell需要通过用户名和密码登录如通过SSH或虚拟终端登录它会加载/etc/profile和~/.bash_profile等配置文件非登录式Shell则不需要登录如在图形界面下打开终端或执行bash命令它通常只加载~/.bashrc。我们可以在Xshell中通过两个命令轻松区分echo $PS1如果输出有值如[\u\h \W]\$则为交互式空值则为非交互式 。shopt login_shell输出on表示登录式Shelloff表示非登录式 。五、内建命令和外部命令这是很多初学者容易混淆的概念。内建命令是Shell程序本身的一部分如cd、exit、history。执行内建命令时Shell不需要创建子进程直接在内部完成因此执行速度更快 。外部命令是独立于Shell的程序通常放在/bin、/usr/bin等目录下如ls、vim。执行外部命令时Shell会创建一个子进程去加载并执行该程序六、内建命令history和alias的用法1.history命令——管理命令历史history命令能极大提高工作效率。常用操作如下 查看历史直接输入history列出所有历史命令history 10列出最近10条。清空历史history -c清空当前会话的历史记录。执行历史命令!number执行历史中第number条命令如!100。!!执行上一条命令。!command从最近历史中查找以command开头的命令并执行如!vim。在Xshell实操输入history 3查看最近3条记录然后输入!100假设第100条是ls系统就会执行ls命令 。2.alias命令——创建命令别名alias用于为长命令创建简短易记的别名。查看所有别名直接输入alias。设置别名alias 别名原命令。例如alias llls -l --colorauto之后输入ll就等于输入了ls -l --colorauto。取消别名unalias 别名如unalias ll。