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)完成
相关推荐
哈里谢顿3 小时前
使用kvm创建一台虚拟机
linux
hanyi_qwe4 小时前
文本三剑客--awk
linux·运维·服务器
Caven774 小时前
【Linux 技巧】如何在登录时自动激活 Conda Base 环境
linux·运维·conda
凌寒115 小时前
Linux(Debian)安装、卸载 MySQL
linux·运维·mysql·debian
IT小哥哥呀5 小时前
如何从 Windows SSH 进入 VirtualBox Ubuntu 虚拟机——密码认证(逐步指南)
linux·windows·ubuntu·ssh·教程·虚拟机
醇氧5 小时前
Mac 安装 Docker Desktop
macos·docker·容器
怀旧,6 小时前
【Linux系统编程】7. 进程的概念(上)
linux·运维·服务器
7***n756 小时前
API网关设计模式
linux·服务器·设计模式
哈里谢顿7 小时前
环境变量 HTTP_PROXY/HTTPS_PROXY 深度解析:为什么 cURL 行,Docker 不行?
linux
馨谙7 小时前
使用 systemd 用户服务管理容器:从概念到实践
linux·容器