V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
AllenHua
V2EX  ›  Linux

Linux 中 0755 和 755 有什么区别?

  •  
  •   AllenHua · 2022-04-29 16:24:49 +08:00 · 4184 次点击
    这是一个创建于 930 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在浩瀚互联网,总是能看到设置权限 0755 或者 755 的。

    755 、644 、600 等等这些很好理解。

    read == 4

    write == 2

    execute == 1

    三组数字分别代表 owner 、group 和 others 的权限声明。

    最前面的 0 是什么意思?查了一下说 755 (represented in octal notation as 0755)

    0755 是八进制的一种写法?实际设置权限时,0755 和 755 有区别吗?

    13 条回复    2022-04-30 01:57:58 +08:00
    Greenm
        1
    Greenm  
       2022-04-29 16:28:05 +08:00
    root in /tmp
    ❯ stat -c '%a' per_test
    644

    root in /tmp
    ❯ chmod 0755 per_test

    root in /tmp
    ❯ stat -c '%a' per_test
    755
    maichael
        2
    maichael  
       2022-04-29 16:33:52 +08:00
    https://ss64.com/bash/chmod.html
    "The first digit = selects attributes for the set user ID (4) and set group ID (2) and save text image (1)S"
    只有 3 位的时候第一位默认是 0 ,所以 0755 等价于 755 。
    msg7086
        3
    msg7086  
       2022-04-29 16:42:44 +08:00 via Android
    因为权限有 4 位 8 进制,最大是 7777 。你写 755 就是 0755 。
    AllenHua
        4
    AllenHua  
    OP
       2022-04-29 16:46:14 +08:00
    When the 4 digits number is used, the first digit has the following meaning:

    - setuid=4
    - setgid=2
    - sticky=1
    - no changes = 0

    If the first digit is 0 it can be omitted, and the mode can be represented with 3 digits. The numeric mode 0755 is the same as 755.
    AllenHua
        5
    AllenHua  
    OP
       2022-04-29 16:48:33 +08:00
    @maichael #2
    @msg7086 #3
    @AllenHua #4

    平常都没有用到第一位数字,不知道会在何种场景下使用?

    设置 uid gid sticky……吗
    ysc3839
        6
    ysc3839  
       2022-04-29 16:49:25 +08:00 via Android   ❤️ 1
    0755 开头的 0 代表这是一个八进制数
    twing37
        7
    twing37  
       2022-04-29 16:50:35 +08:00
    HFX3389
        8
    HFX3389  
       2022-04-29 16:51:56 +08:00   ❤️ 1
    @ysc3839 #6 并不是,前面的数字代表是特殊权限。
    0 代表不设置特殊权限,
    4 代表设置 SUID ,
    2 代表设置 SGID ,
    1 代表设置 SBIT 。
    chenxytw
        9
    chenxytw  
       2022-04-29 16:54:09 +08:00   ❤️ 1
    首先,假设 OP 是在讨论 chmod(1) 命令的参数。
    0755 和 755 没有区别。chmod 用数字做参数时,要求是 4 位 0-7 的数字,不足 4 位会自动前补 0 。

    其次,如果是 C 语言调用 chmod(2) 接口的话,0755 是因为参数需要八进制数字,C 语言的八进制数字要求以 0 开头,这里的 0 不能省略。但同样的,这也已经是省略写法了,写全了应该是 00755 。
    HFX3389
        10
    HFX3389  
       2022-04-29 16:55:57 +08:00   ❤️ 1
    @AllenHua #5

    特殊权限 SUID 是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(比如你用 passwd 修改密码时)。

    特殊权限 SGID 特殊权限有两种应用场景:

    1. 当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;

    2. 当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。

    特殊权限 SBIT 可确保用户只能删除自己的文件,而不能删除其他用户的文件,当对某个目录设置了 SBIT 粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
    AllenHua
        11
    AllenHua  
    OP
       2022-04-29 17:01:45 +08:00   ❤️ 1
    @twing37 #7
    @HFX3389 #8
    @chenxytw #9

    嗯嗯是的,感谢大家的解惑。默认 4 位 0-7 的数字,不足四位会自动通过前导 0 补充。

    稍微看了一下 Linux 文件特殊权限

    - setuid == 4
    - setgid == 2
    - sticky == 1
    - no changes == 0

    setuid 是让普通用户可以用 root 的角色运行只有 root 才能运行的程序或命令。

    setgid 只对目录有效,目录被设置该权限后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。

    sticky bit 可以理解为防删除位;一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。 如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用 sticky bit 权限; 设置该权限后, 就算用户对目录具有写权限,也不能删除该文件。

    https://linuxize.com/post/understanding-linux-file-permissions/
    https://www.cnblogs.com/cy-8593/articles/12332731.html
    https://segmentfault.com/a/1190000015231834

    平常使用 Linux 应该不需要理会第一组特殊权限,设置好拥有者、所在组和其他的权限就够了。

    ps: 大家可以贴出更加专业、讲解更细致的文章,供我们阅读。不论中英文。
    ysc3839
        12
    ysc3839  
       2022-04-29 17:05:38 +08:00 via Android   ❤️ 1
    @HFX3389 你说得也对,但是在一些 POSIX API 中,权限是需要传入八进制的 755 等数,不能传入十进制的 755 ,此时代码中会写 0755 ,此时 0 代表这是八进制数,你所说的特殊权限则被省略了,完整表示是 00755 。
    documentzhangx66
        13
    documentzhangx66  
       2022-04-30 01:57:58 +08:00
    无论是 0755 或 755 都不应该使用。这就像很多年前,不懂理论的程序员,说 TCP 会粘包一样。

    专业的用法应该是 chmod u=rwx,go=rx 这种,把参数写清楚,写明白。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2630 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:51 · PVG 23:51 · LAX 07:51 · JFK 10:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.