ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux常用操作命令详解:文件、进程、权限与网络排查

Linux常用操作命令详解:文件、进程、权限与网络排查 简介一份精心整理的Linux常用基础操作命令大全PDF面向刚接触Linux的新手、运维入门者及开发者帮助读者快速掌握高频核心命令。内容系统覆盖目录与文件处理、文件内容查看、链接文件、权限管理等模块对ls、mkdir、cd、cp、mv、rm、cat、less、chmod、chown等常用命令均给出格式、功能、常用选项及示例说明尤其对软链接与硬链接、权限数字表示法等重点做了区分查阅起来一目了然。这份PDF共1个文件大小494KB体积轻量、结构清晰适合放在手边随时参考或打印学习。目前已有558人学习作为Linux命令行入门与日常速查资料实用价值很突出。1. 用最短时间搭起 Linux 常用基础操作命令的骨架如果已经做了三年开发第一次拿到只有 SSH 的云服务器大概率会在 ls 之后愣住没有图形界面没有 IDE连个编辑器都要现想是 vi 还是 nano。Linux 常用基础操作命令大全这个标题看着像 PDF 文件名实际指的是所有服务器上工作的人都绕不开的技能底座。我写这篇不是要收集几百个命令而是把日常高频的五六十个拆成五块文件目录、文本处理、进程系统、权限用户、网络排查再补几个能立刻提速的 shell 技巧。刚上手的人可以顺着敲一遍有经验的直接翻参数表和排错点。能用鼠标做完的事在服务器上就是一条命令加一个参数的事这篇要把一条命令怎么用对、用细讲透。2. Linux 文件与目录操作命令定位、复制、删除、打包的边界这一章处理的是每天重复次数最多的操作也是最容易在细节上翻车的部分。很多新手会把大量时间花在翻目录找文件上或者在执行删除时把路径写错原因不是命令不熟而是没搞清每个参数背后到底改了什么。2.1 先确定自己在哪pwd、ls、cd 的高频姿势pwd ls -lah cd -pwd 的用处不是好看是在多层目录跳转后确认绝对路径避免在错误目录执行删除操作。ls -l 的第一列是文件类型和权限位比如drwxr-xr-x表示这是一个目录属主可读可写可执行属组和其他人只有读和执行权限后面依次是硬链接数、属主、属组、文件大小、最后修改时间和文件名。加-h是 human-readable把文件大小显示为 K、M、G加-a则列出所有以.开头的隐藏文件排查配置文件问题时几乎必用。cd -是往返于上次目录的最快路径比连续敲多级cd ..更不容易迷路cd不带任何参数时会回到当前用户的家目录。用 vim 在两个目录之间来回改配置文件时这三个命令配合起来效率最高比反复复制粘贴完整路径省事得多。2.2 复制、移动、删除别让 rm 成为最后一个命令cp -a /data/app /data/app_backup mv /data/app /data/app_old rm -rf /data/cache/*cp 的-a等价于-dpR复制目录的同时保留权限、时间戳和软链接属性。备份线上配置时我一般不用cp -r因为它不保证保留属主和修改时间恢复回去时可能引入隐蔽的权限问题。mv 在同一文件系统内只是改一个目录项速度极快但跨文件系统移动时本质是复制加删除大目录会明显卡住需要提前评估耗时。rm -rf是最被人熟知也最容易出事故的命令。我的习惯是写进脚本的删除路径必须用绝对路径执行删除前先 ls 看一眼路径由变量拼接时保留开头斜杠批量删除前先加-i试跑一次。想删目录里所有文件但保留目录结构时用find /data/cache -type f -delete比rm -rf /data/cache/*更可控后者不会处理隐藏文件容易留下半清理状态。2.3 找文件不靠翻目录find 的三组实用参数find /opt -name *.conf -mtime -7 -size 1k find . -type f -name *.log -exec grep -l ERROR {} \; find / -xdev -type f -size 500M 2/dev/nullfind 不是只能按名字找它最常见的用法是组合条件过滤-name匹配文件名-mtime -7取最近七天修改过的文件-size 1k过滤大小超过 1KB 的文件多个条件之间是 AND 关系。第二个示例中的-exec会把每个命中文件替换进{}结尾必须以\;结束这条命令等价于“在所有 .log 文件里找包含 ERROR 的文件名”是排查日志时的高频组合。第三个示例里的-xdev是防止 find 进入其他挂载点比如/proc、/sys这类特殊文件系统不加它时遍历会变慢甚至卡住。2/dev/null把权限不足的报错丢进黑洞让输出里只留下真正有价值的结果。2.4 压缩与解压tar 保留权限zip 处理中文乱码tar tzf app.tar.gz tar xzvf app.tar.gz -C /opt/release tar czvpf app.tar.gz /data/apptar 是服务器上传输目录的默认协议参数组合有固定套路c 创建包x 解出包t 列出包内容v 显示过程f 指定文件名z 走 gzip 压缩p 保留权限属性。执行解压前如果不知道包里的目录结构先用tar tzf看一眼再带上-C指定目标目录能避免把一堆文件散落在错误位置。参数作用典型用法-z使用 gzip 压缩tar czvf app.tar.gz /data/app-j使用 bzip2 压缩体积更小tar cjvf app.tar.bz2 /data/app-t只列出包内文件列表不解压tar tzf app.tar.gz-x执行解压tar xzvf app.tar.gz-C解压到指定目录tar xzvf app.tar.gz -C /opt-p保留文件权限与属主信息tar czvpf app.tar.gz /data/appzip 在 Linux 下解压出现中文乱码几乎都是编码问题。Windows 上打的 zip 包通常用 GBKGB2312编码记录文件名unzip 默认按 UTF-8 解释自然乱码。常见做法是指定编码重新解压unzip -O GBK archive.zip如果当前发行版的 unzip 不带-O选项可以换用 7z 解压或者安装 p7zip 相关工具。往 Linux 上打包发给 Windows 用户时也要注意zip -r必须加递归参数否则只会打进一个空目录。3. Linux 文本处理操作命令grep、sed、awk 的组合套路服务器上的程序不会弹出可视化界面所有问题最后都会沉淀到日志文件里。文本处理命令的定位不是“记事本替代品”而是从日志、配置、接口返回里快速定位差异和异常的手段。这一章围绕一个真实工作流展开查看、过滤、替换、取列。3.1 less、head、tail查看文件的正确姿势head -n 30 app.log tail -n 50 app.log tail -F app.loghead 取开头、tail 取末尾-n指定行数这是读取日志两端最直接的办法。需要注意tail -F大写和tail -f小写的区别小写 f 跟踪的是文件描述符日志发生轮转后跟踪会丢失大写 F 会不断重新打开文件nginx 按天切割 access.log 时tail -F依然能持续输出新内容。查看中段内容时用 less。它看起来只是一个分页器但搜索和跳转能力非常关键按G跳到文件末尾按g回开头输入/keywords向下搜索按n继续匹配下一个输入?keywords向上搜索。less 不会一次性把整个文件读进内存几百 MB 的日志也能流畅翻页这是 cat 做不到的。3.2 grep 过滤从日志里找业务问题的基本盘grep -n timeout app.log grep -v ^# sshd_config grep -E ERROR|FATAL app.log grep -ri password config/grep 的核心价值是过滤-n显示行号-v反向匹配排除含某关键字的行-E启用扩展正则-r递归搜索目录-i忽略大小写。排查问题时最常用的是组合先拉出今天所有 ERROR 行再用grep -v排除已知的 timeout 噪音剩下的才是真正需要看的异常。grep -c只输出匹配的行数用于统计某类错误出现频率grep -l只输出包含匹配的文件名适合在多个日志文件里定位问题源。处理纯字符串时如果关键字里有正则元字符比如analysis_v1.2.3这种带点的字符串建议加-F按固定字符串匹配避免把点当通配符用。3.3 sed 替换与原地修改改配置文件前先备份sed -n 20,30p /etc/nginx/nginx.conf sed -i.bak s/^#Port 22/Port 22/ /etc/ssh/sshd_config sed /^#/d app.confsed 最常用的三个场景是范围打印、替换、删除。-n 20,30p只打印第 20 到 30 行适合在不打开大文件的情况下快速看一段配置s/old/new/是替换指令行首的^#Port 22表示只匹配被注释掉的 Port 配置/^#/d表示删除所有以#开头的注释行。真正危险的是-i参数它是 in-place 直接改文件。我的习惯是永远写成-i.bak这样 sed 会先生成原文件的 .bak 备份再修改。改 sshd_config 这类系统级配置前先不加-i试跑一遍确认输出符合预期再真正执行能避免正则写错导致整个配置被破坏。3.4 awk 取列把“第 3 列大于 100 的行”变成一行awk {print $1, $NF} access.log | sort | uniq -c | sort -rn | head -10 awk -F, $3active {print $2} users.csvawk 的默认逻辑是按空白切分每一行$1是第一个字段$NF是最后一列NF表示当前行的字段总数$0是整行。第一个示例是统计访问量最高的 IP 的经典写法awk 取出 IP 和最后一列状态码sort 排序uniq -c 去重并计数再 sort -rn 按计数倒序head 取前十条。这个组合在面试题和日常日志分析里出现频率极高。awk 内置量含义示例$0当前整行内容awk {print $0}$1、$2…按分隔符切分后的第 N 列awk {print $1}NF当前行的字段总数awk {print NF}NR当前行号整个输入中的序号awk NR10-F指定字段分隔符awk -F, {print $2}第二个示例展示自定义分隔符的用法读取 CSV 时用-F,把内容按逗号切分再用条件$3active过滤只输出满足条件的第二列。awk 在中间章里属于“会一行就能省半小时”的类型但没必要背语法记住字段变量加 print 的套路大多数取列需求都能覆盖。4. Linux 进程与系统操作命令进程、负载、磁盘与后台任务服务器出问题时第一反应通常是看进程还在不在、负载高不高、磁盘满没满。这一章的命令解决的是“现在系统到底什么状态”以及“如何把一个任务稳稳地放在后台跑”。4.1 ps 与 top看进程和系统负载的第一手信息ps aux | grep -v grep | grep nginx pgrep -fa nginx top -bn1 | head -15 free -hps aux 是最常用的进程查看方式a 显示所有用户进程u 显示属主和 CPU、内存占用x 显示没有终端控制的进程。各列含义按顺序是用户、PID、CPU 占用、内存占用、虚拟内存、常驻内存、终端、状态、启动时间、CPU 总耗时、命令。里面最容易忽略的是 STAT 列R是运行中S是可中断睡眠Z是僵尸进程大量 Z 状态说明父进程没有正常回收子进程。直接ps aux | grep nginx会把 grep 自身也匹配出来所以前面加grep -v grep或者干脆用pgrep -fa nginx它只输出 PID 和完整命令行不会匹配自身。top 在交互界面按M按内存排序按P按 CPU 排序按q退出top -bn1适合在脚本里单次采样输出一次就退出不进入交互模式。free 的-h让内存数值变成可读的 G、M看 available 列而不是 free 列available 才是真实可分配内存。4.2 kill 与 pkill杀进程讲顺序不只有 -9kill -TERM 12345 kill -9 12345 pkill -f java.*demo.jarkill 默认发送 TERM 信号相当于礼貌地请进程自己退出进程可以捕获后做清理工作kill -9发送 KILL 信号由内核直接强杀进程没有机会保存状态或释放资源。正确顺序是先 TERM等几秒看进程是否退出确认无效再上 -9。pkill 按进程名或命令行模式匹配-f表示匹配完整命令行而不是只匹配进程名。注意pkill -f的匹配范围很宽在服务器上执行pkill -f python会杀掉所有命令行里带 python 的进程包括同事的任务。执行前先用pgrep -fa python看一眼会命中哪些进程这个检查成本极低能避免真实事故。4.3 nohup 与 systemctl让任务在断网后继续跑nohup python3 train.py train.log 21 nohup 的作用是忽略 HUP挂断信号让命令在退出 SSH 会话后继续运行把进程放到后台 train.log把标准输出写入文件21把标准错误也合并到同一个文件。这个组合是临时跑脚本的常用方案但缺点是没有自动重启和开机自启动能力真正要长期守护的任务应该交给 systemd 管理。[Service] ExecStart/usr/bin/python3 /opt/app/run.py Restartalways把上面内容写入/etc/systemd/system/myapp.service然后systemctl daemon-reload加载配置systemctl start myapp启动服务systemctl enable myapp设置开机自启。相比 nohupsystemd 方案的好处是journalctl -u myapp可以统一看日志进程崩溃后自动拉起管理方式也和系统服务一致。systemctl 子命令作用start / stop启动 / 停止服务restart重启服务status查看服务状态和最近日志enable / disable设置开机自启 / 取消自启daemon-reload修改 service 文件后重新加载配置list-units --typeservice列出已加载的服务单元4.4 df 与 du磁盘满和 inode 满的快速排查df -hT df -i du -sh /opt/* 2/dev/null | sort -rh | headdf 看文件系统维度的空间-h显示可读大小-T显示文件系统类型df -i查看 inode 用量。inode 是文件系统记录文件元数据的结构每个文件含目录占用一个inode 耗尽时会出现No space left on device但df -h明明还有空间。遇到磁盘满先 df 确认是空间还是 inode 问题再进目录用 du 定位大文件。du 看目录维度的实际占用-sh是对每个目标统计总和s 是汇总h 是可读格式sort -rh按数值倒序head 取最大的前十个。这条命令能从根目录往下逐层定位先看/opt/*哪个目录大再进目录重复执行最终找到大文件。清理时优先处理日志轮转文件和临时缓存避免直接删业务数据。5. Linux 权限、用户与网络操作命令从 777 说起到端口连通性排查权限和用户管理是 Linux 新手到熟手的分水岭网络排查则是服务器日常运维的高频动作。这一章把权限位解读、创建用户、端口探测和 DNS 排错放在一起因为它们共同构成“新机器初始化”的标准流程。5.1 chmod 与 chown读懂权限位少打 777chmod 755 release.sh chmod -R gw /data/shared chown -R appuser:appgroup /opt/app权限数字的含义是 r4、w2、x1三者相加得到一位数。chmod 755表示属主有读、写、执行权限属组和其他人有读、执行权限这是可执行脚本最常用的权限644是普通文件的默认权限形态属主可读写其他人只读。碰见权限问题时随手打777的做法不推荐它让所有用户都能改文件等于放弃了权限控制的防线。精准修改时用符号模式ux给属主加执行权限g-w去掉属组的写权限-R递归应用到整个目录。chown 负责改属主和属组user:group同时改两者迁移应用目录后忘记执行这条经常导致服务启动时写不了日志。数字组合权限含义使用场景755rwxr-xr-x脚本、可执行文件644rw-r--r--配置文件、普通文件600rw-------私钥、含密码文件775rwxrwxr-x多人协作的目录5.2 useradd 与 passwd新建一个能登录的账号要哪几步useradd -m -s /bin/bash -G docker zhangsan passwd zhangsan usermod -aG docker zhangsanuseradd 创建新用户但有几个关键参数决定它是否可用-m自动创建家目录-s /bin/bash指定登录 shell-G docker把用户加入附加组-g可以指定主组。不同发行版默认行为有差异Debian 系的 useradd 默认不建家目录所以脚本里必须写-m否则用户登录后落在根目录且没有自己的配置空间。创建用户后必须执行passwd zhangsan设置密码否则账号无法登录。usermod 的-aG是把用户追加到某个附加组-a是 append追加如果不加-a会把用户从其他组里全部移除。给某个用户加 docker 组权限或者把运维账号加入 sudo 组都是这个模式。5.3 nc 与 telnet ip 端口测端口通不通的快捷办法nc -zv 192.168.1.10 8080 telnet 192.168.1.10 8080判断一个端口是否连通ping 帮不上忙ping 只测主机通不通不测具体端口。常用做法是用 nc 或 telnet 发起一次 TCP 连接。nc 的-z表示只扫描不发送数据-v显示详细结果输出open表示端口可连接Connection refused表示服务没在监听如果卡住不动直到超时通常是防火墙直接丢弃了包。telnet 的用法更简单连接成功会进入服务端提示界面连不上会直接报错或被挂起。注意 telnet 连接成功后不会自动退出按Ctrl]进入 telnet 命令行输入 quit 再回车才能退出。如果系统没装 nc 也没有 telnetbash 自带 /dev/tcp 能力timeout 3 bash -c cat /dev/null /dev/tcp/192.168.1.10/8080 echo 端口通 || echo 端口不通这条命令利用 bash 的虚拟设备发起 TCP 连接timeout 3 防止一直卡住和||根据退出码输出连通性。在受限环境里排查网络时这个写法能救急。5.4 DNS 配置修改后不生效先别急着改 resolv.confresolvectl status resolvectl dns eth0 223.5.5.5 nslookup www.example.comLinux 上改 DNS 最常见的坑是手动编辑/etc/resolv.conf后重启网络或重启机器文件内容被自动覆盖。原因是多数发行版的 resolv.conf 被 systemd-resolved 或 NetworkManager 托管手动修改不属于受支持的方式。排查顺序是先resolvectl status看当前系统实际使用的 DNS 配置用resolvectl dns eth0临时设置某个网卡的上游 DNS再用nslookup或dig验证域名解析是否恢复。长期有效的做法是修改连接配置或系统网络管理工具的设置而不是直接写 resolv.conf。遇到“改了 DNS 不生效”优先确认有没有别的服务在托管这个文件再考虑改配置dig 223.5.5.5 www.example.com这条命令显式指定使用某个 DNS 服务器查询能够直接判断故障在解析服务本身还是本地 DNS 配置不对。6. 四个让 Linux 命令操作提速的终端技巧前面几章解决的是“命令不会用”这一章处理的是“命令用得太慢”。以下四个技巧不需要额外安装任何工具全部基于 shell 内置能力。6.1 alias 把高频复合命令变成短命令alias llls -lah alias dockpsdocker ps --format table {{.Names}}\t{{.Status}}alias 是 bash 内置的别名机制把一长串命令缩短成自定义单词。将常用 alias 写入~/.bashrc末尾重新登录或执行source ~/.bashrc后永久生效。别名适合固定写法的命令不建议带需要频繁改动的参数。6.2 CtrlR 反向搜索历史命令按CtrlR进入反向搜索模式输入关键字会匹配历史命令例如输入tar x就能找回之前解压过的复杂命令。再按一次CtrlR继续向前回溯更早的匹配项按回车执行按CtrlC退出搜索。这个功能比翻历史记录翻好几页快得多配合 history 一起用基本可以告别重新敲长命令。6.3 四个马上能用的行编辑快捷键快捷键作用CtrlA光标跳到行首CtrlE光标跳到行尾CtrlU删除光标到行首的全部内容CtrlK删除光标到行尾的全部内容CtrlW删除光标前面的一个单词这组快捷键在输入长命令时效率极高。系统提示符下默认开启 Emacs 风格编辑模式四个按键全部内置。熟练之后对着一行错误命令做局部修改不需要退格键慢慢删也不需要重新打完整条命令。6.4 按语义搜命令aproposapropos compress files apropos copy directoryapropos 按 man 页的描述搜索命令输入一段自然语言描述就能返回相关命令列表。它解决的是“知道想做什么但不知道命令名”的问题比打开搜索引擎先查一遍再回终端执行快得多。配合man 命令名查看完整手册遇到带点困惑的参数先说清楚作用再决定是否使用。真正理解命令不是背下一整张清单而是知道去哪里找答案。本文还有配套的精品资源点击获取
返回列表