导读:本文面向刚接触Linux的运维人员、开发者和学生,系统梳理工作中最高频的Linux命令,覆盖文件管理、文本处理、权限设置、进程与系统状态查看等场景。阅读后你将掌握每个命令的核心用法、常用参数和典型示例,并了解如何规避误操作风险,能够独立完成日常服务器维护与排障任务。

核心结论
Linux常用命令并非越多越好,真正在生产环境中高频使用的命令大约有30到50个,集中在文件操作(ls、cd、cp、mv、rm、find)、文本处理(grep、sed、awk、cat、tail)、权限管理(chmod、chown、useradd)、进程管理(ps、top、kill)以及系统信息查看(df、free、uname、uptime)这几大类。掌握这些命令的常用参数和组合用法,足以应对绝大多数日常操作。本文不追求命令数量堆砌,而是按使用频率和实用性挑选核心命令,并给出可直接执行的示例。
前置条件与适用环境
- 操作系统版本:本文命令适用于主流Linux发行版,包括CentOS 7/8、Ubuntu 20.04/22.04、Debian 11/12、Rocky Linux等。部分命令(如apt、yum)因发行版不同有所差异,文中会单独说明。
- 权限要求:涉及系统配置、用户管理的命令(如useradd、chown、systemctl)需要root权限或sudo权限;普通文件操作命令无需特殊权限。
- 依赖说明:grep、sed、awk、find等为Linux基础工具,默认已安装。若系统为精简安装,可使用发行版包管理器补充,例如CentOS执行
yum install -y grep sed gawk findutils,Ubuntu/Debian执行apt install -y grep sed gawk findutils。 - 备份建议:执行rm、mv、cp等操作前,建议对重要数据先备份,尤其是使用rm -rf或覆盖式重定向(>)时。
- 环境差异:部分命令在不同发行版中参数略有差异,例如
ps aux在BusyBox环境中可能不支持,需使用ps -ef。文中会标注此类差异。
完整操作步骤
以下按使用场景分组介绍命令,每组先说明用途,再给出示例代码和预期结果。
一、文件与目录管理
这是最基础也最常用的命令组。以下示例演示如何查看目录内容、切换路径、复制与移动文件。
# 1. 查看当前目录下的所有文件(含隐藏文件),以列表形式显示详细信息
ls -la /home/user
# 预期输出:显示文件权限、属主、大小、修改时间和文件名,隐藏文件以点开头
# 2. 切换到指定目录并返回上一级
cd /var/log
cd ..
# 3. 复制文件并保留原文件属性
cp -p /etc/nginx/nginx.conf /root/nginx.conf.bak
# 4. 移动文件并重命名
mv /tmp/test.txt /home/user/documents/renamed.txt
# 5. 安全删除文件(避免误删,使用 -i 交互确认)
rm -i /home/user/oldfile.log
执行ls -la后,输出第一列的权限位(如-rw-r–r–)用于判断文件类型和权限。cp -p保留时间戳和属主信息,在备份场景中非常实用。rm -i会在删除前询问确认,降低误操作风险。
二、文本内容查看与处理
查看日志、过滤关键信息是日常运维最高频的操作。以下命令组合能解决大部分文本处理需求。
# 1. 实时查看日志文件尾部内容(常用于跟踪应用输出)
tail -f /var/log/messages
# 2. 查看文件前20行
head -n 20 /etc/passwd
# 3. 在文件中搜索包含“error”的行,并显示行号
grep -n \"error\" /var/log/nginx/error.log
# 4. 使用sed提取文件的第10到20行
sed -n '10,20p' /etc/nginx/nginx.conf
# 5. 使用awk按冒号分割,打印第一和第三列(例如/etc/passwd中的用户名和UID)
awk -F: '{print $1, $3}' /etc/passwd
tail -f会持续输出新增内容,按Ctrl+C退出。grep支持正则表达式,-i忽略大小写,-r递归搜索目录。sed和awk是文本处理利器,但语法较复杂,初学者可先掌握上述基础用法。
三、权限与用户管理
多用户环境下,权限管理直接关系系统安全。以下命令用于修改权限和创建用户。
# 1. 将脚本设置为可执行权限
chmod +x /home/user/deploy.sh
# 2. 递归修改目录权限为755,文件权限为644
chmod -R 755 /var/www/html
find /var/www/html -type f -exec chmod 644 {} \;
# 3. 修改文件属主和属组
chown root:root /etc/nginx/nginx.conf
# 4. 创建新用户并设置家目录和shell
useradd -m -s /bin/bash devops
passwd devops
chmod的755表示属主可读写执行,属组和其他用户可读执行,适用于网站目录。chown修改属主时需注意权限,避免普通用户无法访问。useradd -m自动创建家目录,-s指定登录shell。
四、进程与系统资源查看
定位系统瓶颈或异常进程时,以下命令能快速提供信息。
# 1. 查看当前所有进程,以CPU占用率排序(动态更新)
top
# 2. 静态查看进程列表,显示完整命令行参数
ps -ef | grep java
# 3. 终止指定PID的进程(先确认PID,再执行kill)
kill -9 12345
# 4. 查看磁盘空间使用情况
df -h
# 5. 查看内存使用情况
free -h
top界面中按P键按CPU排序,按M键按内存排序,按q退出。ps -ef配合grep可精确查找特定程序。kill -9为强制终止,可能造成数据丢失,建议先尝试kill(默认发送TERM信号)。df -h以人类可读格式显示,free -h显示内存总量、已用和缓存。
五、网络与连接排查
服务器网络异常时,这些命令能帮助定位问题。
# 1. 测试与目标主机的连通性
ping -c 4 8.8.8.8
# 2. 查看本机监听端口和对应进程
ss -tlnp
# 3. 查看路由表
ip route show
# 4. 使用curl测试HTTP接口响应
curl -I https://example.com
ss命令替代了旧的netstat,-t显示TCP,-l显示监听,-n显示数字端口,-p显示进程信息。ip route show查看默认网关。curl -I仅获取响应头,用于快速判断服务是否正常。
常见报错与解决方法
报错一:bash: command not found
原因:命令未安装或PATH环境变量未包含命令所在目录。
检查方法:执行echo $PATH查看路径,执行which 命令名确认命令是否存在。
修复方法:若命令确实未安装,用包管理器安装。CentOS使用yum install -y 包名,Ubuntu/Debian使用apt install -y 包名。若命令已安装但不在PATH中,可临时使用全路径执行,例如/usr/sbin/ifconfig。
报错二:Permission denied
原因:当前用户对目标文件或目录没有相应权限。
检查方法:执行ls -l 文件名查看权限位,执行id查看当前用户和所属组。
修复方法:若确认需要访问,使用sudo提升权限,例如sudo cat /etc/shadow。修改文件权限可使用chmod,但需谨慎,避免过度开放权限造成安全隐患。
报错三:No space left on device
原因:磁盘分区已满。
检查方法:执行df -h查看各分区使用率,执行du -sh /var/log/*定位大文件。
修复方法:清理无用日志或临时文件,例如find /var/log -type f -name \"*.log\" -size +100M -exec truncate -s 0 {} \;。若分区确实不足,考虑扩容或迁移数据。
报错四:grep: 无法识别参数
原因:搜索内容以-开头时被误认为选项,或正则表达式未正确转义。
修复方法:在搜索模式前加--,例如grep -- \"-error\" file.log,或使用grep -e \"-error\" file.log。
生产环境配置与避坑建议
- 使用绝对路径执行脚本:在cron定时任务或systemd服务中,务必使用绝对路径,例如
/usr/bin/find /var/log -name \"*.log\" -mtime +7 -delete,避免因PATH不同导致命令找不到。 - rm -rf 慎用:生产环境中建议先执行
ls -la确认路径,再使用rm -rf /path/to/dir。更安全的做法是使用mv将目录移动到/tmp下,确认无误后再删除。 - 重定向覆盖有风险:
echo \"new content\" > config.conf会直接覆盖原文件。如需追加,使用>>。若不确定原文件内容,先执行cp config.conf config.conf.bak。 - 权限最小化原则:不要随意使用chmod 777。对于Web目录,建议目录755、文件644,属主设为运行Web服务的用户。使用
find批量修改时,先用find /path -type f | head预览结果。 - kill -9 是最后手段:先尝试
kill PID发送TERM信号让进程优雅退出。若进程无响应,再使用-9。强制杀死数据库或应用进程可能导致数据损坏。 - 日志文件定期清理:使用logrotate管理日志轮转,避免单个日志文件无限增长占满磁盘。配置示例:
/etc/logrotate.d/nginx中设置daily轮转、保留7份、压缩。 - 回滚方案:修改系统配置文件前,先备份原文件,例如
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.$(date +%Y%m%d)。若修改后服务异常,可快速恢复。
常见问题 FAQ
问题1:Linux中查看文件内容除了cat还有哪些命令?
cat适合查看小文件全文。查看大文件时建议使用less分页浏览,支持上下翻页和搜索(按/输入关键词)。查看文件尾部用tail,头部用head。实时跟踪日志用tail -f。若需查看二进制文件,可使用xxd或od。
问题2:grep和find有什么区别?
find用于按文件名、类型、大小、时间等属性在文件系统中查找文件。grep用于在文件内容中搜索匹配的文本行。例如find /etc -name \"*.conf\"查找所有.conf文件,grep -r \"listen\" /etc/nginx/在nginx配置目录中搜索包含listen的行。两者可组合使用,但需注意管道符传递的是文件名而非内容。
问题3:如何查看Linux系统版本和内核信息?
查看发行版信息使用cat /etc/os-release(适用于几乎所有现代发行版)。查看内核版本使用uname -r。查看完整内核信息用uname -a。若系统有lsb_release命令,也可使用lsb_release -a,但部分精简系统未安装该工具。
问题4:chmod中的数字权限644和755分别代表什么?
数字权限由三位八进制数组成,分别对应属主、属组、其他用户的权限。读(r)=4,写(w)=2,执行(x)=1,权限值相加。644表示属主可读写(4+2=6),属组和其他用户只读(4)。755表示属主可读写执行(4+2+1=7),属组和其他用户可读执行(4+1=5)。目录默认权限通常为755,文件默认644。
问题5:为什么ps -ef和ps aux输出结果不同?
ps -ef和ps aux是两种不同的输出格式。ps -ef是System V风格,显示UID、PID、PPID、C、STIME、TTY、TIME、CMD。ps aux是BSD风格,显示USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND。两者包含的进程信息基本相同,只是列名和排序不同。在脚本中建议统一使用一种格式,推荐ps -ef因其列名更直观。
问题6:如何安全地终止一个无响应的进程?
首先使用ps -ef | grep 进程名找到PID。先执行kill PID发送TERM信号,等待几秒。若进程仍存在,再执行kill -9 PID强制终止。对于Java应用,可先尝试kill -3 PID生成线程转储,用于诊断后再终止。若进程属于系统服务,使用systemctl stop 服务名更规范。
总结与检查清单
- 执行
ls -la确认文件权限和属主符合预期,特别是Web目录和脚本文件。 - 使用
df -h和free -h确认磁盘和内存资源充足,避免因资源不足导致服务异常。 - 修改配置文件前已备份,备份文件命名包含日期,便于回滚。
- 使用
ps -ef | grep 服务名确认目标进程已启动或已终止,不要只凭命令执行结果判断。 - 测试网络连通性使用
ping和curl,确保服务端口可访问。 - 检查日志文件是否有新增错误,例如
tail -n 50 /var/log/messages。 - 若使用了chmod或chown,重新登录或切换用户验证权限是否生效。
- 对于cron任务,手动执行一次脚本确认无报错,再写入crontab。