У меня есть foo.sh
файл в моем текущем каталоге. Если я пытаюсь бежать ./foo.sh
, я получаю:
-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied
Но если я бегу, /bin/sh ./foo.sh
то все работает нормально.
Как я могу это исправить, чтобы я мог просто запустить ./foo.sh
и он автоматически запускается с / bin / sh?
Изменить: Хорошо, это Chrome OS и эта конкретная папка монтируется с noexec
. Видимо, это мешает просто бегать ./foo.sh
; но почему? Почему я все еще могу бежать, sh foo.sh
чтобы достичь того же самого? Какую безопасность тогда noexec
дает?
noexec
работает его магия.Ответы:
noexec
Флаг будет соответствующим образом применять в сценарий, потому что это было бы «ожидать» поведение.Тем не менее, установка
noexec
только останавливает людей, которые не знают достаточно о том, что они делают. Когда вы запускаете,sh foo.sh
вы на самом деле работаетеsh
из его местоположения по умолчанию (возможно/bin
), которое не находится в файловой системе, смонтированной сnoexec
.Вы даже можете обойтись
noexec
для обычных двоичных файлов, вызываяld
напрямую.Это запустит bash, независимо от того, находится ли он в файловой системе, смонтированной с
noexec
.источник
ld.so
(умный)/lib/ld-2.10.1.so $HOME/sh
и вернулся другую ошибку при загрузке разделяемых библиотек:/home/chronos/user/sh: failed to map segment from shared object: Operation not permitted
. Я не уверен, что то, что вы сказали, было неверным, или что-то еще мешает. Например, / монтируется только для чтения.ld
иld.so
.ld
является компоновщиком, используемым при компоновке объектного кода для формирования двоичного файла при компиляции, тогдаld.so
как компоновщик во время выполнения выполняет аналогичное действие при выполнении программы. Указанный здесь компоновщик является компоновщиком времени выполнения.Вы также можете получить эту ошибку (или очень, очень похожее сообщение), если попытаетесь выполнить файл с 2-байтовым окончанием строки MS-DOS (возврат каретки).
В настоящее время Vim настолько умен, что не обязательно показывает, что каретка возвращается как «^ M». Таким образом, вас могут одурачить, если вы не проверите, что Vim считает «форматом файла», и просто положитесь на внешний вид.
В этом случае «#! / Bin / sh ^ M» заставляет ядро попытаться найти «/ bin / sh ^ M», чего не может сделать. Действительно, плохой переводчик.
источник
Если у вас есть возможность запустить скрипт или программу с USB-накопителя (или другого съемного носителя), вы можете попробовать размонтировать и заново смонтировать его вручную:
Подключите USB-накопитель
Найти USB-накопитель с
$ mount
Принять к сведению это; давайте предположим, что это
/dev/sdb1
Размонтировать флешку:
Наконец, снова подключите USB-накопитель:
С точкой монтирования имя монтирования флешки
источник
По соображениям безопасности системы в ChromeOS / ChromiumOS некоторые папки помечены,
noexec
и вам необходимо либо перемонтировать с помощью приведенной ниже команды, либо использовать альтернативный путь, который не былnoexec
установлен, как во втором примере.Эти команды предполагают, что вы, по крайней мере, находитесь в режиме разработчика и имеете доступ к учетной записи
shell
with,chronos@localhost / $
а не толькоcrosh>
и знаете пароль sudo.Более устойчивый метод, который должен пережить обновление, потому что Google резервирует большинство
/usr/local
для разработчиков:Дополнительным преимуществом размещения здесь является то, что он
$PATH
уже есть (попробуйтеecho $PATH
подтвердить это), поэтому вам не нужно использовать полный путь для запуска сценариев или исполняемых файлов, которые/usr/local/bin
уже былиchmod +x
запущены на них.источник
У меня такой же вопрос. Моя проблема была с SD-картой. Это сработало для меня, и это намного проще, чем другие ответы здесь. Я узнал об этом из вопроса о гренках № 928 .
Обратите внимание, что вы должны использовать точку монтирования, а не устройство (/ dev / mmcblk1p1). То же самое для USB (/ dev / sdb1) в вашем случае. Только точка монтирования отличается:
Вы будете знать, что это дало желаемый эффект, потому что «noexec» исчезнет из параметров монтирования при запросе.
источник