shell 命令(保姆级教程)

什么是 shell 命令?初学者的入门指南

在 Linux 或 macOS 系统中,你可能经常听到“终端”、“命令行”、“shell”这些词。其实,它们说的都是同一个东西:一个让你通过输入指令来操控系统的工具。而这些指令,就是我们常说的 shell 命令。

想象一下,你的电脑就像一辆汽车。图形界面(GUI)就像是你坐在驾驶座上,通过方向盘、油门、仪表盘来开车。而 shell 命令,就是直接用手去拨动引擎盖下的各种开关和线路,虽然看起来复杂,但效率极高,尤其适合批量操作和自动化。

对于开发者来说,掌握 shell 命令,就像是学会了“驾驶技巧”和“机械原理”结合的高手。无论是部署代码、管理服务器,还是调试脚本,shell 命令都能让你事半功倍。

今天,我们就来系统地学习一些最常用、最实用的 shell 命令,从基础开始,逐步深入,帮助你真正掌握这个强大的工具。


文件与目录操作:shell 命令的“基本功”

在使用 shell 命令时,最常打交道的就是文件和目录。掌握这几个核心命令,等于掌握了整个操作系统的“地基”。

ls:列出目录内容

ls -l

中文注释
ls 是 list 的缩写,用于查看当前目录下的文件和子目录。
-l 选项表示以“长格式”显示,包括权限、所有者、大小、修改时间等详细信息。
比如输出中第一列 drwxr-xr-x 表示这是一个目录,且有读写执行权限。

cd:切换目录

cd /home/user/project

中文注释
cd 是 change directory 的缩写,用于切换当前工作目录。
输入完整路径 /home/user/project,系统就会跳转到该目录。
你也可以用 cd .. 返回上一级目录,cd ~ 回到用户主目录。

mkdir:创建目录

mkdir my_new_folder

中文注释
mkdir 用于创建新目录。
这条命令会在当前目录下创建一个名为 my_new_folder 的文件夹。
如果要创建多级目录,可以用 -p 选项:mkdir -p a/b/c,自动创建所有中间目录。

rm:删除文件或目录

rm -r my_new_folder

中文注释
rm 是 remove 的缩写,用于删除文件或目录。
-r 选项表示递归删除,即删除目录及其内部所有内容。
⚠️ 注意:删除操作不可逆,请务必确认路径正确。
建议先用 ls 看一眼再删,养成好习惯。


文件内容查看与编辑:快速掌握文本操作

很多时候,我们不仅要管理文件,还要查看甚至修改它们的内容。shell 提供了一系列轻量级但强大的工具。

cat:查看文件内容

cat README.md

中文注释
cat 是 concatenate 的缩写,本意是“连接”,但常用于显示文件内容。
这条命令会把 README.md 文件的所有内容打印到终端。
适合查看小文件,比如配置文件或说明文档。

more / less:分页查看大文件

less large_log.txt

中文注释
lessmore 的升级版,支持上下滚动、搜索、跳转等操作。
空格键 向下翻页,b 键向上翻页,q 退出。
比起 cat,它更适合查看日志文件这类大文本。

echo:输出文本或写入文件

echo "Hello, World!" > hello.txt

中文注释
echo 用于输出文本。
> 是重定向操作符,表示把输出内容写入文件,而不是显示在屏幕上。
如果文件不存在,会自动创建;如果存在,会覆盖原内容。
若想追加内容,用 >>echo "New line" >> hello.txt


文件搜索与查找:精准定位目标

在项目中,你可能需要找某个文件、某个关键词。shell 提供了强大的搜索工具。

find:按条件查找文件

find . -name "*.py" -type f

中文注释
find 命令用于在目录树中查找文件。
. 表示从当前目录开始搜索。
-name "*.py" 表示查找所有以 .py 结尾的文件。
-type f 表示只查找文件(不包括目录)。
常用于快速定位代码文件或日志。

grep:在文件中搜索关键词

