Практическое занятие. Работа с файлами в UNIX

Цель занятия: знакомство с командной строкой UNIX, командами по работе с файловой системой и командами обработки текстовых файлов.

Изучаемые команды: «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы»

Сценарий: Знакомство с каталогами UNIX

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

Начальные условия: Командная строка после входа в систему.

  1. Получить имя текущего каталога с помощью команды pwd:

    [user@localhost ~]$ pwd
    /home/user/

  2. Перейти в корневой каталог с помощью команды cd /:

    [user@localhost ~]$ cd /
    [user@localhost /]$ pwd
    /

    Отметить, как изменилась строка приглашения.

  3. Посмотреть содержимое корневого каталога с помощью команды ls:

    [user@localhost /]$ ls
    bin   dev  home   lib    mnt  proc  sbin  sys  usr
    boot  etc  image  media  opt  root  srv   tmp  var

  4. Сравнить с использованием «расширенного» вывода команды ls -F:

    [user@localhost /]$ ls -F
    bin/   dev/  home/   lib/    mnt/  proc/  sbin/  sys/  usr/
    boot/  etc/  image/  media/  opt/  root/  srv/   tmp/  var/

    Каталоги отмечаются синим цветом и знаком / после имени.

  5. Посмотреть содержимое домашнего каталога с помощью команды ls ~:

    [user@localhost /]$ ls ~
    Documents  tmp

    Домашний каталог содержит набор стандартных каталогов.

  6. Вернуться в домашний каталог с помощью cd без параметров:

    [user@localhost /]$ cd
    [user@localhost ~]$

  7. Создать каталог test с помощью команды mkdir test:

    [user@localhost ~]$ mkdir test

  8. Посмотреть обновлённое содержимое домашнего каталога ls:

    [user@localhost ~]$ ls
    Documents  test  tmp

  9. Создать подкаталог subtest в каталоге test командой mkdir test/subtest:

    [user@localhost ~]$ mkdir test/subtest

  10. Посмотреть содержимое домашнего каталога и его подкаталогов с помощью ключа рекурсивного просмотра -R в команде ls -R:

    [user@localhost ~]$ ls -R
    .:
    Documents  test  tmp
    
    ./Documents:
    
    ./test:
    subtest
    
    ./test/subtest:
    
    ./tmp:

Сценарий: Изучение типов файлов в UNIX

В этом сценарии рассматриваются типы файлов в UNIX: простые файлы, каталоги, ссылки. Изучаются команды создания и копирования файлов. Показывается разница между жесткими и символьными ссылками, между копированием и переносом файла.

