
1. 为什么我说Linux操作指南要先学“解决问题的思路”聊到Linux很多朋友的第一反应是“黑乎乎的命令行”“要背一堆命令”“只有程序员才用”。但实际上Linux早就不只是程序员的专属工具了它跑在绝大多数服务器上跑在Android设备的底层跑在你家里路由器、智能电视甚至汽车座舱系统里。学Linux操作本质上是在学一套和计算机打交道的工作方式登录、查看状态、定位问题、修改配置、验证结果。这套方式一旦建立换任何发行版、任何设备操作逻辑都是相通的。这篇内容想做的不是把Linux命令手册再抄一遍而是帮你把Linux里最常用的操作整合成一整套可落地的方法。它适合刚接触Linux、被各种命令劝退的新手也适合已经会敲几十条命令、但遇到问题还是不知道从哪下手的人。读完后你会发现真正有价值的不是命令本身而是知道在什么场景下用什么命令、每一步操作之后应该观察什么。我在最初学习Linux时也走过弯路照着教程敲了一堆命令没有理解背后的原理结果换台机器、换个系统版本就懵了。后来慢慢总结出一套规律发现Linux所有操作都可以收敛到几个核心维度文件与权限、进程与资源、网络与日志。把这几个维度吃透绝大多数场景都能cover住。下面按这个思路把Linux操作指南拆开讲。2. 文件系统先能在硬盘上自由走动再说其他2.1 目录结构就是Linux的“城市地图”第一次登上Linux系统很多人会被根目录下的一堆英文目录搞晕。其实这套目录结构非常符合逻辑记住几个关键位置就行。/根目录整个文件系统的起点有点像Windows的“此电脑”但层级关系更严格。/home普通用户的“家”所在地基本每个用户在这里有个以用户名命名的目录比如/home/dev01里面放个人配置和文件。/etc存放系统配置文件的目录比如网络配置、软件源列表、服务启动参数都在这里。/var存放经常变化的数据最典型的是日志目录/var/log还有缓存、邮件队列等。/tmp临时文件系统重启后可能被清空重要的东西千万别放在这里。/usr系统软件和用户程序的安装位置类似Windows的“Program Files”。/bin和/sbin存放可执行文件前者是普通用户也能用的基础命令后者多为系统管理命令。刚上手时不需要把每个目录都背下来只需要在查看配置文件、找日志、找用户数据时能快速定位到/etc、/var/log、/home就已经覆盖了大部分日常场景。2.2 ls -l 输出里藏着的文件身份信息我强烈建议大家从ls -l开始建立文件意识。执行一下会看到类似这样的输出-rw-r--r-- 1 dev01 dev01 1024 Mar 15 10:30 notes.txt drwxr-xr-x 2 dev01 dev01 4096 Mar 15 09:00 projects先别急着跳过这行输出里包含文件类型、权限、所有者、大小、修改时间等关键信息。第一列的10个字符中第一个字符代表文件类型-是普通文件d是目录l是软链接c是字符设备。后面9个字符是三组权限位分别对应“所有者”“所属组”“其他人”的可读、可写、可执行权限。练习时可以用file命令看文件真实类型用stat命令查看文件更详细的元信息比如inode编号文件系统用来定位文件数据这对后续理解硬链接和软链接非常有帮助。2.3 文件操作的高频组合不是单纯“记命令”我见过很多人学文件操作时是零散记“cp复制的”“mv移动的”“rm删除的”但真实工作里这些命令一定是和通配符、路径规则组合使用的。比如你要把/home/dev01/logs/下所有.log文件复制到/backupcp /home/dev01/logs/*.log /backup/这里*是通配符代表任意字符。如果想把某个目录连同内部所有内容一起复制必须加-rcp -r /home/dev01/projects /backup/projects移动文件时我习惯加-v让它显示操作过程这样能直观确认文件到底去哪了省得事后怀疑“咦文件怎么不见了”。rm命令要格外小心。Linux的删除没有回收站rm -rf一执行数据基本就找不回来了。我自己的习惯是执行带-r的删除前先用ls看清楚目标目录内容再检查一遍路径确认无误后再动手。2.4 查看文件内容按场景选工具文件很小、想快速看全部内容用cat。文件几百上千行想翻页查看用less支持上下翻页和搜索。只想看开头几行用head -n 20默认显示前10行。想看末尾新增内容比如实时跟踪日志用tail -f。这是排查线上问题时用得最多的命令之一。tail -f /var/log/syslog按下Ctrl C可以退出跟踪。查看时如果日志刷得太快可以结合grep先过滤关键词比如只看报错tail -f /var/log/syslog | grep -i error3. 权限体系解决“Permission denied”背后的逻辑3.1 权限位其实是一组二进制开关Linux的权限模型核心就一句话每个文件或目录都绑定一个所有者和一个所属组系统再根据身份匹配权限。rwx三个字母本质上就是三个开关。r读4分。w写2分。x执行1分。为什么权限位是rwx而不是rw因为可执行是区分文件能否运行的关键属性尤其在写脚本、部署程序时少了x权限再好的脚本也跑不起来。我用一个生活化类比来解释权限位像是阅览室的门禁卡。r代表能进来看书w代表能在书上做笔记x代表能走进一个不对公众开放的工作间操作设备。不同身份的人拿到的门禁卡权限不一样。3.2 chmod数字模式权限分的计算逻辑数字模式其实是把三组权限位分别换算成数字再拼在一起。比如chmod 754它的含义是所有者7分即rwx4217。所属组5分即r-x4015。其他人4分即r--4004。我在实际设置文件权限时最常用的几个组合数字权限适用场景755rwxr-xr-x普通脚本、程序目录其他用户可看可执行但不可写644rw-r--r--普通文本文件只有所有者能改内容600rw-------密钥文件、隐私配置其他用户完全不可访问700rwx------私有目录只有所有者能进入读写执行如果只是想给某个用户单独授权可以用setfacl设置ACL访问控制列表适合需要精确控制的场景但对新手来说先掌握chmod就够了。3.3 特殊权限位SUID、SGID和Sticky Bit特殊权限不常用但遇到时如果不懂会非常困惑。SUID执行带SUID的程序时进程会临时拥有文件所有者的身份。典型例子是/usr/bin/passwd普通用户可以通过它修改自己的密码因为修改密码的过程需要写/etc/shadow而这个文件普通用户本来没权限写。SGID对目录设置SGID后在该目录下创建的新文件会自动继承目录的所属组。Sticky Bit主要用在/tmp这类共享目录防止用户删除别人创建的临时文件。你ls -ld /tmp时看到末尾的t就是Sticky Bit。设置方法是chmod 47554代表SUID、chmod 27702代表SGID、chmod 17771代表Sticky Bit。3.4 切换用户与sudo别动不动就root在日常操作中我强烈建议不要一直用root身份。root在Linux里几乎通行无阻一旦命令写错破坏力是普通用户的成百上千倍。正确做法是普通用户身份工作需要提权时用sudo在单条命令上临时提升权限。whoami查看当前身份。id查看当前用户的UID、GID和所属组。sudo -i切换为root形式的交互Shell。创建用户sudo useradd -m -s /bin/bash newuser-m是同时创建家目录-s指定登录Shell。sudo -i进入root环境后一定要保持清醒操作完尽快退出可以用exit回到普通用户。还有一种更好用的方式是sudo -s它只切换Shell不改变工作目录。3.5 umask新文件默认权限的真正决定者这是个很容易被忽略但又很重要的话题。你创建的文件为什么默认是644目录默认是755答案是umask。它是“权限掩码”用来屏蔽掉默认权限。默认最大权限文件是666目录是777。权限值减去umask值就是实际创建出来的权限。常见的umask值为022所以文件的权限是666-022644目录是777-022755。这个机制的意义在于避免新创建的文件天然带有过大的可写范围减少意外被别人改动的风险。查看当前umask直接输入umask即可。提示不要为了图方便把umask改得很小或改成000这样新建的文件对任何人都可写非常危险。安全策略里通常宁可权限紧一点也不给漏开的门。4. 进程与服务搞清楚机器到底在忙什么4.1 用ps和top看懂进程状态Linux下排查问题第一件事往往是“看看现在系统里有什么进程在跑”。ps是静态查看进程快照top是动态刷新进程列表。我最常用的几个组合ps -ef-e表示显示所有进程-f表示显示完整格式。另外还有ps aux和ps -ef类似输出格式略有差异习惯用哪个都行关键是会看关键列。PID进程号。USER运行该进程的用户。%CPU、%MEM在top中实时显示资源占用。STAT进程状态S是睡眠R是运行Z是僵尸。查看某个具体服务的进程可以用pgrep比如pgrep -a nginxtop进入界面后按P按CPU排序按M按内存排序q退出。想快速查看系统负载uptime会显示1分钟、5分钟、15分钟的负载均值数值意义要结合CPU核数判断不是越小越好也不是越大就一定有问题。4.2 终止进程要送对“信号”kill命令直接跟进程PID即可。但这里有个细节kill默认发送的是TERM信号相当于礼貌地通知进程“请你主动退出”。如果进程没反应再用kill -9强制杀掉。kill 12345 kill -9 12345-9是KILL信号内核直接终止进程进程没有任何机会做收尾工作。所以能不用-9就不用先给进程一次优雅退出的机会。这个习惯在操作数据库、应用服务时尤其重要强制杀掉可能造成数据不一致。另一种更友好的方式是pkill按进程名发信号pkill -f myapp-f会匹配完整命令行比单纯按名字匹配更精确。用的时候要小心别把相似名字的其他程序也匹配进去了。4.3 systemd现代Linux的服务管理核心现在主流的Linux发行版都使用systemd管理服务。以前大家写的“启动脚本”“开机自启”在systemd时代都统一叫Unit。核心命令systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl enable nginx # 设置开机自启 systemctl status nginx # 查看服务状态查看服务状态时输出里会显示Active状态常见的是active (running)、active (exited)、failed。服务启动失败时要看日志命令是journalctl -u nginx -n 50-u指定服务名-n指定最近50行。这一步基本能定位90%的服务启不来问题比如端口被占用、配置文件语法错误、权限不对等。4.4 谁占用了端口lsof和ss的使用部署服务时经常遇到端口被占。以前大家习惯netstat现在更推荐ss输出更快更清晰。ss -tlnp | grep 8080-t是TCP-l是监听状态-n是直接显示数字端口-p显示进程信息。如果8080被占用能看到PID和进程名后续可以判断是垃圾进程还是真正业务进程。想要更详细的信息lsof -i:8080也能列出占用端口的进程。遇到端口冲突时建议先确认是哪个服务占用的不要盲目kill掉万一那是数据库服务呢。5. 网络排查从“连不上”到“找到原因”5.1 先分清是链路问题还是服务问题网络是运维和开发工作中绕不开的坑。排查思路比命令本身更重要从低层到高层一层层排除。先看本机网卡状态ip addr再看路由是否可达ip route然后测试和目标的连通性ping最后测试端口是否开放ss或nc有很多人一上来就ping如果ping不通就断定“网络断了”这个结论太草率。很多服务器默认禁ping或者防火墙策略不允许ICMPping不通不一定代表服务器不在线。正确的姿势是结合端口探测一起判断。nc -zv 192.168.1.100 22-z表示只扫描端口不发送数据-v显示过程。如果端口开放会输出Connection succeeded。5.2 用ip命令管理网卡现代Linux里ifconfig已经逐渐被ip命令取代。ip命令更强大而且一直在维护。ip addr show查看当前所有网卡和IP地址。如果希望看到简略信息用ip -br addr。要启用或禁用网卡ip link set eth0 up修改IP地址时小系统可以直接用ip addr add临时配置但重启后会失效。永久配置需要修改网络配置文件不同发行版路径和写法不一样优先用系统自带的网络管理工具比直接改配置文件更安全。5.3 域名解析问题怎么查遇到访问外网超时、域名解析不出IP的情况先看系统用的DNS服务器是什么cat /etc/resolv.conf手动测试域名解析nslookup example.com dig example.comdig输出更详细能看到查询耗时、DNS服务器返回的IP、TTL等信息。如果域名解析正常但还是访问不了再考虑防火墙、路由、目标服务本身的问题。排查防火墙时先看当前是否有iptables或nftables规则有些发行版默认防火墙规则没放行对应端口。测试时可以临时放行再验证确认是防火墙问题后再固化规则。5.4 curl最实用的接口调试工具curl不只是下载工具更多时候用来测试接口是否正常。curl -I https://example.com-I只显示响应头能快速看到HTTP状态码、服务器类型、内容长度。-v显示完整请求和响应过程排查握手、跳转、证书问题时非常有用。curl -v https://example.com如果接口是POST方式用-X指定方法-d携带数据curl -X POST -d {key:value} -H Content-Type: application/json https://example.com/api6. 日志分析把报错变成可操作的动作6.1 /var/log下各日志的角色大多数Linux系统都把日志集中放在/var/log。比较常见的几个/var/log/messages或/var/log/syslog系统综合日志很多程序都会往里写。/var/log/auth.log或/var/log/secure登录认证日志排查ssh登录问题必看。/var/log/dpkg.logDebian系的软件安装卸载日志。/var/log/nginx/access.logWeb服务访问日志配合分析工具可以看流量和访客来源。找到对应日志文件是一方面更高效的方式是用journalctl统一查看systemd服务的日志不需要去猜日志文件到底叫啥。6.2 journalctl的使用心得journalctl是systemd家族的日志查询工具我通常这样用journalctl -u nginx --since today journalctl -u nginx --since 10 minutes ago journalctl -u nginx -p err-p err表示只输出错误级别以上的日志能过滤掉大量干扰信息。排查服务反复崩溃时我会用journalctl -u app --follow类似tail -f实时追踪日志输出。此时同时在另一个窗口复现问题日志会立刻给出线索。这套操作组合我把它叫做“双窗口排查法”比单纯看日志文件直观得多。6.3 日志分析三板斧tail、grep、awk很多时候日志文件很大没法直接打开。我的分析套路是三步走第一步先用tail定位最新内容看看最近发生了什么。第二步用grep匹配关键词。比如查找某用户的所有登录记录grep username /var/log/auth.log第三步用awk做简单统计。比如统计登录失败次数grep Failed password /var/log/auth.log | wc -l再比如找出访问量最高的IPawk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -rn | head6.4 实战服务器磁盘满了之后举一个我实际遇到过的场景。某天半夜系统告警网站响应极慢。远程登录后首先执行df -h发现根分区使用率99%。再执行du -sh /var/*发现/var/log占用最大。进入/var/log用du -sh *排序锁定了一个超大的日志文件。原因是一条服务反复报错日志每小时增长几个GB。解决步骤截断日志文件释放磁盘truncate -s 0 /var/log/bigfile.log。修复产生报错的服务配置。配置日志轮转logrotate按大小或时间切割日志防止再次撑爆磁盘。这个案例可以说明Linux排障链路其实很清晰磁盘空间→容量占用→定位大文件→发现问题根源→清理并修复。7. 常见问题速查表症状可能原因排查命令示例解决办法文件提示Permission denied当前用户对文件无权限ls -l 文件调整属主chown或用chmod增加权限服务启动失败配置错误或端口被占systemctl status 服务、ss -tlnp查看日志journalctl -u 服务修正配置磁盘空间满日志或临时文件过大df -h、du -sh /var/*清理或截断日志配置logrotate域名解析失败DNS配置错误或网络问题cat /etc/resolv.conf、dig 域名修改DNS配置检查网关路由端口无法访问防火墙拦截或服务未监听ss -tlnp、iptables -L -n放行对应端口或启动服务远程登录被拒绝ssh配置限制或认证失败tail -f /var/log/auth.log查看日志确认是密码错误还是IP限制命令找不到command not foundPATH环境变量未包含该命令echo $PATH、which 命令使用绝对路径或补充PATH8. 学习建议把“背命令”换成“做任务”最后聊点实操心得。很多人学Linux很用功一天背几十个命令但遇到真实环境照样手忙脚乱。原因很简单命令是“点”真正重要的是把点连成“线”的能力。比如说“我要部署一个Web服务并让它开机自启”这背后涉及软件安装、配置修改、权限设置、服务管理、防火墙放行一系列动作命令只是过程中顺手用的工具。我的建议是从小任务开始练任务一创建新用户并设置密码配置其家目录环境。任务二部署一个简单的静态网页用系统自带的Web服务跑起来。任务三查看某个服务的日志筛选出报错信息定位问题并修复。任务四写一个Shell脚本定时备份指定目录并压缩。每完成一个任务你都会自然地去查命令、理解参数、踩到坑、解决坑。这个过程积累的经验远胜于死记硬背。另一个习惯是学会看输出信息。执行ls、df、systemctl status时屏幕上输出的每一列都不是摆设花时间搞懂它们分别代表什么意思在日后排障时会省下大量时间。我的经验是刚开始看top会眼花缭乱但强迫自己解释每列含义后基本一次就记住了因为脑子里有了“这台机器在忙什么”的画面。Linux操作指南听起来像一本手册但真正吃透它的人都把它变成了一种思考方式遇到问题不慌张按层拆解逐个验证。刚开始慢没关系只要方向对了后面会越来越快。