grep "error" app.log

中文注释
grep 是 global regular expression print 的缩写,用于在文本中搜索匹配的行。
这条命令会在 app.log 文件中查找所有包含 “error” 的行。
可以配合 -i 忽略大小写,-r 递归搜索目录,-n 显示行号。
比如:grep -rin "user" ./src/ 会在 src 目录下查找所有包含 “user” 的行,并显示行号。


权限与用户管理:理解系统的安全机制

shell 命令不只是操作文件,还涉及系统权限。了解权限模型,才能避免“删错文件”“改不了配置”等问题。

chmod:修改文件权限

chmod 755 script.sh

中文注释
chmod 是 change mode 的缩写,用于修改文件或目录的访问权限。
数字 755 代表权限设置:

  • 第一位 7 = 读 + 写 + 执行(rwx)
  • 第二位 5 = 读 + 执行(r-x)
  • 第三位 5 = 读 + 执行(r-x)
    所以这个脚本对所有者可读写执行,对组和其他用户只可读执行。
    常用于设置可执行脚本权限。

chown:修改文件所有者

chown user:group file.txt

中文注释
chown 是 change owner 的缩写,用于修改文件的所有者和所属组。
这条命令将 file.txt 的所有者改为 user,所属组改为 group
通常用于系统管理或团队协作时,调整文件归属。


管道与重定向:让命令“协同工作”

shell 命令最强大的地方,在于它们可以组合使用。通过管道和重定向,你可以把多个命令“串联”起来,形成一个自动化流程。

管道符 |:连接命令输出

ps aux | grep nginx

中文注释
| 是管道符,表示将前一个命令的输出作为后一个命令的输入。
ps aux 列出所有运行中的进程,
grep nginx 从中筛选出包含 “nginx” 的行。
这样你就快速找到了 nginx 的运行状态。

重定向 > 与 >>:控制输出去向

echo "System info" > system.log
echo "Timestamp: $(date)" >> system.log

中文注释
> 会覆盖文件内容,>> 会追加内容。
第一条命令把“System info”写入 system.log,如果文件已存在则清空。
第二条命令在文件末尾追加时间戳,适合记录日志。
这种方式非常适合写自动化脚本。


实战案例:用 shell 命令自动化部署项目

假设你正在开发一个 Web 项目,需要每天自动拉取代码、重启服务。你可以写一个简单的 shell 脚本:

#!/bin/bash

echo "开始部署项目..." >&2

cd /home/deploy/myapp

git pull origin main

if [ $? -eq 0 ]; then
    echo "代码更新成功"
else
    echo "代码更新失败,终止部署" >&2
    exit 1
fi

sudo systemctl restart nginx

echo "部署完成,服务已重启"

中文注释
脚本以 #!/bin/bash 开头,表示使用 bash 解释器运行。
>&2 表示将输出重定向到标准错误,便于日志追踪。
$? 是上一条命令的返回码,0 表示成功,非零表示失败。
exit 1 用于终止脚本,防止后续操作出错。
保存为 deploy.sh,赋予执行权限:chmod +x deploy.sh,然后运行:./deploy.sh


总结:shell 命令是开发者的“第二语言”

shell 命令不是高深莫测的黑科技,而是开发者日常工作中不可或缺的“第二语言”。它不像图形界面那样直观,但一旦掌握,你会发现它的效率远超点击操作。

lscd 这些基础命令,到 grepfind 的精准搜索,再到 |> 的组合艺术,每一步都在帮你更高效地与系统对话。

不要害怕命令行,它不是“命令的集合”,而是“解决问题的工具箱”。当你能用几行命令完成别人点十几次鼠标才能做的事时,你就真正理解了 shell 命令的价值。

记住:多练、多查、多写。每天花 10 分钟在终端里敲几个命令,一个月后,你会感谢现在的自己。

shell 命令,是通往系统底层世界的钥匙。掌握它,你不仅是写代码的人,更是掌控代码运行环境的主人。