Начальные условия: Командная строка. Каталог test после предыдущего сценария.

  1. Cоздать пустой файл с помощью команды touch first.txt:

    [user@localhost test]$ touch first.txt
    [user@localhost test]$ ls
    first.txt  subtest

  2. Добавить в файл строку текста с помощью команды echo и перенаправления вывода: echo "Hello, world" >> first.txt:

    [user@localhost test]$ echo "Hello, world" >> first.txt

  3. Посмотреть содержимое файла с помощью команды cat first.txt:

    [user@localhost test]$ cat first.txt
    Hello, world
    [user@localhost test]$

  4. Посмотреть расширенную информацию о каталоге, используя ключ -l команды ls:

    [user@localhost test]$ ls -l
    total 4
    -rw-r--r-- 1 user user 13 Feb 14 20:12 first.txt
    drwxr-xr-x 2 user user 60 Feb 14 19:42 subtest

  5. Добавить псевдоним командной оболочки, чтобы сократить размер команды, с помощью команды alias ls='ls -F -l':

    [user@localhost test]$ alias ls='ls -F -l'
    [user@localhost test]$ ls test
    total 4
    -rw-r--r-- 1 user user 13 Feb 14 20:12 first.txt
    drwxr-xr-x 2 user user 60 Feb 14 19:42 subtest

  6. Получить более подробную информацию о каталоге test, используя ключи -a, -l и -i команды ls:

    [user@localhost test]$ ls -a -l -i
    total 4
    1014 drwxr-xr-x 3 user user 100 Feb 14 20:07 ./
     941 drwx------ 8 user user 340 Feb 14 19:28 ../
    1081 -rw-r--r-- 1 user user  13 Feb 14 20:12 first.txt
    1015 drwxr-xr-x 2 user user  60 Feb 14 19:42 subtest/

    Первый столбец — номера индексных узлов файловой системы. Третий столбец — число жёстких ссылок на файл.

  7. Скопировать файл с помощью команды cp first.txt copy1.txt:

    [user@localhost test]$ cp first.txt copy1.txt
    [user@localhost test]$ ls -a -l -i 
    total 8
    1014 drwxr-xr-x 3 user user 120 Feb 14 20:33 ./
     941 drwx------ 8 user user 340 Feb 14 19:28 ../
    1082 -rw-r--r-- 1 user user  13 Feb 14 20:33 copy1.txt
    1081 -rw-r--r-- 1 user user  13 Feb 14 20:12 first.txt
    1015 drwxr-xr-x 2 user user  60 Feb 14 19:42 subtest/

    Новый файл имеет свой собственный индексный узел.

  8. Переименовать файл с помощью команды mv first.txt orig.txt. mv first.txt orig.txt:

    [user@localhost test]$ mv first.txt orig.txt
    [user@localhost test]$ ls -a -l -i
    total 8
    1014 drwxr-xr-x 3 user user 120 Feb 14 20:37 ./
     941 drwx------ 8 user user 340 Feb 14 19:28 ../
    1082 -rw-r--r-- 1 user user  13 Feb 14 20:33 copy1.txt
    1081 -rw-r--r-- 1 user user  13 Feb 14 20:12 orig.txt
    1015 drwxr-xr-x 2 user user  60 Feb 14 19:42 subtest/

    Отметим, что изменилось только имя файла, все остальные атрибуты остались прежними.

  9. Создать жёсткую ссылку командой ln orig.txt copy2.txt:

    [user@localhost test]$ ln orig.txt copy2.txt
    [user@localhost test]$ ls -a -i
    total 12
    1014 drwxr-xr-x 3 user user 140 Feb 14 20:41 ./
     941 drwx------ 8 user user 340 Feb 14 19:28 ../
    1082 -rw-r--r-- 1 user user  13 Feb 14 20:33 copy1.txt
    1081 -rw-r--r-- 2 user user  13 Feb 14 20:12 copy2.txt
    1081 -rw-r--r-- 2 user user  13 Feb 14 20:12 orig.txt
    1015 drwxr-xr-x 2 user user  60 Feb 14 19:42 subtest/

    Добавилась ещё одна ссылка на тот же файл, число ссылок увеличилось на 1.

  10. Создать символьную ссылку командой ln -s orig.txt orig.lnk:

    [user@localhost test]$ ln -s orig.txt orig.lnk
    [user@localhost test]$ ls -a -i
    total 12
    1014 drwxr-xr-x 3 user user 160 Feb 14 20:45 ./
     941 drwx------ 8 user user 340 Feb 14 19:28 ../
    1082 -rw-r--r-- 1 user user  13 Feb 14 20:33 copy1.txt
    1081 -rw-r--r-- 2 user user  13 Feb 14 20:12 copy2.txt
    1083 lrwxrwxrwx 1 user user   8 Feb 14 20:45 orig.lnk -> orig.txt
    1081 -rw-r--r-- 2 user user  13 Feb 14 20:12 orig.txt
    1015 drwxr-xr-x 2 user user  60 Feb 14 19:42 subtest/

    Новый файл имеет новый индексный узел и размер, равный имени файла orig.txt.

  11. Сравним содержимое файлов при обращении к ним по имени:

    [user@localhost test]$ cat orig.txt
    Hello, world.
    [user@localhost test]$ cat copy2.txt
    Hello, world.
    [user@localhost test]$ cat orig.lnk
    Hello, world.

    К одним и тем же данным можно обратиться через жесткую или символьную ссылку.

Сценарий: Поиск системных журналов

В этом сценарии изучается команда поиска файлов и каталогов.

