记得刚开始管理服务器的时候,我盯着终端,完全不知所措。闪烁的光标感觉像是在嘲笑我。几年过去了,现在 Linux 命令 就像呼吸一样自然。无论你正在管理 Linux 服务器,还是计划管理,这 20 条 Linux 命令 都将一次又一次地证明你的用处。

1. ssh – 远程服务器访问
瞧,如果你要管理服务器,一切从 ssh 开始。它能让你连接到千里之外数据中心的机器。只需输入 ssh 用户名 @服务器 IP,砰,就成功了。有时你需要不同的端口——这时 -p 就派上用场了。多亏了 ssh,我都数不清有多少次凌晨两点在沙发上解决了关键问题。
ssh [email protected] -p 2222
2. ls – 目录列表
当然,ls 看起来很无聊。但当你需要查看哪些文件位于何处时,没有什么比它更好了。我常用 ls -la,因为它能显示所有内容,包括那些以点开头的隐藏文件。加上 -h 后,文件大小就变得清晰明了——不用再数零来判断是兆字节还是千兆字节了。
ls -lath /var/log/
3. cd – 目录导航
你会惊讶地发现,在 GUI 中浏览文件夹浪费了多少时间。用 cd 命令,你可以轻松地在文件系统中快速切换。这里有个小技巧:cd 可以跳回到你刚才所在的位置。这些年来,它帮我省去了无数次敲击键盘的麻烦。
cd /etc/nginx/sites-available
4. grep – 文本搜索和过滤
有没有试过在五万行日志文件里找出一个错误?没有 grep,你会发疯的。这玩意儿搜索文本的速度比眨眼还快。当我需要一次性搜索一大堆文件时,我会用 grep -r。当你记不清错误信息是大写还是小写的时候,-i 选项就派上用场了。
grep -i "error" /var/log/apache2/error.log
5. tail – 日志文件监控
日志会告诉你服务器运行的所有信息。tail 命令会显示最新的条目,但 tail -f 才是真正神奇的地方。它会持续显示新出现的行。当出现问题时,我通常会首先运行这个命令。
tail -f /var/log/syslog
6. ps – 进程状态
服务器运行着大量进程,有时会有一个进程失控。运行 ps aux 可以让你了解全部情况——哪些进程正在运行、谁启动了它们、它们占用了多少 CPU。当你搜索特定内容时,可以通过 grep 命令进行管道操作。我已经用这种方法抓到过无数个失控进程了。
ps aux | grep mysql
7. top – 系统性能监视器
把 top 想象成服务器的生命体征监测器。它每隔几秒更新一次,显示哪些进程正在占用资源。当服务器开始爬网时,top 通常会在几秒钟内告诉我原因。按“M”键按内存使用情况排序,“P”键按处理器使用情况排序。
top -u www-data
8. df – 磁盘空间分析
服务器磁盘占满可能是我遇到的最常见的问题。快速运行 df -h 就能准确知道每个驱动器的剩余空间。没有什么比数据库因为忘记轮换日志而导致磁盘占满而崩溃更糟糕的了。
df -h
9. du – 目录使用情况统计
df 命令提示你磁盘已满,但究竟是什么占用了这么多空间呢?这时 du 命令就派上用场了。我通常先用 du -sh * 命令来查看哪些文件夹是罪魁祸首。十有八九,要么是日志,要么是某个被遗忘的备份文件。
du -sh /var/log/*
10. chmod – 文件权限管理
Linux 中的文件权限设置可能比较棘手,但对于安全而言却至关重要。chmod 命令可以控制哪些用户可以读取、写入或运行您的文件。大多数情况下,您会对脚本使用 chmod 755 之类的命令,对常规文件使用 chmod 644 之类的命令。如果这些命令设置错误,要么什么都做不了,要么一切都会变得一团糟——这两种情况都不好。
chmod 755 /usr/local/bin/script.sh
11. chown——所有权控制
Web 服务器对文件所有权非常挑剔。如果你的 Web 应用无法写入其上传文件夹,那么很可能是所有权问题。chown 命令可以解决这个问题。记住,当你需要更改整个目录树时,请使用 -R 选项。这一点我经历过痛苦的教训。
chown -R www-data:www-data /var/www/html
12. systemctl – 服务管理
初始化脚本的时代已经一去不复返了(谢天谢地)。现在我们有了 systemctl,它可以处理你所有的服务。需要重启 Apache 吗?systemctl restart apache2。想检查 MySQL 是否正在运行?systemctl status mysql。简洁明了。
systemctl restart nginx
13. journalctl – 系统日志分析
这是 systemd 的日志系统,说实话,它非常棒。运行 journalctl -f 可以实时跟踪所有系统日志。当系统崩溃时,journalctl -u service-name 通常能找到答案。过去在 /var/log 中搜索的日子已经过去了。
journalctl -u ssh -n 50
14. netstat – 网络统计
从安全角度来看,您需要了解哪些端口已打开以及谁在连接到您的服务器。netstat -tuln 会显示所有正在监听的端口。如果您发现某些不该监听的端口正在监听,则需要进行调查。此外,它还有助于找出服务无法启动的原因——通常该端口已被占用。
netstat -tuln | grep :80
15. iptables – 防火墙配置
防火墙是你的第一道防线,而 iptables 是你控制大多数 Linux 系统防火墙的方式。屏蔽 IP、开放端口、限制连接——这些操作用一段时间后就会变得很自然。
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
16. rsync – 文件同步
在服务器之间复制文件?请不要使用 FTP。rsync 更快、更智能、更可靠。它只复制更改的内容,这对于备份来说非常棒。-avz 参数是我的首选:归档模式、详细输出和压缩。只需设置一次,您的备份几乎会自动运行。
rsync -avz /local/path/ user@remote:/backup/path/
17. find – 文件搜索实用程序
有时你知道某个文件存在,但却不知道它在哪里。find 命令就是你的“猎犬”。查找过去一天内修改过的所有文件?大于 100MB 的文件?还是权限奇怪的文件?find 可以帮你找到它们。将它与 -exec 命令结合使用,你就能批量修复问题。
find /home -type f -name "*.log" -mtime +30
18. wget – 文件下载工具
直接将文件下载到服务器可以省去不必要的传输。wget 命令可以处理各种协议,并支持使用 -c 参数断点续传。与本地下载后再上传相比,这种直接下载方式可以节省带宽和时间。
wget -c https://example.com/largefile.tar.gz
19. tar – 档案管理
归档文件在 Linux 环境中很常见。tar 命令用于创建和提取归档文件,其中 -czf 选项用于创建压缩归档文件,-xzf 选项用于提取压缩归档文件。了解这些操作对于处理备份、软件分发和文件传输至关重要。
tar -czf backup.tar.gz /var/www/html/
20. cron – 任务计划程序
自动化可以减少重复性工作,并确保任务执行的一致性。crontab -e 命令可以管理从备份到维护脚本的计划任务。虽然 cron 语法需要初步学习,但自动化的优势使其物有所值。配置良好的 cron 作业只需极少的人工干预即可维护服务器健康。
0 2 * * * /usr/local/bin/backup.sh (runs daily at 2 AM)
常问问题
问:我必须记住所有的命令和选项吗?
当然不是。只要理解每个命令的作用,并准备好参考即可。使用 use 命令就能记住最常用的选项。man 命令(例如 man grep)可以随时提供文档。
问: 作为初学者,我应该学习或使用哪些命令?
从导航的基本命令开始:ssh、ls、cd 和 grep。掌握这些命令后,继续学习用于监控服务器的命令,例如 ps、top 和 df。这三种命令类型应该能为你与服务器交互打下基础,并在进行实际更改之前提供进一步探索的知识。
问:如何在真实环境中练习这些命令?
练习这些命令的最佳方法是搭建自己的虚拟机,或者,如果愿意的话,使用云服务提供商的免费套餐,并创建一个测试服务器。切记,切勿在生产环境中练习和学习任何命令!大多数用于查看信息的命令都相当安全,但当然,我们还是需要尝试一些修改文件或权限的命令。虚拟机是绝佳的个人实验室。
问:我如何知道针对特定问题应该使用哪个命令?
经验固然重要,但一般来说:使用 ps 或 top 来查找性能问题;使用 df 和 du 来查找磁盘问题;使用 grep 和 tail 来排查日志;使用 netstat 来查找网络问题。如有疑问,请先使用监控命令了解问题,然后再尝试修复。
问:如何学习更高级的 Linux 管理?
掌握这些基础知识后,你就可以开始学习 Shell 脚本、配置管理工具(例如 Ansible)以及容器化(Docker)。在线课程、Linux 文档以及实际项目的实践练习将提升你的学习效率。
结论
您应该将这 20 个命令视为您的基础工具包。您不必立即精通所有命令。我建议您先从屏幕导航和文件管理的基础知识开始。当您逐渐适应之后,再添加一些更强大的监控和自动化功能。
需要说明的是,我们只是触及了皮毛。每个命令的功能远不止这里列出的。当你准备好探索更多功能时,man 命令是你最好的朋友,它几乎涵盖了所有功能,内置了所有文档。将命令组合起来编写实际解决方案的艺术,蕴含着真正的美。只要发挥你的创造力,你就会发现,一行代码就能解决复杂的问题。
如果你坚持下去,那个吓人的闪烁光标将成为你最好的朋友。命令行将从一件苦差事变成你最强大的工具,提升你作为服务器管理员的效率和信心。最终,它只是练习,练习,练习,以及一丝好奇心。
可参考:https://www.kernel.org/doc/html/latest/translations/zh_CN/index.html