Я хочу сохранить журнал всех команд, которые я выполняю в отдельном файле журнала (кроме истории) наряду с другим описанием. Для достижения этого, я должен знать, как я могу выбрать текущую команду выполнения и сохранить ее в файле.
Сценарий: В настоящее время, Каждый раз, когда я выполняю команду sudo, она спрашивает по причине, которую я обеспечиваю. И причина хранится в файле журнала в моем каталоге. Но теперь я хочу сохранить команду, выполненную наряду с причиной, и я не могу найти способ сделать это.
$ sudo touch file
Reason for sudo: creating new file test
[sudo] password for root:
Как в вышеупомянутом, я хочу сохранить команду sudo touch file
наряду с причиной, обеспеченной в файле каждый раз, я выполняю команду.
Спасибо за предложения. Я достиг этого использования псевдонима в моем .bashrc
и сценарий оболочки.
alias sudo='bash $HOME/.sudolog'
$HOME/.sudolog
#!/bin/bash
#Script to log the sudo commands used with reason.
## ##
#LAST UPDATED ON 24 FEB 2019 16:30 IST#
## ##
logfile="$HOME/sudo.log"
cmd="sudo $*"
date_time=`date +'%d/%m/%Y %H:%M:%S'` > /dev/null 2>&1
username=`whoami` > /dev/null 2>&1
read -p "Reason for sudo: " reason
eval $cmd
rtrn="$?"
echo "<date time> $date_time </date time> <user> $username </user> <command> sudo $* </command> <reason> $reason </reason> <return> $rtrn </return>" >> "$logfile"
Можно использовать крошечную функцию, чтобы переопределить команду того же имени, добавить расширения и затем выполнить фактическую команду, например, для sudo
(принятие bash
):
sudo () {
read -p 'Reason for sudo: ' reason
printf 'sudo %s : %s\n' "$*" "$reason" >>~/reason_file.txt
command sudo "$@"
}
Помещенный это в любой файл инициализации сессии оболочки, например. ~/.bashrc
. И очевидно можно изменить тело функции для удовлетворения потребностей.
Теперь, когда Вы будете работатьsudo some_command
, вышеупомянутая функция будет выполнена и сделает определенные операции перед возможным выполнением sudo some_command
с фактическим sudo
внешний двоичный файл.
Как примечание стороны, все оболочки хранят интерактивную историю сессии в отдельном файле, например, для bash
это” s ~/.bash_history
, для zsh
это ~/.histfile
. И history
встроенная команда получит Вас сохраненный (и буферизованный) история.