не могу изменить разрешение файла

не могу изменить разрешение файла

Всякий раз, когда я создаю или копирую несколько файлов оболочки на USB-накопитель, я не могу сделать их исполняемыми.

Если я создам test.sh, то разрешение файла по умолчанию будет 644, но когда я выполню

chmod 777 test.sh

нет отчетов об ошибках и echo $?также возвращает "0". Но все еще ls -lпоказывает разрешение как 644и я не могу выполнить его как./test.sh

решение1

Да, это может произойти, если ваше устройство отформатировано в файловой системе, которая не поддерживает такой тип настройки разрешений, например VFAT. В таких случаях umask создается на лету из настройки в fstab (или эквивалента горячего подключения).

Смотрите, скорее всего, man mount для подробностей. Например, для VFAT мы находим:

Варианты крепления для жира

uid=значение и gid=значение

Установить владельца и группу всех файлов. (По умолчанию: uid и gid текущего процесса.)

umask=значение

Установить umask (битовую маску разрешений, которые отсутствуют). По умолчанию используется umask текущего процесса. Значение указывается в восьмеричном формате.

и т. д.

решение2

Похоже, что ваша файловая система смонтирована с опцией noexec, которая запрещает выполнение программ в этой файловой системе, действуя так, как будто все биты выполнения в разрешениях были неустановлены. Если вы используете userопцию монтирования (или если какой-то пользовательский интерфейс использует ее под капотом), noexecвключена, если вы явно не отключите ее с помощью exec.

Большинство USB-накопителей используют файловую систему VFAT, производную от MSDOS, в которой нет понятия разрешений. Вы можете указать биты разрешений только при монтировании файловой системы, и эти разрешения применяются ко всем файлам в этой файловой системе.

Если у вас нет разрешения на выполнение скрипта, вызовите интерпретатор явно:

sh /media/stick/test.sh

Для динамически связанного двоичного файла вызовите динамический компоновщик.

/lib/ld-linux.so.2 /media/stick/myprog

Связанный контент