Начальные условия: Командная строка, каталог test после прошлого сценария.

  1. Вывести список всех файлов и каталогов в текущем каталоге, включая содержимое подкаталогов, с помощью команды find:

    [user@localhost test]$ find
    .
    ./orig.lnk
    ./copy2.txt
    ./orig.txt
    ./copy1.txt
    ./subtest

  2. Найти в текущем каталоге и его подкаталогах все файля и каталоги, которые начиняются на o с помощью команды find -name "o*":

    [user@localhost test]$ find -name "o*"
    ./orig.lnk
    ./orig.txt

  3. Найти все файлы и каталоги в каталоге /etc и его подкаталогах, которые начиняются на o с помощью команды find /etc -name "o*":

    [user@localhost test]$ find /etc -name "o*"
    find: /etc/tcb: Permission denied
    find: /etc/default: Permission denied
    find: /etc/buildreqs: Permission denied
    ...

    Список найденных файлов может быть слишком большим, и для его просмотра можно воспользоваться «прокруткой» терминала с помощью клавиш Shift+PgUp и Shift+PgDn.

  4. Вы увидели множество сообщений об ошибках доступа («Permission denied»), которые можно подавить с помощью перенаправления ошибок следующим образом: find /etc -name "o*" 2>/dev/null

    [user@localhost test]$ find /etc -name "o*" 2>/dev/null
    /etc/modprobe.d/options
    /etc/modutils.d/oss
    /etc/net/ifaces/default/fw/options
    /etc/net/ifaces/default/options
    ...
    /etc/pam.d/other
    /etc/rc.d/init.d/outformat

  5. Найти все каталоги в /etc, которые начинаются на o с помощью команды find /etc -name "o*" -a -type d 2>/dev/null:

    [user@localhost test]$ find /etc -name "o*" -a -type d 2>/dev/null
    /etc/net/options.d
    /etc/openssh
    /etc/openssl
    /etc/opt

  6. Найти все обычные файлы в каталоге /var и его подкаталогах, заканчивающиеся на .log:

    [user@localhost test]$ find /var -name "*log" -a -type f 2>/dev/null
    /var/log/Xorg.0.log
    /var/log/xdm-error.log
    /var/log/faillog
    /var/log/lastlog

  7. Создать каталог logs с помощью команды mkdir logs:

    [user@localhost test]$ mkdir logs

  8. Скопировать найденные файлы в локальный каталог с помощью параметра -exec команды find. Для этого выполнить: find /var -name "*log" -a -type f -exec cp {} test/logs/ 2>/dev/null:

    [user@localhost test]$ find /var -name "*log" -a -type f -exec cp {} logs/ 2>/dev/null \;
    [user@localhost test]$ ls logs
    total 48
    -rw-r--r--  1 user user  23521 Feb 14 21:45 Xorg.0.log
    -rw-r--r--  1 user user  12048 Feb 14 21:45 faillog
    -rw-r--r--  1 user user 146584 Feb 14 21:45 lastlog
    -rw-r--r--  1 user user    762 Feb 14 21:45 xdm-error.log
    

    Были скопированы все файлы, права на чтение которых у нас есть.

Сценарий: Архивирование и деархивирование файлов и каталогов

В этом сценарии изучается команда архивирования файлов и каталогов. Командная строка, каталог test после прошлого сценария.

Начальные условия:

  1. Перейти в домашний каталог с помощью команды cd:

    [user@localhost test]$ cd
    [user@localhost ~]$

  2. Создать архив с именем test.tar.gz с применением сжатия, содержащий каталог test, с помощью команды tar -czf test.tar.gz test:

    [user@localhost ~]$ tar -czf test.tar.gz test
    [user@localhost ~]$ ls
    Documents  test  test.tar.gz  tmp

  3. Создать новый каталог для содержимого архива командой mkdir test2:

    [user@localhost ~]$ mkdir test2

  4. Перейти в новый каталог с помощью команды cd test2:

    [user@localhost ~]$ cd test2

  5. Развернуть содержимое архива в текущий каталог с помощью команды tar -xzf ../test.tar.gz:

    [user@localhost test2]$ tar -xzf ../test.tar.gz

  6. Убедиться, что содержимое распакованного архива совпадает с оригинальным каталогом. Выполнить команду ls -l -a -F:

    [user@localhost test2]$ ls -l -a -F
    total 0
    drwxr-xr-x 2 user user 140 Feb 14 21:45 test/
    [user@localhost test2]$ ls -l -a -F test
    total 12
    drwxr-xr-x 3 user user 160 Feb 14 20:45 ./
    drwx------ 8 user user 340 Feb 14 19:28 ../
    -rw-r--r-- 1 user user  13 Feb 14 20:33 copy1.txt
    -rw-r--r-- 2 user user  13 Feb 14 20:12 copy2.txt
    drwxr-xr-x 2 user user 140 Feb 14 21:45 logs/
    lrwxrwxrwx 1 user user   8 Feb 14 20:45 orig.lnk -> orig.txt
    -rw-r--r-- 2 user user  13 Feb 14 20:12 orig.txt
    drwxr-xr-x 2 user user  60 Feb 14 19:42 subtest/

Сценарий: Cоздание новых текстовых файлов

В этом сценарии изучаются команды для создания и модифицирования текстовых файлов. Командная строка.

