echo
echo
,即回显命令,用于将内容输出到控制台。- 也可通过重定向,将输出写入文件:无论覆盖写入还是追加写入,文件不存在时都会新建。
>
覆盖写入>>
追加写入
bash
echo 'hello' # 输出到控制台
echo 'hello' > foo.txt # 覆盖写入 foo.txt
echo 'hello' >> foo.txt # 追加写入 foo.txt
PATH
PATH
是 shell 的环境变量,保存了一组以冒号(:
)分隔的目录路径。- Windows 下用分号
;
分隔 - Mac 下用冒号
:
分隔
- Windows 下用分号
- shell 执行命令时,会按
PATH
中的目录顺序查找可执行文件,找到即停止查找,否则报错"命令未找到"。- 大多数 shell(如 bash)启动时会为
PATH
设定默认值,就是默认查找位置 - 这个位置在配置时可以保留,也可以移除
- 所以
PATH
中找不到可执行文件,则直接报错,不会再去什么默认位置查找
- 大多数 shell(如 bash)启动时会为
- 变量名区分大小写,必须写作
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
- bash:
- 用户打开 terminal 后,系统加载非登录 shell
- bash:
~/.bashrc
- zsh:
~/.zshrc
- bash:
因此,将 PATH 的设置写入这些配置文件,就能在每次 shell 启动时自动生效,无需手动重复配置。
bash
和 zsh
bash
和 zsh
是两个独立的 shell(命令行解释器)。
-
都兼容
sh
命令(sh
是最早的 Unix Shell) -
sh
的登录配置文件是~/.profile
,没有非登录配置文件 -
bash
是绝大多数 Linux 发行版默认提供的 shell -
zsh
功能更强大、扩展性更高,兼容大部分bash
用法,并支持丰富的插件和主题(如oh-my-zsh
)bash
无官方插件管理系统,扩展性有限zsh
本身功能和交互性更强,拥有成熟的插件生态,可通过插件扩展命令行功能
Unix/Linux
默认只安装 bash
,未安装 zsh
Mac
同时自带 bash
和 zsh
,默认 shell 为 zsh
- 具体用哪个可由用户自行配置
- 两者相互独立,启动一个无需启动另一个
Shell
和 CLI
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)完成