news 2026/10/7 3:25:29

Linux命令实战指南:从文件操作到系统排查的进阶路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux命令实战指南:从文件操作到系统排查的进阶路径

干了这么多年运维和开发,每天打交道最多的就是 Linux 终端。网上关于 Linux 常用命令的文章多如牛毛,但大多数要么是命令字典式的罗列,要么是抄来抄去的 man 手册翻译,真正能让人看完就上手、遇到问题知道怎么排查的内容少之又少。这篇博文我不打算写成什么“Linux 常用命令大全”,那些你随手一搜就能找到。我把自己这些年实际用过、踩过坑、面试过别人也被人面试过的一些命令和思路整理出来,围绕“文件操作、系统排查、文本处理、权限管理、进程网络、软件安装、以及 Docker/Git/数据库等实际场景”展开,既给刚入行的朋友一条清晰的进阶路径,也给有经验的同行一些可复用的排查套路。内容会尽量说人话,命令给全,参数给明白,避坑点直接标出来。

1. 先把手头最常用的文件与目录操作练熟

这部分是 Linux 的“入门基本功”,也是日常敲得最多的命令。别小看它们,很多所谓的老手其实对cp、mv、rm的细节也是一知半解,真到了生产环境操作就容易出事。

1.1 ls、cd、pwd 这几个命令的隐藏技巧

ls大家都会用,但真正高效的人通常会直接记几个组合:

ls -l # 查看详细信息 ls -lh # 人类可读的文件大小,比如 1.5G、234M,比一堆字节数直观得多 ls -lt # 按修改时间排序,最新修改的在最上面,排障时找刚刚动过的文件非常好用 ls -la # 显示隐藏文件,以 . 开头的配置文件、.git 目录就靠这个看

我自己的习惯是直接在~/.bashrc里加一个别名:

alias ll='ls -lht'

这样每次敲ll就能看到按时间倒序的人类可读列表,效率高很多。

cd除了常见的路径跳转,也有几个快捷技巧:cd -可以回到上一次所在的目录,这个在两条路径之间来回切换时极其实用;cd ~回当前用户的家目录;如果你经常在两个深层目录之间切换,可以试试pushd和popd,虽然有点老派,但比反复输入长路径省事得多。

pwd只有遇到符号链接时会有个小坑。你想拿到“物理路径”而不是带link字样的逻辑路径时,用pwd -P。脚本里判断当前目录、拼接路径时,这招能避免不少莫名其妙的问题。

1.2 cp、mv、rm 的实战姿势与防误删策略

cp复制文件最常用的就是-r递归复制目录,配合-a可以保留权限、属主、时间戳等元信息。备份配置文件、迁移数据目录时,请务必用cp -a而不是cp -r,不然复制过去的文件权限全变了,服务可能直接起不来。

mv移动文件时有个很容易被忽略的细节:跨文件系统移动时,它其实是“先复制再删除”,耗时和cp差不多;同一文件系统内移动才是真正改个指针,瞬间完成。所以大文件移动时如果发现很慢,先看看源和目标是不是同一个挂载盘。另外mv也有-u参数,只在源文件比目标新时才覆盖,做增量同步时有点用处。

说到rm,这可能是 Linux 世界里最需要敬畏的命令。rm -rf误删的案例每年都有无数起,我身边就有同事把项目目录删了然后对着黑屏终端发呆的经历。我的建议是:

  1. 尽量多使用rm -ri来交互式删除,系统会逐个文件问你确认,虽然慢,但安全。
  2. 在~/.bashrc里给rm设置别名,让它默认走回收站逻辑,或者至少加上-i参数提醒。
  3. 生产环境的服务器,建议把rm替换成trash-cli之类带回收站机制的工具,误删了还能救回来。

rm命令我也强烈建议你别去试着执行rm -rf /。面试的时候有些公司把这当成安全意识测试题,实际环境里这是灾难性的操作。如果非要在脚本里清空目录,请谨慎写出完整路径,并且用变量多检查一眼再动手。

1.3 查找文件的利器 find 与 which、locate

文件找不到了,第一反应应该是find。它的基础用法是:

find /data/logs -name "*.log" -type f -mtime -3

这条命令的意思是:在/data/logs下找扩展名为.log的普通文件,并且修改时间是最近3天以内。-mtime后面跟负数代表“以内”,正数代表“恰好多少天之前”。查大文件也常用:

