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

Содержание

Журнал

Вторник (11/28/17)

/dev/pts/5
13:03:43
#ls
f[1,2,3,4,5,}  files.txt  install
13:03:44
#rm f\[1\,2\,3\,4\,5\,\}

13:03:58
#ls
files.txt  install
13:03:59
#su user
user@debian2:/root$ l3script
прошло 34 минуты
13:38:34
$ls
ls: невозможно открыть каталог .: Отказано в доступе
прошло 66 минут
/dev/pts/2
14:44:35
#cat install
#!/bin/sh
hostname=`hostname`
uname -a | egrep -qi '(freebsd|darwin)' || hostname=`hostname -f`
###############################################################################
#
# Set this variables before installation:
lilalo_user=13-10-2014
lab=NT-LNet
install_l3bashrc_for_this_users=${users:-"root user"}  # users who will use l3agent and l3script
lilalo_context="/users/${lilalo_user}/${lab}/${hostname}"
...
step "Downloading l3prompt" ${wget} ${url_l3prompt}
step "Downloading l3-agent" '${wget} ${url_l3agent}; ${wget} ${url_l3config_pm}; ${wget} ${url_l3config}'
step "Downloading perl modules for l3-agent" '{ for i in ${perl_modules}; do ${wget} ${url_perl_modules}/$i.tar.gz; done; }'
step "Installing perl modules for l3-agent" '{ for i in ${perl_modules}; do tar xvfz $i.tar.gz; cd $i*[^z]; perl Makefile.PL; make; make install; cd ..; done; }'
step "Installing l3bashrc to users home directories" install_to_users_homes $install_l3bashrc_for_this_users
step "Adding l3bashrc invocation to ~/.bashrc " install_to_users_bashrc $install_l3bashrc_for_this_users
step "Adding l3-agent invocation to ~/.bash_profile " install_to_users_bash_profile $install_l3bashrc_for_this_users
cd /
rm -rf ${temp_dir}
show_final_message
14:44:39
#cat install | grep
Использование: grep [ПАРАМЕТР]… ШАБÐФАЙÐ
rep --help» для получения более подробного описания.
14:45:07
#cat install | grep rm
perl_modules="Term-VT102 Text-Iconv"
normC='\033[0;39m'
    printf "${whiteC}""$msg""...${normC}\n"
          printf "${greenC}""Ok\n""${normC}"
        printf "${redC}""Failed\n""${normC}"
