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
看起来它应该可以被用户写入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
据我从上面可以看出,相关树中的每个目录都具有执行权限。起初,我怀疑它是否与/
属于 拥有有关root
,但它具有“其他”的执行权限。另外,如果存在与/
拥有相关的问题root
,我想我将无法以 以外的用户身份在文件系统上的任何位置写入文件root
,但事实并非如此。
任何人都可以想到/确定指出的文件被视为只读的其他原因吗?
答案1
第一的 - 你设置了不可变的标志
chattr -i yourfilename
如果设置了不可变标志,则无法更改文件。请记住,权限不会覆盖该行为!
第二,检查文件所在的目录是否是安装在另一个磁盘或分区中,只读,只需键入:
mount
(无参数)
如果您看到类似您的目录以只读方式安装的内容,那就是原因!将其重新安装为读写即可获得幸运!
第三种——也是最常见的,你只是运行一个文件系统有错误,要纠正这个问题,您必须备份您可以备份的内容,重新启动,然后以单一模式登录并运行:
mount #To determine how the partition is mounted
mount -o remount,ro /dev/sd(yourpartition) directory
fsck.ext4 /dev/sd(yourpartition)
(ext4可能需要更改为您的分区类型)
祝你好运!