find / -xdev -type f -size +500M 2>/dev/null

-xdev的意思是不跨文件系统查找,不然你会把/proc、/sys这些虚拟目录里的东西也扫一遍,又慢又没意义。想找目录用-type d,找符号链接用-type l。

which用来定位一个可执行命令所在路径,比如which python3。locate是基于数据库的快速查找,速度很快但数据不是实时的,新创建的文件经常搜不到,需要先执行updatedb更新索引。日常定位命令路径用which,做深度文件搜索用find,别把顺序弄反。

2. 系统状态查看:别人看半天,你几秒定位瓶颈

很多新手拿到一台服务器,不知道从哪里下手看系统状况。其实 Linux 自带的几个状态命令如果组合得当,完全可以在两分钟之内判断出 CPU、内存、磁盘、负载的大致瓶颈在哪里。

2.1 top 与 free:CPU 和内存瓶颈的判断套路

top是查看系统整体负载最直接的工具。打开后注意看第一行的load average,这是 1 分钟、5 分钟、15 分钟的平均负载。判断负载是否过高,不能只看这个数字,要结合 CPU 核心数来看。负载长期高于核心数,说明任务排队了,系统确实繁忙;如果核心数很多而负载只有 1-2,那基本没有压力。

top进入交互界面后有几个常用按键:按1展开每个 CPU 核心的使用率,按P按 CPU 占用排序,按M按内存占用排序。定位到可疑进程后记下 PID,再用下面的命令看它的线程情况:

top -H -p PID

这个命令能显示指定进程内部各线程的 CPU 使用情况,排查 Java、Python 等应用内部的线程卡死时非常有价值。

free -h是看内存缓存的首选。输出里的buff/cache经常让人误以为内存不够用了,其实这部分是 Linux 拿空闲内存来做的文件缓存,目的是加速读写。真正的可用内存要结合available字段来看,这个字段已经帮你算好了可回收的部分。如果available还很多,那free的数值虽然小,也完全不用紧张。

free -h

我见过太多新手盯着free的第三行数值大呼内存不足,结果实际上系统闲得很。这是个认知误区,搞清楚buff/cache之后就不会闹这种笑话了。

2.2 df 与 du:磁盘满没满、空间去哪了

磁盘告警是运维扣款最多的事件类型之一,df和du必须玩明白。

df -h df -i

df -h看磁盘剩余空间,df -i看 inode 剩余量。很多人只知道空间满会导致写入失败,不知道 inode 耗尽同样会报“No space left on device”,但df -h明明显示还有几百 G。这种情况通常是目录里的小文件数量太多(比如邮件队列、临时文件),把 inode 耗尽了。遇到磁盘写不进去时,第一件事就是同时跑这两条命令,不然排查方向会完全跑偏。

du用来查目录占用:

du -sh /var/log du -h --max-depth=1 /var/log | sort -rh | head -20

第一条看总大小,第二条一层一层列出各个子目录的大小并排序。遇到根分区快满的情况,我通常从/开始逐层 du,用上面的管道命令找出最大的目录,一路追踪到具体的日志或数据文件,然后决定是清理还是做迁移。

