Shell 基础

什么是 Shell?

Shell 是用户与 Linux 内核之间的命令解释器。它接收用户输入的命令,解释后传递给内核执行,并将结果返回给用户。

1
用户 ←→ Shell ←→ Linux 内核 ←→ 硬件

常见 Shell 类型

Bourne 系列

  • sh - Bourne Shell,最早的 Unix Shell
  • bash - Bourne Again Shell,Linux 默认
  • dash - Debian Almquist Shell,轻量版
  • zsh - Z Shell,功能强大
  • ksh - Korn Shell,商业 Unix 常用

C 系列

  • csh - C Shell,语法类似 C 语言
  • tcsh - TENEX C Shell,csh 增强版

其他

  • fish - Friendly Interactive Shell,用户友好

查看和切换 Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看当前 Shell
echo $SHELL

# 查看可用的 Shell
chsh -l
cat /etc/shells

# 临时切换 Shell
bash
zsh
fish

# 永久切换默认 Shell
chsh -s /bin/zsh
# 需要重新登录生效

Bash 基础

命令基本格式

1
2
command [options] [arguments]
命令 [选项] [参数]

示例

1
2
3
4
5
6
ls -la /home/user
│ ││ │
│ ││ └── 参数:操作的目标
│ │└────── 选项:-l 长格式,-a 显示所有文件
│ └──────── 短选项可以合并
└──────────── 命令:列出目录内容

命令行快捷键

快捷键 功能
Ctrl + A 移到行首
Ctrl + E 移到行尾
Ctrl + F 向前移动一个字符(同 →)
Ctrl + B 向后移动一个字符(同 ←)
Alt + F 向前移动一个单词
Alt + B 向后移动一个单词
快捷键 功能
Ctrl + D 删除当前字符
Ctrl + H 删除前一个字符(同 Backspace)
Ctrl + W 删除前一个单词
Alt + D 删除后一个单词
Ctrl + K 删除从光标到行尾的内容
Ctrl + U 删除从行首到光标的内容
Ctrl + Y 粘贴最近删除的内容
快捷键 功能
Ctrl + C 终止当前命令
Ctrl + Z 挂起当前命令(放入后台)
Ctrl + L 清屏(同 clear 命令)
Ctrl + S 暂停屏幕输出
Ctrl + Q 恢复屏幕输出
Ctrl + R 搜索命令历史
Ctrl + G 取消搜索
Tab 自动补全命令/路径
Tab Tab 显示所有可能的补全

历史命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 查看历史命令
history
history | tail -20 # 最近20条
history | grep "apt" # 搜索包含 apt 的历史命令

# 执行历史命令
!! # 执行上一条命令
!n # 执行第 n 条历史命令
!-n # 执行倒数第 n 条
!string # 执行以 string 开头的最近命令
!?string # 执行包含 string 的最近命令
!$:p # 显示上一条命令的最后一个参数

# 历史命令展开示例
$ echo Hello World
Hello World
$ echo !! # 执行 echo echo Hello World
echo Hello World

$ echo one two three
$ echo !^ # 第一个参数: one
$ echo !$ # 最后一个参数: three
$ echo !* # 所有参数: one two three

# 修改并执行上一条命令
$ cat file1
$ ^cat^ls # 将 cat 替换为 ls,执行 ls file1

# 搜索历史命令
Ctrl + R # 交互式搜索
(reverse-i-search)`apt': sudo apt update # 输入关键词搜索
Ctrl + R (again) # 查找上一个匹配
Ctrl + S # 向前搜索(如果终端支持)
Ctrl + G / Esc # 取消搜索

环境变量

常用环境变量

变量 说明 示例
PATH 可执行文件搜索路径 /usr/local/bin:/usr/bin:/bin
HOME 当前用户主目录 /home/alice
USER / LOGNAME 当前用户名 alice
SHELL 当前 Shell /bin/bash
PWD 当前工作目录 /home/alice/project
OLDPWD 上一个工作目录 /home/alice
LANG 系统语言/区域设置 en_US.UTF-8
TERM 终端类型 xterm-256color
EDITOR 默认文本编辑器 vim
VISUAL 默认可视化编辑器 vim
PS1 主提示符格式 \u@\h:\w\$
PS2 次提示符 >
HISTSIZE 历史命令保存数量 1000
HISTFILE 历史命令文件 ~/.bash_history
MAIL 用户邮箱 /var/spool/mail/alice
SSH_CLIENT SSH 客户端信息 10.0.0.5 12345 22
SSH_TTY SSH 分配的 TTY /dev/pts/0
XDG_SESSION_TYPE 会话类型 x11wayland
XDG_CURRENT_DESKTOP 当前桌面环境 GNOMEKDE

查看和设置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 查看单个变量
echo $PATH
echo $HOME
echo ${USER} # 使用花括号避免歧义

# 查看所有环境变量
env
printenv
printenv PATH # 查看特定变量

# 设置临时变量(仅当前 shell)
MY_VAR="Hello World"
echo $MY_VAR

# 导出为环境变量(子进程可用)
export MY_VAR="Hello World"
export PATH="$PATH:/new/path"

# 删除变量
unset MY_VAR

# 在命令行临时设置(仅本次命令)
LANG=zh_CN.UTF-8 date

# 变量操作
${VAR:-default} # 如果 VAR 未设置,使用 default
${VAR:=default} # 如果 VAR 未设置,设为 default
${VAR:+value} # 如果 VAR 已设置,使用 value
${VAR:?error} # 如果 VAR 未设置,显示 error 并退出
${#VAR} # 字符串长度
${VAR:offset:length} # 子字符串
${VAR#pattern} # 删除最短匹配的前缀
${VAR##pattern} # 删除最长匹配的前缀
${VAR%pattern} # 删除最短匹配的后缀
${VAR%%pattern} # 删除最长匹配的后缀
${VAR/pattern/replace} # 替换第一个匹配
${VAR//pattern/replace} # 替换所有匹配
${VAR/#pattern/replace} # 替换开头匹配
${VAR/%pattern/replace} # 替换结尾匹配
${VAR^} # 首字母大写
${VAR^^} # 全部大写
${VAR,} # 首字母小写
${VAR,,} # 全部小写

配置环境变量

当前用户生效~/.bashrc~/.bash_profile):

1
2
3
4
5
6
7
8
9
10
11
# 编辑配置文件
nano ~/.bashrc

# 添加环境变量
export PATH="$HOME/bin:$PATH"
export EDITOR="vim"
export HISTSIZE=10000
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

# 使配置生效
source ~/.bashrc

所有用户生效/etc/profile/etc/environment):

1
2
3
4
5
6
7
8
9
# 系统级环境变量
sudo nano /etc/profile

# 添加
export PATH="/usr/local/bin:$PATH"
export JAVA_HOME="/usr/lib/jvm/java-11"

# 或者使用 /etc/profile.d/(推荐)
sudo nano /etc/profile.d/custom.sh

优先级(由高到低):

  1. 命令行中直接设置
  2. ~/.bashrc / ~/.bash_profile
  3. ~/.profile
  4. /etc/profile
  5. /etc/environment

延伸阅读

熟练掌握 Shell 是成为 Linux 高手的必经之路


© 2025 Rl. 使用 Stellar 创建
站点访问量 Loading... 站点访客数 Loading... 页面访问量 Loading...