news 2026/9/19 11:13:32

Linux常用命令核心解析:文件权限、进程排查与日志定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux常用命令核心解析:文件权限、进程排查与日志定位

简介:《Linux系统常用命令与操作详解》是一份面向Linux终端操作员、技术支持工程师及初学者的命令速查手册。内容按文件与目录管理、系统状态监控、进程控制、网络配置、权限修改、文本处理与压缩解压等场景归类,覆盖cd、ps、kill、chmod、tar、grep等高频命令及典型参数组合。文档为docx格式,压缩包共1个文件,大小约18KB,内容精炼、便于随身查阅。文中还特别补充了重定向、管道、通配符以及ctrl+c、tab补全等符号与快捷键用法,有助于理解shell工作方式并提升脚本编写与排错能力。目前已有319人学习使用,适合日常遇到具体操作问题时快速定位合适命令,也可作为系统学习Linux终端技能的入门参考。

1. Linux系统常用命令的核心矛盾:不是背不完,而是用不对

搜“Linux常用命令大全”的工程师,有相当一部分下载过一份按字母排序的命令表,真正登录服务器排查问题时,却往往从 ls 开始逐个试。这个标题表面上看是命令清单,实际要解决的是“定位、执行、验证”的操作链路:文件在哪、权限怎么改、进程是否异常、日志说明什么。命令本身并不难背,难的是把每一条输出变成下一步动作的依据。下面不再按字母序罗列,而是按排查主线的顺序,把 Linux 系统中出现频率最高的六十条常用命令重新过一遍。适合刚接触 Linux 的开发者,也适合准备运维面试的技术人;已经熟练的人重新审视边界条件和参数陷阱,同样能减少线上环境的误操作。

2. 文件与目录:Linux常用命令里最先要建立肌肉记忆的一组

2.1 从 ls -l 的输出反推整条权限链路

文件报错时,第一眼永远看 ls -l。执行下面的命令:

ls -l /etc/hostname # -rw-r--r-- 1 root root 32 Sep 14 09:21 /etc/hostname

输出里第一段字符决定文件类型与权限。第一个字符-表示普通文件,d表示目录,l表示软链接,bc分别对应块设备和字符设备;后面的九个字符每三位一组,依次是属主、属组、其他人的读、写、执行权限。数值32是文件字节数,不是行数,这一点对新手极具迷惑性。把一行的六列拆开念一遍之后,再遇到 Permission denied,就能立刻判断是属主不对、属组不对,还是缺少执行位。

除了基本展示,ls还有一些容易被忽略的参数。ls -lt在目录中按修改时间排序,发布版本出现问题时,可以快速找到刚刚被改动的文件;ls -a显示.开头的隐藏文件,排查环境变量加载问题时不至于把.bashrc.profile漏掉。写脚本时则建议使用ls -1加管道配合 wc -l 统计文件数量,避免交互式终端的装饰性输出干扰统计结果。

2.2 cd、cp、mv、rm 的最小参数组合

这四条命令本身没有门槛,真正的临界点在一些混合参数上。下面这组是排查和部署中最高频的几种:

命令参数组合场景说明
cp -a复制目录并保留属主、权限、时间戳迁移配置目录,避免二次 chown
cp -u仅覆盖源目录中更新的文件增量同步静态资源
mv -n不覆盖已存在的同名文件合并多批文件时保护已有内容
rm -i删除前逐一确认使用通配符删除一批文件时兜底
rm -rf递归强制删除只应出现在明确限定的目录范围内

实际使用时要区分cp -acp -r-r只做递归复制,新文件的属主和权限跟随当前执行用户重新生成;-a相当于-dR --preserve=all,会把原文件的属主、属组、权限、时间戳一并保留。直接把编译好的站点目录复制到另一台机器时,用-a可以省掉后续整页的 chmod 修复。mv在同一文件系统内只是改写目录项,不复制数据,所以能瞬间完成;一旦跨文件系统移动,实际复制内容后删除源文件,命令的耗时和 IO 消耗都会明显上涨,这也是判断数据是否跑在挂载点上的一个旁证。

2.3 用 find 把“文件在哪”变成一条可执行的清理任务

查找明确名称的文件,findlocate更可控,因为它可以按时间、大小、类型组合过滤,再用-delete-exec直接接管后续动作。下面的命令用于清理 30 天前的日志:

find /var/log -type f -name '*.log' -mtime +30 -delete