For further information see http://xgu.ru/lilalo/ (in Russian).
rm -rf ${temp_dir}
14:45:13
#cat install | grep `rm`
rm: пропущен операнд
Попробуйте «rm --help» для получения более подробного описания.
Использование: grep [ПАРАМЕТР]… ШАБÐФАЙÐ
rep --help» для получения более подробного описания.
14:46:52
#cat install | grep `^rm`
l3script: ^rm: команда не найдена
Использование: grep [ПАРАМЕТР]… ШАБÐФАЙÐ
rep --help» для получения более подробного описания.
14:47:04
#cat install | grep `"`
l3script: command substitution: line 1: unexpected EOF while looking for matching `"'
l3script: command substitution: line 2: ошибка синтаксиса: неожиданный конец файла
Использование: grep [ПАРАМЕТР]… ШАБÐФАЙÐ
rep --help» для получения более подробного описания.
14:47:40
#cat install | grep '"'
install_l3bashrc_for_this_users=${users:-"root user"}  # users who will use l3agent and l3script
lilalo_context="/users/${lilalo_user}/${lab}/${hostname}"
url_lilalo="http://xgu.ru/lilalo"
url_l3bashrc="${url_lilalo}"/l3bashrc
url_l3agent="${url_lilalo}"/l3-agent
url_l3config_pm="${url_lilalo}"/l3config.pm
url_l3config="${url_lilalo}"/l3-config
url_l3prompt="${url_lilalo}"/l3prompt
perl_modules="Term-VT102 Text-Iconv"
apt_get_install_this="perl make libmodule-build-perl libc6-dev gcc"
...
        user_home=`get_user_home "$user"`
step "Installing dependencies" apt_get_install_deps
step "Downloading l3bashrc" ${wget} ${url_l3bashrc}
step "Downloading l3prompt" ${wget} ${url_l3prompt}
step "Downloading l3-agent" '${wget} ${url_l3agent}; ${wget} ${url_l3config_pm}; ${wget} ${url_l3config}'
step "Downloading perl modules for l3-agent" '{ for i in ${perl_modules}; do ${wget} ${url_perl_modules}/$i.tar.gz; done; }'
step "Installing perl modules for l3-agent" '{ for i in ${perl_modules}; do tar xvfz $i.tar.gz; cd $i*[^z]; perl Makefile.PL; make; make install; cd ..; done; }'
step "Installing l3bashrc to users home directories" install_to_users_homes $install_l3bashrc_for_this_users
step "Adding l3bashrc invocation to ~/.bashrc " install_to_users_bashrc $install_l3bashrc_for_this_users
step "Adding l3-agent invocation to ~/.bash_profile " install_to_users_bash_profile $install_l3bashrc_for_this_users
14:47:59
#cat install | grep '^rm'
rm -rf ${temp_dir}
14:48:08
#cat install | grep '"$'
lilalo_context="/users/${lilalo_user}/${lab}/${hostname}"
url_lilalo="http://xgu.ru/lilalo"
perl_modules="Term-VT102 Text-Iconv"
apt_get_install_this="perl make libmodule-build-perl libc6-dev gcc"
        echo "Please install this dependencies manually:"
        echo "Have you installed this already (y/n)?"
    msg="$1"
    printf "${whiteC}""$msg""...${normC}\n"
#    eval "$@" 2>&1 | sed 's/^/|\ \ \ /' && printf "Ok\n" || printf "Failed\n"
        printf "${redC}""Failed\n""${normC}"
    users="$@"
    users="$@"
    users="$@"
14:48:39
#cat install | grep '&'
uname -a | egrep -qi '(bsd|darwin)' && wget=fetch
    if which apt-get >& /dev/null
#    eval "$@" 2>&1 | sed 's/^/|\ \ \ /' && printf "Ok\n" || printf "Failed\n"
    eval "$@" 2>&1 > log 2>&1 && \
    uname -a | egrep -qi '(freebsd|darwin)' && pw user show "$@"| awk -F: '{print $9}' || getent passwd "$@"| awk -F: '{print $6}'
        || echo "[ \$0 == l3script ] && . ${user_home}/.lilalo/l3bashrc && _l3_start" >> ${user_home}/.bashrc; chown -R ${user} ${user_home}/.bashrc
14:50:18
#cat install | egrep '&+'
uname -a | egrep -qi '(bsd|darwin)' && wget=fetch
    if which apt-get >& /dev/null
#    eval "$@" 2>&1 | sed 's/^/|\ \ \ /' && printf "Ok\n" || printf "Failed\n"
    eval "$@" 2>&1 > log 2>&1 && \
    uname -a | egrep -qi '(freebsd|darwin)' && pw user show "$@"| awk -F: '{print $9}' || getent passwd "$@"| awk -F: '{print $6}'
        || echo "[ \$0 == l3script ] && . ${user_home}/.lilalo/l3bashrc && _l3_start" >> ${user_home}/.bashrc; chown -R ${user} ${user_home}/.bashrc
14:52:37
#cat install | egrep '&{1,2}'
uname -a | egrep -qi '(bsd|darwin)' && wget=fetch
    if which apt-get >& /dev/null
#    eval "$@" 2>&1 | sed 's/^/|\ \ \ /' && printf "Ok\n" || printf "Failed\n"
    eval "$@" 2>&1 > log 2>&1 && \
    uname -a | egrep -qi '(freebsd|darwin)' && pw user show "$@"| awk -F: '{print $9}' || getent passwd "$@"| awk -F: '{print $6}'
        || echo "[ \$0 == l3script ] && . ${user_home}/.lilalo/l3bashrc && _l3_start" >> ${user_home}/.bashrc; chown -R ${user} ${user_home}/.bashrc
прошло 13 минут
15:06:00
#cat ip.txt
192.168.2.1
164.168.10.15
10.6.19.96
23.65.21.5
2415.2.13.255
2315.15.231.1
23567.21.67.1
666.66.66.66
15:06:11
#)$'

15:06:11
#vi ip.txt
прошло 23 минуты
/dev/pts/2
15:29:14
#cp /etc/passwd .

15:30:51
#ls
files.txt  install  ip.txt  passwd
15:30:57
#cat passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
...
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
user:x:1000:1000:user,,,:/home/user:/bin/bash
sshd:x:102:65534::/var/run/sshd:/usr/sbin/nologin
ivan:x:1001:1001::/home/ivan:/bin/bash
petr:x:1002:1002::/home/petr:/bin/bash
15:32:15
#cat passwd | sed -n '1,5p'
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
15:33:46
#cat passwd | sed -n '/bash$/p'
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000:user,,,:/home/user:/bin/bash
ivan:x:1001:1001::/home/ivan:/bin/bash
petr:x:1002:1002::/home/petr:/bin/bash
15:35:25
#cat passwd | sed 's/bash$/zsh/'
root:x:0:0:root:/root:/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
...
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
user:x:1000:1000:user,,,:/home/user:/bin/zsh
sshd:x:102:65534::/var/run/sshd:/usr/sbin/nologin
ivan:x:1001:1001::/home/ivan:/bin/zsh
petr:x:1002:1002::/home/petr:/bin/zsh
15:37:09
#cat passwd | awk -F: '{print $1,$7}'
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
sync /bin/sync
games /bin/sh
man /bin/sh
lp /bin/sh
mail /bin/sh
news /bin/sh
...
list /bin/sh
irc /bin/sh
gnats /bin/sh
nobody /bin/sh
libuuid /bin/sh
Debian-exim /bin/false
user /bin/bash
sshd /usr/sbin/nologin
ivan /bin/bash
petr /bin/bash
15:42:00
#cat passwd | awk -F: '$>3=1000 {print $1,$7}'
awk: line 1: syntax error at or near >
15:44:23
#cat passwd | awk -F: '$3>=1000 {print $1,$7}'
nobody /bin/sh
user /bin/bash
ivan /bin/bash
petr /bin/bash
15:45:02
#cat passwd | awk -F: '$3>=1000 && &3!=65534 {print $1,7}'
awk: 1: unexpected character '&'
15:45:48
#cat passwd | awk -F: '$3>=1000 && $3!=65534 {print $1,7}'
user 7
ivan 7
petr 7
15:46:24
#awk -F: '$7~/zsh$/{print $1,$7}' passwd

15:48:13
#awk -F: '$7~/bash$/{print $1,$7}' passwd
root /bin/bash
user /bin/bash
ivan /bin/bash
petr /bin/bash
15:48:31
#awk -F: '$7~/(ba|z)sh$/{print $1,$7}' passwd
root /bin/bash
user /bin/bash
ivan /bin/bash
petr /bin/bash

Среда (11/29/17)

/dev/pts/0
10:45:36
#~
  1
"/etc/cron.dealy" [Новый файл]
10:46:20
#~
cron.d/       cron.daily/   cron.hourly/  cron.monthly/ cron.weekly/
10:46:20
#cd /etc/cron.
cron.d/       cron.daily/   cron.hourly/  cron.monthly/ cron.weekly/
10:46:20
#cd /etc/cron.daily/

10:46:42
#ls
apt       bsdmainutils  exim4-base  logrotate  passwd
aptitude  dpkg          locate      man-db
10:46:45
#vi locate
--- /tmp/l3-saved-13026.6188.31034	2017-11-29 11:46:54.954503258 +0200
+++ locate	2017-11-29 11:47:08.970538907 +0200
@@ -21,7 +21,7 @@
 # filesystems which are pruned from updatedb database
 PRUNEFS="NFS nfs nfs4 afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf ocfs2"
 # paths which are pruned from updatedb database
-PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs /media /var/lib/schroot/mount"
+PRUNEPATHS="/usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs /media /var/lib/schroot/mount"
 # netpaths which are added
 NETPATHS=""
 # run find as this user
10:47:09
#cd /etc/cron.daily/locate
l3script: cd: /etc/cron.daily/locate: Это не каталог
10:47:30
#vi /etc/cron.daily/locate
10:47:50
# 22 PRUNEFS="NFS nfs nfs4 afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda d

10:49:27
#cd

прошло 44 минуты
11:33:59
#find / -perm +6000
/usr/lib/openssh/ssh-keysign
/usr/lib/pt_chown
/usr/lib/eject/dmcrypt-get-device
/usr/bin/chage
/usr/bin/crontab
/usr/bin/passwd
/usr/bin/dotlockfile
/usr/bin/mail-lock
/usr/bin/mail-unlock
/usr/bin/expiry
...
/var/cache/man/sl/cat1
/var/cache/man/sl/cat8
/var/mail
/var/local
/var/log/exim4
/sbin/unix_chkpwd
find: `/proc/13550/task/13550/fd/5': Нет такого файла или каталога
find: `/proc/13550/task/13550/fdinfo/5': Нет такого файла или каталога
find: `/proc/13550/fd/5': Нет такого файла или каталога
find: `/proc/13550/fdinfo/5': Нет такого файла или каталога
11:34:18
#mkdir ~/soft

11:35:18
#ls
files.txt  install  ip.txt  passwd  soft
11:35:20
#cd soft

11:35:49
#touch /abc.tar

11:36:08
#ls

11:36:10
#ls

11:36:15
#ls -a
.  ..
11:36:22
#cat abc.tar
cat: abc.tar: Нет такого файла или каталога
11:36:39
#cat>abc.tar
123
11:37:09
#ls
abc.tar
11:37:10
#cat>qwer.gz
124
11:37:23
#cat>aga.tgz
124
11:37:36
#cat>qqq.rpm
14
11:37:47
#ls
abc.tar  aga.tgz  qqq.rpm  qwer.gz
11:37:48
#find ~ -regex '.*(\.tar\.gz|\.tgz|\.rpm)'

11:39:05
#ls
abc.tar  aga.tgz  qqq.rpm  qwer.gz
11:39:12
#cat abc.tar
123
11:39:22
#cd

11:39:35
#find ~ -regex '.*(\.tar\.gz|\.tgz|\.rpm)'

11:39:38
#find ~ -regex '.*(\.tar\.gz|\.tgz|\.rpm)' | wc -c
0
11:40:47
#| wc -c

11:40:47
#| wc -c

11:47:36
#| wc -c
                  ls
files.txt  install  ip.txt  passwd  soft
11:52:38
#cd soft

11:52:48
#ls
abc.tar  aga.tgz  qqq.rpm  qwer.gz
11:53:21
#ls
                     find ~ -P '.*(\.tar\.gz|\.tgz|\.rpm)' -exec mv {} ~/soft \;
11:54:08
#P

11:54:08
#~ -P'.*(\.tar\.gz|\.tgz|\.rpm)' -exec mv {} ~/soft \;
                     ls
                               '.*(\.tar\.gz|\.tgz|\.rpm)' -exec mv {} ~/soft \;
11:57:13
#ls
abc.tar  aga.tgz  qqq.rpm  qwer.gz
прошло 26 минут
12:23:40
#rm abc.tar aga.tgz qqq.rpm qwer.gz

12:23:57
#ls

12:24:01
#ls soft
ls: невозможно получить доступ к soft: Нет такого файла или каталога
прошло 14 минут
12:38:28
#ls

12:38:32
#cd ..

12:38:36
#> my.gz

12:38:53
#ls soft/

12:38:57
#find ~ -regextype posix-egrep -regex '.*(\.tar|\.gz|\.tgz|\.rpm)' -exec mv {} ~/soft \;
mv: «/root/soft/my.gz» и «/root/soft/my.gz» - один и тот же файл
12:39:09
#ls soft
my.gz
12:39:22
#rm soft/my.gz

12:39:31
#> k.gz

12:39:37
#> k.rpm

12:39:41
#find ~ -regextype posix-egrep -regex '.*(\.tar|\.gz|\.tgz|\.rpm)' -exec mv {} ~/soft \;
mv: «/root/soft/k.rpm» и «/root/soft/k.rpm» - один и тот же файл
mv: «/root/soft/k.gz» и «/root/soft/k.gz» - один и тот же файл
12:39:44
#ls soft/
k.gz  k.rpm
12:41:43
#` -name core -ok rm -f {}\;
> l3script: unexpected EOF while looking for matching ``'
l3script: ошибка синтаксиса: неожиданный конец файла
12:43:56
#ls
files.txt  install  ip.txt  passwd  soft
12:44:01
#a=12

