El sistema de archivos de Linux parece tener capas y capas de sutileza con las que me tropiezo caso por caso:
Estoy interesado en editar este archivo:
[[email protected] ~]$ ls -l /a/b/c/foo.bar
-rw-rwxr-x 1 user user 144529 Jan 26 2018 /a/b/c/foo.bar
Parece que debería ser escribible por el usuario user
- ¿verdadero? Pero cuando trato de editar el archivo en vim, obtengo un "W10: Warning: Changing a readonly file
” advertencia.
Sé que la capacidad de escritura del archivo depende de los permisos de la carpeta que lo contiene. Creo que la carpeta contenedora debe tener permiso de ejecución, ¿verdad? Supongo que el permiso de directorio requerido también se extiende hasta /
– ¿Verdad?
Me parece que el árbol de carpetas que contiene el archivo anotado tiene permisos de ejecución:
[[email protected] ~]$ ls -ld /a/b/c/
drwxrwxrwx 2 user user 36864 Mar 5 17:50 /a/b/c/
[[email protected] ~]$ ls -ld /a/b/
drwxrwxr-x 4 user user 4096 Sep 22 2017 /a/b/
[[email protected] ~]$ ls -ld /a/
drwxrwxr-x 9 user user 4096 Sep 15 2017 /a/
[[email protected] ~]$ ls -ld /
drwxr-xr-x 24 root root 0 Aug 24 10:48 /
[[email protected] ~]$ whoami
user
Por lo que puedo decir de lo anterior, cada directorio en el árbol relevante tiene permisos de ejecución. Al principio, sospeché si tenía que ver con /
siendo propiedad de root
, pero tiene permiso de ejecución para "otros". Además, si hubiera problemas relacionados con /
siendo propiedad de root
, me imagino que tendría problemas para escribir archivos en cualquier parte del sistema de archivos como un usuario que no sea root
, pero ese no es el caso.
¿Alguien puede pensar en/identificar otras razones por las que el archivo anotado se considera de solo lectura?
Respuesta aceptada:
Primero – estás con un conjunto de banderas inmutables
chattr -i yourfilename
Si se establece el indicador inmutable, no puede cambiar el archivo. ¡Recuerde que los permisos no anularon ese comportamiento!
Segundo, compruebe si el directorio donde se encuentra el archivo está montado en otro disco o partición , como solo lectura, para eso solo escriba:
mount
(sin argumentos)
Si ve algo como su directorio montado como de solo lectura, ¡esa es la razón! ¡Vuelva a montarlo como lectura-escritura para tener suerte!
Tercero y más común , solo está ejecutando un sistema de archivos con errores , para corregir eso, debe hacer una copia de seguridad de lo que pueda, reiniciar, luego iniciar sesión en modo único y ejecutar:
mount #To determine how the partition is mounted
mount -o remount,ro /dev/sd(yourpartition) directory
fsck.ext4 /dev/sd(yourpartition)
(tal vez sea necesario cambiar ext4 a su tipo de partición)
¡Buena suerte!
Relacionado:¿Obtener el tiempo de usuario y kernel de un proceso en ejecución?