参数展开来说:-type f排除目录和软链接,避免误删目录导致路径结构变化;-name '*.log'使用单引号,防止 Shell 先行展开通配符;-mtime +30表示文件内容最后修改时间距今超过 30 天,无符号的30表示恰好位于第 30 天的边界,容易漏掉或误伤;-delete只在前面所有条件同时满足时执行删除。正式清理前把-delete改成-ls先跑一遍,配合 crontab 落盘输出,能避免批量删错再把备份拉回来的尴尬。

日志文件找不到名字时,先按最近修改时间过滤:

find /app/tomcat/logs -type f -mmin -60 -printf '%TY-%Tm-%Td %TH:%TM %p\n'

-mmin -60查找 60 分钟内被修改过的文件,-printf允许自定义输出格式,先打印修改时间再打印完整路径,文件多时排序和过滤都更方便。磁盘打满场景下再补一个-size +500M,可以快速锁定超过 500MB 的临时文件,避免对文件系统做无差别全盘扫描。

2.4 tar 打包与解压中的乱码,问题在编码不在命令

“Linux 解压文件乱码”是搜索量相当高的一类问题。同一台机器上,zip 包偶尔解出一堆乱码,而 tar.gz 很少出现同类现象。原因不是命令用错,而是 Windows 压缩工具生成 zip 时普遍使用 GBK/GB18030 编码写入文件名,Linux 终端默认按 UTF-8 解码,两个编码不一致就显示为乱码。tar.gz 内部文件名的编码规则统一,因此几乎没有这种争议。处理办法是在解压入口直接指定编码:

unzip -O GBK 中文文件名.zip

-O参数表示用指定字符集解析文件名,GBK 解出来的文件名就能正常落到磁盘里。部分发行版默认安装的 unzip 不支持-O,可以改用7z x -mcp=936解压,效果等价。如果乱码发生在 tar.gz 包内,通常需要先确认打包时是否经过某种文件名转码流程,这种场景比 zip 少见得多,处理优先级也可以放低。

提示:解压乱码不需要在解压后批量重命名,指定正确的入口编码一次解决。事后用脚本替换文件名,反而容易牵连正常的中文文件名。

3. 权限与用户管理:Linux常用命令从能用到敢用的分水岭

3.1 chmod 数字位:读、写、执行如何快速换算

权限的数字表示是三组八进制数的叠加,每一组允许的值及其含义如下表:

数字权限位组合含义
7rwx全部权限
6rw-读写,不能执行
5r-x读和执行,不能写
4r--只读
0---无权限

chmod 755 script.sh设置之后,属主拥有全部权限,属组和其他用户拥有读和执行权限。对目录而言,x的意义是能否进入目录,所以目录通常设置为 755,如果设置成 6,别人就无法 cd 进去。chmod 644 config.conf则是属主可读写、其他人只读的典型配置权限。数字看多了自然会形成条件反射,一旦某个文件的权限位第一位是7,就要停下来问自己:这个文件真的需要被随便写吗?

符号方式适合调试时做单点修改。chmod +x start.sh为所有身份增加执行位,是最常用的叠加动作;chmod -R g=u /opt/service把属组权限对齐到属主权限并递归应用,适合修复那些从 Windows 或 FTP 上传后权限混乱的目录。递归参数-R存在一处真正的风险:对//etc这类根级目录执行错误权限,会直接破坏系统可读性甚至让服务无法启动,所以递归修改的范围越小越好。

3.2 chown 调整属主与属组时,顺序决定结果

服务部署目录通常需要交给特定运行用户,一条最典型命令是这样的:

chown -R deploy:deploy /opt/service

参数含义:-R递归修改目录内的所有文件,deploy:deploy中冒号前面是属主、后面是属组。如果只写deploy:,表示只改属主、保留原属组;只写:deploy则只改属组。这两种写法在回收旧目录时非常实用,因为服务只需要属于某个特定组,或者只需要由指定用户读取,就不必把原来的属组关系全部重写一遍。修改后可以用stat -c '%A %u %g %n' /opt/service快速查看权限位、uid、gid 和文件名,避免路径过深时靠猜。

遇到 Permission denied 时,先执行id deploy查看用户所属组是否包含目标目录的属组,再决定是用usermod -aG补组,还是该用chown修改归属。正常情况下不要选择chmod 777一步到位,它会让任何用户都能写、能执行,日志目录和脚本目录一旦放开写入,攻击面会显著增大。

3.3 Linux 新建用户时最容易被忽略的三步

“linux 新建用户”的关键不是输入这一行命令,而是把下面三条完整地走完:

useradd -m -s /bin/bash deploy passwd deploy usermod -aG sudo deploy

