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

问大家一个 Linux 权限的问题

  •  
  •   AlisaDestiny · 2018-07-13 16:54:03 +08:00 · 3553 次点击
    这是一个创建于 2310 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想给一个目录加上可读权限,但是不小心手残了。写成了

    sudo chmod -R -o+r files
    

    中间多了个写-(横杠)。 我改正了之后

    sudo chmod -R o+r files
    

    又执行了一遍。 然后我就 cd 不进去了。提示"Permission denied".

    我想那好吧。我给就给个最开放的权限

    sudo chmod -R 777 files
    

    这下是可以 cd 进去了,但是一直给最开放的权限也不行呀。想想一下还是把可执行权限去掉吧,执行了

    sudo chmod -R o-x files
    

    然后奇怪的事发生了。我又 cd 不进去了。为什么我只是撤掉了执行权限但是读权限也没了。

    与没有知道的大佬,帮忙给个提示。

    22 条回复    2018-07-14 00:08:07 +08:00
    fxplay
        1
    fxplay  
       2018-07-13 16:57:20 +08:00   ❤️ 1
    删除 新建 给权限 不要太纠结
    WenhanWu
        2
    WenhanWu  
       2018-07-13 17:00:12 +08:00   ❤️ 1
    sudo chmod -R 755 files
    topbandit
        3
    topbandit  
       2018-07-13 17:11:22 +08:00   ❤️ 2
    进目录需要执行权限
    Osk
        4
    Osk  
       2018-07-13 17:13:48 +08:00 via Android   ❤️ 2
    r:你可以 ls dir 看里面的文件。
    x:你可以 cd 到该文件夹,及其子文件夹,ls 子文件的内容也需要 x。

    一般目录都是 rx 同时有的,特殊情况只给 x 权限,比如 android 的 /data 分区似乎是如此,这样就能限制 app 读取 data 里面的文件列表,但又不影响 app 对自己数据文件夹的操作
    Lpl
        5
    Lpl  
       2018-07-13 17:24:28 +08:00   ❤️ 2
    ![]( )

    执行那个错误的命令的时候,就把用户的 x 权限搞丢了。后来又没加上去,所有就 Permission denied 咯

    这个链接: https://wiki.archlinux.org/index.php/File_permissions_and_attributes
    ```
    - The directory cannot be accessed with cd.
    x The directory can be accessed with cd
    ```
    mrzx
        6
    mrzx  
       2018-07-13 17:26:58 +08:00   ❤️ 1
    要 CD 进去,除了 r 可读权限,还需要 x 执行权限
    mrzx
        7
    mrzx  
       2018-07-13 17:31:19 +08:00
    还是国内书籍理解的问题。

    linux 下,什么 cd,ls 这些严格意思上来说不能叫命令。

    实际上编辑好的二进制小工具。你可以理解成就是一堆小软件

    通过 bash shell 自动调用 /bin /sbin 下的工具。
    不相信,你随便删除一个,看看你所谓的“命令”还能执行吗?

    实际是 CD 是个工具,对文件格式下的目录做出了相对应的操作。
    AlisaDestiny
        8
    AlisaDestiny  
    OP
       2018-07-13 17:34:03 +08:00
    @fxplay
    @WenhanWu
    @topbandit
    @Osk
    @Lpl
    @mrzx

    问题已经搞定了。
    感谢各位,确实是的,对 Linux 的权限配置方面了解不多。不知道进目录还需要执行权限。以前用 ll 命令看权限的时候没注意进目录都有执行权限。
    lzy
        9
    lzy  
       2018-07-13 17:36:05 +08:00
    @Lpl 666
    AlisaDestiny
        10
    AlisaDestiny  
    OP
       2018-07-13 17:41:39 +08:00
    @Lpl
    哈哈,我还奇怪呢,上层目录权限是 drw-r--r--没有执行权限的时候我用 ls 命令发现可以看到文件名,但是 其他列都是问号。我还以为搞出啥问题了呢。
    Tyanboot
        11
    Tyanboot  
       2018-07-13 17:43:02 +08:00 via Android
    @mrzx 理解的确是一个大问题,不过命令这个也不能怪翻译,毕竟 shell 爆的就是 command not found,一般也不会给爆诸如“ executable not found “什么的。
    geelaw
        12
    geelaw  
       2018-07-13 17:56:50 +08:00
    @mrzx 你可能忘记了命令分为内部命令和外部命令。此外 cd 是一个内部命令,ls 是一个外部命令。

    @Tyanboot 就是“命令”。
    momocraft
        13
    momocraft  
       2018-07-13 18:01:38 +08:00
    别乱自己定义好不.. "ls 不是命令" "cd 是个工具" 都讲得出 人才
    mrzx
        14
    mrzx  
       2018-07-13 18:03:15 +08:00
    @geelaw 多谢,我还没仔细看过
    mrzx
        15
    mrzx  
       2018-07-13 18:10:56 +08:00
    @momocraft 我理解的是,命令本身就是集成在 shell 的,而不是和 shell 独立开来的某个程序,但是像 ls,cp 这类的,我一直认为是个独立的二进制工具,当文件删除的时候,就无法在 bash 里调用了。不过今天听 geelaw 一说,有了更深层次的理解。

    比如 ls
    root@simon:~# ls -l /bin | grep ls
    -rwxr-xr-x 1 root root 31464 Feb 22 2017 false
    -rwxr-xr-x 1 root root 130736 Feb 22 2017 ls
    -rwxr-xr-x 1 root root 81376 Mar 7 13:29 lsblk
    lrwxrwxrwx 1 root root 4 Dec 25 2016 lsmod -> kmod

    一旦删除 ls,你无论如何无法 ls 这个命令。
    lozzow
        16
    lozzow  
       2018-07-13 18:14:09 +08:00 via iPhone
    @mrzx whereis cd
    momocraft
        17
    momocraft  
       2018-07-13 18:48:33 +08:00
    没有这个文件也可以定义叫 ls 的 alias 或函数。考虑一下: 为什么 "aabbcc 回车" 的错误信息是 **command** not found,而 "/bin/aabbcc 回车" 的错误信息是 No such file or directory
    lance6716
        18
    lance6716  
       2018-07-13 18:50:15 +08:00 via Android
    Unix 作业刚写完一个 shell … cd 是 shell 实现的,ls 是系统提供的
    laodao1990
        19
    laodao1990  
       2018-07-13 19:05:32 +08:00
    #4 楼是明白人。
    想了解这个,楼主可以查询 linux 里的数据存储问题. 关键字:inode
    意识到目录也是文件,知道目录的 inode 里面都有什么,对应的就能了解对目录执行 ls,cd 都需要什么权限。
    建议看看鸟哥的 linux 私房菜。
    PHPer233
        20
    PHPer233  
       2018-07-13 19:11:31 +08:00 via iPhone
    你要 cd 进某个目录,必须具有 x 权限。我不知道为什么,但事实就是这样。
    z123
        21
    z123  
       2018-07-13 19:34:25 +08:00
    三楼正解:cd 进目录需要 x 权限
    Vitameans
        22
    Vitameans  
       2018-07-14 00:08:07 +08:00 via iPhone
    The execute permission grants the ability to execute a file. This permission must be set for executable programs, in order to allow the operating system to run them. When set for a directory, the execute permission is interpreted as the search permission: it grants the ability to access file contents and meta-information if its name is known, but not list files inside the directory, unless read is set also.

    Source: https://en.m.wikipedia.org/wiki/File_system_permissions#Permissions
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2725 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.