Shell 基础知识

echo

  • echo,即回显命令,用于将内容输出到控制台。
  • 也可通过重定向,将输出写入文件:无论覆盖写入还是追加写入,文件不存在时都会新建。
    • > 覆盖写入
    • >> 追加写入
bash 复制代码
echo 'hello'             # 输出到控制台
echo 'hello' > foo.txt   # 覆盖写入 foo.txt
echo 'hello' >> foo.txt  # 追加写入 foo.txt

PATH

  • PATH 是 shell 的环境变量,保存了一组以冒号(:)分隔的目录路径。
    • Windows 下用分号 ; 分隔
    • Mac 下用冒号 : 分隔
  • shell 执行命令时,会按 PATH 中的目录顺序查找可执行文件,找到即停止查找,否则报错"命令未找到"。
    • 大多数 shell(如 bash)启动时会为 PATH 设定默认值,就是默认查找位置
    • 这个位置在配置时可以保留,也可以移除
    • 所以 PATH 中找不到可执行文件,则直接报错,不会再去什么默认位置查找
  • 变量名区分大小写,必须写作 PATH,不能写成 path
bash 复制代码
# 查看当前 PATH
echo $PATH
# 示例输出:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/home/youruser/bin

修改与配置

PATH 本质上只是一个普通的环境变量

  • 可以在多个配置文件中被定义或修改
  • 配置文件存在优先级,高优先级的会覆盖低优先级的 PATH 配置
    • 实质是变量覆盖
bash 复制代码
# 定义
export PATH=/some/path

# 在定义时可用 $PATH 实现追加
export PATH=$PATH:/some/other/path

上述配置方式是在当前 shell 运行时临时修改 PATH,只影响当前 shell 会话,关闭 shell 或重启后失效。

如需每次 shell 启动时自动生效,需将相关设置写入对应的 shell 配置文件(如 ~/.bash_profile~/.bashrc~/.zshrc 等)。

系统重启后,先启动内核、系统服务,最后进入登录界面,此时尚未加载 shell。

  • 用户登录后,会加载登录 shell 相关配置文件
    • bash:~/.bash_profile
    • zsh:~/.zprofile
  • 用户打开 terminal 后,系统加载非登录 shell
    • bash:~/.bashrc
    • zsh:~/.zshrc

因此,将 PATH 的设置写入这些配置文件,就能在每次 shell 启动时自动生效,无需手动重复配置。

bashzsh

bashzsh 是两个独立的 shell(命令行解释器)。

  • 都兼容 sh 命令(sh 是最早的 Unix Shell)

  • sh 的登录配置文件是 ~/.profile,没有非登录配置文件

  • bash 是绝大多数 Linux 发行版默认提供的 shell

  • zsh 功能更强大、扩展性更高,兼容大部分 bash 用法,并支持丰富的插件和主题(如 oh-my-zsh

    • bash 无官方插件管理系统,扩展性有限
    • zsh 本身功能和交互性更强,拥有成熟的插件生态,可通过插件扩展命令行功能

Unix/Linux 默认只安装 bash,未安装 zsh

Mac 同时自带 bashzsh,默认 shell 为 zsh

  • 具体用哪个可由用户自行配置
  • 两者相互独立,启动一个无需启动另一个

ShellCLI

CLI

  • CLI(Command Line Interface,命令行界面)是一种人机交互方式,用户通过输入命令(文本)与计算机交互,系统以文本方式返回结果。
  • CLI 通常通过"终端"程序呈现,如 Linux 的 Terminal、Windows 的 cmd、macOS 的 Terminal。

Shell

  • Shell 是命令解释器,负责解析 CLI 中输入的命令,并调用操作系统内核提供的功能来完成任务。
  • Shell 是 CLI 的核心组成部分
  • Shell 负责将用户输入的命令转换为系统内核(kernel)能理解和执行的语句
  • 实际底层操作由系统核心(如 Linux kernel、Windows NT kernel、Mac 的 XNU)完成
相关推荐
btyzadt2 小时前
虚拟机蓝屏问题排查与解决
linux·运维·网络
G_H_S_3_3 小时前
【网络运维】Shell 脚本编程:while 循环与 until 循环
linux·运维·网络·shell
争不过朝夕,又念着往昔4 小时前
即时通讯项目---网关服务
linux·c++·vscode
时空自由民.5 小时前
linux下camera 详细驱动流程 OV02K10为例(chatgpt版本)
linux·运维·服务器
码界奇点5 小时前
Python内置函数全解析:30个核心函数语法、案例与最佳实践指南
linux·服务器·python
The_Second_Coming5 小时前
Linux 学习笔记 - 集群管理篇
linux·笔记·学习
ChuHsiang5 小时前
【Linux系统编程】日积月累——进程(2)
linux
shylyly_6 小时前
Linux->多线程2
java·linux·多线程·线程安全·线程同步·线程互斥·可重入
倔强的石头_7 小时前
【Linux指南】Makefile进阶:通用化语法与实战技巧
linux