第一行参数的含义:-m创建用户家目录/home/deploy-s /bin/bash指定登录 Shell,避免用户创建后只能停留在默认的 nologin 状态。第二行给用户设置初始密码。第三行把用户追加进 sudo 组,这里的-aG必须齐全,-a表示 append,漏掉它会把用户从原有附属组中整体替换出去,随后出现“刚才还在 docker 组里,现在权限没了”的怪现象。这三条命令做完后,建议用groups deploy检查最终生效的组列表,把结果写进初始配置文档。

验证新建用户的登录状态,有两个常用入口:

grep deploy /etc/passwd sudo -l -U deploy

/etc/passwd中每一行的最后一个字段是登录 Shell,若为/sbin/nologin,说明这个用户只能跑服务,不能交互登录。sudo -l -U deploy列出该用户被授予的 sudo 规则,当用户反馈“我已经在 sudo 组却仍没有 sudo 权限”时,用这条命令检查规则是否被某条更早的策略截断,比反复让用户重试更有效。

3.4 sudo 配置边界:不要随意给 ALL=(ALL:ALL) ALL

公司服务器上常见的做法是给运维组单独开一个 sudoers 文件:

%ops ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /bin/journalctl

这段规则的意思是:ops 组的用户可以在所有主机上,不需要密码执行 systemctl 和 journalctl,其他命令照常需要密码或不被允许。NOPASSWD只适合限定到少量命令的场景。直接在 sudoers 里写ALL=(ALL:ALL) ALL且配置 NOPASSWD,相当于取消掉所有交互确认,一次脚本误操作就可能导致服务目录被整体删除;更重要的是,回车确认本身是一种人为延迟,批量执行清理动作时,这道密码栏反而能让我停下来想清楚命令涉及的具体路径,在不可逆操作前插入一道保护。

脚本内部执行指定操作时,推荐使用sudo -u deploy先切到目标用户,再执行具体命令。这样部署脚本中不会出现多个 root 级的裸命令,归属和环境变量也会和运行服务的用户保持一致,定位问题的可观测性会明显好一些。

4. 进程与系统资源排查:运维常用命令的主战场

4.1 ps -ef 与管道:定位进程时最常用的组合

登录服务器后的第一件事通常是确认进程还活着。最经典的组合:

ps -ef | grep nginx | grep -v grep

ps -ef列出全部进程,展示 uid、pid、ppid 和启动命令;第一段管道交给grep nginx过滤;由于 grep 本身也会作为一条进程出现在结果里,第二个管道用grep -v grep把它剔除。最终得到的行里,第三列 PPID 是最关键的信息,而最后一列完整命令包含启动参数,便于确认进程是不是以错误的环境文件启动的。

生产环境里更推荐直接使用pgrep -a nginxps -C nginx -o pid,stat,cmdpgrep -a输出 PID 和完整命令,不夹杂其他过滤条件;ps -C按命令名精确过滤,并可自定义输出列。二者都能天然避开 grep 自身混入结果的问题,也便于在监控脚本中直接取 PID 做二次判断。进程出现大量 ZOMBIE 状态时,重点去看 PPID,通常不是主进程故障,而是子进程退出后没被父进程正确回收。

4.2 用 free、df、du 分清三个“为什么变慢”

系统变慢时,三组命令的输出侧重点完全不同,下表总结最容易相互混淆的三组:

命令关注内容典型误区
free -h物理内存、交换分区、available看到 cached 就误认为内存不足
df -h文件系统容量与挂载点只看容量不看 inode
du -sh目录或文件实际占用空间对整个根目录执行,IO 被拉到极限

free输出中真正需要看的是 available 一列。多数发行版上 cached 占用大量内存,这是页缓存的正常形态,系统需要时会自动回收,不必因此去杀进程;真正该警惕的是 available 已低于几个 GB,且同时观察到 swap 使用率上升。df -h查看容量后顺手执行一次df -i,哪怕空间还剩几百 GB,inode 耗尽时照样写不了文件,而这种情况在大量小日志目录的机器上并不少见。du -sh适合定位目录,从某个起点逐层计算字节数,是最吃元数据的操作之一,不要对全盘执行。

要定位当前目录下占用最大的前 5 个一级目录,标准写法是:

du -x --max-depth=1 /var | sort -k1 -h -r | head -5

-x限制不跨越文件系统边界,避免挂载的 NFS 目录把结果拉偏;--max-depth=1只统计一层;sort -k1 -h按第一列的人类可读大小排序,-r反转成从大到小;最后的head -5只保留前五行。如果某个目录突然多出数 GB,再用lsof +L1检查被删除但仍在占用文件句柄的进程,这往往是空间没释放的幕后原因。

4.3 top 的交互快捷键与 systemctl 的边界

