Tuesday, August 29, 2006
ssh и анонимность
И еще. Можно работать на удаленном хосте, не светясь ни в auth.log, ни в `who` ни в `last`, без возможности посмотреть, что творится в консоли через watch - для этого достаточно запускать ssh-сессию так: ssh user@host "bash".
Мораль здесь одна: если у человека есть ssh аккаунт на машине, то контроллировать его действия практически невозможно.
Wednesday, August 16, 2006
шпаргалка по RCS
Если не бояться страшных аббревиатур, то можно обнаружить очень полезные вещи у себя под носом. RCS - элементарная штука.
Для чего она нужна я думаю объяснять никому не надо. А для раобты с ней используются всего пять команд: ci (импорт), co (экспорт), rscdiff, rlog и rcs (тюнинг, настройка).
RCS поддерживает работу нескольких пользователей с одним файлом, но мне она не нужна. Поэтому мой рецепт для работы следующий:
1. #ls -R > file - это файл, с которым будем работать.
2. #mkdir RCS - здесь будет располагаться RCS репозиторий.
3. #ci -l file - так файл сохраняется в RCS (почему -l - см. ниже)
4. #rcs -U file - установка постоянной блокировки - однопользовательский режим работы.
4. #vi file - редактируем файл.
5. #rcsdiff file - смотрим различия между сохраненной в RCS версией файла и текущей.
6. #ci -l file - сохраняем в RCS новую версию файла (при этом нас попросят ввести комментарий к версии)
7. #rlog file - просмотр changelog файла.
Это все!
Теперь несколько слов про опции. Практически для каждой команды можно указать параметр -r N.N - номер ревизии. Так, co -r 1.1 извлечет файл с номером версии 1.1, а ci -r 2.0 сохранит файл под версией 2.0. Иногда полезно выполнить rcsdiff -r 1.1 -r 1.2 file (сравнение двух версий, находящихся в репозитории) или rcsdiff -r 1.2 file (сравнение текущей версии с версией 1.2)
По умолчанию "ci" _перемещает_ файлы в репозиторий, а "co" извлекает их в режиме read only (т.е. права доступа 444 и не установлена блокировка, т.е. невозможно будет сохранить изменения). Опция -u для ci эквивалентна последовательному вызову ci file&&co file, а -l - ci file&&co file&&chmod 644 file&&rcs -l file. Т.е. файл сохраняется в RCS и извлекается, готовый к редактированию. При установленном sticky locking -u ведет себя так же как и -l.
Дальнейшее чтение: rcsintro(1), rcs(1), co(1), ci(1).
Friday, August 04, 2006
subshell в PERL
Моя задача сегодня - сделать так, чтобы один из скриптов имел возможность выполнять какие-либо команды на локальной или удаленной машине. Причем не просто команды, а инлайн перл- и шелл-скрипты (генерируемые на лету), причем их довольно много, а выполнять надо часто, поэтому system() и `` отпадают сразу хотя бы из соображений быстродействия.
Итак, в глубинах CPAN отыскалось следующее:
- IPC::Open2: Вроде бы получалось запускать (в режиме неблокирующего чтения), но это довольно сложно: во-первых, надо было еще обойти все глюки с буфферизацией ввода-вывода и не наплодить при этом своих, и во-вторых у меня не получилось корректно завершить процесс - хотя бы перехватить Ctrl-C
- Expect.pm: Практически идеальный вариант. Все программирование сводится к установке своих обработчиков на появление тех или инных сообщений от запущенной программы. В будущем я скорей всего еще воспользуюсь этим модулем, но в данном случае он не подходит, поскольку для его работы нужен отдельный pty, а этот ресурс может и не быть доступен в тех услових, в которых придется работать моей программе.
- IPC::Session: Это обертка вокруг IPC::Open3, которая с точки зрения пользователя ведет себя как Excpect.pm - это мой выбор! Я пока не знаю, чего я лишился, отказавшись от Excpect, который работает через отдельный pty, но пока мне это кажется самым удобным вариантом.
:)
- Net::SSH::Perl: к сожалению, этот модуль не заработал на моей машине (FreeBSD 4.11) - зависает во время тестирования один из зависимых модулей. По идее, Net::SSH - это аналог open3, но работающий с удаленной консолью, а Net::SSH::Perl - это IPC::Session-подобный интерфейс. Количество зависимостей и размер Bundle::SSH устрашают, но, судя по документации - вполне подходящий вариант.
Thursday, August 03, 2006
ФС и партиции
На моем рабочем компьютере сегодня начались какие-то проблемы с ФС (линукс, установленный в один ext3 раздел). Для того, чтобы натравить fsck на корневой раздел надо, по идее, сначала сделать "mount -o remount,ro /", а это невозможно - "mount: / is busy". Вот и придется решать проблему перезагрузкой, хоть это и противоречит моим убеждениям..
Впрочем, что делать, если бы я разбил диск и проблемы начались в разделе /var - вопрос открытый..