Porque la 'ejecutabilidad' de un archivo es una propiedad de la entrada del archivo en los sistemas UNIX, no del tipo de archivo como lo es en Windows.
En resumen, ls
enumerará un archivo como ejecutable si alguno de los propietarios, el grupo o todos tienen permisos de ejecución para el archivo. No importa cuál sea el tipo de archivo, solo cuáles son los permisos. Este comportamiento brinda dos beneficios significativos:
#!
en la parte superior del archivo. El kernel no tiene que saber que los archivos .py
son ejecutables, porque los permisos así lo indican. Esto también, cuando se combina con el soporte binfmt_misc
en Linux, hace posible hacer cosas realmente interesantes, como tratar los programas de la consola de Windows como binarios nativos si tiene Wine instalado. .py
. Sin embargo, todo esto se desmorona si está atascado tratando con sistemas de archivos que no admiten permisos POSIX, como FAT (o NTFS si no tiene asignaciones de usuario -configuradas )]. Si el sistema de archivos no almacena permisos POSIX, entonces el sistema operativo tiene que simularlos. En Linux, el valor predeterminado es tener permisos de lectura, escritura y ejecución establecidos para todos, de modo que los usuarios puedan hacer lo que quieran con los archivos. Sin esto, no podría ejecutar scripts o archivos binarios desde una unidad flash USB, porque el kernel no le permite modificar los permisos en dichos sistemas de archivos por archivo -.
En su caso particular, git
almacena los atributos que ve en los archivos cuando se confirman, y probablemente ocurrió la confirmación original del archivo README.md (o una de las confirmaciones posteriores )en un sistema Windows, donde estas cosas se manejan de manera muy diferente y, por lo tanto, git
solo almacena los permisos como acceso completo para todos, de manera similar a cómo Linux maneja los sistemas de archivos sin soporte de permisos.
Если файловая система ext4, существуют зарезервированные блоки, в основном для облегчения обработки и предотвращения фрагментации, доступные только пользователю root. Для этого параметра его можно изменить в реальном времени с помощьюtune2fs(не все параметры могут быть обработаны таким образом, когда файловая система смонтирована):
-m reserved-blocks-percentage
Set the percentage of the filesystem which may only be allocated by privileged processes. Reserving some number of filesystem blocks for use by privileged processes is done to avoid filesystem fragmentation, and to allow system daemons, such as syslogd(8), to continue to function correctly after non-privileged processes are prevented from writing to the filesystem. Normally, the default percentage of reserved blocks is 5%.
Итак, если вы хотите уменьшить резервирование до 1% (~2 ГБ )и получить доступ к ~8 ГБ свободного места, вы можете сделать это:
sudo tune2fs -m 1 /dev/nvme0n1p8
Обратите внимание, :опция -m
фактически принимает десятичное число в качестве параметра. Вы можете использовать -m 0.1
, чтобы зарезервировать только около ~200 МБ (и получить доступ к большинству из ранее недоступных 10 ГБ ). Вы также можете использовать опцию -r
для резервирования напрямую по блокам. Вероятно, не рекомендуется иметь 0 зарезервированных блоков.
Удаленные файлы также могут способствовать «отсутствию места»
lsof | grep deleted | grep /home
возвращает этот вывод для меня
chrome 11181 criggie 15u REG 254,0
4194304 50651663 /home/criggie/.config/google-chrome/BrowserMetrics/BrowserMetrics-5D0236AF-2BAD.pma (deleted)
Это показывает, что Chrome с PID 11181 открыл этот файл BrowserMetrics, а затем удалил его, но дескриптор файла все еще остается открытым. Это означает, что файл невидим в списке каталогов, но по-прежнему занимает место на диске.
Почему программы делают это? Когда исполняемый двоичный файл завершится, ОС освободит дескриптор открытого файла, и файл на диске исчезнет без риска оставить устаревший временный файл -.
Чего я не вижу, так это размера дискового пространства, используемого этим файлом.