top界面里可以按P按 CPU 排序,按M按内存排序,按k再输入 PID 来终止进程,按q退出。交互式界面虽然方便,生产环境里手动 kill 进程仍然要非常谨慎:直接 kill 会绕过服务管理器的监控和自动拉起,被 supervisor 或 systemd 管辖的服务,接下来几秒大概率会被重新创建,反而留下“杀不掉”的假象。

先查服务状态,再决定干预路径,是更稳的流程:

systemctl status nginx --no-pager

--no-pager关闭分页输出,适合 SSH 长连接与脚本内直接查看。如果服务处于 failed 状态,systemctl restart nginx会重新执行 service 文件中的标准动作,包括 EnvironmentFile 加载和环境变量注入;手动用二进制路径启动则完全不走这条路径,环境变量和目录权限都可能与预期不一致。所以凡是 systemd 托管的服务,优先考虑 restart 和 stop,而不是 kill;对 Docker 内的进程,则优先使用docker stop,让镜像的启动配置完整执行一遍。

4.4 journalctl 查看最近时间窗口的日志

定位服务问题的顺序应该是:先确认时间窗口,再确认服务 unit,最后才看具体报错。一条可直接复用的命令:

journalctl -u nginx --since "1 hour ago" --no-pager | tail -100

-u nginx限定 unit,--since只输出最近一小时的记录,--no-pager避免交互式打断,tail -100保留最后 100 行,通常就足够覆盖一次异常前后发生的完整事件。如果输出为空,升高过滤等级再查看journalctl -u nginx -p err --since "1 hour ago" --no-pager,可能是当前时间窗口内确实没有 error 级别日志,也可能是 journald 对日志大小做了裁剪。两种原因处理方式不同,前者需要扩大时间窗口,后者需要在/etc/systemd/journald.conf里调高 SystemMaxUse 后重启 journald,操作之前先执行df -h /var/log确认磁盘有余量再动配置。

5. 把 Linux 常用命令串成自己的操作链:grep、别名与历史复用

5.1 grep -n 与上下文,是日志搜索里的第一优先级

搜日志最忌讳一屏输出全部命中。先记住一条命令:

grep -rn "error" /etc/nginx --include="*.conf"

-r递归目录,-n同时输出行号,--include="*.conf"只扫指定后缀文件,避免二进制或缓存文件干扰。看到具体行之后,再加-C 3取前 3 行和后 3 行,就能直接基于上下文判断这是一条请求错误还是配置错误。要更进一步做统计,grep -c统计行数,grep -o只打印匹配部分,与 sort、uniq 组合在一起,就能把一段日志瞬间改造成计数报表。

5.2 把高频组合沉淀到 .bashrc,而不是反复搜手册

与其每次搜索“linux 命令大全”,不如把当天手敲超过三次的组合命令沉淀进~/.bashrc

alias ll='ls -lahF' alias du1='du -h --max-depth=1 | sort -h' alias files='find . -type f -name'

第一行把ls -lahF缩写成ll,第二行让du1直接呈现当前目录下占用最大的目录排序,第三行定义files "*.log"作为递归查找入口。保存后执行source ~/.bashrc即可生效,不需要重新登录。git 常用命令、docker 常用命令这些同属于 Linux 命令行生态的子集,也可以用同一套思路沉淀。最后再回来看这些别名里的固定路径,把它们换成$HOME/workspace这类变量,就得到真正适合自己工作机的常用命令集。

本文还有配套的精品资源,点击获取

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

BrewUI用起来:Homebrew可视化管理的实战与避坑指南

Mac 上跑开发的,大概没有人能绕过 Homebrew。我从 Intel 时代一直用到 Apple Silicon,brew install敲了上万次肯定是有的。但用着用着我就发现一个尴尬的事:命令行管理软件包,爽是爽,就是缺一个“全局视角”。装了什么…

作者头像 李华
网站建设 2026/9/19 11:09:56

ArcGIS洪水淹没分析与三维模拟:从DEM预处理到BFS扩散

简介:基于ArcGIS的洪水淹没分析与三维模拟研究报告,适合GIS专业学生、防洪减灾技术人员及空间分析爱好者学习参考。内容围绕基于水位的无源淹没分析展开,先介绍无源淹没与有源淹没的差异与适用场景,随后详细说明如何利用ArcGIS中的…

作者头像 李华
网站建设 2026/9/19 11:07:43

Koopman算子与DMD:非线性系统谱特性计算及Matlab实现

做动力系统数据分析这些年,Koopman算子一直是我工具箱里最趁手的“解码器”。它能把混沌、非线性、周期振荡这些看起来分门别类的东西,统一放到观测函数空间里去理解。配合动态模态分解(DMD),我们可以直接从时间序列里…

作者头像 李华