прошло 18 минут
13:02:25
#echo $a
12
13:02:30
#bash
root@debian2:~# pstree -h
init─┬─acpid
     ├─cron
     ├─exim4
     ├─6*[getty]
     ├─2*[l3-agent]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd─┬─sshd───sshd───bash───script───script───l3script
     │      └─sshd───bash───script───script───l3script───bash───pstree
     └─udevd
root@debian2:~# echo $a
root@debian2:~# l3script
13:03:57
#exit
exit
root@debian2:~# l3script
13:04:32
#export a

/dev/pts/1
13:04:32
#export a

/dev/pts/0
13:04:39
#bash
root@debian2:~# echo $a
root@debian2:~# exit
exit
/dev/pts/1
13:04:39
#bash
root@debian2:~# echo $a
root@debian2:~# exit
exit
/dev/pts/0
13:05:03
#export a

/dev/pts/1
13:05:03
#export a

/dev/pts/0
13:05:08
#bush
l3script: bush: команда не найдена

Файлы

  • abc.tar
  • install
  • ip.txt
  • passwd
  • abc.tar
    >
    123
    
    install
    >
    #!/bin/sh
    hostname=`hostname`
    uname -a | egrep -qi '(freebsd|darwin)' || hostname=`hostname -f`
    ###############################################################################
    #
    # Set this variables before installation:
    lilalo_user=13-10-2014
    lab=NT-LNet
    install_l3bashrc_for_this_users=${users:-"root user"}  # users who will use l3agent and l3script
    lilalo_context="/users/${lilalo_user}/${lab}/${hostname}"
    #
    ###############################################################################
    lilalo_rc=.l3rc
    lilalo_home=.lilalo
    url_lilalo="http://xgu.ru/lilalo"
    url_l3bashrc="${url_lilalo}"/l3bashrc
    url_l3agent="${url_lilalo}"/l3-agent
    url_l3config_pm="${url_lilalo}"/l3config.pm
    url_l3config="${url_lilalo}"/l3-config
    url_l3prompt="${url_lilalo}"/l3prompt
    url_perl_modules=${url_lilalo}/
    perl_modules="Term-VT102 Text-Iconv"
    apt_get_install_this="perl make libmodule-build-perl libc6-dev gcc"
    wget=wget
    uname -a | egrep -qi '(bsd|darwin)' && wget=fetch
    normC='\033[0;39m'
    whiteC='\033[1;37m'
    redC='\033[0;31m'
    greenC='\033[0;32m'
    apt_get_install_deps()
    {
        return 0
        if which apt-get >& /dev/null
        then
            apt-get install -y $apt_get_install_this
        else
            echo "Please install this dependencies manually:"
            echo $apt_get_install_this
            echo "Have you installed this already (y/n)?"
            echo y | read answer
            if echo $answer | grep -q ^[yY]
            then
                true
            else
                echo Please install the dependencies and rerun the script
                exit 1
            fi
        fi
    }
    step()
    {
        msg="$1"
        shift
        printf "${whiteC}""$msg""...${normC}\n"
    #    eval "$@" 2>&1 | sed 's/^/|\ \ \ /' && printf "Ok\n" || printf "Failed\n"
        eval "$@" 2>&1 > log 2>&1 && \
        {
              cat log | sed 's/^/|\ \ \ /'
              printf "${greenC}""Ok\n""${normC}"
        } || \
        {
            cat log | sed 's/^/|\ \ \ /'
            printf "${redC}""Failed\n""${normC}"
        }
    }
    get_user_home()
    {
        uname -a | egrep -qi '(freebsd|darwin)' && pw user show "$@"| awk -F: '{print $9}' || getent passwd "$@"| awk -F: '{print $6}'
    }
    install_to_users_homes()
    {
        . l3bashrc
        users="$@"
        set -x
        for user in $users
        do
            user_home=`get_user_home "$user"`
            mkdir -p ${user_home}/${lilalo_home}
            mkdir /etc/lilalo/
            cp l3config.pm /etc/lilalo/
            cp l3-agent /usr/local/bin
            cp l3-config /usr/local/bin
            ln -s `which bash` /usr/local/bin/l3script
            chmod 755 /usr/local/bin/l3-{agent,config}
            cp l3bashrc ${user_home}/${lilalo_home}
            cp l3prompt ${user_home}/${lilalo_home}
            chmod 755 ${user_home}/${lilalo_home}/l3prompt
            chown -R $user ${user_home}/${lilalo_home}
            echo l3cd=${lilalo_context}/$user > ${user_home}/${lilalo_rc}
            chown -R $user ${user_home}/${lilalo_rc}
        done
        set +x
    }
    install_to_users_bashrc()
    {
        users="$@"
        for user in $users
        do
            user_home=`get_user_home "$user"`
            grep -q lilalo ${user_home}/.bashrc 2> /dev/null\
            || echo "[ \$0 == l3script ] && . ${user_home}/.lilalo/l3bashrc && _l3_start" >> ${user_home}/.bashrc; chown -R ${user} ${user_home}/.bashrc
        done
    }
    install_to_users_bash_profile()
    {
        users="$@"
        for user in $users
        do
            user_home=`get_user_home "$user"`
            grep -q l3-agent ${user_home}/.bash_profile 2> /dev/null \
            || { echo >> ${user_home}/.bash_profile ; cat ${user_home}/.bash_profile | sed '1s/^/l3-agentX/' | tr X '\n' > /tmp/$$$$l3 ; mv /tmp/$$$$l3 ${user_home}/.bash_profile; chown -R ${user} ${user_home}/.bash_profile; }
        done
    }
    show_usage()
    {
        cat <<USAGE
    Usage:
        $0
    USAGE
    }
    show_final_message()
    {
        cat <<FINAL_MESSAGE
    Installation is successfully completed.
    Now restart your shell or relogin
    to start script writing.
    Your current lilalo context is ${lilalo_context}/USER
    If you use xgu.ru backend, your labs will be available at
    http://xgu.ru/l3/${lilalo_context}
    Use commands
     $ l3cd ${lilalo_context%/*/*}/MY-NEW-CONTEXT/${hostname}/USER
     $ l3pwd
    to change and to know your current context.
    For further information see http://xgu.ru/lilalo/ (in Russian).
    Thank you gor using LiLaLo.
    Happy Labbing!
    (don't forget to restart bash or relogin)
    FINAL_MESSAGE
    }
    temp_dir=/tmp/lilalo-install-temp-$$
    mkdir -p ${temp_dir}
    cd ${temp_dir}
    step "Installing dependencies" apt_get_install_deps
    step "Downloading l3bashrc" ${wget} ${url_l3bashrc}
    step "Downloading l3prompt" ${wget} ${url_l3prompt}
    step "Downloading l3-agent" '${wget} ${url_l3agent}; ${wget} ${url_l3config_pm}; ${wget} ${url_l3config}'
    step "Downloading perl modules for l3-agent" '{ for i in ${perl_modules}; do ${wget} ${url_perl_modules}/$i.tar.gz; done; }'
    step "Installing perl modules for l3-agent" '{ for i in ${perl_modules}; do tar xvfz $i.tar.gz; cd $i*[^z]; perl Makefile.PL; make; make install; cd ..; done; }'
    step "Installing l3bashrc to users home directories" install_to_users_homes $install_l3bashrc_for_this_users
    step "Adding l3bashrc invocation to ~/.bashrc " install_to_users_bashrc $install_l3bashrc_for_this_users
    step "Adding l3-agent invocation to ~/.bash_profile " install_to_users_bash_profile $install_l3bashrc_for_this_users
    cd /
    rm -rf ${temp_dir}
    show_final_message
    
    ip.txt
    >
    192.168.2.1
    164.168.10.15
    10.6.19.96
    23.65.21.5
    2415.2.13.255
    2315.15.231.1
    23567.21.67.1
    666.66.66.66
    
    passwd
    >
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    sys:x:3:3:sys:/dev:/bin/sh
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/bin/sh
    man:x:6:12:man:/var/cache/man:/bin/sh
    lp:x:7:7:lp:/var/spool/lpd:/bin/sh
    mail:x:8:8:mail:/var/mail:/bin/sh
    news:x:9:9:news:/var/spool/news:/bin/sh
    uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
    proxy:x:13:13:proxy:/bin:/bin/sh
    www-data:x:33:33:www-data:/var/www:/bin/sh
    backup:x:34:34:backup:/var/backups:/bin/sh
    list:x:38:38:Mailing List Manager:/var/list:/bin/sh
    irc:x:39:39:ircd:/var/run/ircd:/bin/sh
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
    nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
    libuuid:x:100:101::/var/lib/libuuid:/bin/sh
    Debian-exim:x:101:103::/var/spool/exim4:/bin/false
    user:x:1000:1000:user,,,:/home/user:/bin/bash
    sshd:x:102:65534::/var/run/sshd:/usr/sbin/nologin
    ivan:x:1001:1001::/home/ivan:/bin/bash
    petr:x:1002:1002::/home/petr:/bin/bash
    

    Статистика

    Время первой команды журнала13:03:43 2017-11-28
    Время последней команды журнала13:05:08 2017-11-29
    Количество командных строк в журнале101
    Процент команд с ненулевым кодом завершения, %16.83
    Процент синтаксически неверно набранных команд, % 0.99
    Суммарное время работы с терминалом *, час 2.65
    Количество командных строк в единицу времени, команда/мин 0.63
    Частота использования команд
    cat24|===============| 15.58%
    ls22|==============| 14.29%
    grep9|=====| 5.84%
    awk8|=====| 5.19%
    cd8|=====| 5.19%
    \.tgz6|===| 3.90%
    \.rpm)'6|===| 3.90%
    find6|===| 3.90%
    cat>4|==| 2.60%
    wc4|==| 2.60%
    export4|==| 2.60%
    rm3|=| 1.95%
    ~3|=| 1.95%
    sed3|=| 1.95%
    =10003|=| 1.95%
    >3|=| 1.95%
    vi3|=| 1.95%
    bash3|=| 1.95%
    egrep2|=| 1.30%
    &2|=| 1.30%
    \.gz2|=| 1.30%
    aga.tgz1|| 0.65%
    '1|| 0.65%
    mkdir1|| 0.65%
    abc.tar1|| 0.65%
    cp1|| 0.65%
    P1|| 0.65%
    qqq.rpm1|| 0.65%
    echo1|| 0.65%
    k.rpm1|| 0.65%
    221|| 0.65%
    3=10001|| 0.65%
    bush1|| 0.65%
    )$'1|| 0.65%
    +'1|| 0.65%
    $3!=655341|| 0.65%
    {1,2}'1|| 0.65%
    qwer.gz1|| 0.65%
    `1|| 0.65%
    touch1|| 0.65%
    my.gz1|| 0.65%
    {print1|| 0.65%
    3!=655341|| 0.65%
    k.gz1|| 0.65%
    exit1|| 0.65%
    a=121|| 0.65%
    su1|| 0.65%
    ____
    *) Интервалы неактивности длительностью 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$