每位系统管理员现在必须掌握的五个必备 Linux 命令
通过这份涵盖每位系统管理员必须掌握的五种不可或缺的 Linux 工具的必备指南,精通命令行。我们详细介绍了用于服务管理的 `systemctl`、用于网络分析的 `ss`、用于系统配置(或包管理)的 `dnf`/`apt`、用于高级自动化和数据解析的 `awk`,以及用于安全远程访问和隧道的 `ssh`。了解实用用法、最佳实践和高级标志,以简化日常操作、增强故障排除能力并提高系统安全性。
每位系统管理员必须立即掌握的五个基本Linux命令
当你能从命令行快速检查服务器时,Linux系统管理会变得更容易。仪表盘有帮助,但当服务宕机、端口关闭或需要解析日志时,这些基本的Linux命令能为你提供最快的答案路径。
本指南涵盖了你将经常使用的五个命令:systemctl、ss、apt或dnf、awk和ssh。示例侧重于日常操作、故障排除和安全远程访问。
1. 服务生命周期管理:systemctl
systemctl命令是控制systemd的主要接口,systemd是大多数当前服务器发行版(包括RHEL、Fedora、Debian和Ubuntu)使用的服务管理器。你用它来管理服务、定时器、套接字和启动目标。
核心systemctl操作
理解运行时状态(start/stop)和启动配置(enable/disable)之间的区别至关重要。
| 命令 | 描述 | 用途 |
|---|---|---|
status |
显示详细的当前状态,包括最近的日志。 | 故障排除和即时检查。 |
start / stop |
立即更改服务状态。 | 运行时控制。 |
enable / disable |
配置服务在启动时启动/不启动。 | 持久性控制。 |
restart |
在一个操作中停止然后启动服务。 | 应用配置更改。 |
reload |
告诉服务重新加载其配置文件而不中断(如果支持)。 | 零停机配置更新。 |
# 检查Web服务器的状态
sudo systemctl status httpd.service
# 确保SSH服务在启动时启动并立即启动它
sudo systemctl enable sshd --now
# 列出所有失败的服务
systemctl list-units --type=service --state=failed
最佳实践: 在启动或重启服务后,始终使用
systemctl status <service>来确认服务是否正常运行,并检查输出中的配置错误。
2. 网络分析和套接字统计:ss
ss命令(套接字统计)是已弃用的netstat的现代、更快的替代品。它对于排查网络连接问题、识别开放端口、验证防火墙规则以及诊断与套接字相关的性能瓶颈至关重要。
实用的ss标志
系统管理员主要使用ss来查看哪些端口是开放的以及哪些应用程序正在监听。
# 显示监听的TCP套接字(t)、UDP套接字(u)、数字地址(n)和进程信息(p)
ss -tulnp
# 查找监听端口80的进程
sudo ss -tulnp | grep ':80'
# 显示所有已建立的到服务器的连接
ss -o state established
高级用法:过滤和汇总
你可以使用过滤选项快速分析特定的连接类型,这在安全审计或事件响应期间非常宝贵。
# 显示来自源地址192.168.1.5的TCP连接
ss -n state established '( src 192.168.1.5 )'
# 按协议汇总套接字统计信息
ss -s
3. 稳健的软件配置:dnf / apt
无论你是使用dnf管理RHEL系列系统,还是使用apt管理Debian系列系统,包管理都能保持服务器打补丁和可用。良好的包管理习惯包括刷新元数据、审查升级、删除未使用的包以及知道哪个仓库提供了某个包。
基本包管理任务
| 任务 | dnf (RHEL/Fedora) |
apt (Debian/Ubuntu) |
|---|---|---|
| 更新元数据 | sudo dnf check-update |
sudo apt update |
| 应用安全/系统更新 | sudo dnf upgrade |
sudo apt upgrade |
| 安装包 | sudo dnf install httpd |
sudo apt install apache2 |
| 删除包 | sudo dnf remove <package> |
sudo apt remove <package> |
| 删除未使用的依赖项 | sudo dnf autoremove |
sudo apt autoremove |
| 搜索包 | dnf search <keyword> |
apt search <keyword> |
# 示例:更新和清理Ubuntu服务器
sudo apt update && sudo apt upgrade -y
sudo apt autoremove
# 示例:安装包并查看包详细信息 (RHEL/Fedora)
sudo dnf install vim-enhanced
dnf info vim-enhanced
提示: 在生产环境中错开更新。在Debian和Ubuntu上,理解
apt upgrade和apt full-upgrade之间的区别。在RHEL系列系统上,将常规包更新与主要操作系统版本升级分开。
4. 高级文本处理和报告:awk
虽然grep非常适合简单过滤,sed处理流编辑,但awk编程语言是脚本中结构化数据分析、报告和复杂文本操作的终极工具。系统管理员经常使用awk来解析日志文件、配置文件和命令输出。
awk逐行处理文本,根据分隔符(默认为空白)将每行分成字段。变量$1、$2等引用这些字段。
awk语法和示例
# 语法:awk 'PATTERN { ACTION }'
# 示例:从/etc/passwd打印用户名(字段1)和shell(字段7)(分隔符为':')
awk -F ':' '{ print "User: " $1 " | Shell: " $7 }' /etc/passwd
# 示例:查找所有使用超过10% CPU的进程,并打印PID和CPU使用率
ps aux | awk 'NR>1 && $3 > 10 { print "PID: " $2 " | CPU%: " $3 }'
# 示例:对'ls -l'列出的文件大小(字段5)求和
ls -l | awk 'NR>1 { sum += $5 } END { print "Total Bytes: " sum }'
当数据需要在传递给另一个命令或存储到报告之前进行提取、格式化或计算时,awk非常有用。例如,你可以将嘈杂的进程输出转换为简短的CPU报告,而无需打开电子表格。
5. 安全远程访问和隧道:ssh
安全Shell协议(ssh)是远程Linux管理的生命线。系统管理员不仅必须掌握基本登录,还必须掌握高级配置、密钥管理和隧道技术,以维护对基础设施的安全高效访问。
掌握基于密钥的身份验证
密码身份验证容易受到暴力攻击。系统管理员必须依赖SSH密钥来获得更强的安全性。
- 生成密钥对:
ssh-keygen -t ed25519 - 将公钥复制到远程服务器:
ssh-copy-id user@remote_host
基本ssh配置和用法
本地SSH配置文件(~/.ssh/config)允许你定义别名和永久连接参数,从而简化日常操作。
# 示例 ~/.ssh/config 条目
Host db-prod-server
Hostname 192.168.10.50
User sysadmin_user
Port 2222
IdentityFile ~/.ssh/id_ed25519_prod
LocalForward 8080 127.0.0.1:80
SSH隧道(端口转发)
隧道允许你安全地访问防火墙后面的服务或安全地代理流量。两种主要类型是:
本地转发(
-L): 将你本地机器上的一个端口映射到远程服务器可达的主机和端口。# 通过本地端口5000访问远程服务器上运行的数据库(端口3306) ssh -L 5000:localhost:3306 user@remote_host远程转发(
-R): 将远程端口映射到本地机器可达的主机和端口。当远程服务器需要临时访问本地开发服务时很有用。# 远程主机可以通过其端口8080访问我的本地Web服务器(80) ssh -R 8080:localhost:80 user@remote_host
总结
如果你能用systemctl管理服务,用ss检查套接字,用apt或dnf保持包更新,用awk解析文本,并用ssh安全地访问系统,你就能处理大多数一线Linux管理工作。在你的运行手册中保留一小套经过测试的命令,然后根据环境需求进行扩展。