- C-shell history, skb7, 18:02 , 18-Ноя-14 (1)
Хм, а зачем это всё? Историю логинов можно посмотреть например командой "last имя_пользователя", история каждого пользователя в домашних каталогах (~/.bash_history). Вроде это та же самая информация, что вы хотите собрать своим скриптом?Если всё же надо свой скрипт -- то вот еще предложения. Можно сделать задание для cron (скрипт на баше, запускаемый кроном). Раз в день проходить по каталогам всех пользователей и сохранять .bash_history в нужном формате в нужный файл. Ну или вот еще хакообразная идея: подменить /bin/sh (или какой у вас шелл используется) на свой скрипт, который будет вначале сохранять команду в историю (и нужные дополнительные параметры), а потом выполнять её настоящим шелом?
- C-shell history, Shinma, 20:28 , 18-Ноя-14 (2)
в виду специфичности системы стандартная хистори не работает. Баша вообще нет и не будет. только чистый csh. и выследить кто вводил команды можно только если была запись вида:date >> $HIS echo “who am i” >> $HIS who am i >> $HIS echo “who -R” >> $HIS who -R >> $HIS history >> $HIS
- C-shell history, skb7, 00:15 , 19-Ноя-14 (3)
> в виду специфичности системы стандартная хистори не работает. Баша вообще нет и > не будет. только чистый csh. и выследить кто вводил команды можно > только если была запись вида: > date >> $HIS > echo “who am i” >> $HIS > who am i >> $HIS > echo “who -R” >> $HIS > who -R >> $HIS > history >> $HIS Ну тогда:
# mv /bin/csh /bin/csh_real # echo <<EOF >/bin/csh date >> $HIS echo “who am i” >> $HIS who am i >> $HIS echo “who -R” >> $HIS who -R >> $HIS history >> $HIS /bin/csh_real $* EOF # chmod +x /bin/csh
Надеюсь идея ясна -- хук на csh повесить.
- C-shell history, Shinma, 06:51 , 19-Ноя-14 (4)
> echo “who am i” >> $HIS > who am i >> $HIS > echo “who -R” >> $HIS > who -R >> $HIS > history >> $HIS > /bin/csh_real $* > EOF > # chmod +x /bin/csh > > Надеюсь идея ясна -- хук на csh повесить.Очень жаль, но я не разу не вешал хуки и пока слабо понимаю, что тут написано. mv /bin/csh /bin/csh_real #Переместить /bin/csh в /bin/csh_real и на месте /bin/csh уже ничего не будет echo <<EOF >/bin/csh #Направляете на экран а с него в несуществующий /bin/csh команды до указанного маркера EOF. Вы же убрали этот шел используя команду выше . И я не разу не пользовался EOF пока мало понимаю смысл его работы тут. > date >> $HIS > echo “who am i” >> $HIS > who am i >> $HIS > echo “who -R” >> $HIS > who -R >> $HIS history >> $HIS ## выводит ВСЮ хистори, Текущей сессии, Текущего пользователя, Только данного терминала, > /bin/csh_real $* > EOF конец команды # chmod +x /bin/csh # даем права на несуществующий файл. В общем я ничего не понял, что вы сделали. Но в моем скрипте я использовал команду history так как она записывает всю историю которую ввел пользователь за сессию в файл. а в вашем случае как я понимаю эта штука срабатывает только один раз на входе в систему. Но в этом случае пользователь еще не работал и его истории нету и записывать нечего. Или я совсем ничего не понимаю. Или подскажите как можно повесить хук на ввод каждой команды пользователем под csh. чтобы записывать в файл каждый раз когда вводится команда.
- C-shell history, Pahanivo, 07:47 , 19-Ноя-14 (5)
мда, а что за "специфичная" система у вас можно узнать?
- C-shell history, Shinma, 08:18 , 19-Ноя-14 (6)
> мда, а что за "специфичная" система у вас можно узнать?это из-за sap, у них работа системы построена на csh, разрешено навешивать свои прибамбасы сверху, но трогать существующее запрещено.
- C-shell history, skb7, 15:57 , 19-Ноя-14 (7)
вующий файл.> в вашем случае > как я понимаю эта штука срабатывает только один раз на входе > в систему. Но в этом случае пользователь еще не работал и > его истории нету и записывать нечего. Или я совсем ничего не > понимаю. Я исходил из того, что на выполнение каждой команды шела вызывается шел. По-ходу это не так и шел вызывается один раз на сессию, так что мой вариант нерабочий. К тому же ниже вы пишите, что ничего существующее менять нельзя в системе, только добавлять, так что в любом случае метод, который я предложил выше, нерабочий.
- C-shell history, pavlinux, 21:58 , 21-Ноя-14 (8)
#!/bin/bash --posixLOG=/tmp/ccsh.log while true do echo -n '$> '; while read line do echo `date`:$line >> $LOG; sh -c $line; break; done done
- C-shell history, Shinma, 13:24 , 25-Ноя-14 (9)
повторюсь - на системе баща нет и не будет. но я попробовал видоизменить код под shell. #!/bin/sh LOG="$HOME/.his" while true do echo `hostname` '$> '; while read line do echo `date`:$line >> $LOG; sh -c $line; break; done done В итоге код работает но до момента пока не воспользуюсь командами с опциями. ll -a он обрабатывает как просто ll. и так далее ll -ltr -ltr: A specified flag is not valid for this command. $> ls -ltr -ltr: A specified flag is not valid for this command. $>
- C-shell history, pavlinux, 11:18 , 26-Ноя-14 (10)
> В итоге код работает У тя точно C-shell ? :D Потому как "while expr do ... done" - это Bourne Shell (может ещё Korn). В сsh это будет: while (expr) .... end; #!/bin/cshset LOG="/tmp/ccsh.log" while (1) echo -n '$> '; set line = "$< "; if ( "$line" == "" ) then break endif echo `date`:"$line"; csh -c "$line"; break; end
- C-shell history, Shinma, 13:24 , 03-Дек-14 (11)
Последний вариант, но в нем косяк. если юзер понажимает ктрл+с то собственно хистори писаться не будет. обидно.#!/bin/csh set LOG="$HOME/.his" while (1) while (1) echo `hostname` '$> '; set line = "$< "; if ( "$line" == "" ) then break endif who am i >> $LOG; who -R >> $LOG; echo `date "+ %m/%d/%y %H:%M:%S"`:" $line" >> $LOG; csh -c "$line"; break; end end
- C-shell history, pavlinux, 03:26 , 04-Дек-14 (12)
> ... но в нем косяк. если юзер понажимает ктрл+с то ... #!/bin/cshset LOG="$HOME/.his" onintr -; # вы мануалы ваще читаете? while (1) while (1) echo -n `hostname` '$> '; set line = "$< "; if ( "$line" == "") then break endif who am i >> $LOG; who -R >> $LOG; echo `date "+ %m/%d/%y %H:%M:%S"`:" $line" >> $LOG; csh -c "$line"; break; end end
Но если юзеры продвинутые, то можно по колдовать с троянчиком, типа hostname $> kill -9 `ps -o ppid=`; 9, 11, и 18 сигналы не перехватываются ничем, кроме ядра. Парсер писать замучаешься, ибо вариантов тонна. А ещё можно бэкспейсами закидать лог, А ещё можно тупа обнулить $> echo > $HOME/.his; Вариант (не геморройный) только один - прописать этот скрипт, как shell в /etc/passwd; От обнуления и затирания нужно подымать pipe/fifo, в него кидать логи и считывать другим демоном. Мож на вашей машине придётся терминал крутить, дабы упр. символы не пропускал. (stty)
|