Начальные условия:

  1. Перейти в новый каталог с помощью команды cd ~/test перейдите в каталог test:

    [user@localhost test2]$ cd ~/test

  2. Ввести команду echo "One line":

    [user@localhost test]$ echo "One line"
    One line

    Данная команда принимает строку в виде параметра и выводит её на стандартный вывод.

  3. Ввести ту же команду, но перенаправить вывод в файл second.txt с помощью >. Команда echo "One line" > second.txt:

    [user@localhost test]$ echo "One line" > second.txt

  4. Добавить в конец файла second.txt строку «A line» с помощью другого перенаправления echo "A line" >> second.txt:

    [user@localhost test]$ echo "A line" >> second.txt

  5. Вывести содержимое файла с помощью команды cat second.txt:

    [user@localhost test]$ cat second.txt
    One line
    A line

  6. С помощью команды cat можно создавать многострочные файлы —, если переопределить вывод программы в файл и вводить текст до нажатия Ctrl+D (конец ввода). Ввести команду cat > multiline.txt и набрать текст

    [user@localhost test]$ cat > multiline.txt
    Simple text:
    blah-blah-blah
    1 2 3 4 5 6 7 8 9 0
    
    bye!
    
    (Ctrl+D)
    [user@localhost test]$

  7. Убедиться, что содержимое файла совпадает с введённым текстом, включая все переводы строки. Для этого ввести команду cat multiline.txt

    [user@localhost test]$ cat multiline.txt
    Simple text:
    blah-blah-blah
    1 2 3 4 5 6 7 8 9 0
    
    bye!
    
    

  8. Основным назначением команды cat является объединение файлов, имена которых передаются как параметры командной строки. Объединить файлы с помощью команды cat orig.txt second.txt multiline.txt > big.txt:

    [user@localhost test]$ cat orig.txt second.txt multiline.txt > big.txt

  9. Убедиться, что новый файл содержит строки из перечисленных файлов, с помощью команды cat big.txt:

    [user@localhost test]$ cat big.txt
    Hello, world
    One line
    A line
    Simple text:
    blah-blah-blah
    1 2 3 4 5 6 7 8 9 0
    
    bye!
    
    

Сценарий: Разрезание и склеивание файлов

В данном сценарии изучается, как выделять информацию, разбитую на части с помощью специального символа-разделителя (например, пробела или символа :), из файлов и создавать новые структурированные файлы.

Начальные условия: Командная строка.

  1. Посмотреть содержимое файла /etc/passwd, в котором содержится информация о пользователях системы, с помощью команды cat /etc/passwd:

    [user@localhost test]$ cat /etc/passwd
    root:x:0:0:System Administrator:/root:/bin/bash
    bin:x:1:1:bin:/:/dev/null
    daemon:x:2:2:daemon:/:/dev/null
    adm:x:3:4:adm:/var/adm:/dev/null
    lp:x:4:7:lp:/var/spool/lpd:/dev/null
    mail:x:8:12:mail:/var/spool/mail:/dev/null
    ...

    Каждая строка хранит запись об отдельном пользователе. Запись состоит из полей, разделённых символом :.

  2. Выделить первый столбец в каждой записи, выбрав в качестве разделителя :, с помощью команды cat /etc/passwd | cut -f1 -d::

    [user@localhost test]$ cat /etc/passwd | cut -f1 -d:
    root
    bin
    daemon
    adm
    lp
    mail
    news
    ...

  3. Отсортировать список пользователей по алфавиту с помощью команды cat /etc/passwd | cut -f1 -d: | sort:

    [user@localhost test]$ cat /etc/passwd | cut -f1 -d: | sort
    adm
    apache
    bin
    cacheman
    daemon
    exim
    ftp
    ...

  4. Выделить в каждой записи седьмой столбец, соответствующий командной оболочке пользователя, с помощью команды cat /etc/passwd | cut -f7 -d:

    [user@localhost test]$ cat /etc/passwd | cut -f7 -d:
    /bin/bash
    /dev/null
    /dev/null
    /dev/null
    /dev/null
    ...

    Список содержит много повторяющихся строк.

  5. Удалить повторяющиеся строки командой cat /etc/passwd | cut -f7 -d: | uniq:

    [user@localhost test]$ cat /etc/passwd | cut -f7 -d: | uniq
    /bin/bash
    /dev/null
    /sbin/nologin
    /bin/bash

    Некоторые повторяющиеся строки остались, так как сравниваются только последовательные строки.

  6. Добиться полной уникальности, предварительно отсортировав строки с помощью команды sort. Ввести команду cat /etc/passwd | cut -f7 -d: | sort | uniq:

    [user@localhost test]$ cat /etc/passwd | cut -f7 -d: | sort | uniq
    /bin/bash
    /dev/null
    /sbin/nologin

  7. Выделить первый и седьмой столбцы файла /etc/passwd в отдельные файлы. Для этого ввести команды cat /etc/passwd | cut -f1 -d: > users и cat /etc/passwd | cut -f7 -d: > shells:

    [user@localhost test]$ cat /etc/passwd | cut -f1 -d: > users
    [user@localhost test]$ cat /etc/passwd | cut -f7 -d: > shells

  8. Объединить результаты с помощью команды paste users shells:

    [user@localhost test]$ paste users shells
    root	/bin/bash
    bin	/dev/null
    daemon	/dev/null
    adm	/dev/null
    lp	/dev/null
    mail	/dev/null
    ...

