作为一名Linux系统管理员,在生产环境中工作,你的日常工作都是关于保持系统稳定、安全,并发挥最佳性能。从故障排除到资源监控和确保正常运行时间,你承担着多重角色,而时间总是非常宝贵。
尽管Linux提供了数千条命令,但并不是所有的命令都是你日常使用的工具箱的一部分。然而,有一组强大而可靠的核心命令,你会每天使用,通常会用多次。
在本文中,我将带你了解每个系统管理员必须掌握的20个最基本的Linux命令。这些不仅仅是命令,它们是你用于监控性能、管理日志、控制服务、调试问题等多种用途的得力工具。
1. htop - 互动进程查看器
如果你还在使用 top,现在是时候切换到 htop 了,它是一个强大且用户友好的替代品,可以在干净、互动的界面中显示 CPU、内存、交换使用、进程树等更多信息。
htop
使用箭头键进行滚动,F6
用于对进程进行排序,F9
用于杀死一个进程,这比手动查找PID并使用杀死命令要容易得多。
2. lsof - 列出打开的文件和套接字
lsof 代表 列出打开的文件,它是识别哪个进程正在使用 Linux 系统上的特定文件、目录或网络端口的最强大工具之一。
lsof -i :80
这将显示当前使用80端口的PID、用户和命令,这在您的网络服务器无法启动因为端口已被占用时通常是有用的。
3. journalctl - 查看系统日志(Systemd)
在基于systemd的系统上(如RHEL 7+、CentOS 7+、Ubuntu 18.04+),journalctl是您访问和分析系统日志的首选工具。
journalctl -xe
该命令显示最近的日志,重点关注错误和关键消息 - 当某些东西出现故障时非常有用。
想查看特定服务的日志吗?只需添加 -u
标志,后面跟上服务名称:
journalctl -u nginx
4. systemctl - 管理 Systemd 服务
大多数现代 Linux 发行版将 systemd 作为默认的初始化系统,而 systemctl
命令允许您启动、停止、重启、启用、禁用以及检查系统上服务的状态。
以下是一些最常见和有用的例子:
# Check the status of a service
systemctl status apache2
Restart the SSH service
systemctl restart sshd
Enable Nginx to start at boot
systemctl enable nginx
5. du — 检查磁盘使用情况
需要找出是什么占用了服务器上的空间吗?du(磁盘使用情况)命令是解决这一问题的首选工具。
du -sh /var/*
此命令显示 /var
中每个子目录的大小。-s
标志为您提供摘要(而不是列出每个文件),-h
使输出更易于阅读(例如 MB、GB 而不仅仅是字节)。
120M /var/log
1.5G /var/lib
4.0K /var/tmp
6. df - 查看磁盘空间使用情况
想知道您的服务器磁盘上还剩多少空间吗?使用 df 命令,它显示了所有挂载文件系统中已使用的磁盘空间和仍然可用的空间。
df -h
当你处理满盘、备份或由于没有剩余空间而导致的应用崩溃时,这个命令是必不可少的。
7. free- 检查内存和交换使用情况
内存不足?使用免费命令检查系统正在使用多少RAM和交换空间。
free -h
8. uptime - 检查系统正常运行时间和负载均衡
uptime 命令显示您的 Linux 系统已运行多久,当前有多少用户登录,以及过去 1 分钟、5 分钟和 15 分钟的系统负载平均值。
uptime
示例输出:
10:42:35 up 3 days, 5:22, 2 users, load average: 0.10, 0.25, 0.32
9. top - 基本实时系统监视器
top 的用户友好程度不如 htop,但几乎在每个 Linux 系统上都预装。如果你正在使用一个最小化或新安装的服务器,而 htop 还不可用,那么 top 是你的快速解决方案。
top
10. ps aux - 获取正在运行的进程快照
需要快速查看系统上运行的所有进程吗?ps aux
给你一个完整的快照——谁在运行什么,他们使用了多少CPU和内存,等等。
ps aux | grep apache
此命令列出所有进程,而 grep apache
部分仅过滤出与 Apache 相关的进程。当你跟踪服务、调试问题或编写监控进程活动的脚本时,这非常方便。
想要深入了解吗?请使用:
ps aux --sort=-%mem | head
这显示了按降序排列的最耗费内存的进程。
11. netstat/ss - 检查网络连接
作为系统管理员,了解哪些服务在什么端口上监听以及您的服务器上有哪些活动的远程连接是很重要的。
多年来,netstat 一直是首选命令。但现在,ss(套接字统计)取代了它 - 它更快,更现代,并且得到积极维护。
ss -tuln
12. ip - 网络接口和路由
ip命令是旧的ifconfig和route
命令的现代替代品。如果你仍在使用ifconfig
,是时候切换了——ip
更强大,积极维护,并且在所有现代Linux发行版中默认可用。
这里有两个你每天都要使用的重要子命令:
ip a # Shows all IP addresses and network interfaces
ip r # Displays the system's routing table
13. ping - 网络连接
这是检查您的系统是否可以访问主机(网站、服务器或IP)的最简单和最快的工具之一。它通过发送ICMP(互联网控制消息协议)回显请求并等待回复来工作。
ping google.com
如果主机处于正常状态并且可访问,您将看到带有时间、TTL(生存时间)和数据包统计信息的回复。想只发送少量数据包而不是不断洪泛吗?请使用 -c
选项(用于计数):
ping -c 4 google.com
14. traceroute/tracepath - 网络路由调试
当服务器或网站没有响应,而ping没有给你任何答案时,是时候查看你的数据包在网络中的传输情况以及它们卡在哪里了。这时,traceroute
(或其替代工具 tracepath)就派上用场了。
这些命令显示了数据包从你的系统到目的地的整个路径,列出了沿途的每个中间路由器或跳数。
traceroute google.com
15. nc (Netcat) - 测试端口连通性
nc,简称Netcat,常被称为网络的瑞士军刀。它对系统管理员最常见和强大的用途之一是检查远程机器上的端口是否开放和可达——对于故障排除服务,如SSH、网页服务器或数据库端口,非常方便。
假设你想测试远程服务器192.168.1.10
上的SSH(端口22)是否开放。
nc -zv 192.168.1.10 22
16. rsync - 通过SSH同步文件
在备份或同步文件时,没有什么比 rsync 更好,它快速、高效且网络友好。与 scp 不同,scp 会从头开始复制所有内容,而 rsync
只传输文件中已更改的部分,从而节省了时间和带宽。
rsync -avz /data/ user@remote:/backup/
此命令用于将本地计算机上 /data/
目录中的所有内容通过 SSH 同步或复制到远程服务器,并将其放入该服务器的 /backup/
目录中。
17. crontab - 计划任务(任务自动化)
作为系统管理员,您肯定不想每天手动运行脚本,对吧?这就是 crontab 的用武之地,它可以让您在特定时间自动安排任务运行——无论是运行备份、轮换日志还是发送报告。
crontab
代表“cron 表”——一个包含由 cron 守护进程按计划运行的命令列表的文件。它就像是您在 Linux 上的个人任务调度器.
crontab -e
添加条目,例如:
0 2 * * * /usr/bin/backup.sh
crontab 中的每一行都遵循这个 5 字段格式:
* * * * * command-to-run
│ │ │ │ │
│ │ │ │ └── Day of the week (0 - 7) [Sunday = 0 or 7]
│ │ │ └──── Month (1 - 12)
│ │ └────── Day of the month (1 - 31)
│ └──────── Hour (0 - 23)
└────────── Minute (0 - 59)
18. tail -f - 实时日志监控
当Linux系统出现问题时,日志通常是你应该首先查看的地方。tail -f
命令让你实时查看日志,这对于调试非常有用。
tail -f /var/log/messages
想要过滤特定服务或关键字的日志吗?请与 grep 结合使用:
tail -f /var/log/syslog | grep sshd
19. chmod 和 chown - 文件权限和所有权
在任何Linux系统中,管理文件权限至关重要,这两个命令可以帮助您控制谁可以访问什么内容:
chmod
设置权限(读取、写入、执行).chown
更改文件的所有者和组。
例子:
chmod 755 script.sh
chown user:user file.txt
20. find - 搜索文件
需要定位一个文件,但不确定它在哪里?find命令是你最好的选择,它功能强大,灵活,可根据文件名、大小、类型甚至修改日期进行搜索。
find /var/log -name "*.log"
想要清理旧文件吗?
find /tmp -type f -mtime +7 -delete
这将删除 /tmp
中超过 7 天的文件 – 对于磁盘清理脚本非常有用。