文件只读的原因不明?

Sto*_*row 5 linux filesystems files

Linux 文件系统似乎有一层又一层的微妙之处,我逐案偶然发现:

我有兴趣编辑这个文件:

[user@box ~]$ ls -l /a/b/c/foo.bar
-rw-rwxr-x    1 user   user      144529 Jan 26  2018 /a/b/c/foo.bar
Run Code Online (Sandbox Code Playgroud)

看起来它应该可由用户写入user- 真的吗?但是当我尝试在 vim 中编辑文件时,我收到了一个“ W10: Warning: Changing a readonly file”警告。

我知道文件可写性依赖于其包含文件夹的权限。我认为包含文件夹需要具有执行权限 - 真的吗?我假设所需的目录权限也一直扩展到/- 真的吗?

在我看来,注释文件的包含文件夹树具有执行权限:

[user@box ~]$ ls -ld /a/b/c/                                                                                    
drwxrwxrwx    2 user   user       36864 Mar  5 17:50 /a/b/c/
[user@box ~]$ ls -ld /a/b/           
drwxrwxr-x    4 user   user        4096 Sep 22  2017 /a/b/
[user@box ~]$ ls -ld /a/                
drwxrwxr-x    9 user   user        4096 Sep 15  2017 /a/
[user@box ~]$ ls -ld /     
drwxr-xr-x   24 root   root           0 Aug 24 10:48 /
[user@box ~]$ whoami
user
Run Code Online (Sandbox Code Playgroud)

据我所知,相关树中的每个目录都具有执行权限。起初,我怀疑它是否与/被拥有有关root,但它对“其他人”具有执行权限。此外,如果有相关的问题,/通过所拥有root,我想我有文件系统上的作为之外的任何地方的用户麻烦写作文件root,但事实并非如此。

任何人都可以想到/确定将所述文件视为只读的其他原因吗?

Luc*_*ini 15

首先 - 你设置了不可变的标志

chattr -i yourfilename
Run Code Online (Sandbox Code Playgroud)

如果设置了不可变标志,则无法更改文件。请记住,权限不会覆盖该行为!

其次,检查文件所在的目录是否以只读方式安装在另一个磁盘或分区中,只需键入:

mount 
Run Code Online (Sandbox Code Playgroud)

(没有参数)

如果您看到类似您的目录以只读方式安装的内容,那是有原因的!将其重新安装为读写以获取幸运!

第三 - 也是最常见的,你只是运行一个有错误文件系统,要纠正它,你必须备份你能做的,重新启动,然后以单一模式登录并运行:

mount #To determine how the partition is mounted
mount -o remount,ro /dev/sd(yourpartition) directory
fsck.ext4 /dev/sd(yourpartition)
Run Code Online (Sandbox Code Playgroud)

(ext4 可能需要更改为您的分区类型)

祝你好运!

  • 是的,正是这个意思。ro "(ro," read-only. 原因可能会有所不同,例如,如果分区被您明确挂载为只读,或者由于文件系统错误而回退到只读。您可以检查分区是否有错误使用 dmesg | grep /dev/sda1 也许你会看到类似呃!哦!重新挂载只读或类似的东西。要执行 fsck,你必须使用 fsck.ext4 /dev/sda1。如果你重新挂载读写没有任何错误 mount -o remount,rw none /a (2认同)