Сценарий: Быстрый анализ текстов

В данном сценарии изучаются команды, которые позволяют провести первичный анализ файла: с чего он начинается, как заканчивается и каков его размер.

Начальные условия: Командная строка.

  1. Получить число строк в файле /etc/passwd с помощью команды wc -l /etc/passwd:

    [user@localhost test]$ wc -l /etc/passwd
    33 /etc/passwd

  2. Или другим способом: посчитав число слов в созданном ранее файле users с помощью команды cat users | wc -w:

    [user@localhost test]$ cat users | wc -w
    33

  3. Посмотеть первые несколько строк длинного файла с помощью команды head logs/Xorg.0.log:

    [user@localhost test]$ head logs/Xorg.0.log
    X Window System Version 7.2.0
    Release Date: 21 February 2007
    X Protocol Version 11, Revision 0, Release 7.2
    Build Operating System: Linux 2.6.18-std-smp-alt4 i686 ALT Linux
    Current Operating System: Linux localhost 2.6.18-wks-alt1 #1 SMP Wed Dec 13 01:43:50 MSD 2006 i686
    Build Date: 21 February 2007
            Before reporting problems, check http://wiki.X.Org
            to make sure that you have the latest version.
    Module Loader present
    Markers: (--) probed, (**) from config file, (==) default setting,

  4. Аналогично, посмотеть последние несколько строк с помощью команды tail logs/Xorg.0.log:

    [user@localhost test]$ tail logs/Xorg.0.log
    (**) RADEON(0): Memory map updated.
    (**) RADEON(0): Programming CRTC1, offset: 0x00000000
    (**) RADEON(0): GRPH_BUFFER_CNTL from 20097c7c to 20095c5c
    (II) RADEON(0): [RESUME] Attempting to re-init Radeon hardware.
    (II) RADEON(0): [agp] Mode 0x1f000201 [AGP 0x8086/0x3340; Card 0x1002/0x4c66]
    (**) RADEON(0): EngineRestore (32/32)
    (**) RADEON(0): EngineRestore (32/32)
    (**) RADEON(0): RADEONSaveScreen(2)
    (II) Configured Mouse: ps2EnableDataReporting: succeeded
    (**) RADEON(0): RADEONDisplayPowerManagementSet(0,0x0)

    Это бывает полезно при просмотре системных журналов — в них записи о самых последних событиях содержатся в конце файлов.

Сценарий: Поиск строк по регулярным выражениям

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

