Linux:系统识别、文件路径与账号权限
管理 Linux 主机,先确认发行版、服务管理器和执行身份,再处理文件、进程、网络与磁盘。Debian/Ubuntu 与 RHEL 系的软件包工具不同;使用 systemd 的主机还要区分单元定义、进程状态和任务产物。
按任务阅读
| 当前任务 | 阅读内容 | 应掌握的结果 |
|---|---|---|
| 认识环境与基本操作 | 本篇的环境前提、基本对象与操作 | 说明管理的对象、执行身份和配置位置 |
| 理解机制并完成配置 | 进程、systemd、网络与存储;部署受限维护任务与定时器 | 解释关键机制,按配置完成任务并核对结果 |
| 维护、排障与恢复 | 日志轮转、软件维护与备份恢复;权限、服务与资源故障定位;服务变更失败的恢复与复盘 | 能保存证据、控制变更、恢复并验收 |
本课程面向需要读懂主机配置、判断权限和维护失败原因的读者。不要求先学一门编程语言;需要知道文件保存数据、程序运行后形成进程。示例未执行,命令应在独立测试主机按前置条件验证。命令块是读者日后在隔离 Linux 主机自行验证的材料;静态阅读与真实结果分开。
内核、发行版与用户空间
Linux 发行版将内核、用户空间工具、包管理器和默认配置组合起来。内核负责进程调度、虚拟内存、设备与网络等资源;GNU coreutils 提供 ls、stat、df 等程序;Bash 是命令解释器;systemd 是许多发行版的系统与服务管理器。这些不是同一个东西,Linux 内核版本不能证明某个 systemd 指令可用。
本文核对日期为 2026-10-17,教学语义面向 GNU/Linux、Bash 4.4+、GNU coreutils、util-linux flock 与 systemd 249+;参考 Ubuntu 22.04/24.04、Debian 12 常见目录布局。这里选的是明确版本族,不宣称它们是当前最新版。RHEL 系的 SELinux、Debian/Ubuntu 的 AppArmor、网络管理器和包名存在差别;发行版可能回移补丁,应查目标系统自带手册。
OpenWrt 常用 BusyBox、UCI、procd,不能直接套用本课程 systemd 单元。容器里即使有 systemctl 文件,也未必由 systemd 作为 PID 1;WSL 的启用方式与 Windows 原生服务不同。本篇部署步骤适用于 GNU/Linux。Linux 不是通用 Shell 语法课:变量、数组和文本管道的深入材料保留在既有 Shell 笔记,这里围绕系统对象解释。
识别环境与读取命令
Linux 只读检查从身份、发行版和目录开始:id 显示实际用户与附加组,/etc/os-release 标识发行版,uname 标识内核;它们回答不同问题。pwd 和 stat 帮助确认工作目录与文件对象。不要依据提示符里的 # 推断身份,也不要把命令输出贴到错误主机的变更单。
# 理论示意,未执行;不安装缺失程序。
id
cat /etc/os-release
uname -r
pwd
stat -- /var/lib读懂一个命令,先确定“对象、选项、是否写入”。例如 stat -- /var/lib 的对象是目录本身,-- 结束选项解析;ls /var/lib 列目录项。chmod 700 ... 会修改权限,df -P ... 观察挂载所在文件系统,不是清理命令。后续出现 systemctl、ip、ss 时均标明其管理对象。
路径与文件对象
Linux 路径是从目录到目录项的查找过程。绝对路径从 / 起始,相对路径从当前工作目录起始;文件名可以含空格,传给命令时要引用。inode 存放文件类型、所有者、权限及数据定位信息,目录项将名字关联到 inode。符号链接保存另一个路径,硬链接使多个名字指向同一 inode。
例如 /var/lib/showdocs-maint/maintenance.log 的访问需要沿途目录具备搜索权限。../ 可以跳出当前目录;单看字符串前缀不能证明路径受限。后面的脚本只接受固定绝对目录,拒绝该目录及被处理文件上的符号链接;不接受任意用户输入路径。根管理的父目录和私有子目录仍是前提,不能靠一次 readlink 检查对抗同身份恶意替换。
目录角色也要分清:/etc 放主机配置,/usr 放系统程序和共享资源,/var/lib 放持久状态,/var/log 放系统日志,/run 放本次启动期间的运行状态,/proc 和 /sys 是内核接口。部分发行版采用 merged-/usr,/bin 可能是链接,不能把物理目录关系写死。/tmp 是否和何时清理取决于策略,不保证保存教学数据。
身份与目录权限
Linux 目录权限中的 r 允许读取目录项名称,x 允许搜索已知名称,w 配合 x 通常允许增删目录项。文件自身的 r/w 控制内容读取和写入,不能决定其名字是否能被删除。因此只读文件放在可写目录中,仍可能被目录所有者移除;sticky bit 会增加删除限制。
传统权限按文件所有者、所属组、其他人选择一组规则,不把三组权限相加。0700 表示目录所有者可读写搜索,组与其他人无权限;0600 表示文件所有者可读写。umask 从创建时请求的权限中屏蔽位,不能给已有文件“补上安全”。执行程序需要相应执行许可,读取脚本交给 /bin/bash script 与直接执行脚本的路径检查也不同。
ACL、只读挂载、SELinux/AppArmor、systemd 文件系统沙箱可进一步限制访问;看到 mode=600 不代表所有访问一定成功。root 和 capabilities 也不能抽象成“所有限制都无效”。本课程的维护任务使用专用非登录账户,管理员负责程序与配置,账户仅能写私有状态目录,避免为了一个报告任务扩大系统写权限。
小练习与核对
题目:目录是 0700、文件是 0644,另一用户是否能通过完整路径读文件?若目录改为 0733,文件改为 0400,该用户是否一定不能删除文件?先分别判断路径搜索、内容读取和目录项删除。
参考解答:第一种通常不能,缺少目录的 x;第二种目录对其他人有 w+x,若没有 sticky bit、ACL、强制访问控制等额外限制,其他人可能删除目录项,即使无法读取内容。不能用给文件 0444 代替保护父目录。综合案例见受限维护任务。
核对资料
GNU 权限规则用于核对内容权限与目录删除的区别;Linux 路径解析手册用于进一步阅读逐级搜索;OpenWrt procd 官方说明说明嵌入式平台差异。GNU 在线手册可能随发布更新,不作为本机工具版本保证。
Shell 输入、复制与环境边界
alias 撤销后为何出现其他命令,profile 与服务环境能否共用? Shell 是解释命令的用户空间程序,内核、发行版与 Shell 不能混称。alias 改变当前 Shell 的命令解析;撤销别名后,同名命令可能恢复为另一个程序。历史示例把 cc 起别名又撤销后出现编译器报错,说明必须先确认实际解析结果,不能凭名字判断动作。历史扩展 !! 与 !编号会重新执行命令,不宜在未审阅内容时用于维护。
标准输入、标准输出与标准错误是不同通道。< 从文件读取输入,> 覆盖输出,>> 追加;here-document 的结束标记必须独占一行,<<< 是 Bash 的 here-string,不能当作所有 Shell 的共同语法。通配符由 Shell 展开;查找表达式中的通配符应保留给查找工具解释,文件名作为参数需引用。旧终端输出仅用于解释原环境。
复制文件内容、保留属性的复制、创建符号链接、移动名字和修改时间戳是不同操作。符号链接本身保存目标路径,通过链接打开目标不产生独立副本;cp -a 是否能保留全部所有权或扩展属性仍受权限和目标文件系统约束。mtime 是内容修改时间,不能从旧 stat 输出推定文件创建时间;rm 解除名字也不提供恢复或可靠擦除保证。旧 cp/mv/rm/find 的整份 --help 转录撤回,参数应查实际版本帮助;目录角色、inode 与 umask 的规则见本篇路径和权限节,umask 按位屏蔽请求权限,不能使用旧文混用 002 与 022 的减法口诀。
环境变量只传给后代进程,export -n 撤销导出属性而非删除变量。source 在当前 Shell 读取文件,与启动子进程不同。旧 /etc/profile 全文包含旧 Go/JDK 路径,不能覆盖目标系统配置;交互终端、服务 EnvironmentFile 与图形应用的环境来源应分别确认。旧笔记的清除历史和永久关闭防火墙步骤撤回:它们会破坏排错证据或扩大暴露面,不能替代对具体规则、身份和错误的检查。
账户文件、附加组与远程身份
passwd 中 x 是否禁止登录,usermod -G 是否追加组? UID/GID 是系统权限判断的重要身份,用户名是映射名称;不能用重复 UID 作为授权技巧,也不把旧文的 UID 上限当成通用系统限制。/etc/passwd 保存账户字段,常见 x 表示密码资料另存,不表示“该用户禁止登录”;/etc/shadow 的密码标记、账户过期、登录 Shell、PAM/SSH 策略共同影响登录,不能简化成检查两个文件和固定三次口令重试。不要公开密码散列或整份账户文件。
主组和附加组需分开管理。usermod -G 指定附加组列表,可能替换原列表;追加场景必须明确使用追加语义。修改数值身份后,旧文件仍保存原 UID/GID,需要对确切数据范围核对归属。删除账户与删除其主目录是不同动作;userdel -r 不是普通注销。sudo 按授权策略执行命令,普通用户不能因为有口令就自动获得管理员权限;su 的登录环境也与保留当前环境不同。
远程登录要分别证明 sshd 进程存在、预期地址端口监听、网络路径可达、主机密钥可信、用户获准。ps|grep 中 grep 自己不能证明服务运行;端口开放也不证明认证成功。旧 CentOS root 口令登录转录、Ubuntu 开启 root 的单条外链没有完整可信流程,均撤回为现行教程。课程采用专用非登录任务身份与按需授权;SSH 用户身份、服务运行用户和 sudo 权限不能混为一项。旧“批量添加用户并设置密码”“应用程序管理”等空兼容标题没有实现内容,不承诺提供对应功能。
继续阅读
- 命令与系统观察
- 命令与系统观察
- 应用实践