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

Содержание

Журнал

Среда (08/09/06)

/dev/pts/1
12:50:06
$sh cpr.sh ~/file1 names
cpr.sh: line 14: [: missing `]'
File doesn't exist
12:50:32
$sh cpr.sh ~/file1 ~/names
cpr.sh: line 14: [: missing `]'
File doesn't exist
12:50:40
$vi cpr.sh
14c14
< [ -e $file] || { echo "File doesn't exist" > /dev/stderr; exit; }
---
> [ -e $file ] || { echo "File doesn't exist" > /dev/stderr; exit; }
18c18
< 	[ -d $dir] || { echo "$dir not a directory. Skipping..." > /dev/stderr;continue; }
---
> 	[ -d $dir ] || { echo "$dir not a directory. Skipping..." > /dev/stderr;continue; }
22c22
< 		[ -d $subdir] && $thiscript $file $subdir
---
> 		[ -d $subdir ] && $thiscript $file $subdir
12:51:09
$sh cpr.sh ~/file1 ~/names
Done: /home/user/file1          ---->   /home/user/names
cpr.sh: line 22: [: too many arguments
cpr.sh: line 22: [: too many arguments
cpr.sh: line 22: [: too many arguments
cpr.sh: line 22: [: too many arguments
12:51:11
$sh cpr.sh file1 names
Done: file1             ---->   names
cpr.sh: line 22: [: too many arguments
cpr.sh: line 22: [: too many arguments
cpr.sh: line 22: [: too many arguments
cpr.sh: line 22: [: too many arguments
12:51:24
$cpr.sh ~
~adm        ~games/     ~ident      ~nfsnobody/ ~pcap       ~rpm/       ~user/
~bin/       ~gdm/       ~lp/        ~nobody/    ~pvm/       ~shutdown/  ~uucp/
~daemon/    ~gopher     ~mail/      ~nscd/      ~root/      ~smmsp/     ~vcsa/
~dbus/      ~haldaemon/ ~mailnull/  ~ntp/       ~rpc/       ~sshd/      ~xfs/
~ftp        ~halt/      ~news       ~operator/  ~rpcuser/   ~sync/
12:51:24
$cpr.sh ~
~adm        ~games/     ~ident      ~nfsnobody/ ~pcap       ~rpm/       ~user/
~bin/       ~gdm/       ~lp/        ~nobody/    ~pvm/       ~shutdown/  ~uucp/
~daemon/    ~gopher     ~mail/      ~nscd/      ~root/      ~smmsp/     ~vcsa/
~dbus/      ~haldaemon/ ~mailnull/  ~ntp/       ~rpc/       ~sshd/      ~xfs/
~ftp        ~halt/      ~news       ~operator/  ~rpcuser/   ~sync/
12:51:24
$cpr.sh ~/adm ~/
34                       .gconfd/                 .recently-used
.AbiSuite/               .glukalka                .rhopenoffice1.1/
archbase                 .gnome/                  sh/
backup/                  .gnome2/                 .sim/
base                     .gnome2_private/         sorted
.bash_history            .gstreamer-0.8/          sorted_passwd
.bash_logout             .gtkrc                   source/
.bash_profile            .gtkrc-1.2-gnome2        spid
.bashrc                  hardlink.file            spider/
bin/                     .ICEauthority            .ssh/
...
err.log                  .metacity/               touchlist
errperm.log              .mime.types              .Trash/
.esd_auth                .mozilla/                .tuxpaint/
.evolution/              names/                   unsorted
file                     .nautilus/               very_long_file_name
file1                    newfile                  .viminfo
file2                    nohup.out                .vimrc
file3                    .openoffice-install-log  .wordtrans/
filename                 .openoffice-lock         .Xauthority
files/                   pics                     .xemacs/
12:51:24
$cpr.sh ~/adm ~/files/
bash: /home/user/bin/cpr.sh: Permission denied
12:52:48
$sudo cpr.sh ~/adm ~/files/
sudo: cpr.sh: command not found
12:53:00
$sudo sh cpr.sh ~/adm ~/files/
File doesn't exist
12:53:07
$sudo sh cpr.sh ~/file ~/files/
Done: /home/user/file           ---->   /home/user/files/
cpr.sh: line 22: /home/user/bin/cpr.sh: Permission denied
12:53:15
$vi cpr.sh
12:53:55
$cp no_file_with_this_name /tmp
cp: невозможно выполнить stat для `no_file_with_this_name': No such file or directory
12:55:59
$echo $?
1
12:56:22
$touch no_file_with_this_name

12:56:36
$cp no_file_with_this_name /tmp

12:56:40
$echo $?
0
12:56:43
$test 5 -gt 1

12:56:56
$echo $?
0
12:56:59
$test 5 -lt 1

12:57:06
$echo $?
1
12:57:08
$test -h

12:57:43
$test --help

12:57:48
$test -z "$STRING"

12:58:37
$echo $?
0
12:58:43
$test -z ""

12:59:14
$echo $?
0
12:59:15
$test -z

12:59:23
$echo $?
0
12:59:24
$test -z /tmp/killa

12:59:43
$echo $?
1
12:59:45
$test -z vawe_kakojtobred

13:00:41
$echo $?
1
13:00:43
$test -z "vawe_kakojtobred"

13:02:08
$echo $?
1
13:02:10
$test -z "$vawe_kakojtobred"

13:02:16
$echo $?
0
13:02:18
$test -z /dev/null

13:02:54
$echo $?
1
13:02:55
$test -z "/dev/null"

13:03:16
$echo $?
1
13:03:18
$test "$P" != print

13:03:43
$echo $?
0
13:03:45
$test -e /etc/motd

13:04:05
$echo $?
0
13:04:07
$test -d /usr/local/bin

13:04:33
$echo $?
0
13:04:34
$test -r /etc/shadow

13:05:01
$echo $?
1
13:05:02
$test -k /tmp/

13:05:27
$echo $?
0
13:05:29
$test -w /etc/passwd

13:05:46
$echo $?
1
13:05:47
$test 5 gt 10
bash: test: gt: binary operator expected
13:06:16
$test 5 -gt 10

13:06:20
$echo $?
1
13:06:23
$test 10 -gt 5

13:06:31
$echo $?
0
13:06:33
$echo "Your favourite colour?" ; read FAV_COL; \
> 10
Your favourite colour?
1
bash: 10: command not found
13:07:56
$echo "Your favourite colour?" ; read FAV_COL; 10
Your favourite colour?
^[[A^[[A^[[A
bash: 10: command not found
13:08:00
$echo "Your favourite colour?" ; read FAV_COL; \
> echo your favourite colour - $FAV_COL
Your favourite colour?
brown
your favourite colour - brown
13:08:53
$test $EUID -ne0 -a -r /etc/shadow && \
> echo "Warning: file /etc/shadow can be read!"
echo "Warning: file /etc/shadow can be read"
bash: test: too many arguments
13:11:04
$test $EUID -ne0 -a -r /etc/shadow && echo 'Warning: file \/etc\/shadow can be read

13:11:04
$test $EUID -ne0 -a -r /etc/shadow && echo 'Warning:\ file\ \/etc\/shadow\ can\ be
e
bash: test: too many arguments
13:11:59
$test $EUID -ne0 -a -r /etc/shadow && echo 'Warning:\ file

13:11:59
$test $EUID -ne0 -a -r /etc/shadow && echo 'Warning:\ file /etc/shadow
bash: test: too many arguments
13:12:15
$test $EUID -ne0 -a -r /etc/shadow && echo 'Warning:
bash: test: too many arguments
13:12:22
$test $EUID -ne 0 -a -r /etc/shadow && echo 'Warning: file /etc/shadow can be read'

13:13:09
$test $EUID -ne 0 -a -r /etc/shadow && echo 'Warning: file /etc/shadow can be read'

13:13:09
$test $EUID -ne 0 -a -r /etc/shadow && /

13:13:19
$test $EUID -ne 0 -a -r /etc/shadow && \
> echo 'Warning: file /etc/shadow can be read'
13:13:28
$еtest -w /etc/passwd || \
> echo "her tam"
her tam
13:16:04
$A=0

13:17:27
$while [ $a -lt 10 ]
> do
> A=$((A+1))
> echo $A
> done
bash: [: -lt: unary operator expected
13:18:19
$while [ $A -lt 10 ]; do A=$((A+1)); echo $A; done
1
2
3
4
5
6
7
8
9
10
13:18:28
$for file in /etc/*
> do
> test -r $file || echo $file
> done
/etc/aliases.db
/etc/amd.conf
/etc/amd.net
/etc/anacrontab
/etc/at.deny
/etc/group-
/etc/gshadow
/etc/gshadow-
/etc/ident.key
/etc/passwd-
/etc/securetty
/etc/shadow
/etc/sudoers
13:19:23
$echo 'What are you interested in?'; \
> select command in man touch format kill
> do
> whatis $command
> break
> done
What are you interested in?
1) man
2) touch
3) format
4) kill
#? 4
kill                 (1)  - terminate a process
kill                 (2)  - send signal to a process
kill [builtins]      (1)  - bash built-in commands, see bash(1)
прошло 52 минуты
14:12:03
$echo "Full path to the programm :"
Full path to the programm :
14:16:11
$echo "Full path to the programm :" \
> read program
Full path to the programm : read program
14:16:34
$echo "Full path to the programm :" read program \;
Full path to the programm : read program ;
14:20:41
$echo "Full path to the programm :" read program \; if [ -x "$PROGRAM" ]
Full path to the programm : read program ; if [ -x  ]
14:21:41
$echo "Full path to the programm :" ; read program \; if [ -x "$PROGRAM" ]
Full path to the programm :
/etc/bin
bash: read: `;': not a valid identifier
14:22:19
$echo "Full path to the programm :" ; read PROGRAM \; if [ -x "$PROGRAM" ]
Full path to the programm :
df
bash: read: `;': not a valid identifier
14:22:55
$echo "Full path to the programm :" ; read PROGRAM \; if [ -x "$PROGRAM" ]
Full path to the programm :
/etc/
bash: read: `;': not a valid identifier
14:24:38
$echo "Full path to the programm :" read PROGRAM \; if [ -x "$PROGRAM" ]
Full path to the programm : read PROGRAM ; if [ -x /etc/ ]
14:25:19
$echo "Full path to the programm :"; read PROGRAM \; if [ -x "$PROGRAM" ]
Full path to the programm :
d
bash: read: `;': not a valid identifier
14:25:31
$echo "Full path to the programm :"; read PROGRAM ';' if [ -x "$PROGRAM" ]
Full path to the programm :
df
bash: read: `;': not a valid identifier
14:25:46
$echo "Full path to the programm :"; read PROGRAM ; if [ -x "$PROGRAM" ]
> then
> "$PROGRAM"
> else
> echo -n "Can't run $PROGRAM."
> if [ -e "$PROGRAM" ]
> then
> echo "This file is not executable"
> else
> echo No such file
> fi
> fi
Full path to the programm :
/etc/bin
Can't run /etc/bin.No such file
14:29:25
$func () {
> if [ -z "$1" ]
> then
> echo "No params passed to the function"
> return 0
> else
> echo "Param #1 is $1"
> fi
> if [ "$2" ]
> then echo "Parameter #2 is $2"
> fi
> }
14:33:24
$func
No params passed to the function
14:33:30
$func 3
Param #1 is 3
14:33:39
$func 4 3
Param #1 is 4
Parameter #2 is 3
14:33:46
$vi /home/user/sh/rn
14:34:50
$iconv -f=KOI8-R -t=UTF-8
34                       .glukalka                .rhopenoffice1.1/
.AbiSuite/               .gnome/                  sh/
archbase                 .gnome2/                 .sim/
backup/                  .gnome2_private/         sorted
base                     .gstreamer-0.8/          sorted_passwd
.bash_history            .gtkrc                   source/
.bash_logout             .gtkrc-1.2-gnome2        spid
.bash_profile            hardlink.file            spider/
.bashrc                  .ICEauthority            .ssh/
bin/                     .ies4linux/              .sversionrc
...
err.log                  .mime.types              .Trash/
errperm.log              .mozilla/                .tuxpaint/
.esd_auth                names/                   unsorted
.evolution/              .nautilus/               very_long_file_name
file                     newfile                  .viminfo
file1                    no_file_with_this_name   .vimrc
file2                    nohup.out                .wordtrans/
file3                    .openoffice-install-log  .Xauthority
filename                 .openoffice-lock         .xemacs/
files/                   pics                     .xine/
14:34:50
$iconv -f=KOI8-R -t=UTF-8 /home/user/sh/rn
if [ $# -ne 2 ]
then
  echo "Использование: `basename $0` old-pattern new-pattern"
  # Команда "rn .cpp .C" переименовывает все файлы содержащие в названии .cpp
  #     в рабочем каталоге на .C
  exit 1
fi
number=0    # Запомнить, сколько файлов было переименовано
for name in *$1*  #рассматриваем файлы в текущем каталоге
do
...
then
        echo "Переименован $number файл."
else
        if [ $rem -gt 1 -a $rem -lt 5 ]
        then
                echo "Переименовано $number файла"
        else
                echo "Переименовано $number файлов"
        fi
fi
14:35:22
$iconv -f=KOI8-R -t=UTF-8 /home/user/sh/rn > /home/user/sh/rn.conv

14:35:32
$vi /home/user/sh/rn.conv
14:35:38
$ls -l /home/user/sh/rn.conv
-rw-rw-r--  1 user user 1199 Авг  9 14:35 /home/user/sh/rn.conv
14:35:42
$chmod +x /home/user/sh/rn.conv

14:35:48
$ls -l /home/user/sh/rn.conv
-rwxrwxr-x  1 user user 1199 Авг  9 14:35 /home/user/sh/rn.conv

Статистика

Время первой команды журнала12:50:06 2006- 8- 9
Время последней команды журнала14:35:48 2006- 8- 9
Количество командных строк в журнале101
Процент команд с ненулевым кодом завершения, %33.66
Процент синтаксически неверно набранных команд, % 1.98
Суммарное время работы с терминалом *, час 0.88
Количество командных строк в единицу времени, команда/мин 1.90
Частота использования команд
echo44|=============================| 29.33%
test32|=====================| 21.33%
&10|======| 6.67%
read9|======| 6.00%
if7|====| 4.67%
sh6|====| 4.00%
\6|====| 4.00%
cpr.sh5|===| 3.33%
func4|==| 2.67%
vi4|==| 2.67%
sudo3|==| 2.00%
iconv3|==| 2.00%
while2|=| 1.33%
cp2|=| 1.33%
ls2|=| 1.33%
'1|| 0.67%
touch1|| 0.67%
101|| 0.67%
еtest1|| 0.67%
rn.conv1|| 0.67%
chmod1|| 0.67%
for1|| 0.67%
A=01|| 0.67%
do1|| 0.67%
done1|| 0.67%
/1|| 0.67%
____
*) Интервалы неактивности длительностью 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$