Кто-то спросил в списке рассылки моей локальной LUG, есть ли способ узнать последнюю команду, выданную в системе GNU / Linux.
Я думаю, мы говорим о последней команде в общесистемной манере. После некоторого размышления, если вы ограничите набор команд теми, которые выдаются фактическими пользователями с помощью интерактивной консоли, тогда последняя должна быть зарегистрирована в истории команд.
Другой способ подумать об этом вопросе - спросить, как определить, какой из последних обработанных файлов был создан в системе GNU / Linux, в зависимости от того, работает ли он все еще или уже завершился, то есть родительские процессы и другая соответствующая информация.
Я установил пакет для Linux, который помогает вести учет процессов.
В моей системе Ubuntu 9.10 я сделал это, чтобы установить программу «acct»:
sudo apt-get install acct
Затем необходимо создать пустой файл журнала, что можно сделать следующим образом:
sudo touch /var/log/pacct
После этого нужно активировать учет процессов:
sudo /usr/sbin/accton /var/log/pacct
С этого момента процессы регистрируются вместе с пользователем, который их выполнил, и связанным терминалом.
Файл журнала можно увидеть с помощью этой команды:
lastcomm -f /var/log/pacct
Я все еще изучаю эту программу ... но похоже, что это помогает.
Для конкретного пользователя (и оболочки): история
Для текущего процесса: ps
Что ж, общесистемный выглядит довольно сложно. Такая система подразумевает, что должен быть некоторый процесс, который отслеживает каждого пользователя .bash_history. Затем, когда это будет обновлено, обновится центральная база данных. Как только это будет сделано, мы можем стать правильным расширением команды "history", которая выбирает из центральной базы данных. Но неплохая идея.
ЕСЛИ вы добавите в файл / etc / sudoers следующее:
Defaults logfile=/var/log/sudolog
Все команды sudo будут зарегистрированы. Это могут быть не все команды пользователя, но здесь должны быть перечислены важные, которые могут изменять систему, и я рискну предположить, что это то, что вам нужно.
Вы не можете просто отслеживать .bash_history, поскольку другие пользователи могут либо не использовать историю, либо не использовать bash для начала.
Ты можешь использовать любопытный для отслеживания всех выполняемых команд.
Если вы хотите самую последнюю Бег программу, затем используя информацию в / proc, примерно так ...
for i in $(ls -t /proc/* | egrep "[0-9]+"); do test -f $i/cmdline && cat $i/cmdline && break; done
Он будет искать каталоги на основе чисел (pid) в / proc, затем проверять, существует ли файл cmdline и распечатывать его (по-видимому, команды в канале исчезают, как только вы попадаете в цикл, поэтому их файл cmdline перестает существовать)