Начальные условия: Командная строка. Каталог test/logs с найденными системными журналами.

  1. Среди найденных системных журналов посмотреть файл журнала загрузки графичской системы Xorg.0.log с помощью команды less test/logs/Xorg.0.log:

    [user@localhost ~]$ less test/logs/Xorg.0.log

    Выйти из просмоторщика можно нажатием клавиши q.

  2. Найти все предупреждения в журнале: строка, начинающаяся с «(WW)». Для этого ввести команду grep "^(WW)" test/logs/Xorg.0.log:

    [user@localhost ~]$ grep "^(WW)" test/log/Xorg.0.log
    (WW) RADEON(0): Failed to detect secondary monitor, MergedFB/Clone mode disabled
    (WW) RADEON(0): DRI init changed memory map, adjusting ...
    (WW) RADEON(0):   MC_FB_LOCATION  was: 0xe3ffe000 is: 0xe3ffe000
    (WW) RADEON(0):   MC_AGP_LOCATION was: 0xffffffc0 is: 0xd07fd000
    ...

  3. Получить все строки, содержащие следующий шаблон: последовательность из одной или более цифры или буквы, затем символ собаки, затем еще одна последовательность из одной или более цифры или буквы, или точки, затем символ точки, затем от двух до четырёх букв (имя домена первого уровня). При этом служебный вывод ошибок удаляется (перенаправляется в нулевое устройство). Для этого ввести команду grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:

    [user@localhost ~]$ grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null
    /etc/protocols:cbt      7       CBT             # CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk>
    /etc/sensors.conf:# Many thanks go to Peter T. Breuer <ptb@it.uc3m.es> for helping us figure
    /etc/sensors.conf:# Jonathan Yew <j.teh@iname.com> and Alex van Kaam <darkside@chello.nl>
    ...

    При работе с несколькими файлами grep по умолчанию использует вывод имени файла перед найденной стокой.

  4. Избавиться от имени файла в начале строки с помощью ключа -h. Ввести команду grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:

    [user@localhost ~]$ grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null
    cbt      7       CBT             # CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk>
    # Many thanks go to Peter T. Breuer <ptb@it.uc3m.es> for helping us figure
    # Jonathan Yew <j.teh@iname.com> and Alex van Kaam <darkside@chello.nl>
    ...

  5. Для вывода только найденной подстроки используется ключ -o. Ввести команду grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:

    [user@localhost ~]$ grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null
    allardie@cs.ucl.ac.uk
    ptb@it.uc3m.es
    teh@iname.com
    ...

  6. Получить все файлы каталога /etc/ с помощью команды find /etc -type f 2>/dev/null, игнорируя ошибки:

    [user@localhost ~]$ find /etc -type f 2>/dev/null
    /etc/.pwd.lock
    /etc/gshadow
    /etc/gshadow-
    /etc/group
    /etc/group-
    /etc/passwd
    /etc/passwd-
    ...

  7. Для каждого из найденных файлов произвести поиск подстроки «nameserver». Для этого ввести команду find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null:

    [user@localhost ~]$ find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null
    nameserver 192.168.0.1
    nameserver      42/tcp          name            # Host Name Server
    nameserver      42/udp          name            # Host Name Server
    # nameserver lines into /etc/resolv.conf or not.

  8. Для большего удобства добавить вывод имени файла (ключ -H) и номера строки (ключ -n), на которой было найдено совпадение, с помощью команды find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null:

    [user@localhost ~]$ find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null
    /etc/resolv.conf:1:nameserver 192.168.0.1
    /etc/services:60:nameserver     42/tcp          name            # Host Name Server
    /etc/services:61:nameserver     42/udp          name            # Host Name Server
    /etc/sysconfig/network:13:# nameserver lines into /etc/resolv.conf or not.

    Таким образом, команда grep может эффективно использоваться вместе с командой find для нахождения информации в файлах.

Задания для самоподготовки

  1. Создайте каталог test1 в домашнем каталоге. Сравните время создания системных каталогов /bin, /tmp с каталогом test1.
  2. Скопируйте файл /bin/ls в локальный каталог. Посмотрите атрибуты этого файла. Попробуйте запустить его.
  3. Создайте в локальном каталоге символьную ссылку tmplnk на каталог /tmp. Скопируйте несколько файлов в каталог tmplnk.
  4. Сравните файлы /dev/tty1 и /dev/hda1. Какой тип они имеют? Чем они отличаются?
  5. Найдите все файлы в системе, которые были модифицированы не более суток назад.
  6. С помощью одной команды найдите все файлы с расширением .html в каталоге /usr и скопируйте их в локальный каталог htmls.
  7. Создайте архив каталога /etc и узнайте его размер. Попробуйте создать сжатый архив того же каталога. Сравните степень сжатия gzip и bzip2 на этом примере.
  8. Создайте текстовый файл a.txt из десяти строк. Узнайте его размер. Создайте новый файл, содержащий в себе файл a.txt четыре раза.
  9. С помощью одной команды найдите все файлы с расширением .txt в каталоге /usr и объедините их в один большой файл big.txt.
  10. Получите с помощью одной команды файл, содержащий все числовые идентификаторы пользователей, зарегистрированных в ситсеме.
  11. Получите с помощью одной команды строки с 5-ой по 8-ю в файле /proc/cpuinfo, содержащем информацию о процессоре.
  12. Придумайте регулярное выражение, соответствующее URL с использованием протокола HTTP. Найдите все строки, содержащие такие URL в файлах каталога /etc.
  13. С помощью одной команды найдите все файлы с расширениями .txt или .html в каталоге /usr, в которых содержится слово user.