du -sh /* 2>/dev/null | sort -rh | head -10

这招在处理“磁盘满了但不知道是谁占的”时非常高效。注意2>/dev/null是为了把没有权限访问的目录的报错信息丢掉,避免刷屏。

3. 文本处理三剑客:grep、awk、sed 的实战组合

日志分析、配置修改、批量处理,是 Linux 日常使用中出现频率最高的场景。这三条命令如果只用过其中一两个,很容易在真实场景里卡壳。我经常把它们组合起来用,一套下来效率极高。

3.1 grep 的进阶玩法与常见误区

grep大家都会,但大部分人只用了它的最简单形态。实际工作里我几乎不用裸的grep,而是直接上:

grep -E "ERROR|WARN" app.log grep -rn "functionName" ./src --include="*.java"

-E表示支持扩展正则,可以用|匹配多个关键词。-r递归搜索目录,-n显示行号,--include限定文件类型。排查问题时,行号实在太重要了,没有行号你根本没法快速定位到代码或日志的具体位置。

还有一个很实用的小技巧,用grep -c统计匹配条数:

grep -c "java.lang.OutOfMemoryError" error.log

但注意,-c统计的是行数,不是匹配次数。如果一行里出现了多次关键词,它也只算一行。要精确统计次数要用grep -o配合wc -l:

grep -o "null pointer" error.log | wc -l

3.2 awk 按字段提取与汇总计算

awk的价值在于处理“有结构的文本”,典型场景就是日志、表格类的输出,按空格或指定分隔符取字段。

awk '{print $1, $4}' access.log awk -F',' '{print $2}' data.csv

$1是第一列,$4是第四列,-F指定分隔符。配合排序和去重,可以快速完成 IP 访问量统计这种经典需求:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20

这行的意思是取日志第一列(IP),排序,去重并统计次数,再按次数倒序排,看前 20 名。排查 CC 攻击、异常访问时,这条命令几乎就是标准答案。

awk还能做条件过滤和简单的计算:

awk '$9 == 500 {print $0}' access.log awk '{sum += $10} END {print sum}' access.log

第一个找状态码为 500 的日志行;第二个把第 10 列字段累加并输出总和。如果日志里有响应耗时字段,用这类命令几秒就算出全天总耗时或平均值,比导入 Excel 快得多。

3.3 sed 批量替换与文本裁剪

sed最常见的用途就是“原地替换文件内容”。比如把配置文件里的旧 IP 批量换成新 IP:

sed -i 's/192\.168\.1\.10/192.168.1.20/g' app.conf

-i表示直接修改文件,s是替换命令,g是全局替换。生产环境改配置前,我强烈建议先去掉-i跑一遍,让屏幕输出替换后的内容确认无误,再用-i真正落盘。少了这一步,你很可能把原本不该替换的内容也替换掉,然后一脸迷茫。

sed -n '100,200p' app.log

截取日志文件的某一段也是常用操作,-n配合p打印指定行范围。日志文件动辄几个 G,直接用编辑器打开会卡死,sed截取一行到几万行的范围非常丝滑。

4. 权限与用户管理:从被拒之门外的报错说起

经常有读者跑来问我:“为什么我的脚本执行报 Permission denied?”“为什么我新建的用户连自己的目录都进不去?”这些问题的根源,是对 Linux 权限模型缺乏系统理解。这里用一小节把它讲明白。

4.1 看懂 chmod 的数字与特殊权限位

Linux 文件的权限分三组:属主、属组、其他用户,每组分别是读(r=4)、写(w=2)、执行(x=1)。所以chmod 755的意思是:属主可读可写可执行(7),属组可读可执行(5),其他人可读可执行(5)。chmod 644是文件最常见的权限,属主可读写,其他人只读。

chmod 755 script.sh chmod 644 config.conf chmod -R 755 /data/www

-R递归修改目录下所有文件,但这里要特别提醒:递归chmod非常危险,它会无差别地修改所有文件的权限。如果你不小心把一堆本应该是 640 的私密配置改成了 755,相当于把敏感文件直接暴露在所有人面前。正确的做法是只对目录递归加执行权限,对文件保持只读权限,可以用:

find /data/www -type d -exec chmod 755 {} \; find /data/www -type f -exec chmod 644 {} \;

先改目录后改文件,这是规范操作。

4.2 chown 与 chgrp:属主归属问题

权限不对,很多时候其实是属主不对。chown用来改所有者,chgrp改所属组,-R同样可以递归处理。

chown -R www:www /data/www

这条命令把/data/www的属主和属组都改成www用户。部署 Web 应用时最常遇到的问题就是:代码是用 root 传上去的,结果 Nginx 或 PHP-FPM 进程以 www 用户运行,读不了 root 拥有的文件。这时把整个目录chown给运行用户就能解决。

还有一个细节:chown加-h可以修改符号链接本身的属主而不是它指向的目标,这个平时用得少,但偶尔有用。极少数情况下需要改符号链接目标属主时,不加-h就是默认行为。

4.3 用户创建与 sudo 授权

新建用户是高频操作。核心命令就一条,但很容易遗漏参数:

useradd -m -s /bin/bash zhangsan passwd zhangsan

-m自动创建家目录,-s指定登录 shell。如果漏了-m,用户没有家目录,登录后可能连很多基础操作都做不了,还会出现奇怪的问题。passwd是设置密码。删除用户用userdel -r,-r会连带删除家目录和邮件池,记得谨慎使用。

给普通用户提权用sudo。先visudo编辑/etc/sudoers文件,常见写法:

zhangsan ALL=(ALL) ALL zhangsan ALL=(ALL) NOPASSWD: ALL

第一行允许执行所有命令但需要输密码,第二行免密。生产环境建议尽量用更细粒度的授权,比如只允许 systemctl 管理某个服务,而不是什么都能干。visudo自带语法校验,千万别直接用 vim 编辑/etc/sudoers,写错一行可能整个 sudo 系统直接崩溃。

5. 进程管理与网络排查:服务起不来、端口被占的终结思路

服务器上最让人抓狂的问题,通常是“服务怎么起不来了”“端口怎么被占了”。这一节把进程和网络排查的思路捋清楚,以后遇到这类问题你会有固定的排查路径。

5.1 进程查看、终止与特殊状态识别

ps命令最常用的格式是:

ps aux ps -ef

ps aux的每一列里,STAT状态列值得关注。常见的状态有R(运行中)、S(睡眠中)、Z(僵尸进程)、D(不可中断的IO等待)。看到Z状态时别慌,僵尸进程几乎杀不掉,因为它本身已经死透了,只是缺父进程来收尸。kill -9对它无效,真正要做的是杀掉它的父进程,让 init/systemd 接管并回收。

kill -9 PID kill -15 PID

kill -15是优雅终止,进程可以自己清理资源;kill -9是强制杀死,进程没机会处理任何收尾工作。生产环境上能先-15就先-15,实在不行再上-9。很多服务异常退出后留下损坏数据,就是因为一直被-9强杀,没机会做持久化清理。

pkill可以按进程名批量终止,比如pkill -f "python app.py"。-f会匹配完整命令行,这个很危险,可能误杀到名称相似的进程,使用前要先用pgrep -f确认范围。

5.2 ss 与 netstat:查端口、查连接、抓网络问题

端口被占是本地开发时的高频问题。一条命令就能定位:

ss -lntp

-l只看监听端口,-n不做域名解析显示数字地址,-t只看 TCP,-p显示占用进程的 PID 和名称。嫌字段多的话用netstat -lntp也可以,但新版本 Linux 更推荐ss,它在 socket 数量巨大时性能优势明显。

如果想知道某个端口当前有没有连接:

ss -tunp | grep :8080

排查“端口为什么连不上”时,先确认服务是否监听在正确的 IP 和端口上,再用ss -ant看连接状态。SYN-SENT堆积说明目标不可达,TIME_WAIT多说明频繁创建短连接,CLOSE_WAIT大量存在说明程序没有正常关闭 socket。这些都是网络故障排查里最常见的信号。

5.3 修改进程名称的需求与实现

热搜词里有一条“linux 修改进程名称”,这其实有几种不同层面的需求。如果你只是想让自己启动的进程在ps里显示成容易识别的名字,可以在 shell 里用exec -a指定名称:

bash -c 'exec -a my_service python3 /opt/app/main.py'

如果在 C/C++ 程序内部想做这件事,可以用prctl(PR_SET_NAME, ...)修改进程名,线程名也可以用类似方式设置。有些场景是真的需要把整个进程的argv都改掉(比如伪装成一个普通名字),那要直接操作进程环境块,比较复杂,日常极少用到,知道有这么回事就行。运维排障时,进程名清晰可辨能省下很多猜疑的时间,所以我建议启动脚本里尽量用exec -a给每个服务起一个可读性强的名字。

6. 软件包管理与环境配置:从安装 GCC、Python 到换镜像源

Linux 新手最容易在“装软件”这一步卡壳。装 GCC 不知道怎么装,装 Python 不知道怎么指定版本,下载慢到怀疑人生,装了搜狗输入法却打不出字。这些问题的背后其实是对软件包管理机制不熟悉。

6.1 主流包管理器使用对比

CentOS/RHEL 系用的是yum,新版是dnf,Ubuntu/Debian 系用的是apt。核心逻辑都是三件事:更新索引、安装、卸载。

yum install -y gcc # CentOS 7 及以下 dnf install -y gcc # CentOS 8+ / Fedora apt update && apt install -y gcc # Ubuntu / Debian

“下载 GCC 编译器”这类需求,直接yum/dnf/apt安装就行,完全没有必要自己去官网下载源码包编译。同样,linux系统安装python也优先用包管理器:

apt install -y python3 python3-pip

如果系统自带 Python 版本太旧满足不了需求,再用源码编译或者 pyenv 这类版本管理工具,千万不要手动去替换系统自带的/usr/bin/python3链接,很容易把依赖 Python 的系统工具搞坏。

6.2 换源的正确姿势与避坑

热搜词里“debian gnu/linux 13 (trixie) 换清华源”是典型的需求。换源的核心操作是把/etc/apt/sources.list(或/etc/apt/sources.list.d/下的文件)里的软件源地址替换成镜像站地址。

常见的国内镜像有清华、阿里云、中科大。以 Debian 为例,清华源的地址形式大致是https://mirrors.tuna.tsinghua.edu.cn/debian/,然后接上trixie main contrib non-free-firmware这类组件名。换完后一定要:

apt update

这个步骤会重新拉取软件包索引,如果不执行,后面的安装依然会走旧源。

换源时最容易踩的坑是:写错发行版代号(比如 Ubuntu 24.04 是 noble,Debian 13 是 trixie),或者混用了不同发行版的源。前者会导致一堆 404,后者可能直接把系统依赖搞乱掉。建议改之前先cp备份一份原文件。

6.3 国产 Linux 生态下的软件安装注意点

热搜词里“linux国产”“国产linux”出现的频率很高。国产 Linux 发行版大多基于 Debian 或 CentOS/RHEL 体系,软件安装思路和原版基本一致,但需要注意几点:有些发行版自带的软件源里包不全,需要手动添加官方仓库或者下载 deb/rpm 包;内核和硬件驱动可能有一些定制,安装闭源驱动前先查一下官方适配列表;还有一些企业级应用只提供特定发行版的安装包,不要盲目下载通用包强装。

“linux 安装搜狗输入法”这类场景在国产系统上也比较常见。搜狗输入法的 Linux 版一般提供 deb 包,安装后还需要安装 fcitx 输入法框架,并设置环境变量让输入法框架生效。装完不生效的话,大部分情况是环境变量没配上,可以检查~/.xprofile或/etc/profile里有没有fcitx相关配置。这里就不展开具体配置了,思路先立住,遇到具体版本再查官方文档。

7. 场景化命令集合:Docker、Git、Redis、MySQL 等日常高频操作

你可能已经发现,单靠基础命令在很多真实工作场景里其实不够用。比如你是个后端开发,每天都在和 Docker、Git、Redis、MySQL 打交道;你是大数据方向的,免不了用 HDFS;你做嵌入式的,需要 GDB。这里我给你整理几组最常用的“场景命令包”,每一条都是我实际用过的,不是从文档里抄来的。

7.1 Docker 常用命令包

容器化已经成为默认部署方式,Docker 命令是绕不开的。

docker ps -a # 查看所有容器,包括已停止的 docker images # 查看本地镜像 docker exec -it 容器名 bash # 进入运行中的容器 docker logs -f 容器名 # 跟踪容器日志 docker stop 容器名 && docker rm 容器名 # 停掉并删除容器 docker rmi 镜像名 # 删除镜像 docker compose up -d # 用 compose 文件一键启动服务

排查容器问题时,docker inspect可以查看容器的完整配置,docker stats可以实时看容器资源占用。日志挂在标准输出的话,docker logs --tail=200比-f更好用,免得刷新刷得你眼花。

7.2 Git 常用命令包

Git 的日常操作,很多人用图形界面,但命令行熟练度对于排查合并冲突、改写历史依然很有价值。

git status git add -p # 分块暂存修改,比 git add . 精细得多 git commit -m "feat: 说明" git pull --rebase # 变基式拉取,保持提交历史线性 git log --oneline --graph -20 # 图形化查看最近提交 git stash # 临时保存当前改动 git branch -a # 查看所有分支 git checkout -b feature/xxx # 新建并切换分支 git reset --hard HEAD # 放弃本地所有未提交改动,慎用

我见过很多人操作 Git 全靠“删了整个目录重新 clone”,这在单人项目上确实能用,但一旦涉及团队协作就是灾难。学会git stash和git rebase真的能救命。

7.3 Redis 与 MySQL 客户端命令

Redis 的日常运维命令集中在redis-cli里:

redis-cli ping redis-cli info memory redis-cli --scan --pattern "cache:*" | head -100 redis-cli -n 3 keys "*user*"

keys命令在生产环境慎用,它会导致 Redis 阻塞,数据量大的时候非常危险。线上排查 key 建议用--scan加 pattern 的方式。

MySQL 的命令行客户端也有一套高频操作:

mysql -uroot -p SHOW PROCESSLIST; # 查看当前连接和执行的 SQL SHOW ENGINE INNODB STATUS\G; # 查看 InnoDB 引擎状态 EXPLAIN SELECT ...; # 分析 SQL 执行计划

排查慢查询、死锁问题时,SHOW PROCESSLIST几乎是第一站。它能让你看到当前所有会话正在执行的语句、状态和耗时,一眼定位到长时间运行未结束的 SQL。

7.4 大数据与嵌入式场景:HDFS、KVM、ADB、GDB

HDFS 是大数据方向绕不开的。常用命令和 Linux 文件系统很像,但要记住它和本地文件系统是两套独立命名空间。

hdfs dfs -ls /data hdfs dfs -put local.txt /data/ hdfs dfs -get /data/file.txt ./ hdfs dfs -rm -r /data/old_dir hdfs dfs -du -h /data

KVM 的常用命令以virsh为主:

virsh list --all virsh start vm_name virsh shutdown vm_name virsh edit vm_name

ADB 是安卓调试工具的常用命令,其中最有价值的是日志和安装相关:

adb devices adb logcat -v time | grep "AndroidRuntime" adb install app.apk adb shell am start -n 包名/Activity名

GDB 是嵌入式 C/C++ 开发里的“杀手锏”。最常用的是打断点、查调用栈、看变量:

gdb ./program break main.c:100 # 在 100 行打断点 run # 运行 bt # 打印调用栈 info locals # 查看所有局部变量 next / step # 单步执行,step 会进入函数内部

在嵌入式 Linux 项目里,bt是排查崩溃问题的黄金命令。程序段错误后,不加-g编译是没符号信息的,所以生产环境要想调试方便,编译时记得加-g选项。

8. 常见问题排查与避坑速查手册

最后这部分是“实战问答”,我把这些年最常见的 Linux 运维故障和它们的排查思路整理成一张速查表。你在实际操作里遇到类似问题,可以直接照着思路走。

8.1 高频问题速查表

现象可能原因排查命令解决方向
磁盘写不进去但 df 显示有空间inode 耗尽df -i清理大量小文件
文件删了但磁盘空间没释放有进程持有已删文件的句柄lsof | grep deleted重启或让进程释放该文件
df 和 du 统计不一致隐藏文件、挂载点差异、已删未释放du -sh *逐层排查用 lsof 找占着句柄的进程
ping 能通但 SSH 连不上防火墙拦截或 sshd 未启动systemctl status sshd、iptables -L调整防火墙规则或启动 sshd
top 里内存显示几乎用满buff/cache 被误判为已用free -h看 available无需处理,除非 available 很低
进程杀不掉且状态是 Z僵尸进程,父进程未回收ps -o ppid= -p PID处理父进程,让 init 接管回收
某端口一直连不上服务绑定 127.0.0.1,外部没法访问ss -lntp看监听地址配置监听 0.0.0.0 或公网 IP
apt 安装报 404源里写错发行版代号cat /etc/apt/sources.list改成正确的代号并apt update

这张表里每一条都是真实踩过的坑,特别是第二项“文件删了但空间没释放”。处理大日志文件时经常出现这种情况:你rm删了日志,但跑着的进程还开着文件句柄,磁盘空间依然被占着。lsof | grep deleted能把这种进程揪出来,找到后重启进程或者用重定向覆盖文件释放空间。

8.2 排查步骤的优先级建议

遇到服务器异常,我一般建议按这个顺序排查:先看整体负载(uptime和top),再看磁盘(df -h和df -i),然后看内存(free -h),最后看日志(dmesg和/var/log/messages)。很多时候问题根本不在应用层,而在底层资源耗尽。

举个例子,有一次线上服务突然响应极慢,我top一看 CPU 占用并不高,free -h显示内存充足,但df -i直接 100%。因为日志目录里小文件实在太多,inode 耗尽之后所有新文件的创建都失败了,服务不断报错重试,最后拖垮了自己。如果一开始就从监控系统的“CPU/内存”维度去查,可能两小时都定位不到根因,但df -i一跑,一分钟就水落石出。

8.3 让命令好记又安全的小技巧

最后分享几个让日常操作更顺手的小配置:

# ~/.bashrc 里建议加的别名 alias ll='ls -lht' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias grep='grep --color=auto' alias du='du -sh' alias df='df -h'

历史命令相关配置:

export HISTTIMEFORMAT="%F %T " export HISTSIZE=10000

加上时间戳的历史记录,能帮你回忆这台机器上到底执行过什么,排查“谁动了我的服务器”时非常有用。HISTTIMEFORMAT这个变量我建议每个运维都设置上,不然你根本不知道那行危险的rm是什么时候输进去的。

按Ctrl+R反向搜索历史命令也是我最常用的动作之一,输入几个关键字就能把以前执行过的长命令找回来,比重新敲一遍高效得多。

写在最后

我从第一次接触 Linux 到现在,踩过的坑可以写一本书。每次误删文件、每次搞错权限、每次把环境变量弄乱,都是在给后面的稳定操作交学费。你现在如果还在为这些命令头疼,不用担心,多用几次、多踩几次坑,自然就记住了。我个人的建议是:不要死记硬背,遇到需求先想“Linux 上能不能用一条命令解决”,然后用man 命令或者tldr 命令查看用法。用多了之后你会发现,Linux 命令不是一个个孤立的知识点,而是围绕“文件、进程、权限、网络、日志”这几个核心概念组织的工具集,理解了这些概念,命令自然就在脑子里串起来了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 3:25:27

SS626V100:重新定义智能NVR的边缘AI SoC

1. 项目概述:为什么SS626V100一发布就让NVR厂商集体改方案?最近在几家安防设备厂做技术对接时,发现一个有意思的现象:原本定型量产的8路AI NVR主板,突然全部暂停贴片,产线工程师拿着SS626V100的datasheet反…

作者头像 李华
网站建设 2026/10/7 3:25:24

FPGA中Altera FIR II IP核多通道模式配置与RTL实现详解

做过多通道信号采集的人,迟早会遇到这个让人又爱又恨的IP核。我自己的项目是四路心电信号同时进一片Cyclone V,四路ADC的数据叠在一起送过来,滤波这步必须在一颗FPGA里全部完成。一开始我也想过,直接放四个FIR滤波器实例行不行&am…

作者头像 李华
网站建设 2026/10/7 3:25:24

剥开文艺外壳:前缀和后缀和优化分段贡献最大值问题

1. 拿到题目先别写代码,先把“故事”剥掉1.1 为什么文艺标题总要配一个奇怪的模型看到“P8590 『JROI-8』这是新历的朝阳,也是旧历的残阳”这个标题时,我正在翻题单。第一反应是:这怕是又一道把语文和算法绑在一起的题。“新历”“…

作者头像 李华
网站建设 2026/10/7 3:25:11

Windows安全自查指南:从端口暴露、日志审计到高频报错一次讲透

上个月接手一台Windows Server做安全检查,打开事件查看器时我愣了挺久:安全日志里躺着几万条4625事件,来源IP从下午一直试到凌晨,用户名清一色是admin、administrator、root这类字典组合。这台机器的3389端口直接暴露在公网&#…

作者头像 李华
网站建设 2026/10/7 3:25:11

Spark Streaming实时模式深度解析:从微批到持续处理的架构与实践

1. Real-time Mode是什么:先分清两种“实时”在聊Spark Streaming的实时模式之前,必须先把一个被用滥的词挑明白——“实时”。很多团队跟我聊需求时张口就是“我们要实时数仓”,结果一细问,T1报表就算实时。真正做流计算的工程师…

作者头像 李华
网站建设 2026/10/7 3:25:09

Python+Django+Vue宠物商店系统毕设实战指南

简介:这是一套面向计算机专业本科生的高分毕业设计级全栈项目源码,基于PythonDjangoVue.js技术栈构建的宠物商店管理系统,专为毕设答辩、课程设计及前端/后端综合实战训练打造。资源共396个文件,涵盖32个核心Python后端逻辑文件、…

作者头像 李华