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

关于目录内 RWX 权限的学习疑问

  •  
  •   momokuny · 2018-07-16 19:14:33 +08:00 · 1999 次点击
    这是一个创建于 2104 天前的主题,其中的信息可能已经有所发展或是发生改变。
    V 站各位大神好,首先很感谢各位大神百忙抽空看小弟的发帖,小弟目前学习到权限部分遇到疑问了,长话短说吧。

    我按照书上的理解,目录的 w 权限是跟目录内文档的变动有关系,比如:移动,删除,建立新的文档,等等。
    有一点我就不明白了,比如复制一个目录内的文档到另一个目录内,用 cp 命令,目录的权限没有 w,的情况下照样可以复制里面的文档?我也谷歌百度过了,复制操作是只属于 r 权限,不需要用到 w,但不是说好目录内文档的变更是也关 w 的事吗?到这里就有点乱了。
    第 1 条附言  ·  2018-07-16 20:29:15 +08:00
    今天有点神志不清,首先很感谢回答的各位,另外发现原来自己问问题问错了,上面的一大堆都不用看了,就简单一句,为什么目录可以只用 excute 权限就对里面的文档进行复制操作?我也不想弄清楚了,越学越火,此贴终结!!!
    18 条回复    2018-07-18 12:13:10 +08:00
    qianbiTH
        1
    qianbiTH  
       2018-07-16 19:23:35 +08:00 via Android   ❤️ 1
    这个写估计不是重写了文件吧,只是重置了索引?非专业人士不负责猜测
    qianbiTH
        2
    qianbiTH  
       2018-07-16 19:28:02 +08:00 via Android   ❤️ 1
    就跟 git 的一些机制类似?求大佬解答。你可以试试移动文件,看是否可行
    momokuny
        3
    momokuny  
    OP
       2018-07-16 19:33:39 +08:00
    @qianbiTH 恩,谢谢,google 了一堆 copy is only read permission,我感觉我是不是自己把简单的问题复杂化了。
    mikeguan
        4
    mikeguan  
       2018-07-16 19:37:55 +08:00 via Android   ❤️ 2
    应该是没有权限写入文件到没有 w 权限的目录的 权限对 root 相当于都不生效 你是不是用 root 操作的?
    likuku
        5
    likuku  
       2018-07-16 19:40:01 +08:00 via iPhone   ❤️ 2
    你源和目标混淆了吧

    另外,新创建的目录和文件也都有个默认权限的概念
    momokuny
        6
    momokuny  
    OP
       2018-07-16 20:17:18 +08:00
    @mikeguan 用账户跟 root 都做了一遍,root 就不用说了,它想干啥都行,登陆其中一个账户做的时候,只是不明白为什么目录不需要 w 权限就可以对里面的文档进行复制,仅仅有 r 权限就可以。
    qianbiTH
        7
    qianbiTH  
       2018-07-16 20:18:05 +08:00 via Android   ❤️ 1
    刚试了一下,我的答案纯属放屁,如果目录只有读权限,被拒绝了。4、5 楼成功
    mikeguan
        8
    mikeguan  
       2018-07-16 20:31:25 +08:00 via Android
    @momokuny 这个和文件系统的存储有关 目录是是占用 block 的 里面存的是目录下所有文件名 一个文件名最长 255 字节 超过一个 block 大小自动扩展
    目录的写权限 也就是你可以写东西到这个目录 block 里面(类比这个目录就是一个文件 你可以写这个文件即添加一个文件名 删除一个文件名)
    目录的读权限也就是你可以读取目录 block 里面的内容 可以看到目录里面的文件名 具体操作权限还看目录下文件设置的权限
    你如果从一个只有 rx 权限的目录里面复制一个文件到另一个目录里面 只有你对文件有权限操作就可以
    qianbiTH
        9
    qianbiTH  
       2018-07-16 20:50:47 +08:00 via Android   ❤️ 1
    我再次用非 root 账户进行了操作,命令确实可以执行,不会报错,但是文件并没有被真正的复制到只有读权限的文件夹中。系统是 ubuntu 16.04.4
    qianbiTH
        10
    qianbiTH  
       2018-07-16 21:15:15 +08:00 via Android   ❤️ 1
    我越来越糊涂了,第一回你说的是往只有 r 权限的目录里面复制一个文件。
    第二回好像是从只有 r 权限的目录往外复制文件。
    第三回附言是只有执行权限。
    likuku
        11
    likuku  
       2018-07-16 21:59:39 +08:00   ❤️ 1
    "为什么目录可以只用 excute 权限就对里面的文档进行复制操作"

    还是表述很混乱啊...

    是把此目录里的文档复制到此目录外面?在此目录之下进行原地文件复制黏贴 /就地生成副本?
    在此目录之下将某文档复制黏贴进此目录下的某个子目录?在此目录之下的子目录里进行文件的原地生成副本?

    这些状况都是很不同的好嘛。是否能写入某处,只和某处目录本身的权限有关,具备 W 权限即可。
    likuku
        12
    likuku  
       2018-07-16 22:02:08 +08:00   ❤️ 2
    源目录具备 rx 权限,源文件具备 r 权限,即可满足最低读取源的需求。

    目标目录具备 wx 权限,目标文件具备 w 权限 (若覆盖的话),即可满足最低写入需求。
    momokuny
        13
    momokuny  
    OP
       2018-07-16 22:09:06 +08:00
    我统一回复一下回答的各位吧,真的真的很谢谢大家的回复,我已经感受到 V 站满满的热情了。果然光靠文字是很难将东西讲清楚,也许我的文字功底不好,也许我没有把思路理顺再问问题,也许我今天有点不在状态,总之种种原因吧,我直觉告诉我,其实这问题应该没有想象中那么复杂的,V 站发帖不允许发图片,那我就直接把《鸟哥 linux 私房菜》里的一段话全部完整复制过来,问题应该就清晰了,我也知道贴这么一大段话,大家会没耐心看,那我告诉大家直接看表格的最后一行就可以了,那一行就是我的问题了,也就是为什么 /dir1 将 file1 复制到 /dir2 的时候只需要,只需要用到“ x ”权限呢?而不需要也用上‘ w ’权限呢?好吧,以下是完全是书里的内容:

    /*

    ·使用者操作功能與權限
    剛剛講這樣如果你還是搞不懂~沒關係,我們來處理個特殊的案例!假設兩個檔名,分別是底下這樣:

    /dir1/file1
    /dir2
    假設你現在在系統使用 dmtsai 這個帳號,那麼這個帳號針對 /dir1, /dir1/file1, /dir2 這三個檔名來說,分別需要『哪些最小的權限』才能達成各項任務? 鳥哥彙整如下,如果你看得懂,恭喜你,如果妳看不懂~沒關係~未來再來繼續學!

    操作動作 /dir1 /dir1/file1 /dir2 重點
    讀取 file1 內容 x r - 要能夠進入 /dir1 才能讀到裡面的文件資料!
    修改 file1 內容 x rw - 能夠進入 /dir1 且修改 file1 才行!
    執行 file1 內容 x rx - 能夠進入 /dir1 且 file1 能運作才行!
    刪除 file1 檔案 wx - - 能夠進入 /dir1 具有目錄修改的權限即可!
    將 file1 複製到 /dir2 x r wx 要能夠讀 file1 且能夠修改 /dir2 內的資料

    你可能會問,上面的表格當中,很多時候 /dir1 都不必有 r 耶!為啥?我們知道 /dir1 是個目錄,也是個抽屜!那個抽屜的 r 代表『這個抽屜裡面有燈光』, 所以你能看到的抽屜內的所有資料夾名稱 (非內容)。但你已經知道裡面的資料夾放在哪個地方,那,有沒有燈光有差嘛?你還是可以摸黑拿到該資料夾的!對吧! 因此,上面很多動作中,你只要具有 x 即可! r 是非必備的!只是,沒有 r 的話,使用 [tab] 時,他就無法自動幫你補齊檔名了!這樣理解乎?

    */
    qianbiTH
        14
    qianbiTH  
       2018-07-16 23:25:45 +08:00 via Android   ❤️ 1
    最后一段做了解释,作为仅有执行权限的目录,系统并不能读取然后知道里面的文件名,它对系统就是个黑盒子,但是由于你事先知道了该目录下存在 file1,即你已经知道了路径,而该文件你有读权限,且是对该文件进行复制操作,显然可以成功。如果你复制该目录,应该会提示失败。
    我知道那个箱子就在那里,箱子不透明,但是我知道里面有一个唯一的球,可能还有三角板,还有把尺(但是三角形和长条形的东西多了去了),那我就用手放进去摸一摸,找到一样的。
    win 的权限管理不一样,但感觉类似隐藏的文件夹,看不到,但是我知道路径的话可以打开。

    最后是我自己的理解,不用过于纠结 711 还是 755。这个读的权限对目录来说仅作用于目录内的文件和目录的名称。对文件而言仅作用于文件内的内容。也就是说对于一个只读的目录我可以修改目录名,对于一个只读的文件我可以修改文件名。
    momokuny
        15
    momokuny  
    OP
       2018-07-17 00:11:29 +08:00
    @qianbiTH 谢谢,解释得很生动形象,该文件有读取权限,对它进行复制操作显然可以成功,当初我就觉得这个目录一定要有‘ w ’,( d-wx------),才可以对里面的文档进行复制操作,因为目录的这个 w 权限涉及太多关于目录下文档的一些操作,比如新建文档,删除文档,更名文档,诸如此类的操作,所以我才觉得复制文档这个操作也是属于目录的‘ w ’的权限,所以才感到奇怪为什么目录没有加‘ w ’也可以复制它里头的文档呢?这样的想法,现在,感觉还好,似乎理解了,当初只是对目录的这个 w 能干些什么,而不理解。
    qianbiTH
        16
    qianbiTH  
       2018-07-17 00:15:34 +08:00 via Android   ❤️ 1
    我的解释可能也不是很对,可能还与文件类型有关。
    更复杂的情况暂时不想试了,还有实际执行中会提权什么的(是么?)
    qianbiTH
        17
    qianbiTH  
       2018-07-17 00:52:52 +08:00 via Android   ❤️ 1
    @momokuny 别纠结了,可能涉及到规定和最开始的设计。一米为什么那么长啊,一千克为什么那么重啊。。。或者以后会有答案,我搜的一哥们的:
    flynaj
        18
    flynaj  
       2018-07-18 12:13:10 +08:00 via Android
    账户可能有特权,例如 root。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2980 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:24 · PVG 16:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.