LinuxNotes

第 02 章:命令行基础

zjc 于 2026-01-02 发布

这是《Linux 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 命令行是 Linux 的主操作界面。图形界面适合浏览和观察,命令行适合精确、重复、可审计的生产操作。本章把 Shell 提示符、参数、通配符、重定向、管道、历史命令和帮助系统讲清楚。

2.1 Shell 提示符

常见提示符:

[app@web01 ~]$
[root@db01 /var/log]#

含义:

符号 含义
app / root 当前用户
web01 / db01 主机名
~ 当前用户家目录
/var/log 当前目录
$ 普通用户
# root 用户

确认环境:

whoami
hostname
pwd
echo "$SHELL"
bash --version

生产操作前先确认主机名和用户,避免在错误机器上执行变更。

2.2 命令格式

command [options] [arguments]

示例:

ls
ls -l
ls -lah /var/log
tar -czf app.tar.gz /opt/app

短选项可以合并:

ls -l -a -h
ls -lah

长选项通常不能随意合并:

docker ps --all
df --human-readable

大小写敏感:

ls
LS

后一个命令通常会报 command not found

2.3 常用命令

目录与位置:

pwd
cd /var/log
cd ~
cd -
cd ..
ls
ls -lah
tree -L 2 /opt

文件查看:

cat app.conf
less /var/log/syslog
head -n 50 app.log
tail -n 50 app.log
tail -f app.log
wc -l app.log
stat app.log
file app.bin

时间与系统:

date
date -u
uptime
uname -a
cat /etc/os-release
free -h
df -hT

tail -f 适合观察追加日志。查看轮转后的新文件可用:

tail -F app.log

2.4 通配符与路径

绝对路径从 / 开始,相对路径从当前目录开始。

/etc/nginx/nginx.conf   绝对路径
./conf/nginx.conf       当前目录
../shared/config.yml    上一级目录
~/deploy.sh             当前用户家目录

常用通配符:

符号 含义 示例
* 任意长度字符 *.log
? 一个字符 app?.conf
[abc] 一个指定字符 app[12].log
{a,b} 多个候选 app.{conf,yml}

示例:

ls /var/log/*.log
ls *.conf
cp app.{conf,bak}
rm app-2026-0[1-3].log

危险命令必须先预览展开结果:

echo /var/log/*.log
ls /data/backup/*

涉及删除时,不要把未确认的变量直接拼进命令。

2.5 引号与转义

user=app
echo $user
echo "$user"
echo '$user'
echo "PATH=$PATH"
echo "name\tvalue"

区别:

写法 行为
$user 变量替换
"$user" 变量替换,保留参数边界
'$user' 不替换
\$user 转义 $
`cmd` 命令替换,旧写法
$(cmd) 命令替换,推荐

推荐:

today=$(date +%F)
echo "backup-$today.tar.gz"

包含空格的路径必须加引号:

cp "my config.yml" /tmp/
find /opt -name '*.log'

2.6 重定向

标准输入、输出和错误:

描述符 名称 数字
stdin 标准输入 0
stdout 标准输出 1
stderr 标准错误 2

输出:

command > out.log
command >> append.log
command 2> error.log
command > all.log 2>&1
command &> all.log

bash 支持 &>。跨 Shell 脚本更推荐下面的写法:

command > all.log 2>&1

丢弃输出:

command > /dev/null
command > /dev/null 2>&1

输入:

mysql < schema.sql
sha256sum app.tar.gz < checksum.txt

Here Document:

cat <<'EOF'
server:
  port: 8080
EOF

带引号的 EOF 不做变量替换,适合写配置模板。

2.7 管道

管道把前一个命令的标准输出接到后一个命令的标准输入:

ps aux | grep java | grep -v grep

常用管道:

cat access.log | wc -l
ps aux | sort -nrk 3 | head
du -sh /var/log/* | sort -h
journalctl -u nginx --since today | tail -100

错误流不会自动进入管道:

command 2>&1 | grep ERROR

查看大文件时优先用 less,避免把数十万行刷到终端。

2.8 查找与过滤

grep

grep ERROR app.log
grep -n ERROR app.log
grep -i error app.log
grep -v DEBUG app.log
grep -r "listen 80" /etc/nginx
grep -E 'ERROR|WARN' app.log
grep -c ERROR app.log

常用选项:

选项 含义
-i 忽略大小写
-n 显示行号
-v 反向匹配
-r 递归目录
-E 扩展正则
-c 统计匹配行
-F 按字面字符串匹配
-A/-B/-C 显示后、前、上下文

查找文件:

find /etc -name '*.conf'
find /var/log -type f -name '*.gz'
find /data -type f -size +100M
find /opt/app -type f -mmin -30
find /tmp -type f -delete

删除动作要分两步执行:

find /tmp -type f -name '*.tmp' -print
find /tmp -type f -name '*.tmp' -delete

2.9 历史与补全

历史命令:

history
history | tail -20
!$
!! 
Ctrl+R

常用快捷键:

快捷键 作用
Ctrl+C 终止前台命令
Ctrl+D 结束输入或退出 Shell
Ctrl+R 搜索历史
Ctrl+A 到行首
Ctrl+E 到行尾
Ctrl+U 删除到行首
Ctrl+K 删除到行尾
Ctrl+L 清屏
Tab 补全

历史命令是审计线索,也可能包含敏感参数。不要把密码直接写在命令行里。

2.10 获取帮助

ls --help
man ls
info coreutils
type cd
which nginx
whereis nginx
alias

man 常用章节:

章节 内容
1 用户命令
5 配置文件格式
8 管理命令

示例:

man 5 crontab
man 8 systemctl

不同发行版的命令行为可能不同。生产执行前,应以当前系统的 man--help 和官方文档为准。

2.11 生产操作习惯

变更前:

1. 确认主机、用户、目录
2. 备份目标文件
3. 预览通配符展开结果
4. 确认命令作用范围
5. 准备回滚命令

变更中:

1. 只做计划内操作
2. 保留终端输出
3. 记录时间戳
4. 出现异常立即停止

变更后:

1. 检查配置语法
2. 检查进程和端口
3. 观察日志
4. 验证业务指标
5. 更新工单记录

备份配置:

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%F-%H%M)

本章小结

命令行操作的核心是理解命令、选项、参数、路径、引号、重定向和管道。通配符和变量让操作高效,也让风险放大;生产变更前先预览展开结果,并保留备份与回滚方案。遇到不熟悉的命令,优先查看当前系统的帮助文档。

思考题

  1. >>> 的区别是什么?
  2. 为什么 command > log 2>&1 不能写成 command 2>&1 > log 的等价形式?
  3. 单引号和双引号对变量替换有什么区别?
  4. 如何安全执行 find ... -delete
  5. 设计一条管道统计 Nginx 访问日志中出现次数最多的前 10 个客户端 IP。