Итак, я сделал chmod -x chmod
. Как я могу решить эту проблему? Как вернуть права на выполнение chmod?
Итак, я сделал chmod -x chmod
. Как я могу решить эту проблему? Как вернуть права на выполнение chmod?
Ответы:
/lib64/ld-linux-x86-64.so.2
вместо этого. ldd /bin/chmod
должен точно указать, какой компоновщик запустить.
man ld-linux.so
: «ld.so [и ld-linux.so] загружает общие библиотеки, необходимые программе, подготавливает программу к запуску и затем запускает ее». ( ld.so
для a.out
форматируемых исполняемых файлов и ld-linux.so
для формата ELF.)
ld-linux.so
является своего рода гибридом исполняемых файлов / библиотек, является статически связанным, работает в пользовательском пространстве и отвечает за загрузку динамически связанных исполняемых файлов и всех их зависимостей, а затем их запуск.
Используйте Python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
python -c "import os; os.chmod('/bin/chmod', 0755)"
Это основывается на том факте, что права доступа к файлу назначения сохраняются, а не к исходному файлу при его копировании. Мы «заимствуем» разрешения ls
:
cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod
cp
должен иметь флаг -p
cp
запуска исполняемого файла я просто cat
поместил содержимое chmod
во временный файл.
setfacl -m u::rx /bin/chmod
... предоставит владельцу разрешения на выполнение.
Но /lib/ld-linux.so.2
уловка аккуратна. :)
Это странно ... Я видел что-то подобное несколько дней назад через чей-то твит ...
Я подозреваю, что это не настоящий вопрос: http://www.slideshare.net/cog/chmod-x-chmod
создайте новый chmod и используйте его для оригинала
umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
(umask 000;gcc -o foo foo.c)
создаст foo
режим 777). Однако многие (большинство?) Оболочек проходят 0666, когда открывают / создают файлы для перенаправления, что означает, что этот ответ не будет работать под многими оболочками.
chmod
!