November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Wednesday, March 24th, 2010 05:29 pm

Сегодня на повестке дня две задачи:

1) Волею судеб вы случайно удалили у команды chmod права на выполнение. Как вернуть их обратно? Под рутом, конечно. Без этого вы бы их и не удалили.

2) Как в шелле (для определённости пусть будет bash) привязать команду к клавише, чтобы, скажем, при нажатии просто “1″ (без Enter) выполнялась команда (например, uname -a). Вопрос возник из https://ru-freebsd.livejournal.com/194430.html, ответ есть там в комментах.

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Wednesday, March 24th, 2010 04:38 pm (UTC)
первое - написать скрипт на чем угодно, что позовет setmode(3)? читерство?
второе - в баше конкретно можно попробовать через readline и inputrc что-то сделать. не пробовал.
Wednesday, March 24th, 2010 04:40 pm (UTC)
1) ну если есть, на чём написать, то вполне себе вариант. а ещё?
2) ну в общем да. у баша даже есть специальные команды для манипулирования опциями readline
Wednesday, March 24th, 2010 04:48 pm (UTC)
по аналогии с ld-so, можно еще попробовать загрузить ELF дебаггером и запустить на выполнение. но мне вариант с заменой содержимого больше нравится.
Wednesday, March 24th, 2010 04:52 pm (UTC)
интересная мысль, но у меня так не работает:

$ gdb chmod
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(no debugging symbols found)
(gdb) r
Starting program: /home/***/chmod 
/bin/bash: /home/***/chmod: Permission denied
/bin/bash: line 0: exec: /home/***/chmod: cannot execute: Success

Program exited with code 0176.
(no debugging symbols found)
You can't do that without a process to debug.

или его надо как-то хитро загружать?
Wednesday, March 24th, 2010 06:01 pm (UTC)
черт, было ощущение, что можно. надо документацию читать. может, руками сначала загрузить через load, потом библиотеки нужные...

или я с mdb/adb в соляре путаю... :((
Wednesday, March 24th, 2010 04:51 pm (UTC)
наверное, если подумать, можно вспомнить, у какого-нибудь cpio или tar набор опций, который нетривиально исполнит роль chmod.

а ты какого ответа добиваешься? манипулирования содержимого inode руками? использования setfacl?
Wednesday, March 24th, 2010 04:54 pm (UTC)
никакого конкретно. я придумал два: с замещением содержимого другого файла и с ld.so, но он linux-only. ты придумал с запуском чего-нибудь, которое сможет сделать системный вызов.
вот может, ещё кто чего интересное предложит :)

да, debugfs'ом подправить права - тоже хорошо, если больше ничего не помогает :)
Wednesday, March 24th, 2010 07:27 pm (UTC)
Для тех, кто не ищет простых путей: взять исходники, и откомпилировать chmod заново.