ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux常用命令详解:文件操作、进程排查与日志检索速查手册

Linux常用命令详解:文件操作、进程排查与日志检索速查手册 简介Linux系统常用命令与操作详解是一份面向终端操作员、技术支持工程师及Linux初学者的速查型参考资料覆盖文件与目录管理、系统状态查看、进程控制、网络配置、压缩解压等核心场景可帮助读者按需查找命令提升Shell操作效率。资源共1个docx文件压缩包大小约18KB虽体量轻巧但内容组织紧凑适合随时翻阅或打印对照。目前已有320人学习下载。文档注重实用不仅列出cp、rm、ps、kill、df、free等常用命令的具体参数与用法还补充了快捷键如ctrlr历史搜索、tab自动补全以及重定向、管道、通配符等符号命令的语法示例正文以「操作示例」形式展开对构建复杂shell脚本和日常排错均有直接帮助。对刚接触Linux或希望系统梳理命令体系的读者来说是一份低门槛、可即查即用的入门参考。1. 别再背 Linux 常用命令这份清单要解决的是「当下该敲哪条」我见过太多人第一次接触 Linux 终端时把命令抄在本子上一条条背结果真上了服务器内存飙高不知道先敲free还是top日志刷屏不知道用tail -f还是cat。这份《Linux 系统常用命令与操作详解》不是让背的它更像一张按场景排好的速查表文件操作、进程排查、日志检索、权限调整每类都是独立的「小工具链」。适合需要天天摸终端的运维和技术支持也适合刚入门的同学拿来当对照手册——遇到问题先找到对应分类再确认参数比死记硬背效率高得多。下面我把这份命令清单按实际工作顺序拆开讲每一步都给出典型场景和参数边界。2. 文件与目录操作cd、cp、mv、rm 的组合逻辑2.1 基础命令的语义边界路径、递归与覆盖文件操作是我每天敲得最多的一类命令但恰恰是最容易翻车的区域。先看最基础的几个cd /home切换目录pwd显示当前工作目录touch 1.txt创建空文件mkdir testdir创建新目录。这几个命令单独看没有任何难度难点在于它们组合起来时对「路径」的理解。cd后面接绝对路径还是相对路径行为完全不同。绝对路径从根/开始任何时候执行结果都一样相对路径则依赖你当前所在位置。我一般建议在脚本里全部写绝对路径手工操作时先用pwd确认自己在哪里再决定用cd ..回退还是直接跳。mkdir -p dir1/dir2这个带-p参数的版本是递归创建多级目录只要写出来就能把整条路径上的目录一次性建好哪怕dir1不存在也不会报错。很多新手不知道这个参数只能一层层mkdir或者遇到「目录已存在」的报错直接懵掉。然后是文件创建与覆盖的关系。touch 1.txt在文件不存在时创建空文件文件存在时更新时间戳。这个特性常用于批量刷新目录下文件的修改时间配合find可以做出「假更新」效果。touch本身不会写入任何内容所以别指望它生成有内容的文件想写入数据要靠echo重定向这个后面第 4 章会专门讲。复制和移动是文件操作里最容易混淆语义的一对。cp 1.txt是把文件复制一份源文件保留cp -r dir1/是递归复制整个目录不加-r复制目录会直接报错omitting directory。mv dir1 dir2是移动但这个命令有个隐蔽行为如果dir2不存在它就是把dir1改名成dir2如果dir2存在且是目录则把dir1移动进dir2里面。这个区别直接影响脚本执行结果我踩过一次坑之后每次用mv都会先ls确认目标路径的状态。下面用一串命令演示一次完整的目录组织动作包含创建、复制、改名、查找mkdir -p /opt/project/docs /opt/project/backup touch /opt/project/readme.txt cp /opt/project/readme.txt /opt/project/backup/readme.txt.bak mv /opt/project/backup/readme.txt.bak /opt/project/docs/readme_v1.txt find /opt/project -name *.txt -type f逻辑说明第一行用-p一次建出两层目录结构第二行创建源文件第三行复制文件到 backup 目录并改名第四行把 backup 下的文件移动并二次改名到 docs 目录最后用find查找整个项目目录下所有.txt文件。find的-name *.txt用双引号包住通配符避免 Shell 提前展开-type f限定只找普通文件不包含目录。参数说几个常用的边界cp默认遇到同名文件会直接覆盖不提示想要安全一点加-i参数让它逐个询问。rm同理-i会询问确认但我见过大多数生产环境里运维直接用rm -rf这就引出了第 5 章要详细展开的避坑话题。mv在同一文件系统内是纯改名操作速度极快跨文件系统则是复制加删除速度慢而且如果中途断电可能留下半成品文件。所以大文件跨分区移动时我一般先cp再确认校验最后才rm源文件。2.2 查找与定位find 不是只有 -namefind是文件操作里能力最强、参数最多的命令但大部分人只用了它的-name功能。它真正的价值在于组合条件按名称、按类型、按大小、按修改时间过滤还可以直接对查到的结果执行操作。一个典型场景磁盘快满了想找出/home下所有大于 100MB 的文件。常见做法是写成这样find /home -type f -size 100M -exec ls -lh {} \;逻辑说明-size 100M表示文件大小大于 100MB-exec ls -lh {} \;是对每一个命中的文件执行ls -lh{}是查找到的文件名的占位符末尾的\;表示命令结束。这里如果不加-type f会把超过 100MB 的目录也算进去而目录的大小通常和实际占用不一致结果就会带着一堆无意义的目录项。find与du的配合在高版本系统上很常用。du -sh *显示当前目录下每个子项占用的磁盘空间总和-s汇总、-h人性化显示。它和df -h的区别经常有人搞混df看的是文件系统级别的容量和使用率du看的是某个目录实际占用多少。排查「磁盘满了但不知道谁占的」时正确顺序是先df -h确认哪个分区满了再进到对应目录执行du -sh * | sort -rh | head -20找出最大的前 20 个子项一层层剥下去定位大头。这个组合在第 6 章会再讲一次因为它是我每次排查磁盘问题必走的流程。还有一个常见误区find / -name 1.txt从根目录全盘查找服务器上如果文件数量多执行起来会很慢还可能在/proc、/sys这类虚拟文件系统里浪费大量时间。我一般会先缩小范围比如find /home /opt /var -name *.log并且加-xdev跳过其他挂载点避免查到网络存储和虚拟文件系统上去。参数-mtime -7可以只找七天内修改过的文件配合-exec可以做增量备份脚本这比单纯记一个-name参数实用得多。3. 系统状态与进程管理top、ps、kill 的排查链路3.1 先看什么top、free、df 三张表拿到一台出问题的服务器我连top、free、df -h这三个命令都不会互相替代因为它们的视角完全不同。top显示当前系统中消耗资源最多的进程列表free显示内存和交换空间的使用情况df -h显示文件系统磁盘空间。三者的共同点是都能反映「系统现在紧不紧张」但紧张的点不一样。top进入交互界面后默认按 CPU 占用率排序前几行能看到系统的平均负载和 CPU 使用率。这时候很多新人会直接拍照截图然后退出来其实top里还有几个高频交互键按k可以输入 PID 直接杀进程按M切换成按内存占用排序按P切回按 CPU 排序按q退出。这个「按 M 切换内存排序」的手法在内存告警时特别好用因为 CPU 高的进程不一定吃内存内存泄漏的场景下必须切换排序才能找到元凶。free输出的数字在纯文本界面里看起来有点乱但只要盯住available这一列就够。available是估算的「还能分给新进程的内存量」它已经考虑到了缓存可以回收的部分。所以不要一看到buff/cache占用高就紧张Linux 把空闲内存拿来当缓存是正常行为只要available还够用就不用管。真正危险的是swap被大量使用这说明物理内存已经不足系统开始在磁盘上换页了性能和响应时间会明显下降。df -h的-h参数是把容量显示成 K、M、G 这种易读格式不加的话输出是一串以字节为单位的数字肉眼很难快速判断。排查磁盘问题时看Use%列超过 80% 就要开始清理超过 90% 属于高危因为很多日志服务和数据库在磁盘写满时表现出的症状是「进程不报错但就是没反应」非常迷惑。下表是三个命令的使用场景对照命令看什么典型触发场景topCPU 占用、负载、进程排序应用响应慢、CPU 跑满free物理内存、swap 用量内存告警、频繁 OOMdf -h分区容量、使用率磁盘写满、日志无法落盘这三张表看完基本能判断问题在哪个维度。但要注意top是动态刷新的看的是当下快照如果问题是间歇性的需要长时间观察或配合top -b批处理模式抓几轮数据才能看到趋势。3.2 定位与处置ps 过滤、kill 收尾top告诉你哪个进程吃资源但要确认这个进程是什么程序、属于哪个用户、启动参数是什么还得靠ps。ps -ef是全格式显示所有进程每一列分别是 UID、PID、PPID、CPU 占用、启动时间和命令行。ps -a显示所有用户的所有进程-e和-a经常一起用但两者侧重不同-e真的把所有进程都列出来-a在某些发行版上带终端限制。我在脚本里最常用的是ps -ef因为输出格式规范方便接管道过滤。实际排查动作往往是这样的怀疑某个 Java 进程内存异常先在top里记下 PID然后用ps -ef | grep java过滤出所有含 java 字样的进程再根据 PID 查它的启动参数。grep在这里的作用是文本过滤它会把命令行里含「java」的每一行都显示出来包括grep自己那一行。要排除自己常规做法是ps -ef | grep java | grep -v grep-v是反向匹配把含 grep 的行丢掉。找到要处理的进程后kill命令的用法有讲究。kill -9 pid是强制杀死进程信号编号 9 不可被捕获属于「物理删除」级别的操作但日常处置我优先用kill -15 pid也就是默认的 SIGTERM给进程一个优雅退出的机会让它可以释放资源、关闭文件句柄。只有等了几秒还不退才用-9兜底。直接上-9的风险在于像数据库这类有事务状态的服务强杀可能导致数据不一致重启后要花很长时间做恢复。网络和系统层面的命令在排查链路里也经常参与。ifconfig查看网卡 IP 和流量状态ping 目标地址测试网络连通性hostname查看主机名。新版本的很多发行版默认没装ifconfig了改用ip addr这一点要注意别在全新系统上敲ifconfig报 command not found 就以为网络坏了。ping测试的是三层连通性通过 ICMP 协议探测如果ping通但业务访问还是失败问题通常出在端口或防火墙层面这时候要用telnet或ss继续往下查。关机重启家族的命令也有各自的精确语义shutdown -r是先关机再重启适合计划内维护shutdown -h关机后不重启halt关闭系统后关电源reboot直接重启。在多用户服务器上我习惯先执行shutdown -h now而不是直接按电源键因为前者会让系统走正常的停止流程先行通知登录用户并停止服务。在虚拟机里执行halt之后如果没注意到电源状态会误以为系统假死其实是已经关掉了。4. 文本查看、搜索与重定向日志排障的日常动作4.1 cat、more、less、head、tail 怎么选文本文件操作是终端使用频率最高的能力之一但新手最容易犯的错误是不区分文件大小一律用cat打开。cat 1.txt是把整个文件内容一次性输出到屏幕文件只有几十行的配置没问题一旦遇到几百 MB 的日志终端会被刷到根本停不下来只能ctrlc中断而且ctrlc之后文件其实还没看完你还得重新想办法。正确选择方式是小文件用cat快速确认内容大文件用more和less分页查看。more 1.txt是分页显示按空格键翻下一页按q退出功能简单但够用。less 1.txt是增强版分页工具支持上下方向键逐行滚动、/键输入关键字搜索、n跳到下一个匹配位置。两个命令的差异在工作中的体现是less支持往回翻more翻过去就回不来了。排查日志时要反复对比前后文我基本只用less配合-N参数还能显示行号定位问题后可以直接告诉同事「第 1280 行附近」。如果事先知道要看的是文件的头还是尾直接用head和tail更高效。head -20 1.txt查看开头的前 20 行tail -20 1.txt查看结尾的倒数 20 行。「默认显示行数」是 10所以不带参数时head和tail都只给 10 行加-n或直接加数字可以改变。head -n 100和head -100两种写法等价我习惯用带-n的写法因为在脚本里语义更清楚但手速快的时候直接写数字也行。wc是文本统计命令三个参数对应三种维度wc -l 1.txt统计行数wc -w 1.txt统计字数wc -m 1.txt统计字符数。注意-m统计的是字符中文环境下和字节数可能不一致如果要查文件的确切字节数用wc -c。这个命令在核对日志条数、检查导出文件是否完整时特别好用比如你导出了一份 50000 行的数据文件可以先wc -l确认行数对不对再决定是否继续导入。4.2 grep、管道与重定向过滤和持久化grep aaa 1.txt是在文件里查找包含 aaa 的所有行这是单个文件内的检索。但实际工作中日志是多个文件轮转的所以更常见的用法是把 grep 和管道组合起来cat 1.txt | grep hello。管道符号|把左边命令的输出当作右边命令的输入这是一切组合操作的基石。cat在这里其实可以被省略grep hello 1.txt直接就是等价的但写成管道的习惯有一个好处你可以随时在中间插入其他过滤步骤比如cat 1.txt | grep ERROR | head -20只取前 20 条错误记录。tail -f 1.txt是日志排查里最救命的命令之一。文件会一直增长tail -f会循环滚动读取并动态显示新增内容。在排查线上问题时我通常是先tail -n 50看最近的日志再执行tail -f实时跟踪。但它有一个坑如果日志文件被 logrotate 轮转改名-f会继续盯着旧文件名的文件描述符导致看不到新文件内容。解决办法是用-F大写 F它会按文件名重新跟随文件轮转后自动切到新文件。这个区别记不住的话直接统一用tail -F就行。把某个命令的输出保存下来要靠重定向符号。echo haha 1.txt把内容覆盖写入文件文件原有内容全部清空echo lala 1.txt追加到文件末尾。这两个符号在写自动化脚本时是日常操作但也埋着巨大的坑如果你本来想追加手滑写成单一个多小时的分析结果就全没了。覆盖操作不可恢复至少在常规手段下没有后悔药。所以我的习惯是需要持久化输出时优先写只有明确要重建文件时才用单个重要文件之前先cp 1.txt 1.txt.bak留个备份。grep还能配合管道做进程和日志的联合过滤比如附录里常见的ps -ef | grep -i tomcat就是在这个链路里连起来的。-i参数让匹配忽略大小写-E支持正则表达式。下面演示一个完整的日志检索动作tail -F /var/log/app/backend.log | grep -E ERROR|Exception /tmp/error_tmp.log逻辑说明tail -F持续跟踪日志文件新增内容每出现一行就交给grep过滤只保留包含 ERROR 或 Exception 的行再追加写入临时文件。整条链路的字母含义分别是-F轮转安全、-E启用扩展正则、追加而非覆盖。这套命令在线上定位问题时可以挂着跑几分钟然后开另一个终端cat /tmp/error_tmp.log查看汇总结果比干瞪着眼盯屏幕强得多。5. 常见排查与避坑权限、链接、压缩的高频翻车现场5.1 rm -rf 的事故现场路径、通配与确认这条命令是 Linux 世界里事故率最高的一个没有之一。rm -rf dir1是强制递归删除目录-r递归、-f不提示直接删两个参数叠加之后几乎不给你任何反悔机会。常见事故一变量为空导致路径塌缩。脚本里写的是rm -rf $DIR_PATH结果$DIR_PATH没被赋值命令实际执行成了rm -rf /同时系统因为--no-preserve-root或 root 权限直接把整个系统删到不可用。现象执行后命令没有任何输出然后发现所有命令都找不到了因为/bin都被删了。原因变量未定义或环境变量没传递进脚本Shell 把空字符串替换到命令里。解决在rm之前先写一道保护if [ -z $DIR_PATH ]; then echo DIR_PATH is empty, abort. exit 1 fi rm -rf $DIR_PATH逻辑说明先用-z判断变量是否为空为空则打印提示并直接退出脚本只有变量有实际值时才执行删除。这是我在所有包含 rm 的脚本里必写的前置检查花三行代码挡住一次事故极为划算。常见事故二通配符在 ls 下看着正常在 rm 下行为不同。rm -rf *.log如果这个目录下真的没有.log结尾的文件Shell 会把*.log原样传给rm在部分 Shell 配置下会报「No such file or directory」但不至于删错。真正危险的是你本想删log.*却写成log *中间多了一个空格就变成删除 log 文件加删除当前目录所有文件。现象执行后目录里空荡荡。原因手滑在通配符前后多敲了空格Shell 把参数拆成了两个。解决做删除前先执行ls核对要删的文件列表再在 rm 命令里用引号或转义把路径固定住。5.2 chmod/chown 的权限反噬与递归陷阱权限命令看着简单翻车的方式却很隐蔽。chmod ur 1.txt给文件属主加读权限chmod -R ur dir1递归修改目录下所有文件。-R这个参数平时是神器但在权限操作里是事故高发地如果你对/home/user执行chmod -R 777那么这个目录下所有文件包括配置文件里的数据库密码文件都会变成任何人可读可写。现象服务还能跑但安全检查一查全是漏洞别的用户也能读取敏感配置。原因-R递归把权限无差别放开777是所有者、同组、其他用户全部可读可写可执行。解决尽量不用777对外部需要读的文件给644目录给755只有特定应用目录才考虑放宽。chown user1:group1 1.txt是修改文件属主和属组chown -R递归修改目录下所有文件。一个常见翻车场景是把配置文件属主从root改成appuser之后发现服务进程早就以root身份启动了改完属主反而导致后续维护时 root 的 cron 任务无法写入该文件。现象服务正常但定时备份任务报权限错误。原因chown 改了文件属主但调用方没变两者对不上。解决改属主之前先用ps -ef | grep 服务名确认进程实际运行用户再决定属主应该给谁。还有一个chown特有的坑chown user1:group1里冒号前后的用户和组必须存在否则命令直接报invalid user或者在部分精简系统上静默失败。出现「命令执行成功但属主没变」时先用id user1确认用户存在排除掉打错用户名这种低级问题。5.3 硬链接、软链接与压缩命令的几个边界ln 1.txt 1_bak.txt是建立硬链接ln -s 1.txt 1_bak.txt是建立符号链接软链接。两者在日常使用中最大的混淆点是硬链接不能跨文件系统软链接可以。硬链接本质是同一个 inode 的多个目录项只能在同一个分区内存在软链接则是一个独立的文件里面存的是目标路径。常见现象执行ln /data/1.txt /home/1_bak.txt报错Invalid cross-device link。原因/data和/home属于两个不同的挂载点硬链接不允许跨文件系统。解决改用ln -s建软链接或者把目标文件放到同一分区再建硬链接。另一个区别是删除行为删除源文件后硬链接仍能正常读取内容因为它指向的 inode 还在软链接则变成悬空引用cat会报 No such file or directory。所以备份场景请用硬链接快捷方式场景用软链接。压缩解压命令的动作同样有边界要留意。gzip 1.txt压缩文件行为是把1.txt变成1.txt.gz原文件消失这个行为经常让新手以为文件丢了gzip -d 1.txt.gz解压则是把.gz文件还原成1.txt。tar -cvf 1.tar 1.txt是打包不压缩tar -zcvf 1.tar.gz 1.txt是打包并用 gzip 压缩-z参数决定是否走 gzip。注意 gzip 本身不能压缩目录直接gzip dir1会报错想压缩整个目录必须用tar打包或者zip -r。最后一个隐蔽问题tar -xvf 1.tar解开 tar 包时默认解压到当前目录如果压缩包内文件名是绝对路径可能覆盖系统文件。现象执行tar -xvf后系统配置文件被莫名改动。原因压缩包里的路径带了/解压时按绝对路径写。解决解压前先用tar -tf 1.tar查看包内文件列表确认路径结构再动手或者用tar -C /tmp/dest指定解压目录。6. 把命令串成一套动作排障脚本与快捷键验证工具齐了之后真正提升效率的是把它们按固定顺序组合成「肌肉记忆」。我最常用的一套排查动作是登录服务器后先top扫一遍按M切到内存排序看看有没有进程异常吃内存再free -h确认 available 还剩多少接着df -h看磁盘如果某个分区Use%超过 80%立刻du -sh *逐层定位大目录。定位到可疑进程后ps -ef | grep 关键名 | grep -v grep确认 PID 和启动参数然后在/var/log下用tail -F跟踪实时日志配合grep -E ERROR|Exception过滤关键字。一套下来绝大多数 CPU 飙升、内存不足、磁盘写满的问题都能定位到具体进程或文件。快捷键在长耗时的操作里是救命稻草ctrlc停止前台进程ctrll清屏ctrlr搜索历史命令tab自动补全路径和命令。这里面ctrlr的价值被很多人低估它可以反向搜索你敲过的历史命令输入关键字就能找回几个月前用过的复杂命令比翻历史文件强太多。下表是我每天都会用到的几个快捷键快捷键作用使用频率tab自动补全命令、路径、参数每次输入路径ctrlc终止当前进程卡死时必按ctrlr搜索历史命令找回长命令ctrll清屏屏幕太乱时组合命令里有一个我推荐直接背下来的找大文件动作du -sh * 2/dev/null | sort -rh | head -20逻辑说明du -sh *统计当前目录每个子项的大小2/dev/null把无权限访问的目录的报错丢到黑洞里避免刷屏sort -rh按人类可读的容量数值反向排序head -20取最大的前 20 项。这套命令是磁盘排障的标准起手式我在第 2 章提过一次这里再确认一遍它的组合逻辑三条命令靠管道串联各自承担统计、排序、截取一个职责。最后说一个个人习惯每次执行rm -rf、chmod -R、chown -R这三类「递归 修改」的组合之前我都会强制自己先跑一遍ls或find确认目标的真实范围再用echo把命令草稿打出来过目。这个习惯帮我拦住了至少三次删错目录的事故也因此养成了「删前先看改前先列」的条件反射。希望这套思路也能帮你在自己的服务器上少踩几个坑。本文还有配套的精品资源点击获取
返回列表