什么是 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
中文注释:
less是more的升级版,支持上下滚动、搜索、跳转等操作。
用空格键向下翻页,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 命令不是高深莫测的黑科技,而是开发者日常工作中不可或缺的“第二语言”。它不像图形界面那样直观,但一旦掌握,你会发现它的效率远超点击操作。
从 ls、cd 这些基础命令,到 grep、find 的精准搜索,再到 | 和 > 的组合艺术,每一步都在帮你更高效地与系统对话。
不要害怕命令行,它不是“命令的集合”,而是“解决问题的工具箱”。当你能用几行命令完成别人点十几次鼠标才能做的事时,你就真正理解了 shell 命令的价值。
记住:多练、多查、多写。每天花 10 分钟在终端里敲几个命令,一个月后,你会感谢现在的自己。
shell 命令,是通往系统底层世界的钥匙。掌握它,你不仅是写代码的人,更是掌控代码运行环境的主人。