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
| echo $SHELL
chsh -l cat /etc/shells
bash zsh fish
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 history | grep "apt"
!! !n !-n !string !?string !$:p
$ echo Hello World Hello World $ echo !! echo Hello World
$ echo one two three $ echo !^ $ echo !$ $ echo !*
$ cat file1 $ ^cat^ls
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 |
会话类型 |
x11 或 wayland |
XDG_CURRENT_DESKTOP |
当前桌面环境 |
GNOME 或 KDE |
查看和设置环境变量
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
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:+value} ${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"
sudo nano /etc/profile.d/custom.sh
|
优先级(由高到低):
- 命令行中直接设置
~/.bashrc / ~/.bash_profile
~/.profile
/etc/profile
/etc/environment
延伸阅读
熟练掌握 Shell 是成为 Linux 高手的必经之路