首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Linux中-d、-s的含义与文件权限修改:ls、chown、chmod一网打尽
📅 2026/10/15 12:55:48
✍️ 爱科研究院
👁 阅读 3,247
刚上手 Linux 那会儿我也被几个单字母参数搞得晕头转向。随手敲一句ls -l输出里既有-rw-r--r--又有人说什么-d-s再往后学chown改用户、chmod改权限参数后面跟着一堆rwx。这些东西拆开看都不难但混在一起就容易乱-d到底是ls的选项还是文件类型里的目录标志-s是 socket 文件还是 setuid 权限位今天这篇就专门把这些“小细节”捋清楚把文件类型、命令选项、属主修改、权限数字一套串起来。适合刚接触 Linux 的运维新人、自学备考的读者也想给写过chmod 777但没细想过后果的人补一课。1. 从 ls 输出说起-d、-s 到底是谁的选项1.1 先分清“命令选项”和“文件类型标志”很多人在网上搜“linux 中 -d -s 的含义”搜出来的结果五花八门原因就在于-d和-s这种字符身兼数职。它们既可能是某些命令的命令行选项也可能是ls -l输出中首列里的文件类型字符。理解这个区别比死记选项本身重要得多。先看命令选项最常见的是lsls -d /etc ls -s /var/log这里的-d是“directory”的意思意思是只显示目录本身不显示目录里面的内容。-s是“size”的意思显示每个文件占用的磁盘块大小。这俩都是ls的选项要在命令里作为参数传进去。再看不带任何命令选项直接执行ls -l第一列开头那个字符也是文件类型的标记ls -l /tmp drwxrwxrwt root root 4096 Jun 17 10:00 tmp第一列最左边的d表示这是一个目录directory。如果是一个 socket 文件这个位置就会出现s。所以同一个字母s在ls -s里是选项在ls -l首列里是文件类型两码事。为了加深印象你可以把它拆成两步来记忆如果-d-s出现在“命令名后面、路径之前”多半是这条命令自己的选项。如果它们出现在“权限字符串的最前面”那就是文件类型标志-普通文件、d目录、l符号链接、b块设备、c字符设备、p管道、ssocket。我见过不少朋友把ls -ld /etc中的ld理解成“列出 etc 目录”这不算错但准确的拆解是-l用长格式显示-d只看目录本身合起来的效果就是“用长格式显示 /etc 这个目录本身的信息而不是钻进目录列出里面所有文件”。这个组合在排查目录权限时简直救命的常用。1.2 常用 ls 选项速查一眼定位你要的参数我日常工作里基本靠这几个选项特意做了个表方便随手查阅选项含义典型用法-l长格式输出显示权限、属主、大小、时间ls -l file-a显示所有文件包括以.开头的隐藏文件ls -la ~-d只显示目录本身不展开目录内容ls -ld /etc-s显示每个文件占用的磁盘块大小不是字节数ls -ls-h以人类可读方式显示大小K、M、Gls -lh-t按修改时间排序新的在前ls -lt-S按文件大小排序大的在前ls -lS-R递归列出子目录ls -lR-i显示 inode 编号ls -li这里有个特别容易踩的坑ls -s显示的 block 大小不是字节。默认一块通常是 1024 字节但文件系统上的“块”可能是 4096 字节所以ls -ls显示的 4不代表文件只有 4 字节而是占了 4 个磁盘块。要看精确字节数老老实实用ls -l或者stat。初学者如果看到ls -s的数字和自己du出来的结果对不上先别怀疑系统先确认这个s是在显示占用空间。另外补充一个高频组合ls -ld之所以好用是因为你只想看目录自己的权限而不是它里面所有文件的统计。比如你ls -l /data看到的是 /data 内部的内容根本看不到 /data 目录本身属主是不是你。只有ls -ld /data才告诉你这个目录能不能进去、能不能列表。权限排查的第一步往往就是这一条。2. 深入文件权限模型rwx 三组九个位2.1 三个角色和三把钥匙Linux 的权限设计非常直白就三个角色属主owner、属组group、其他用户others。对应ls -l输出中如-rwxr-xr--这样的九位字符分成三组第一组三位文件属主的权限第二组三位文件所属组的权限第三组三位既不是属主也不属于属组的“其他人”的权限每组三位都按顺序固定是r读、w写、x执行没有权限的位置显示-。这三个权限到底限制什么行为分开说r读权限。对普通文件来说能cat、less打开看内容对目录来说能ls列出目录里有哪些文件名。w写权限。对普通文件来说能修改、覆盖内容对目录来说能在目录里创建、删除、重命名文件。注意删除一个文件看的是目录的写权限而不是文件本身的写权限。这个坑我见人栽过无数次文件明明-r--r--r--但目录是drwxrwxr-x照样能删掉它。x执行权限。对普通文件来说能把它当作脚本或程序运行对目录来说能cd进入目录同时要访问目录里的文件也必须先有执行权限。换句话说目录的x是一张“通行证”没有它即便有r权限看得见名字也进不去。读、写、执行三种权限放在目录上要比放在文件上抽象得多。生活类比目录像一个房间r是房间门上装了玻璃你能看到里面有什么x是你有钥匙能开门进去w是你有权力往房间里搬东西或搬走东西。要进房门拿东西光有玻璃看没用必须要有钥匙也就是目录的执行权限。2.2 从符号到数字rwx 与 4、2、1 的换算权限在命令行里可以用符号写也可以用数字写。数字其实是二进制标记的十进制简写。r记为 4w记为 2x记为 1没有权限记为 0。每组把三个数字加起来得到一个 0 到 7 的数。举例rwx 4 2 1 7r-x 4 0 1 5r-- 4 0 0 4--- 0所以一个普通文件的-rw-r--r--翻译成数字就是属主rw-是 6属组r--是 4其他人r--是 4合并起来就是644。一个目录drwxr-xr-x翻译过来就是755。我们常说的chmod 755 script.sh就是把脚本设成属主可读可写可执行组内和其他人只读可执行。有人会问既然符号模式ux、g-w也能改权限为什么还要记数字因为数字模式简单、确定、适合批量管理。很多时候你需要把一组文件的权限统一设置成标准值比如644给普通网页文件、755给脚本和目录一条find ... -exec chmod 644 {} \;就能完成。而符号模式更适合做“局部调整”比如只给属主加上执行权限不影响其他位。我实际使用中建议先心里想明白目标权限再决定用哪种表达。不要上来就chmod 777图省事后面再解释为什么不推荐。3. 修改文件所有者chown 用法详解3.1 chown 改的是“谁拥有这个文件”修改文件用户用chown全称 change owner。语法非常简单chown [选项] 用户名[:组名] 文件...常见几种写法chown alice file.txt # 把属主改为 alice属组不变 chown alice:devs file.txt # 把属主改为 alice属组改为 devs chown :devs file.txt # 只改属组不改属主 chown -R alice:devs /data/app # 递归修改目录下所有文件注意:的使用。alice:devs是用户和组一起改如果只想改组写成:devs或.devs老写法都行。实际操作中我强烈建议写成用户:组完整形式避免因为省略导致意外。有些发行版里chown alice.devs这种点分法虽然还能用但已经属于历史遗留新代码里统一用冒号更规范。还有一个重点是-R递归。它让命令对目录下所有子目录和文件生效。但也正因为递归用错时的破坏面也大。我之前处理过一次事故某个同事想在项目目录里把文件归到他自己名下结果手滑多写了一个路径把整个数据目录的属主全部改了最后靠快照恢复才救回来。使用-R之前可以先chown -R --dry-run但注意chown没有--dry-run选项。我自己的习惯是先用find看要改的范围有多大find /data/app -maxdepth 2 -exec ls -ld {} \;确认范围再动手。真正的老手会分两步先ls -ld确认目录本身再find抽查几个文件。3.2 chown 里会出现 -d、-s 吗回到标题中“linux 中的 -d、-s 等的含义”如果你正在用chown也可能会看到-h、-R、--dereference等选项但-d和-s一般不是 chown 的常用选项。这正是初学者容易混的点chown里确实没有-d和-s的高频用法它们是别的命令的选项或者出现在ls -l的文件类型里。如果你用的是chown配合符号链接才会遇到-h不跟随符号链接只修改链接本身和--dereference跟随符号链接修改指向的文件。默认 act 是跟随链接修改的是链接指向的目标。多数场景下我们希望chown直接改文件本身所以默认行为没什么问题但如果哪天你想改一个符号链接自己的属主就必须加-h。这个细节虽然和小标题里的-d、-s无关但属于“改属主”时绕不开的坑我在这里专门提示一下。至于-s在ls -l输出里可能是一个 socket 文件的类型标记也可能是一个特殊权限位这个放到下一节和chmod一起讲。4. 修改文件权限chmod 从入门到避坑4.1 符号模式像说话一样调整权限chmod的符号模式长这样chmod ux script.sh # 给属主加执行权限 chmod g-w file.txt # 去掉属组的写权限 chmod or file.txt # 其他人的权限设置为只读 chmod ax run.sh # 所有角色都加执行权限这里u代表属主user、g代表属组group、o代表其他others、a代表全部all。操作符有加权限、-减权限、直接设置成指定权限。很生猛它会把对应角色的权限完整替换掉比如chmod urx file会把属主的权限变成r-x哪怕之前有写权限也被清掉。用和-只会增删指定权限其他位保持原样。实际调整目录时我经常组合使用chmod urwx,grx,orx /opt/webapp把目录设成属主全权、组和其他成员可进入可读不可写。这个方式比数字模式更容易读一眼看出每个角色的权限位是什么。有一个实操心得用符号模式临时加执行权限很方便但调试完要尽快收回去。我见过服务器上留了一堆ax的临时脚本后来被扫出来有安全隐患。临时操作之后一定要记得“恢复现场”这是老兵和新手的分水岭。4.2 数字模式快速设置一组标准权限数字模式把权限当成四组八进制数但我们日常接触的通常只有三位偶尔涉及特殊权限时会有四位。基础三位就是前面算的rwx求和。常用标准值数字权限适用场景644rw-r--r--普通文件默认权限网页文件常用755rwxr-xr-x脚本、可执行程序、目录常用600rw-------私密配置文件如密钥、证书700rwx------私有目录仅属主可访问666rw-rw-rw-所有用户可读可写一般不建议777rwxrwxrwx所有用户可读可写可执行安全隐患极大选标准值是有讲究的。644和755能有这么高出场率是因为它们既满足基本使用又不给其他人多余的写权限。一个网站配置文件属主能改其他用户能读不能写就合理。如果有人跟你说“777省事”你要知道这意味着任何能登录这台机器的人都能改你的脚本。一旦脚本被写入恶意内容再以你的身份或服务身份被调用后果可不是闹着玩的。我处理过类似的线上事故一个脚本被改成777又恰好放在 Web 目录里被写入一段下载代码最后服务器被拖去挖矿。从那以后我就形成了条件反射看到777先想这条权限是不是非给不可。如果目录里已经有很多文件想统一整理权限可以这样find /data/www -type f -exec chmod 644 {} \; find /data/www -type d -exec chmod 755 {} \;文件用 644目录用 755这是很经典的安全基线。为什么要区分文件与目录因为目录必须要有x权限才能被进入如果把目录设成644等于别人看不到目录里的内容甚至自己都无法cd进去。4.3 特殊权限位这才是 -s 出现的另一个地方现在终于可以正面讲-s了。在ls -l的权限字符串里如果执行位不是x而是s说明这个文件带有setuid或setgid特殊权限。属主执行位显示s小写代表 setuid 权限同时原本的x也存在。例如/usr/bin/passwd往往是-rwsr-xr-x。如果权限里实际上没有x那显示的是大写S。比如-rwSr--r--意思是有 setuid 但没执行权限。大写说明权限配置得不完整。什么是 setuid简单说一个可执行程序被设置了 setuid 后普通用户运行它时会临时获得文件属主的身份权限。最典型的例子就是passwd普通用户需要修改自己的密码而密码文件/etc/shadow只有 root 能写普通用户怎么改靠的就是/usr/bin/passwd的 setuid 位运行这个程序时进程以 root 身份去修改 shadow 文件。同样setgid 位让进程临时获得文件属组的身份。用数字设置特殊权限时要在常规三位前面加一位4开头的四位如4755设置 setuid2开头的四位如2755设置 setgid1开头的四位如1777设置粘滞位sticky bit命令chmod 4755 some_program chmod 2755 some_dir chmod 1777 /tmp粘滞位在目录上很常见。/tmp的权限是drwxrwxrwt最后的t表示粘滞位。它的作用是在这个目录里每个用户只能删除自己创建的文件哪怕其他人也有写权限也不能互相删。这解决了一个公共临时目录的混乱问题。如果权限位上没有x则会显示大写T。所以你在ls -l中看到s或t一定要先分清是哪种特殊权限再判断是否合理。看到/usr/bin/passwd有s是正常现象看到自己写的普通脚本有s那就要警惕了。一个恶意的 setuid root 程序意味着任何用户运行它都能提权这是系统安全的大忌。排查可疑 setuid 文件可以这样find / -perm -4000 -type f 2/dev/null这条命令列出系统中所有设置了 setuid 位的普通文件。定期扫一圈看看有没有多出不认识的可疑文件是个好习惯。我每次接手一台新机器第一件事就是查这个清单能省掉很多后面被提权攻击的烦恼。5. 常见误区与排查技巧实录5.1 误区一把“-d/-s 权限”当成一种权限经常有人问“Linux 里的 -d、-s 权限是什么意思”这本身就是一个概念混淆。权限只有r、w、x和特殊权限s、t而-d、-s更像“描述符”。-d在命令选项里是“只看目录本身”在ls -l首列里是文件类型“目录”。-s若是命令选项是“显示占用块大小”若是文件类型标记是“socket 文件”若是权限位是“setuid/setgid”。我建议的排查思路是先看这个字符出现在哪个位置。出现在命令名后面、路径参数前面的就是命令选项。出现在ls -l输出首列的是文件类型。出现在权限字符串的x位上的是特殊权限。顺着位置去查永远不会乱。你可以自己做个实验touch test_socket # 手动创建一个 socket 不太方便但可以看系统里的现有 socket ls -l /var/run/*.sock 2/dev/null | head我拿一台服务器实测过/var/run下面多个 socket 文件第一列是srwxr-xr-x开头那个s就是“socket 文件”的类型标志不是权限位。而/usr/bin/passwd第一列是-rwsr-xr-x开头-说明是普通文件权限位里的s才是 setuid。一个s两种身份看位置就能分辨。5.2 误区二权限不够就顺手 chmod 777Permission denied是新手遇到最多的报错。很多人第一反应是chmod 777但更专业的处理是先用id确认当前用户的真实身份和所属组。用ls -ld看目标目录权限用ls -l看目标文件权限。判断当前用户属于哪个角色属主、属组、其他哪个权限不满足。只给那个角色补最小权限而不是一刀切全放开。比如报错是“cannot create directory”说明当前用户对父目录没有写权限。这时候你ls -ld /data发现属主是root组是admin而你在admin组里但组权限是r-x。那就给组加一个w就够chmod gw /data而不是把整个/data改成777。这种“最小权限”原则能避免系统里到处都是可以互写互删的目录。我见过不少团队内部服务器因为图方便把所有目录都设成777结果任何账号都能改对方的代码排查问题时根本分不清是谁动的文件。5.3 误区三忽略目录权限对删除操作的影响很多人以为“文件我有写权限就能删除它”。大错特错。删除文件的实质是修改目录里的记录所以决定权在目录的写权限。举个例子mkdir /tmp/demo_dir cd /tmp/demo_dir touch secret.txt chmod 444 secret.txt # 文件只读谁也不能写 chmod 777 /tmp/demo_dir # 目录可写 rm -f secret.txt # 照样能删掉反过来就算文件是666但你所在的目录没有写权限仍然删不掉。这个特性经常导致两种困惑一是文件明明只读结果被删了二是文件明明可写结果想删删不掉。理解“目录写权限才是删除开关”后就不会再搞混。针对这个原理我可以分享一个保护重要文件的小技巧如果需要保护某个文件不被误删与其去改文件的权限不如把它放在一个没有写权限的目录里或者给目录开粘滞位。比如团队成员共享一个部署目录又不希望有人误删别人建的文件那就可以在目录上设置粘滞位chmod 1777 /data/shared效果和/tmp一样大家都能往里面写但只有文件创建者能够删除自己的文件。这个做法在真实的团队协作环境里非常实用。5.4 快速排查命令表格最后整理一张我平时排查权限问题时必看的对照表你可以直接截图留着现象可能原因检查命令解决方向Permission denied无法打开文件没有读权限ls -l filechmod or file或调整属主无法修改文件内容没有写权限ls -l filechmod uw file无法进入目录缺少目录执行权限ls -ld dirchmod ux dir能 ls 目录但进不去有读无执行ls -ld dir增加x权限无法删除文件但文件有写权限父目录没有写权限ls -ld 父目录调整父目录权限目录下其他人能删我的文件目录是 777 且无粘滞位ls -ld dirchmod 1777 dir出现大写S或T有特殊权限但缺执行位ls -lchmod ux或去掉特殊权限表格之外我还想强调一个习惯不要只盯着ls -l。stat命令能给更细节的信息包括 atime/mtime/ctime 的精确时间以及文件 inode 编号。有时候文件权限看起来没问题但时间戳异常也能帮你发现是不是有程序动过它。stat somefile我在定位一些诡异问题时经常是三个命令轮着用ls -l看常规权限stat看时间find -perm看特殊权限。三者配合绝大多数权限相关的问题都能定位清楚。回到文章标题里那个问题-d、-s的含义以及文件修改用户或权限的rwx拆开并不神秘难的是在不同场景里它们有不同身份。我个人实际操作中的体会就是遇到含混的命令参数先想“它是谁的选项”再看“它出现在哪个位置”最后查“它对应的权限位是什么”。做运维或者开发不可能把所有选项背完但掌握了这套拆解方法等于手里有了一把万能钥匙。最后再分享一个小技巧改权限之前先执行cp file file.bak或者至少看一眼当前权限用ls -l做完记录再动手。很多线上事故都是因为少看那一眼开始的。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/15 12:50:47
AI Music Video API 编辑分镜:解决生成 MV 小片段不符合预期的问题
2026/10/15 12:50:47
拓扑排序的两种主流实现:DFS与BFS的选取逻辑与代码拆解
2026/10/15 12:50:47
Infovision iWork-Safety 配置手册深度解读:从区域管理到事件联动的完整避坑指南
2026/10/15 16:12:05
AtomCode 核心模块退役实战:三步刀法删除 `core::{tool, conversation, provider, ctx}` 纠缠球
2026/10/15 16:12:05
Karma离线安装包构建指南:断网环境下的前端测试闭环
2026/10/15 16:12:05
Craftplan客户管理指南:多地址、订单历史与统计数据一览
2026/10/15 16:12:05
MSP430硬件I2C驱动实战:从寄存器配置到中断状态机
2026/10/15 16:12:05
Gitee + nginx + Jenkins 自动化部署 Vue 项目实战
2026/10/15 16:07:01
Python批量实现Word关键词高亮:run与XML踩坑全指南
2026/10/15 0:02:59
AI Coding时代的柔性之美:从静态软件到自演化软件,软件研发正在重新进化
2026/10/15 0:02:59
亨得利客户服务中心官方网点分布一览:2026年全国多城门店地址与最新联系电话公布
2026/10/15 0:02:59
防关联浏览器哪个好?三款产品实测差异解析
2026/10/13 12:25:09
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/14 18:35:19
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/14 14:52:59
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/15 1:07:55
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/15 5:07:59
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/15 8:10:01
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)