首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >shell详解

shell详解

原创
作者头像
@锐
发布2025-10-23 15:56:03
发布2025-10-23 15:56:03
1220
举报
文章被收录于专栏:linuxlinux

shell的概念

shell是介于用户和内核之间的桥梁,用户输入命令--->shell翻译指令---->调用内核执行----->返回结果

cat /etc/shells 可查看已安装的各种shell

例子

ls -l

执行流程

  1. 解析命令:ls是命令 -l参数
  2. 查找程序:在#PATH中搜索 /bin/ls
  3. 调用内核:内核执行
  4. 输出结果:显示文件列表

shell常用类型

  • bash ---大多数linux发行版的默认交互shell, 和dash比,交互功能更加强大
  • dash --- 轻量级,速度更快,内存占用更小,更适合脚本启动

shell的层级关系

每个shell都是一个进程, 创建的子shell也都是一个进程,只不过子shell的ppid一般是上一级shell的pid

创建子shell

  1. 进入虚拟终端后会启动默认的交互式shell,也就是父shell
  2. 再次输入bash,会依赖父shell创建一个子shell
  3. 再次输入dash,会依赖上一级bash再创建一个子shell
  4. ps --forest查看进程树或者ps -l 查看ppid和pid来观察依赖关系

退出子shell

  1. 执行exit命令,退出PID等于48990的子shell
  2. 继续执行exit命令, 退出PID等于48989的子shell
  3. 再继续执行exit命令,退出系统默认的交互shell, 直接退出虚拟终端

shell的内建命令

内建命令不需要创建子进程来执行,内建命令和shell编成一体,不需要依赖外部执行

常见内部命令

  • cd
  • exit
  • alias
  • history

shell执行的外部命令

存在于bash shell之外的程序,并不属于shell程序,一般位于/bin; /usr/bin; /sbin; /usr/bin

每次执行外部命令会创建一个子进程,被称为衍生,开销较高

常见外部命令

可以通过type查看是内建命令还是外部命令

  • ps
  • which
  • mount/umount/ls

命令详情

which命令 --- 返回文件的路径名称或者环境

  • -a 打印所有匹配的路径

alias命令 ----别名

alias [-p] [name[=value] ...]

别名只在当前shell生效, 可以看下图, 别名li在子bash里会报comman not found, exit退出后则可以正常执行

  • -p 打印所有可重复使用格式的别名

hitsory命令 ---- 显示历史命令列表, 默认展示近1000多条历史命令, 历史命令存储在/home/用户名/.bash_history隐藏文件中

history [-c] [-d offset] [n] or history

  • -c : 清除历史命令,但不会立刻从/.bash_history中删除, 如下图
  • -a : 立刻将当前会话的历史命令追加到历史文件中
  • -w: 将当前命令写入历史文件中
  • n: 显示最近n条命令
  • !! : 显示上一条命令
  • !n: n为历史命令编号

; --- 单行同时执行多个命令可以使用;进行分割

() --- 执行命令时加()会创建一个子shell来执行, 且()

  • 创建独立的执行环境
  • 变量修改不影响父shell
  • 命令结束后自动销毁

&---- 命令后带&, 表示进入后台模式 , 创建子进程执行命令

jobs命令 ---- 展示作业状态

  • -l : 显示详细信息
  • -n: 显示从最后一次到现在改变的作业
  • -s: 显示已停止的作业
  • -r: 显示允许中的作业
  • -p: 仅显示进程id

作业状态枚举

  • running: 允许中
  • suspended: 已暂停
  • done: 已完成
  • terminated: 被终止

sleep命令 -- 休眠命令

sleep numbers 默认是秒

echo命令 --- 展示文本行

  • -n : 不输出行尾换行符
  • -e: 启用转义字符解析
  • -E: 禁用转义字符

coproc命令 --- 创建子协程

注解:参考linux命令与shell脚本编程大全(第4版)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • shell的概念
    • 例子
  • shell常用类型
  • shell的层级关系
    • 创建子shell
    • 退出子shell
  • shell的内建命令
    • 常见内部命令
  • shell执行的外部命令
    • 常见外部命令
  • 命令详情
    • which命令 --- 返回文件的路径名称或者环境
    • alias命令 ----别名
    • hitsory命令 ---- 显示历史命令列表, 默认展示近1000多条历史命令, 历史命令存储在/home/用户名/.bash_history隐藏文件中
    • ; --- 单行同时执行多个命令可以使用;进行分割
    • () --- 执行命令时加()会创建一个子shell来执行, 且()
    • &---- 命令后带&, 表示进入后台模式 , 创建子进程执行命令
    • jobs命令 ---- 展示作业状态
    • sleep命令 -- 休眠命令
    • echo命令 --- 展示文本行
    • coproc命令 --- 创建子协程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档