Skip to content

权限管理与系统资源

Linux 权限模型(rwx/755/644)、chmod/chown、sudo、磁盘与内存查看、端口占用排查(netstat/ss/lsof)。

Updated View as Markdown
For humans

权限管理与系统资源

校招考察频度:★ 高频(高频面试生死线·线上排查实战) 一句话速记:r=4, w=2, x=1;目录的 x 是能否 cd 进入,文件的删改权在父目录的写权限;查端口必背 ss -tunlp 与 lsof -i :port;看内存认准 available 而非 free;磁盘打爆先 df -h 查挂载,再 du -sh * 揪大文件,删不掉查 lsof | grep deleted。

在生产环境中,权限配置不当轻则导致服务无权写日志而崩溃,重则引发全盘安全漏洞;而端口冲突与磁盘被打爆则是后端线上最常见的应急排障场景。


一、Linux 文件权限体系

在 Linux 中,每个文件和目录都关联着一套严格的三元组访问控制权限:

Linux 权限结构拆解(八进制权限数值 754)

1. 核心权限位与八进制数值转换

权限字符权限名称对应数值(二进制/八进制)对文件的含义对目录的含义(关键考点!)
r读(Read)4(2^2)允许读取文件内容(如 cat、head)允许列出目录下的文件清单(执行 ls)
w写(Write)2(2^1)允许修改、覆写文件内容允许在目录内创建、重命名、删除文件
x执行(Execute)1(2^0)允许将文件作为程序/脚本执行允许进入该目录(执行 cd 跳转)
-无权限0无该项操作权限无该项操作权限

2. 生产常见权限数值与含义

  • 755(rwxr-xr-x):系统目录与可执行脚本标准权限。属主具备完全控制(读写执行),属组和其他人仅具备读取和进入/执行权限;
  • 644(rw-r--r--):普通数据文件与配置文件的标准权限。属主可读写,其他所有人仅可读取;
  • 600(rw-------):高敏感安全文件。仅属主一人可读写,其他人完全不可见(如 SSH 私钥 ~/.ssh/id_rsa、数据库明文密码文件);
  • 777(rwxrwxrwx):全员完全控制。任何人都可以删除和篡改文件,生产环境严格禁止使用!

二、权限与所有权修改命令

1. chmod:修改文件或目录权限

# 1. 数字模式修改(最常用)
chmod 755 deploy.sh
chmod 644 application.yml

# 2. 符号模式修改(常用于快捷增加执行权限)
chmod +x start.sh            # 为所有人增加可执行权限
chmod u+w,g-w data.txt       # 给属主增加写权限,剥夺属组写权限

# 3. 递归修改整个目录结构
chmod -R 755 /data/app/

2. chown:修改文件属主与属组

# 变更属主为 appuser
chown appuser /data/app/app.jar

# 同时变更属主(appuser)与属组(appgroup),并递归应用到整个目录
chown -R appuser:appgroup /data/app/

3. 特权提权:sudo 与 su

  • sudo <command>:以超级管理员(root)特权执行单条指令,操作会被完整记录到安全审计日志中;
  • su vs su - 的区别(高频追问):
    • su appuser:虽然切换了用户身份,但是依然保留了原用户的环境变量($PATH、$HOME);
    • su - appuser(带减号):完全重新登录,完整加载目标用户的登录 Shell、个人环境变量与配置文件,生产操作强烈推荐带 -。

三、网络与端口占用排查(面试必问实战)

服务启动时最经典的报错:java.net.BindException: Address already in use。面试官必问:“怎么查是谁占用了 8080 端口?怎么释放?”

1. 端口占用定位三大方案对比

工具命令执行语法适用场景与优劣
ss(推荐)ss -tunlp | grep 8080现代 Linux 默认推荐。基于内核 Netlink 机制,执行极快,百万连接场景下绝不卡死
lsoflsof -i :8080输出最直观清晰。直接列出占用端口的 COMMAND、PID、USER,非常便于快速识别
netstatnetstat -tunlp | grep 8080传统老工具。老版本服务器常见,但高并发连接数多时性能较慢(全表扫描 /proc)

ss 常用参数拆解

  • -t:仅查看 TCP 协议套接字;
  • -u:查看 UDP 协议套接字;
  • -n:以数字形式显示 IP 与端口(不发起反向 DNS 解析,大幅加快查询响应);
  • -l:仅显示处于 LISTEN(监听) 状态的套接字;
  • -p:显示占用套接字的进程 PID 与程序名称(通常需要 sudo 权限才能完整显示全部进程)。

2. 端口与网络连通性探测

# 1. 快速检查本机或远程目标端口是否处于开放连通状态(nc 即 netcat)
nc -zv 127.0.0.1 8080
telnet 127.0.0.1 8080

# 2. 模拟发起 HTTP 请求,仅打印响应头(快速验证 Web 服务健康状态)
curl -I http://127.0.0.1:8080/health

# 3. 测试网络层物理连通性与丢包率(基于 ICMP)
ping -c 4 192.168.1.1

四、系统资源与磁盘空间排查流程

1. 内存查看:free -h

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       3.2Gi       1.1Gi       240Mi        11Gi        11Gi
Swap:         2.0Gi          0B       2.0Gi

2. 磁盘爆满排障工作流

线上服务器磁盘写入满(Disk Full 100%)会导致数据库无法刷盘、应用打日志直接崩溃。标准排查决策树如下:

磁盘空间 100% 报警应急排查全流程决策树

常用排查命令清单

  1. 查看挂载分区:df -h
  2. 查找大文件:du -sh /data/* | sort -hr | head -n 10
  3. 安全清空大日志:> app.log(避免用 rm)
  4. 查未释放幽灵句柄:lsof | grep deleted
  5. 查 Inode 耗尽:df -i

五、环境变量与 Shell 配置文件

  • $PATH:系统寻找可执行二进制文件的搜索路径集合,各路径之间以冒号 : 分隔;
  • 临时追加路径:export PATH=$PATH:/usr/local/bin;
  • 配置文件持久化加载差异:
    • /etc/profile:系统全局配置,对机器上的所有用户在登录时生效;
    • ~/.bashrc:当前用户独享配置,每次打开终端时自动加载;
  • 立即生效:修改配置后执行 source ~/.bashrc 立即刷新,无需退出重登。

六、高频面试追问

  1. 线上生产环境排查日志打爆磁盘时,直接使用 rm -f app.log 会带来什么隐患?推荐怎么做?

    • 直接 rm 可能导致正在运行的程序持有句柄不释放(空间不回收且排查困难),或者在重新创建同名文件时因为权限问题写不进日志;
    • 生产推荐做法:使用清空重定向操作符瞬间将文件截断置空,既能立即释放磁盘空间,又保持原文件句柄不断开:
      > app.log
      # 或
      cat /dev/null > app.log
  2. 什么是 umask?为什么在 Linux 下新建的文件默认权限是 644,新建的目录默认权限是 755?

    • umask 是系统的权限掩码,用来在创建文件或目录时“剥夺”特定的权限位;
    • 默认情况下,Linux 规定文件的基准权限是 666(出于安全考虑默认不给执行权限 x),目录的基准权限是 777;
    • 主流 Linux 系统的默认 umask 值为 022;
    • 新建文件权限 = 666 & ~022 = 644(rw-r--r--);新建目录权限 = 777 & ~022 = 755(rwxr-xr-x)。
Navigation

Type to search…

↑↓ navigate↵ selectEsc close