The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
C-shell history, !*! Shinma, 18-Ноя-14, 15:52  [смотреть все]
Помогите написать скрипт который будет сохранять историю ввода команд.
я создал в каталоге /home/user/ файл .logout:

set HIS="$HOME/.his"
if (! -e $HIS ) then
        touch $HIS
endif
echo "##################################" >> $HIS
date >> $HIS
echo “who am i” >> $HIS
who am i >> $HIS
echo “who -R” >> $HIS
who -R >> $HIS
history >> $HIS

Он он работает только пока люди правильно выходят. А если Putty закрыть через крестик, то хистори никто не записывает.
Вариант set history=20 savehistory - отпадает сразу.
на машине еще стоит perl может  есть у кого идеи как запустить скрипт через .cshrc написанный на perl или чистом csh чтобы вести хистори команд отдельно от возможностей системы.

  • 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 --posix

    LOG=/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/csh

        set 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/csh

            set 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)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру