Журнал лабораторных работ

Содержание

Журнал

Среда (05/27/09)

/dev/pts/37
15:53:01
#tail /var/log/messages
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060ab3
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060aa5
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060ab3
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:080530f6
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060ab3
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:080531bc
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:0805e322
May 27 15:53:01 linux0 syslog-ng[17516]: Termination requested via signal, terminating;
May 27 15:53:01 linux0 syslog-ng[17516]: syslog-ng shutting down; version='2.0.9'
May 27 15:53:01 linux0 syslog-ng[17744]: syslog-ng starting up; version='2.0.9'
15:53:05
#ps aux | grep sys
root     17743  0.1  0.4   5648  1148 pts/38   S    15:53   0:00 /bin/sh /usr/local/bin/syslog2jabber
root     17744  0.0  0.2   3064   752 ?        Ss   15:53   0:00 /usr/sbin/syslog-ng -p /var/run/syslog-ng.pid
root     17765  0.0  0.2   4924   768 pts/38   R+   15:53   0:00 grep sys
15:53:10
#ps aux | grep jabber
root     17743  0.0  0.4   5648  1148 pts/38   S    15:53   0:00 /bin/sh /usr/local/bin/syslog2jabber
root     17774  0.0  0.2   4924   768 pts/38   R+   15:53   0:00 grep jabber
15:59:22
#!
bash: syntax error near unexpected token `newline'
15:59:23
#man sendxmpp
15:59:53
#man sendxmpp
16:01:18
#which sendxmpp
/usr/bin/sendxmpp
16:01:22
#less /usr/bin/sendxmpp
/dev/pts/34
16:06:48
#ls /home/quiz/.quiz/192.168.15.253-12434
192.168.15.253-1243404869.log  192.168.15.253-1243427598.log
прошло 35 минут
/dev/pts/37
16:42:28
#vi /etc/monit/monitrc
16:43:55
#cat /var/run/crond.pid
1614
16:45:14
#cat /etc/default/monit
# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen <stone@debian.org>
# You must set this variable to for monit to start
startup=0
# To change the intervals which monit should run uncomment
# and change this variable.
# CHECK_INTERVALS=180
16:48:34
#cat /var/run/crond.pid
1614
16:50:51
#ps aux | grep monit
root     18337  0.0  0.2   4928   768 pts/38   R+   16:50   0:00 grep monit
16:50:58
#ps aux | grep cron
root      1614  0.0  0.3   5232  1004 ?        Ss   May26   0:00 /usr/sbin/cron
root     18434  0.0  0.2   4928   772 pts/38   R+   16:52   0:00 grep cron
/dev/pts/34
16:51:31
#cat /etc/monit/monitrc |grep -v #
grep --help' для получения более подробного описания.
16:52:21
#cat /etc/monit/monitrc | grep -v '#'

16:52:33
#cat /etc/monit/monitrc | grep -v '^#'

/dev/pts/37
16:52:37
#pkill crom

/dev/pts/34
16:52:39
#cat /etc/monit/monitrc
## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
## are expanded at runtime. For example, to override the sender:
#
# set mail-format { from: monit@foo.bar }
#
#
## You can set alert recipients here whom will receive alerts if/when a
## service defined in this file has errors. Alerts may be restricted on
## events by using a filter as in the second example below.
#
...
###############################################################################
## Includes
###############################################################################
##
## It is possible to include additional configuration parts from other files or
## directories.
#
#  include /etc/monit.d/*
#
#
/dev/pts/37
16:52:42
#pkill cron

16:52:43
#ps aux | grep cron
root     18476  0.0  0.2   4928   768 pts/38   R+   16:52   0:00 grep cron
/dev/pts/34
16:52:43
#cat /etc/monit/monitrc | grep -v '^#'

/dev/pts/37
16:52:45
#/etc/init.d/cron restart
Restarting periodic command scheduler: cron.
/dev/pts/18
16:54:29
#!sc
                                                                               Изменен
##
#
#  check process apache with pidfile /usr/local/apache/logs/httpd.pid
#    start program = "/etc/init.d/httpd start"
#    stop program  = "/etc/init.d/httpd stop"
#    if cpu > 60% for 2 cycles then alert
#    if cpu > 80% for 5 cycles then restart
#    if totalmem > 200.0 MB for 5 cycles then restart
check process apache with pidfile /usr/local/apache/logs/httpd.pid
#    if children > 250 then restart
    start progcron with pidfile /var/run/crond.pid
#    if loadavg(5min) greater thacron start"
    stop program  = "/etc/init.d/cron stop"
#    if failed host www.tildeslash.com port 80 protocol http
                                [ Прочитано 217 строк ]
^G Помощь     ^O Записать   ^R ЧитФайл    ^Y ПредCтр    ^K Вырезать   ^C ТекПозиц
^X Выход      ^J Выровнять  ^W Поиск      ^V СледCтр    ^U ОтмВырезк  ^T Словарь
----------------------------------------------------------------------------------------
/dev/pts/37
16:57:42
#alert security@foo.bar on {
              list.
              Move  forward  to  the  end  of  the  next word.  Words are composed of
              alphanumeric characters (letters and digits).
       backward-word (M-b)
              Move back to the start of the current or previous word.  Words are com‐
              posed of alphanumeric characters (letters and digits).
       clear-screen (C-l)
              Clear  the  screen  leaving  the current line at the top of the screen.
              With an argument, refresh the current line without clearing the screen.
       redraw-current-linehistory.h>
...
       previous-history (C-p)
              Fetch the previous command from the history list, moving  back  in  the
              list.
       next-history (C-n)
              Fetch  the  next  command  from the history list, moving forward in the
              list.
       beginning-of-history (M-<)
              Move to the first line in the history.
       end-of-history (M->)
              Move to the end of the input history, i.e., the  line  currently  being
16:59:30
#use address localhost # only accept connection from localhost

/dev/pts/40
16:59:31
#vi /etc/monit/monitrc
16:59:49
#vi /etc/default/monit
--- /tmp/l3-saved-18733.19117.28579	2009-05-27 16:59:54.000000000 +0300
+++ /etc/default/monit	2009-05-27 17:00:15.000000000 +0300
@@ -4,7 +4,7 @@
 # Fredrik Steen <stone@debian.org>
 
 # You must set this variable to for monit to start
-startup=0
+startup=1
 
 # To change the intervals which monit should run uncomment
 # and change this variable.
17:00:15
#/etc/init.d/monit restart
Stopping daemon monitor: monit.
Starting daemon monitor: monit.
17:00:20
#pkill cron

17:00:25
#ps aux | grep cron
root     18814  0.0  0.2   4924   772 pts/41   R+   17:00   0:00 grep cron
17:00:29
#/etc/init.d/monit restart
Stopping daemon monitor: monit.
Starting daemon monitor: monit.
17:00:35
#ps aux | grep cron
root     18863  0.0  0.3   5232  1008 ?        Ss   17:00   0:00 /usr/sbin/cron
root     18865  0.0  0.2   4924   772 pts/41   R+   17:00   0:00 grep cron
/dev/pts/37
17:01:31
#root 18951 0.0 0.3 5228 1008 ? Ss 17:01 0:00 /usr/sbin/cron

17:01:33
#watch 'ps aux | grep cron'

17:01:52
#root 19020 0.0 0.3 5232 1008 ? Ss 17:01 0:00 /usr/sbin/cron
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060ab3
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060aa5
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060ab3
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:080530f6
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:08060ab3
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:080531bc
May 27 15:35:43 linux0 kernel: 4gb seg fixup, process ldconfig (pid 17436), cs:ip 73:0805e322
May 27 15:53:01 linux0 syslog-ng[17516]: Termination requested via signal, terminating;
May 27 15:53:01 linux0 syslog-ng[17516]: syslog-ng shutting down; version='2.0.9'
May 27 15:53:01 linux0 syslog-ng[17744]: syslog-ng starting up; version='2.0.9'
17:01:56
#tail /var/log/daemon.log
May 27 17:01:02 linux0 monit[18830]: Monit stopped
May 27 17:01:03 linux0 monit[18898]: Starting monit daemon
May 27 17:01:03 linux0 monit[18900]: Monit started
May 27 17:01:23 linux0 monit[18900]: Monit has not changed
May 27 17:01:23 linux0 monit[18900]: 'cron' process is not running
May 27 17:01:23 linux0 monit[18900]: 'cron' trying to restart
May 27 17:01:23 linux0 monit[18900]: 'cron' start: /etc/init.d/cron
May 27 17:01:43 linux0 monit[18900]: 'cron' process is not running
May 27 17:01:43 linux0 monit[18900]: 'cron' trying to restart
May 27 17:01:43 linux0 monit[18900]: 'cron' start: /etc/init.d/cron
17:03:49
#/etc/init.d/monit stpo
Usage: /etc/init.d/monit {start|stop|restart|force-reload|syntax}
17:04:10
#/etc/init.d/monit stop
Stopping daemon monitor: monit.
17:04:32
#watch 'ps aux | grep cron'

прошло 35 минут
/dev/pts/42
17:40:28
#less /home/quiz/.quiz/192.168.15.253-12434
17:40:28
#less /home/quiz/.quiz/192.168.15.253-1243434052.log
17:41:27
#vi /etc/shadow
--- /tmp/l3-saved-23496.17428.7082	2009-05-27 17:41:32.000000000 +0300
+++ /etc/shadow	2009-05-27 17:41:36.000000000 +0300
@@ -1,4 +1,4 @@
-root:$1$iSjUEmTZ$n09/yGX5Ni6BMSJQnNlZa0:14389:0:99999:7:::
+root:*$1$iSjUEmTZ$n09/yGX5Ni6BMSJQnNlZa0:14389:0:99999:7:::
 daemon:*:14389:0:99999:7:::
 bin:*:14389:0:99999:7:::
 sys:*:14389:0:99999:7:::
/dev/pts/0
17:44:23
#rm /home/quiz/.quiz/192.168.15.253-1243435444.log

17:51:03
#ls -l /home/quiz/.quiz/
итого 24
-rw-r--r-- 1 quiz quiz 1523 Май 27 17:51 192.168.15.10-1243435857.log
-rw-r--r-- 1 quiz quiz 1523 Май 27 17:50 192.168.15.11-1243435850.log
-rw-r--r-- 1 quiz quiz 1523 Май 27 17:50 192.168.15.1-1243435854.log
-rw-r--r-- 1 quiz quiz 1523 Май 27 17:50 192.168.15.13-1243435848.log
-rw-r--r-- 1 quiz quiz 1523 Май 27 17:50 192.168.15.14-1243435851.log
-rw-r--r-- 1 quiz quiz 1523 Май 27 17:51 192.168.15.3-1243435858.log
17:51:05
#watch ls -l /home/quiz/.quiz/

17:53:33
#rm /home/quiz/.quiz/*

Четверг (05/28/09)

/dev/pts/0
09:44:56
#cd /home

09:45:02
#ls -l
итого 8
drwxr-xr-x 4 quiz quiz 4096 Май 27 15:11 quiz
drwxr-xr-x 3 user user 4096 Май 25 21:00 user
09:45:06
#cd quiz

09:45:12
#ls -l
итого 24
-rw-r--r-- 1 quiz quiz 18262 Май 27 17:20 quiz
-rw-r--r-- 1 quiz quiz  1093 Май 27 09:14 start-quiz
09:45:15
#cat start-quiz
#!/usr/bin/perl
$id = $ENV{"SSH_CLIENT"};
$id = (split(/\s+/, $id))[0];
if ($id) { $id .= "-"};
$quiz_file = "quiz";
$log_file = ".quiz/$id".time().'.log';
@Questions = ();
$Score = 0;
sub ask_question($)
{
...
    }
    else {
        $question .= $_;
    };
}
close(QUIZ);
for $question (@Questions) {
    $Score += ask_question($question);
}
print "Your score: $Score\n";
09:45:30
#ls -l
итого 24
-rw-r--r-- 1 quiz quiz 18262 Май 27 17:20 quiz
-rw-r--r-- 1 quiz quiz  1093 Май 27 09:14 start-quiz
/dev/pts/2
09:45:40
#ls /home/
quiz  user
09:45:45
#ls /home/quiz/
quiz  start-quiz
09:45:52
#cat /home/quiz/start-quiz
#!/usr/bin/perl
$id = $ENV{"SSH_CLIENT"};
$id = (split(/\s+/, $id))[0];
if ($id) { $id .= "-"};
$quiz_file = "quiz";
$log_file = ".quiz/$id".time().'.log';
@Questions = ();
$Score = 0;
sub ask_question($)
{
...
    }
    else {
        $question .= $_;
    };
}
close(QUIZ);
for $question (@Questions) {
    $Score += ask_question($question);
}
print "Your score: $Score\n";
09:46:04
#cat /home/quiz/quiz
Как заменить во всём файле последовательность abc на последовательность xyz?
# :s/abc/xyz/
# :!s/abc/xyz/
# :%s/abc/xyz/
# :*s/abc/xyz/
# :s/abc/xyz/g
# :!s/abc/xyz/g
#! :%s/abc/xyz/g
# :*s/abc/xyz/g
# :s/abc/xyz/G
...
# pkill screen
# kill $(pgrep screen)
Вы хотите подключиться к активному сеансу screen, даёте команду screen -x,
но вместо желаемого подключения получаете какой-то странный текст.
Что это?
#! Это список активных сеансов screen, их больше одного, поэтому при запуске screen нужно указать, к какому подключаться
# Это вызвался режим тонкой настройки screen
# screen должен быть запущен в multiuser-режиме (multiuser on)
# Эта сборка screen не поддерживает несколько одновременных подключений
# Для этого необходимо выполнять screen в режиме ядра
/dev/pts/6
09:47:46
#screen -x
/dev/pts/8
09:47:58
#screen -x
/dev/pts/10
09:48:30
#screen -ls
09:48:35
#screen -ls
/dev/pts/12
09:48:41
#screen -x
/dev/pts/14
09:48:42
#screen -ls
09:48:57
#screen -ls
/dev/pts/2
09:49:31
#screen -x
/dev/pts/0
09:51:10
#screen -ls
09:51:14
#screen
/dev/pts/14
09:51:17
#screen -x
/dev/pts/18
09:51:19
#screen -x
/dev/pts/10
09:51:27
#screen -ч
/dev/pts/20
09:51:27
#screen -x
/dev/pts/22
09:51:28
#screen -x
/dev/pts/10
09:51:30
#screen -Ñx
/dev/pts/16
09:51:31
#ус

/dev/pts/24
09:51:35
#screen -x
/dev/pts/26
09:51:37
#screen -x
/dev/pts/28
09:51:48
#screnn -x
bash: screnn: команда не найдена
09:51:52
#screen -x
/dev/pts/30
09:55:12
#screen -x
/dev/pts/32
10:04:41
#screen -x
/dev/pts/16
10:10:35
#mkdir /tmp/D4

10:10:43
#cd /tmp/D4

10:10:45
#vi myrm
--- /dev/null	2009-05-27 17:42:32.305822186 +0300
+++ myrm	2009-05-28 10:11:01.000000000 +0300
@@ -0,0 +1,2 @@
+#!/bin/rm -rf
+echo hello 
10:11:01
#chmod +x myrm

10:11:05
#touch 1 2 3

/dev/pts/34
10:11:07
#screen -x
/dev/pts/16
10:11:09
#ls -l
итого 4
-rw-r--r-- 1 root root  0 Май 28 10:11 1
-rw-r--r-- 1 root root  0 Май 28 10:11 1.1
-rw-r--r-- 1 root root  0 Май 28 10:11 1.10
-rw-r--r-- 1 root root  0 Май 28 10:11 1.2
-rw-r--r-- 1 root root  0 Май 28 10:11 1.3
-rw-r--r-- 1 root root  0 Май 28 10:11 1.4
-rw-r--r-- 1 root root  0 Май 28 10:11 1.5
-rw-r--r-- 1 root root  0 Май 28 10:11 1.6
-rw-r--r-- 1 root root  0 Май 28 10:11 1.7
...
-rw-r--r-- 1 root root  0 Май 28 10:11 3.10
-rw-r--r-- 1 root root  0 Май 28 10:11 3.2
-rw-r--r-- 1 root root  0 Май 28 10:11 3.3
-rw-r--r-- 1 root root  0 Май 28 10:11 3.4
-rw-r--r-- 1 root root  0 Май 28 10:11 3.5
-rw-r--r-- 1 root root  0 Май 28 10:11 3.6
-rw-r--r-- 1 root root  0 Май 28 10:11 3.7
-rw-r--r-- 1 root root  0 Май 28 10:11 3.8
-rw-r--r-- 1 root root  0 Май 28 10:11 3.9
-rwxr-xr-x 1 root root 26 Май 28 10:11 myrm
10:11:10
#which touch
/usr/bin/touch
10:11:25
#cp /usr/bin/touch.ORIG /usr/bin/touch

10:11:58
#ls -l
итого 0
-rw-r--r-- 1 root root 0 Май 28 10:11 1
-rw-r--r-- 1 root root 0 Май 28 10:11 1.1
-rw-r--r-- 1 root root 0 Май 28 10:11 1.10
-rw-r--r-- 1 root root 0 Май 28 10:11 1.2
-rw-r--r-- 1 root root 0 Май 28 10:11 1.3
-rw-r--r-- 1 root root 0 Май 28 10:11 1.4
-rw-r--r-- 1 root root 0 Май 28 10:11 1.5
-rw-r--r-- 1 root root 0 Май 28 10:11 1.6
-rw-r--r-- 1 root root 0 Май 28 10:11 1.7
...
-rw-r--r-- 1 root root 0 Май 28 10:11 2.1
-rw-r--r-- 1 root root 0 Май 28 10:11 2.10
-rw-r--r-- 1 root root 0 Май 28 10:11 2.2
-rw-r--r-- 1 root root 0 Май 28 10:11 2.3
-rw-r--r-- 1 root root 0 Май 28 10:11 2.4
-rw-r--r-- 1 root root 0 Май 28 10:11 2.5
-rw-r--r-- 1 root root 0 Май 28 10:11 2.6
-rw-r--r-- 1 root root 0 Май 28 10:11 2.7
-rw-r--r-- 1 root root 0 Май 28 10:11 2.8
-rw-r--r-- 1 root root 0 Май 28 10:11 2.9
10:12:01
#cp /bin/ls .

10:12:53
#rm *

10:12:54
#cp /bin/ls .

10:12:56
#chmod 644 ls

10:13:00
#/lib/ld.-
ld-2.9.so      ld-linux.so.2
10:13:00
#/lib/ld-linux.so.2 ls
ls: error while loading shared libraries: ls: cannot open shared object file: No such file or directory
10:13:11
#chmod +x ls

10:13:24
#/lib/ld-linux.so.2 ls
ls: error while loading shared libraries: ls: cannot open shared object file: No such file or directory
10:13:25
#/lib/ld-linux.so.2 ./ls
ls
10:13:37
#/lib/ld-linux.so.2 ./ls
ls

Файлы

  • /etc/default/monit
  • /etc/monit/monitrc
  • /home/quiz/quiz
  • /home/quiz/start-quiz
  • /var/run/crond.pid
  • start-quiz
  • /etc/default/monit
    >
    # Defaults for monit initscript
    # sourced by /etc/init.d/monit
    # installed at /etc/default/monit by maintainer scripts
    # Fredrik Steen <stone@debian.org>
    # You must set this variable to for monit to start
    startup=0
    # To change the intervals which monit should run uncomment
    # and change this variable.
    # CHECK_INTERVALS=180
    
    /etc/monit/monitrc
    >
    ## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
    ## are expanded at runtime. For example, to override the sender:
    #
    # set mail-format { from: monit@foo.bar }
    #
    #
    ## You can set alert recipients here whom will receive alerts if/when a
    ## service defined in this file has errors. Alerts may be restricted on
    ## events by using a filter as in the second example below.
    #
    # set alert sysadm@foo.bar                       # receive all alerts
    # set alert manager@foo.bar only on { timeout }  # receive just service-
    #                                                # timeout alert
    #
    #
    ## Monit has an embedded web server which can be used to view status of
    ## services monitored, the current configuration, actual services parameters
    ## and manage services from a web interface.
    #
    # set httpd port 2812 and
    #     use address localhost  # only accept connection from localhost
    #     allow localhost        # allow localhost to connect to the server and
    #     allow admin:monit      # require user 'admin' with password 'monit'
    #
    #
    ###############################################################################
    ## Services
    ###############################################################################
    ##
    ## Check general system resources such as load average, cpu and memory
    ## usage. Each test specifies a resource, conditions and the action to be
    ## performed should a test fail.
    #
    #  check system myhost.mydomain.tld
    #    if loadavg (1min) > 4 then alert
    #    if loadavg (5min) > 2 then alert
    #    if memory usage > 75% then alert
    #    if cpu usage (user) > 70% then alert
    #    if cpu usage (system) > 30% then alert
    #    if cpu usage (wait) > 20% then alert
    #
    #
    ## Check a file for existence, checksum, permissions, uid and gid. In addition
    ## to alert recipients in the global section, customized alert will be sent to
    ## additional recipients by specifying a local alert handler. The service may
    ## be grouped using the GROUP option.
    #
    #  check file apache_bin with path /usr/local/apache/bin/httpd
    #    if failed checksum and
    #       expect the sum 8f7f419955cefa0b33a2ba316cba3659 then unmonitor
    #    if failed permission 755 then unmonitor
    #    if failed uid root then unmonitor
    #    if failed gid root then unmonitor
    #    alert security@foo.bar on {
    #           checksum, permission, uid, gid, unmonitor
    #        } with the mail-format { subject: Alarm! }
    #    group server
    #
    #
    ## Check that a process is running, in this case Apache, and that it respond
    ## to HTTP and HTTPS requests. Check its resource usage such as cpu and memory,
    ## and number of children. If the process is not running, monit will restart
    ## it by default. In case the service was restarted very often and the
    ## problem remains, it is possible to disable monitoring using the TIMEOUT
    ## statement. This service depends on another service (apache_bin) which
    ## is defined above.
    #
    #  check process apache with pidfile /usr/local/apache/logs/httpd.pid
    #    start program = "/etc/init.d/httpd start"
    #    stop program  = "/etc/init.d/httpd stop"
    #    if cpu > 60% for 2 cycles then alert
    #    if cpu > 80% for 5 cycles then restart
    #    if totalmem > 200.0 MB for 5 cycles then restart
    #    if children > 250 then restart
    #    if loadavg(5min) greater than 10 for 8 cycles then stop
    #    if failed host www.tildeslash.com port 80 protocol http
    #       and request "/monit/doc/next.php"
    #       then restart
    #    if failed port 443 type tcpssl protocol http
    #       with timeout 15 seconds
    #       then restart
    #    if 3 restarts within 5 cycles then timeout
    #    depends on apache_bin
    #    group server
    #
    #
    ## Check device permissions, uid, gid, space and inode usage. Other services,
    ## such as databases, may depend on this resource and an automatically graceful
    ## stop may be cascaded to them before the filesystem will become full and data
    ## lost.
    #
    #  check device datafs with path /dev/sdb1
    #    start program  = "/bin/mount /data"
    #    stop program  = "/bin/umount /data"
    #    if failed permission 660 then unmonitor
    #    if failed uid root then unmonitor
    #    if failed gid disk then unmonitor
    #    if space usage > 80% for 5 times within 15 cycles then alert
    #    if space usage > 99% then stop
    #    if inode usage > 30000 then alert
    #    if inode usage > 99% then stop
    #    group server
    #
    #
    ## Check a file's timestamp. In this example, we test if a file is older
    ## than 15 minutes and assume something is wrong if its not updated. Also,
    ## if the file size exceed a given limit, execute a script
    #
    #  check file database with path /data/mydatabase.db
    #    if failed permission 700 then alert
    #    if failed uid data then alert
    #    if failed gid data then alert
    #    if timestamp > 15 minutes then alert
    #    if size > 100 MB then exec "/my/cleanup/script"
    #
    #
    ## Check directory permission, uid and gid.  An event is triggered if the
    ## directory does not belong to the user with uid 0 and gid 0.  In addition,
    ## the permissions have to match the octal description of 755 (see chmod(1)).
    #
    #  check directory bin with path /bin
    #    if failed permission 755 then unmonitor
    #    if failed uid 0 then unmonitor
    #    if failed gid 0 then unmonitor
    #
    #
    ## Check a remote host network services availability using a ping test and
    ## check response content from a web server. Up to three pings are sent and
    ## connection to a port and a application level network check is performed.
    #
    #  check host myserver with address 192.168.1.1
    #    if failed icmp type echo count 3 with timeout 3 seconds then alert
    #    if failed port 3306 protocol mysql with timeout 15 seconds then alert
    #    if failed url
    #       http://user:password@www.foo.bar:8080/?querystring
    #       and content == 'action="j_security_check"'
    #       then alert
    #
    #
    ###############################################################################
    ## Includes
    ###############################################################################
    ##
    ## It is possible to include additional configuration parts from other files or
    ## directories.
    #
    #  include /etc/monit.d/*
    #
    #
    
    /home/quiz/quiz
    >
    Как заменить во всём файле последовательность abc на последовательность xyz?
    # :s/abc/xyz/
    # :!s/abc/xyz/
    # :%s/abc/xyz/
    # :*s/abc/xyz/
    # :s/abc/xyz/g
    # :!s/abc/xyz/g
    #! :%s/abc/xyz/g
    # :*s/abc/xyz/g
    # :s/abc/xyz/G
    # :!s/abc/xyz/G
    # :%s/abc/xyz/G
    # :*s/abc/xyz/G
    В каком конфигурационном файле пользователя нужно сохранять команды по настройке vim,
    чтобы они автоматически применялись при его старте?
    # /etc/vimrc
    # /etc/vim.conf
    # ~.vimrc
    #! ~/.vimrc
    # ~/vimrc
    # ~/vimconf
    # ~/.vim.conf
    # ~/.vim.swp
    Как включить нумерацию строк в vi/vim?
    #! set number
    # set n
    # set -n
    # number
    # numbr
    # -n
    # unset non
    Вы не хотите сохранять сделанные изменения в файле,
    и хотите выйти так. Нажимаете :q<enter>, но vim вас не выпускает.
    Как выйти?
    # wq
    # qq
    #! q!
    # !q
    # ZZ
    # ctrl-z
    Вы не любите vi несмотря ни на что. Вы хотите его не использовать,
    и прекрасно обходитесь редактором nano. Тем не менее vi подстерегает вас в самых неожиданных местах.
    Например, вы запустили vipw чтобы отредактировать файл паролей, а там опять этот редактор!
    Как сделать так чтобы вместо vi в таких случаях вызывался nano?
    # Никак. Команда называется vipw, потому вызывается и редактор vi
    # вызвать nanopw
    # EDITOR=nano
    # set EDITOR=nano
    #! export EDITOR=nano
    # make EDITOR=nano
    # в файле /etc/editor указать nano
    <!-- 30 -->
    С чем программа screen не сможет помочь?
    #! Перехват сеанса работы на терминале, на котором не запущен screen
    # Одновременная работа нескольких пользователей в одном терминале
    # Перекодировка текста на лету
    # Запуск нескольких терминалов на одном
    # Отключение от терминала и потом повторное подключение к нему
    Где находится пользовательский конфигурационный файл screen?
    # ~/screen
    # ~/screen.conf
    #! ~/.screenrc
    # ~/screenrc
    # ~/.screen.conf
    Как отключиться от сеанса screen?
    # ctrl-a a
    # ctrl-a c
    #! ctrl-a d
    # ctrl-a :
    # ctrl-a "
    # screen -d
    # screen -r
    # screen -x
    Как подключиться к активному сеансу screen (то есть к сеансу, в котором сейчас кто-то работает)?
    # ctrl-a a
    # ctrl-a c
    # ctrl-a d
    # ctrl-a :
    # ctrl-a "
    # screen -d
    # screen -r
    #! screen -x
    Как подключиться к ранее отключённому сеансу screen?
    # ctrl-a a
    # ctrl-a c
    # ctrl-a d
    # ctrl-a :
    # ctrl-a "
    # screen -d
    #! screen -r
    # screen -x
    Как в screen переключиться на предыдущий экран (экран, на котором вы только что были)?
    #! ctrl-a a
    # ctrl-a c
    # ctrl-a d
    # ctrl-a :
    # ctrl-a "
    # screen -d
    # screen -r
    # screen -x
    Как в screen посмотреть список открытых экранов?
    # ctrl-a a
    # ctrl-a c
    # ctrl-a d
    # ctrl-a :
    #! ctrl-a "
    # screen -d
    # screen -r
    # screen -x
    Как в screen перейти в его управляющую строку?
    # ctrl-a a
    # ctrl-a c
    # ctrl-a d
    #! ctrl-a :
    # ctrl-a "
    # screen -d
    # screen -r
    # screen -x
    Как завершить screen не получится?
    # ctrl-a \
    # завершить по очереди все программы, запущенные на экранах screen
    #! закрыть окно терминала, в котором запущен screen
    # pkill screen
    # kill $(pgrep screen)
    Вы хотите подключиться к активному сеансу screen, даёте команду screen -x,
    но вместо желаемого подключения получаете какой-то странный текст.
    Что это?
    #! Это список активных сеансов screen, их больше одного, поэтому при запуске screen нужно указать, к какому подключаться
    # Это вызвался режим тонкой настройки screen
    # screen должен быть запущен в multiuser-режиме (multiuser on)
    # Эта сборка screen не поддерживает несколько одновременных подключений
    # Для этого необходимо выполнять screen в режиме ядра
    
    /home/quiz/start-quiz
    >
    #!/usr/bin/perl
    $id = $ENV{"SSH_CLIENT"};
    $id = (split(/\s+/, $id))[0];
    if ($id) { $id .= "-"};
    $quiz_file = "quiz";
    $log_file = ".quiz/$id".time().'.log';
    @Questions = ();
    $Score = 0;
    sub ask_question($)
    {
        my $question = $_[0];
        my %answer_score;
        $i=1;
        $question =~ s{^(#!?)}{$1 eq '#!' and $answer_score{$i}=1;$i++}gme;
        print $question;
        $answer=<>;
        chomp $answer;
        open(LOG, ">>$log_file")
            or die "Can't open $log_file for writing";
        print LOG $question;
        if ($answer_score{$answer}) {
            print LOG "+++ (", $answer,")\n";
        }
        else {
            print LOG "--- (", join(" ", sort(keys(%answer_score))), ")\n";
        }
        close(LOG);
        return $answer_score{$answer};
    }
    open(QUIZ, $quiz_file);
    $question="";
    while(<QUIZ>)
    {
        s/<!--.*-->//g;
        if (/^\s*$/) {
            if ($question) {
                push @Questions, $question;
                $question = "";
            }
        }
        else {
            $question .= $_;
        };
    }
    close(QUIZ);
    for $question (@Questions) {
        $Score += ask_question($question);
    }
    print "Your score: $Score\n";
    
    /var/run/crond.pid
    >
    1614
    
    start-quiz
    >
    #!/usr/bin/perl
    $id = $ENV{"SSH_CLIENT"};
    $id = (split(/\s+/, $id))[0];
    if ($id) { $id .= "-"};
    $quiz_file = "quiz";
    $log_file = ".quiz/$id".time().'.log';
    @Questions = ();
    $Score = 0;
    sub ask_question($)
    {
        my $question = $_[0];
        my %answer_score;
        $i=1;
        $question =~ s{^(#!?)}{$1 eq '#!' and $answer_score{$i}=1;$i++}gme;
        print $question;
        $answer=<>;
        chomp $answer;
        open(LOG, ">>$log_file")
            or die "Can't open $log_file for writing";
        print LOG $question;
        if ($answer_score{$answer}) {
            print LOG "+++ (", $answer,")\n";
        }
        else {
            print LOG "--- (", join(" ", sort(keys(%answer_score))), ")\n";
        }
        close(LOG);
        return $answer_score{$answer};
    }
    open(QUIZ, $quiz_file);
    $question="";
    while(<QUIZ>)
    {
        s/<!--.*-->//g;
        if (/^\s*$/) {
            if ($question) {
                push @Questions, $question;
                $question = "";
            }
        }
        else {
            $question .= $_;
        };
    }
    close(QUIZ);
    for $question (@Questions) {
        $Score += ask_question($question);
    }
    print "Your score: $Score\n";
    

    Статистика

    Время первой команды журнала15:53:01 2009- 5-27
    Время последней команды журнала10:13:37 2009- 5-28
    Количество командных строк в журнале101
    Процент команд с ненулевым кодом завершения, %13.86
    Процент синтаксически неверно набранных команд, % 2.97
    Суммарное время работы с терминалом *, час 1.29
    Количество командных строк в единицу времени, команда/мин 1.30
    Частота использования команд
    screen22|===================| 19.30%
    grep13|===========| 11.40%
    cat11|=========| 9.65%
    ls9|=======| 7.89%
    ps7|======| 6.14%
    vi5|====| 4.39%
    /etc/init.d/monit4|===| 3.51%
    ld-linux.so.24|===| 3.51%
    chmod3|==| 2.63%
    cp3|==| 2.63%
    pkill3|==| 2.63%
    rm3|==| 2.63%
    cd3|==| 2.63%
    less3|==| 2.63%
    watch3|==| 2.63%
    man2|=| 1.75%
    root2|=| 1.75%
    tail2|=| 1.75%
    which2|=| 1.75%
    touch1|| 0.88%
    mkdir1|| 0.88%
    screnn1|| 0.88%
    ус1|| 0.88%
    ld.-1|| 0.88%
    alert1|| 0.88%
    !1|| 0.88%
    /etc/init.d/cron1|| 0.88%
    use1|| 0.88%
    !sc1|| 0.88%
    ____
    *) Интервалы неактивности длительностью 30 минут и более не учитываются

    Справка

    Для того чтобы использовать LiLaLo, не нужно знать ничего особенного: всё происходит само собой. Однако, чтобы ведение и последующее использование журналов было как можно более эффективным, желательно иметь в виду следующее:
    1. В журнал автоматически попадают все команды, данные в любом терминале системы.

    2. Для того чтобы убедиться, что журнал на текущем терминале ведётся, и команды записываются, дайте команду w. В поле WHAT, соответствующем текущему терминалу, должна быть указана программа script.

    3. Команды, при наборе которых были допущены синтаксические ошибки, выводятся перечёркнутым текстом:
      $ l s-l
      bash: l: command not found
      

    4. Если код завершения команды равен нулю, команда была выполнена без ошибок. Команды, код завершения которых отличен от нуля, выделяются цветом.
      $ test 5 -lt 4
      Обратите внимание на то, что код завершения команды может быть отличен от нуля не только в тех случаях, когда команда была выполнена с ошибкой. Многие команды используют код завершения, например, для того чтобы показать результаты проверки

    5. Команды, ход выполнения которых был прерван пользователем, выделяются цветом.
      $ find / -name abc
      find: /home/devi-orig/.gnome2: Keine Berechtigung
      find: /home/devi-orig/.gnome2_private: Keine Berechtigung
      find: /home/devi-orig/.nautilus/metafiles: Keine Berechtigung
      find: /home/devi-orig/.metacity: Keine Berechtigung
      find: /home/devi-orig/.inkscape: Keine Berechtigung
      ^C
      

    6. Команды, выполненные с привилегиями суперпользователя, выделяются слева красной чертой.
      # id
      uid=0(root) gid=0(root) Gruppen=0(root)
      

    7. Изменения, внесённые в текстовый файл с помощью редактора, запоминаются и показываются в журнале в формате ed. Строки, начинающиеся символом "<", удалены, а строки, начинающиеся символом ">" -- добавлены.
      $ vi ~/.bashrc
      2a3,5
      >    if [ -f /usr/local/etc/bash_completion ]; then
      >         . /usr/local/etc/bash_completion
      >        fi
      

    8. Для того чтобы изменить файл в соответствии с показанными в диффшоте изменениями, можно воспользоваться командой patch. Нужно скопировать изменения, запустить программу patch, указав в качестве её аргумента файл, к которому применяются изменения, и всавить скопированный текст:
      $ patch ~/.bashrc
      В данном случае изменения применяются к файлу ~/.bashrc

    9. Для того чтобы получить краткую справочную информацию о команде, нужно подвести к ней мышь. Во всплывающей подсказке появится краткое описание команды.

      Если справочная информация о команде есть, команда выделяется голубым фоном, например: vi. Если справочная информация отсутствует, команда выделяется розовым фоном, например: notepad.exe. Справочная информация может отсутствовать в том случае, если (1) команда введена неверно; (2) если распознавание команды LiLaLo выполнено неверно; (3) если информация о команде неизвестна LiLaLo. Последнее возможно для редких команд.

    10. Большие, в особенности многострочные, всплывающие подсказки лучше всего показываются браузерами KDE Konqueror, Apple Safari и Microsoft Internet Explorer. В браузерах Mozilla и Firefox они отображаются не полностью, а вместо перевода строки выводится специальный символ.

    11. Время ввода команды, показанное в журнале, соответствует времени начала ввода командной строки, которое равно тому моменту, когда на терминале появилось приглашение интерпретатора

    12. Имя терминала, на котором была введена команда, показано в специальном блоке. Этот блок показывается только в том случае, если терминал текущей команды отличается от терминала предыдущей.

    13. Вывод не интересующих вас в настоящий момент элементов журнала, таких как время, имя терминала и других, можно отключить. Для этого нужно воспользоваться формой управления журналом вверху страницы.

    14. Небольшие комментарии к командам можно вставлять прямо из командной строки. Комментарий вводится прямо в командную строку, после символов #^ или #v. Символы ^ и v показывают направление выбора команды, к которой относится комментарий: ^ - к предыдущей, v - к следующей. Например, если в командной строке было введено:

      $ whoami
      
      user
      
      $ #^ Интересно, кто я?
      
      в журнале это будет выглядеть так:
      $ whoami
      
      user
      
      Интересно, кто я?

    15. Если комментарий содержит несколько строк, его можно вставить в журнал следующим образом:

      $ whoami
      
      user
      
      $ cat > /dev/null #^ Интересно, кто я?
      
      Программа whoami выводит имя пользователя, под которым 
      мы зарегистрировались в системе.
      -
      Она не может ответить на вопрос о нашем назначении 
      в этом мире.
      
      В журнале это будет выглядеть так:
      $ whoami
      user
      
      Интересно, кто я?
      Программа whoami выводит имя пользователя, под которым
      мы зарегистрировались в системе.

      Она не может ответить на вопрос о нашем назначении
      в этом мире.
      Для разделения нескольких абзацев между собой используйте символ "-", один в строке.

    16. Комментарии, не относящиеся непосредственно ни к какой из команд, добавляются точно таким же способом, только вместо симолов #^ или #v нужно использовать символы #=

    17. Содержимое файла может быть показано в журнале. Для этого его нужно вывести с помощью программы cat. Если вывод команды отметить симоволами #!, содержимое файла будет показано в журнале в специально отведённой для этого секции.
    18. Для того чтобы вставить скриншот интересующего вас окна в журнал, нужно воспользоваться командой l3shot. После того как команда вызвана, нужно с помощью мыши выбрать окно, которое должно быть в журнале.
    19. Команды в журнале расположены в хронологическом порядке. Если две команды давались одна за другой, но на разных терминалах, в журнале они будут рядом, даже если они не имеют друг к другу никакого отношения.
      1
          2
      3   
          4
      
      Группы команд, выполненных на разных терминалах, разделяются специальной линией. Под этой линией в правом углу показано имя терминала, на котором выполнялись команды. Для того чтобы посмотреть команды только одного сенса, нужно щёкнуть по этому названию.

    О программе

    LiLaLo (L3) расшифровывается как Live Lab Log.
    Программа разработана для повышения эффективности обучения Unix/Linux-системам.
    (c) Игорь Чубин, 2004-2008

    $Id$