Linux常用命令实战:文件操作、系统排查与网络诊断
2026/9/19 2:39:55 网站建设 项目流程

你有没有过这种经历:刚接触 Linux 时,面对黑乎乎的终端窗口,脑子里一片空白,只能一个命令一个命令地查,查完还会发现网上说法五花八门,照着敲还报了错。就算是有几年经验的开发者,换到不熟悉的发行版,或者碰到容器、国产系统这类环境,也经常会被一些“常用命令”卡住。

我这些年维护服务器、搭测试环境、给团队做培训,踩过不少坑,也总结出一条经验:Linux 命令不在于背得多,而在于把最核心的高频命令用透。这篇内容我从日常实操角度出发,把文件操作、文本处理、用户权限、系统排查、网络诊断这些真正天天用的命令整理出来,每个命令都会讲清楚“为什么这么用”和“实际会踩什么坑”,希望能给正在学 Linux、准备面试,或者工作中要用它解决问题的朋友一些参考。

1. 内容整体设计与思路拆解

1.1 为什么说“常用命令”背后是一套逻辑

很多人学命令,习惯对着“Linux 命令大全”从头背到尾,今天背明天忘,真到用的时候还是不会。我自己带过不少新人,发现凡是能很快上手的人,都不是靠死记硬背,而是先理解了命令的构成逻辑。

Linux 命令的基本格式就三部分:命令、选项、参数。比如ls -lh /var/logls是命令本体,-lh是选项(-l表示长格式、-h表示人类可读),/var/log是操作对象。这个结构几乎适用于所有命令,理解了它,你见到一个陌生命令都不会慌:先man 命令名看帮助,再命令名 --help看选项,基本就能用起来。

还有一个特别容易被忽略的底层概念:PATH 环境变量。你在终端里敲date能执行,不是因为你当前目录有个叫 date 的文件,而是 shell 会按照 PATH 变量里记录的路径一个一个去找。之前有个同事装了个软件,怎么敲都提示command not found,折腾半天发现是安装目录没加进 PATH。这个问题在自定义安装软件、自己编译源码时特别常见。

1.2 怎样构建自己的命令知识体系

与其追求“不重不漏地学 1000 个命令”,不如把命令按使用场景归类。我给自己和团队做培训时,通常分成几个模块:文件与目录操作、文本处理、用户与权限、软件包管理、进程与服务、网络诊断、系统资源查看。每个模块掌握 10 个左右高频命令,日常工作就够用了。

比如文件操作就绕不开lscdcpmvrmmkdirtar;文本处理就是grepsedawksortuniqwc;网络诊断则是pingtelnetcurlssnetstatiptables。按照这个思路去学,你会发现很多命令之间有很强的关联性,像ps查出来的进程号,接下去就是killtop去处理,形成一条完整的操作链。

这套思路放到国产系统、容器环境里也一样成立。最近帮客户维护过几台基于国产化系统的服务器,虽然包管理器变成了yumdnf,但系统设计理念、目录结构、常用命令和主流 Linux 发行版基本保持一致,之前积累的命令经验可以直接迁过去。这也是我写这篇文章的出发点:底层的分析思路比命令本身更值钱。

2. 文件操作与文本处理:绝大多数业务场景都踩在这里

2.1 文件与目录操作:先学会保护自己

文件操作是所有命令里使用频率最高的,但也是误操作重灾区。我见过有人想把某个目录下的日志清空,结果rm -rf /var/log/*少打了一个斜杠,变成删除/log目录,整个环境直接崩掉。所以我对新手一直强调:能不裸用rm就尽量不要裸用。

这里分享几个实际环境里很稳的习惯:

  • 删除前先用ls -l确认路径,再用find把要删的文件列出来。
  • 能用mv把文件移动到临时目录,就不要急着rm,等确认没问题再清。
  • 重要操作加上-i参数,如rm -i,会逐条确认,虽然麻烦,但能救命。

创建目录时,mkdir -p a/b/c这个-p参数很关键,父目录不存在时会一并创建。如果不加,在脚本里连续创建多级目录就会报错,这也是很多自动化脚本运行失败的常见原因。

复制和移动文件时,cp -rscp -r用于递归复制目录,rsynccp更适合大目录或增量同步。我之前同步一个几 GB 的应用目录,用cp每次都全量复制,慢得要命,换成rsync -avz --progress以后,增量同步速度提升了不止一个量级。

2.2 文本处理三兄弟:grep、sed、awk

日志分析、配置修改、批量处理,全都要靠文本处理命令。这三个命令我放在一起讲,因为它们是排查问题时的黄金组合。

grep用于筛选。日常用得最多的组合是grep -E(扩展正则)、grep -v(排除)、grep -A/-B(显示匹配行的后几行/前几行)。比如排查接口报错,只搜 ERROR 关键字还不够,经常要连带上文,grep -B 5 "ERROR" app.log能直接把异常前的堆栈上下文拉出来,定位问题会快很多。

sed用于流式编辑。最常用的两个场景:一是替换,sed -i 's/旧内容/新内容/g' 文件;二是按行处理,比如删除前 5 行sed -i '1,5d' 文件。这里有个特别容易踩的坑:在 Mac 上sed -i必须带一个参数,比如sed -i '',否则会报错。我在 macOS 和 Linux 之间切换时,这个细节折腾过我两三次。

awk则适合做列处理和统计。比如查看磁盘空间时,只看利用率列:df -h | awk 'NR>1 {print $5, $6}';按 CPU 使用率列出 Top 进程,也会用ps aux | awk配合sort完成。很多面试题也会考awk的字段处理,其实只要理解默认按空格分割、$1$2分别代表第几列,就能应对大部分场景。

2.3 解压乱码与编码问题:遇到一次就忘不掉

热搜词里有个“linux 解压文件乱码”,这个问题我处理过太多次了,尤其是从 Windows 那边传过来的 zip 包。原因在于:Windows 下压缩工具默认用 GBK/GB18030 编码,Linux 系统默认用 UTF-8,解压时文件名里的中文字节解析不出来,就变成乱码。

解决办法有两个方向。

第一个方向,如果用的是unzip,新版支持-O参数指定编码:unzip -O GBK file.zip。但这个参数在老版本里并不存在,我在 CentOS 7 上就遇到过不支持的情况,这时候就得换第二个方案。

第二个方向,用unar7z这类自动识别编码的工具。unar会自动检测压缩包内文件名编码,基本能无脑解压。如果压缩包特别多,还可以用convmv批量转换文件名,convmv -f GBK -t UTF-8 --notest *

另外那个“linux 输入法”问题,本质也是编码和桌面环境配置的问题。Fcitx 或 IBus 框架下,环境变量GTK_IM_MODULEQT_IM_MODULE设置不正确,输入法就起不来。排查思路是先echo $GTK_IM_MODULE看环境变量,再确认输入法框架软件包是否安装完整,最后检查桌面自启动项里是否加载了输入法进程。

2.4 文件查找技巧:find 与 locate 的取舍

查找文件是高频需求。find功能强大但稍慢,因为它实时扫描磁盘;locate基于数据库,快但会有延迟。日常排查时我习惯先用locate快速定位,再用find精确确认。

find的常见组合包括:按文件名find /data -name "*.log",按时间find /data -mtime -7,按大小find /data -size +100M。配合-exec还能直接对结果做操作,比如清掉 7 天前的临时文件:find /tmp -type f -mtime +7 -exec rm {} \;。这里要注意{}\;的写法,很多新手第一次用都会漏掉反斜杠。

3. 用户权限与软件包管理:搞不定这两个,系统就是裸奔状态

3.1 创建用户与切换权限:从 useradd 到 sudo

创建用户是 Linux 系统管理的基础操作,但很多人一上来就踩坑。最简单的创建命令是useradd test,但这样创建的用户没有家目录、没有 shell,登录后体验很差。推荐做法是:useradd -m -s /bin/bash test-m自动创建家目录,-s指定登录 shell。如果还要指定用户组,加-g 组名;要设置密码,再执行passwd test

这里有个容易忽略的地方:useraddadduser在不同发行版上行为不一样。Debian/Ubuntu 里adduser是交互式、更友好的封装;RHEL/CentOS 里useradd才是主流的低层命令。所以在 CentOS 上用adduser有时不会创建家目录,就会留下隐患。

日常操作坚持一个原则:能用普通用户绝不用 root。需要提权时用sudo。把用户加进wheel组(RHEL 系)或sudo组(Debian 系),用户就能使用 sudo 权限。很多新手在这两个组名上记混,结果明明加了组还是无法 sudo,浪费不少时间。

3.2 权限体系:chmod、chown 与特殊权限

Linux 权限模型用三个数字表示,分别对应 owner、group、others 的读(4)、写(2)、执行(1)权限。比如chmod 755表示文件所有者可读写执行,组和其他人可读可执行。这个计算过程我一直建议新人自己推一遍,印象会深刻很多:7=4+2+1,5=4+1。

实际环境里最常见的两个需求:

  • 把文件归属给某个用户和组:chown user:group 文件
  • 给脚本添加执行权限:chmod +x script.sh

还有一个经常被忽略的目录权限陷阱:目录的写和执行权限决定了你能否在其中创建和删除文件。哪怕文件本身是 777,你所在目录没有写权限,照样创建不了文件。这个知识点很多面试官喜欢考“为什么文件可写但目录不可写时,还是无法删除它”。

特殊权限里,chmod u+s设置 SUID 很实用,比如/usr/bin/passwd默认就带 SUID,让普通用户也能用 root 权限更新密码。但自己给脚本加 SUID 时一定要谨慎,可能带来安全隐患。

3.3 软件包管理:apt、yum/dnf 与国产系统的差异

不同发行版的包管理器不一样,Debian/Ubuntu 用apt,CentOS/RHEL 用yumdnf,国产系统如银河麒麟、统信 UOS 基本兼容 dpkg/apt 或 rpm/yum 体系,网上经常搜“银河麒麟安装软件命令”,其实核心就是根据系统分支选择aptyum

日常我最常用的几组命令:

  • apt update刷新软件源索引,配套apt upgrade升级已装软件。
  • apt install 软件名,卸载用apt remove 软件名
  • yum install -y 软件名-y跳过交互确认,在脚本里几乎必备。

软件源的问题也很常见。默认源在某些网络环境下很慢,或者干脆连不上,这时候就要换国内镜像源。操作其实不复杂:备份原配置文件,然后修改sources.list(Debian 系)或*.repo(RHEL 系)里的地址。改完以后一定要执行apt updateyum makecache刷新缓存,否则可能出现“软件源已更新但安装还是用的旧列表”的错觉。

3.4 环境管理:conda、docker 与容器内命令

现在很多开发环境都容器化或虚拟化了,condadocker这类命令也实际成了“常用命令”。conda主要用于 Python 环境隔离:conda create -n py39 python=3.9创建环境,conda activate py39激活环境。装包时优先用conda install,因为 conda 会一并解决依赖冲突,比 pip 更稳。不过 conda 环境的根目录默认在用户家目录下,如果服务器磁盘配额有限,建议用conda install --prefix /data/conda_env/py39把环境装到数据盘。

docker命令的体系跟常规 Linux 命令不太一样,但思路相通。docker ps查运行容器,docker logs -f 容器名看日志,docker exec -it 容器名 /bin/bash进入容器内部。进去以后你会发现,容器里的系统最小化得连编辑器都没有,这时候更需要熟练使用 grep、awk 这些自带命令来排查问题。之前排查一个容器内中文乱码问题,就是因为基础镜像里没装中文字体,跟宿主机编码完全无关,差点误导了整个排查方向。

4. 系统排查与网络诊断:遇到问题别急着重启

4.1 系统资源查看:CPU、内存、磁盘,一套组合拳

服务器出问题时,第一步不是重启,而是先看资源状态。我的固定排查顺序是:先用top看整体负载,再free -h看内存,接着df -h看磁盘,最后iostatvmstat看 IO。

top打开后按P按 CPU 排序,按M按内存排序,这两个快捷键一定要记住。有时候光看 CPU 使用率还不够,要按1看每个核心的负载分布,如果只有某个核打满,可能是单线程程序绑核导致的问题,而不是整机性能瓶颈。

free -h里有个非常容易被误解的指标:available才是真正的可用内存。如果只看free列,你会觉得内存剩得很少,但那些其实是 page cache 占用的缓存,系统内存不足时会自动释放。判断是否真的内存不足,要看available是否长期偏低,以及有没有频繁的 swap 换入换出。

磁盘方面,df -h看分区使用率,du -sh 目录看具体目录大小。有个经典场景:df显示磁盘满了,但du加起来却没有占到那么多。原因通常是有文件被进程删除但还在被占用,用lsof | grep deleted能定位到底是哪个进程握住了这个删除文件,处理办法一般是重启该进程或服务。

4.2 网络连通性诊断:ping、telnet 与端口连通性

“telnet 命令怎么用”和“telnet ip 端口命令怎么看通不通”这两个热词,说明很多人卡在了网络排查的第一步。

telnet ip 端口是非常方便的端口连通性测试命令。执行后如果弹出一个连接成功的空窗口,说明端口是通的;如果提示Connection refused,说明目标端口没有服务监听;如果一直卡住直到超时,说明中间有防火墙拦截或路由不通。我平时排查的时候还会配合底层的ssnetstat先确认服务器本机是否在监听。

本机查看监听端口:ss -lntp-l只看监听状态,-n不做域名解析,-t只看 TCP,-p显示对应进程。netstat -lntp也能看,但在新系统上netstat有时没有默认安装,而ss属于iproute2包,基本都带。

再延伸一步,如果端口通了但业务还是访问异常,我会用curl -v http://ip:端口看应用层协议返回。curl-v参数能显示完整的请求响应过程,是排查 Web 服务问题最直观的工具。

4.3 防火墙管理:iptables 与系统防火墙

防火墙是网络问题的重灾区。“iptables 命令详解”这个热词后面,往往跟着的问题是:明明服务已经启动了,外部还是访问不了。

遇到这种问题,先确认防火墙状态。systemctl status firewalld(CentOS 7 以上)或ufw status(Ubuntu)可以快速查看。如果用的是 iptables 原生规则,可以执行iptables -L -n -v看当前规则。放行某个端口,比较直观的做法是:iptables -A INPUT -p tcp --dport 8080 -j ACCEPT-A追加规则,-p指定协议,--dport指定目的端口,-j ACCEPT表示放行。改完后要保存规则,不同发行版保存方式不同,CentOS 是service iptables save,需要安装 iptables-services 组件。

这里有个实战教训:改了 iptables 规则后,最好先开着窗口测试一下再保存。我有一次在远端服务器上执行了错误规则,直接把自己 SSH 断开了,端口也被拒了,最后还是靠控制台的“重新初始化服务器”才恢复,教训相当深刻。

4.4 进程、服务与日志:三条线串起来

进程和服务管理也是常考常用的内容。ps -ef查看进程全量列表,pgrep -f 关键字按名字找进程号,kill -9强制结束,pkill -f按名字批量结束。这里我特别提醒一下:能用kill -15(默认)让进程优雅退出,就别上来就kill -9-9会把进程直接杀掉,可能留下缓存文件、未写完的日志,甚至破坏数据库文件的一致性。

服务管理方面,systemctl系列命令目前是主流。这里有一个容易混淆的知识点:systemctl start是临时启动,重启后失效;systemctl enable是设置开机自启动,但它不会立即启动服务。真正要在本次开机和后续开机都生效,需要组合使用,systemctl enable --now 服务名两条一起做。

排查问题时,日志是一切的答案。journalctl -u 服务名 -f可以跟踪某个服务的实时日志。如果服务起不来,我最常用的做法是先看状态:systemctl status 服务名,它会显示最近几条日志;如果不够定位,再journalctl -xe查看完整上下文。很多系统初始化、网络配置、DNS 解析的问题,都能在日志里找到线索。

5. 常见问题与排查技巧实录

日常运维里,我遇到的高频问题其实就那几类,这里整理成速查表,可以直接对照排查。

问题现象排查命令常见原因与解决方向
命令找不到 command not foundecho $PATHwhich 命令名软件没装或安装路径不在 PATH 中,添加软链接或修改 PATH
端口无法访问ss -lntptelnet 127.0.0.1 端口先查本机监听,再查防火墙规则,再查云安全组策略
程序卡死topps -auxstrace -p 进程号CPU 高靠 top 定位,IO 卡住靠 strace 查看系统调用
磁盘空间显示占用高但找不到大文件lsof | grep deleted文件被删除但仍被进程占用,释放方式是重启对应进程
日志中文乱码echo $LANGlocale系统语言环境变量与日志文件编码不一致,统一为 UTF-8
使用kill -9后进程依然存在ps -ef | grep 进程名进程可能处于不可中断睡眠(D状态),只能等 IO 恢复或重启系统

还有一个大家常忽略的命令:history。排查“是谁改了配置”“刚才执行过什么操作”时,history~/.bash_history能帮上大忙。我会在排查问题的同时把操作现场的输入历史调出来,很多诡异的 “改完配置但行为没变” 的问题,最后都发现是因为操作打错了字母或者改错了文件。

再补充两个压箱底的建议。

第一个,不要一上来就执行网上的“一键脚本”。很多安全事件都是因为盲目执行脚本导致的。执行前先下载到本地,用head -50cat看一下脚本内容,确认每一步在做什么。

第二个,习惯用alias给危险操作加减防护。比如alias rm='rm -i',每次删除都会确认;alias ll='ls -lhtr',按时间反序显示文件,最近修改的会排在下面,查看日志目录时特别好用。写完记得把 alias 写进~/.bashrc,再source ~/.bashrc才能永久生效。

我自己的体会是,Linux 常用命令就像厨房里的锅碗瓢盆,天天用到的就那几样,但真正把这几样用好、用顺,就能解决 80% 以上的问题。与其背一大本手册,不如在日常操作时有意识地建立“排查一条链”的习惯:发现问题、定位进程、查看日志、确认网络、验证权限。这套思维通了,换任何发行版、任何环境都不慌。

最后再分享一个小技巧:每次遇到搞不定的问题,解决之后花两分钟把“现象、排查过程、最终原因、修复命令”记成本地笔记。坚持半年以后,你会发现自己排查问题的速度会有肉眼可见的提升,很多原来要查半天的问题,看一眼现象就能直接反应出该敲哪条命令。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询