Linux学习day5

  1. 理解 Shell

我们在前面已经学了初级及基础的 shell,当然我们也要学习和理解 shell 编程以及它与系统之间的关系 。


一、 Shell 类型

  • Linux 系统启动什么样的 shell 程序主要取决于个人用户的配置 。

  • /etc/passwd 文件中,在第七列字段中(原文误写为第七行)就列出了默认的 shell 程序,我们可以看一下下面的例子 。

配置示例zero Point:x: 501:501: Zeropoint Bi/home/zero Point:/bin/bash

  • 在上面的配置段中,就显示了用户 zeroPoint 使用 bash shell 作为自己的默认 shell 程序 。

  • 默认的 shell 会在用户登陆 Linux 的时候启动 。说起来 Bash Shell 就是一个可执行程序,这里就不描述其他的 shell 了 。


二、 Shell 的父子关系与嵌套

1. 父子关系的基本概念

  • 用于登陆 Linux 系统启动的默认 shell 是一个父 shell,然后等待命令的输入 。

  • 在 CLI 提示符后输入 /bin/bash(原文误写为 /bin/shell)命令或其他有效的 bash 命令时,会创建一个新的 shell 程序 。

  • 这个新的程序叫做"子 shell",子 shell 同时也就拥有 CLI 提示符,同样等待命令输入 。

  • 当生成"子 shell"的时候,我们看不到任何相关的信息,因此我们需要使用 ps 命令来理清这一切 。

核心概念shell 其实就是一个进程

2. 环境继承与嵌套关系

  • 在生成子 shell 进程的时候,只有部分父进程的环境会被继承到子 shell 中 。

  • 当然 shell 也可以进行嵌套,例如我们在父级 Shell 中输入三次 bash,就创建了三次嵌套的 shell 。

  • 子 shell 的嵌套关系图解
    父 shell →\rightarrow→ 发出命令 "bash" →\rightarrow→ bash 子 shell →\rightarrow→ 发出命令 "bash" →\rightarrow→ bash 孙 shell →\rightarrow→ 发出创建命令 →\rightarrow→ bash 曾孙 shell


三、 Bash Shell 启动参数与受限模式

Bash shell 程序可使用参数修改 Shell 的启动方式,参数说明如下 :

  • -c 参数 :让 shell 不进入等待回车输入的交互界面,执行完成后立即退出 。例如:bash -c "echo 'Hello world'"

  • -i 参数(原文简写为"一"):强制 shell 启动为一个交互式终端,强制性读取用户的输入 。

  • -l 参数(原文简写为"一"):让 shell 强装自己是系统启动、用户刚通过密码登陆时的状态,会完整地去加载整个系统的环境配置文件 。

  • 受限模式权限限制 (通常为 -r 参数):极大限制用户的操作权限,表现如下 :

  • ① 无法使用 su 切换用户身份 。

  • ② 无法修改 PATH 环境变量 。

  • ③ 无法使用包含 / 的外部命令 。

  • ④ 无法使用 >>> 定向输出(重定向) 。

exit 命令在某些特定受限状态下可能无法用来退出子 shell 。


四、 理解 Shell 的内建命令与外部命令

  1. 内建命令 (Built-in)
  • 内建命令就是直接长在 shell 肚子里的命令 。

  • 当我们在终端输入它时,shell 不需要去硬盘里的各种文件夹(路径)里查找对应的可执行文件,而是由 shell 内部的代码直接在内存里进行秒级处理 。

  • 与外部命令不同的是,内建命令不需要再创建子程序(子进程)来执行 。

  • 查看方法 :我们以 cd 为例,在终端输入 type cd 会输出:cd is a shell builtin

  1. 外部命令 (External)
  • 除了内建命令,其余的则是外部命令 。

  • 外部命令存在于 bash shell 之外,它并不是 shell 程序的一部分 。

  • 外部命令通常存储在 /bin/usr/bin/sbin/usr/sbin 当中 。

  • 我们可以通过 whichtype 来查看命令的存储位置 。例如输入 which ps,这样我们就可以查看 ps 命令的存储位置 。

  • 当外部命令执行的时候,会创建一个子进程,这种操作叫"衍生" 。

  • 外部命令衍生过程图解

  • 父进程 →\rightarrow→ 发出外部命令 →\rightarrow→ 衍生 →\rightarrow→ 子进程 →\rightarrow→ 子进程执行外部命令 。


五、 history 历史命令

  • history 命令会把我们敲出的每一条命令给予编号并记录下来 。

  • 语法格式如下

bash 复制代码
history [参数]
  • 参数说明如下

  • -c:清空命令的回车输入记录(即清空当前历史记录) 。

  • -d [行号]:删除指定行数的历史记录 。

  • -w :强制保存在 ~/.bash_history 文件中 。

  • -r:强制读取硬盘文件,并且同步到内存中 。

  • -a:把当前终端会话新产生的命令追加写入到历史文件中 。

相关推荐
bjzhang759 小时前
CentOS下安装MySQL详解
linux·mysql·centos
十月的皮皮10 小时前
C语言学习笔记20260606- 求月份天数三种写法
c语言·笔记·学习
Jason_chen10 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld10 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
马士兵教育10 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
lizhihai_9911 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
weixin_5231853212 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
吃好睡好便好12 小时前
说说科学爬山
学习·生活
lunzi_082612 小时前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习