Администрирование Linux
  • Введение в дисциплину
    • Функции, права и ответственность системного администратор
    • Сетевые операционные системы
    • Знакомство с Linux
    • Дистрибутивы Linux
    • Графические оболочки Linux
    • Важно! Основы работы с ВМ!
    • Установка Linux
    • Запуск и останов системы
    • Общие сведения о работе в командной оболочке Linux
      • Документация по ОС Linux
      • Сокращения команд
      • Работа с потоком данных и его фильтрация
      • Выполнение команд. Простейшие команды для работы с каталогами
    • Требования к практическим работам
      • Правила оформления и сдачи отчётов
    • Контрольная работа
    • Практическая работа №1
  • Базовые задачи
    • Работа с пользователями в Linux
      • Редактирование файла Sudoers
      • /etc/passwd и /etc/shadow
      • Права доступа
      • Списки контроля доступа и расширенные атрибуты
      • Практическая работа №2. Управление учетными записями
      • Практическая работа №3. Управление правами доступа
    • Установка программ (утилит) пакетным менеджером
      • Установка программ (утилит) пакетным менеджером. Установка из архивов (тарболов)
      • Troubeshooting пакетных менеджеров
      • Практическая работа №4. Установка программ в Linux
    • Процессы и потребление ресурсов сервера
      • Процессы и потребление ресурсов сервера. Практика
      • Мониторинг процессов и ресурсов в ОС Linux
      • Система инициализации SystemD
      • Практическая работа №5
    • Контрольная работа
  • Управление файлами
    • Структура файловой системы Linux
      • Файлы-устройства
      • Типы файлов (MIME)
      • Сведения об именах файлов
    • Файловые менеджеры Linux
    • Работа с файлами и каталогами в Linux
      • Поиск информации в ОС Linux (find,grep,locate,wc, cut ...)
    • Архивирование файлов в Linux
    • Ссылки. Указатели на файл в ОС Linux
    • Создание раздела диска в Linux
      • Монтирование и разметка диска. Просмотр размера диска
    • Запись cd/dvd дисков в Linux
    • Практическая работа №6. Работа с файлами в UNIX
    • Контрольная работа
  • Сетевые настройки Linux
    • Сетевые настройки Linux
      • Вариант № 1. Сетевые настройки дистрибутивов, основанных на Debian (Astra Linux, Ubuntu, Kubuntu)
      • Вариант № 2. RedHat-based дистрибутивы ( RedOS, OpenSuse, CentOS, Fedora)
    • Настройка параметров прокси
    • Поиск и устранение неисправностей с сетевыми параметрами
      • 11 примеров использования netstat
      • Использование команд ifup, ifdown и ifquery на Linux
    • Практическая работа №7. Управление сетью
    • Iptables, firewalld, ufw, nftables
    • Расчет сети с помощью ipcalc
    • Контрольная работа
  • Сервисы Linux
    • Получение удаленного доступа к сервер
      • Про SSH port forwarding в Linux
    • Протокол DHCP
      • Настройка DHCP сервера (isc-dhcp-server)
    • Протокол DNS
      • Настройка DNS сервера (BIND9)
    • Протокол NTP
      • Настройка NTP сервера
    • Протокол FTP
      • Настройка FTP-сервера (vsftpd)
    • Протокол samba
      • Настройка Samba
    • Сетевая файловая система NFS
      • Настройка NFS
    • Настройка центра сертификации OpenSSL
    • Системы управления базами данных
      • Установка и настройка СУБД MySQL
      • Установка и настройка СУБД MongoDB
    • Веб-сервер
      • Apache
        • Установка и настройка стека LAMP
        • Установка и настройка PHPMyAdmin
        • Установка и настройка Wordpress
      • Nginx
        • Установка и настройка Nginx
    • Docker
      • Установка и развертывание приложения в Docker
    • Почтовый сервер Postfix, Dovecot
    • Что такое прокси сервер
      • Прокси Squid
    • OTRS
    • LMS
    • MediaWiki
    • ClamAV
    • CUPS
    • Rsyslog: syslog сервер в Linux
    • Резервное копирование в Linux
      • Резервное копирование через скрипт
      • Bacula
    • Контрольная работа
  • Дополнительно
    • Использование скриптов в ОС Linux
      • Написание bash-скриптов
      • Написание скриптов на Perl
      • Написание скриптов на Python
    • Игры и пасхалки в консоли Linux
    • Полезные ресурсы
    • Рекомендации ФСТЭК по безопасной настройке операционных систем Linux
Powered by GitBook
On this page
  1. Управление файлами

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

PreviousЗапись cd/dvd дисков в LinuxNextКонтрольная работа

Last updated 1 year ago

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

Изучаемые команды: , , , , , , , , , , , , , , , , , , ,

Знакомство с каталогами UNIX

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

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

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

    user@desktop ~ $ pwd
    /home/user/
  2. Перейти в корневой каталог с помощью команды cd /:

    user@desktop ~ $ cd /
    user@desktop / $ pwd
    /

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

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

    user@desktop / $ ls
    bin   dev  home  mnt  proc  sbin  tmp  var
    boot  etc  lib   opt  root  sys   usr
  4. Сравнить с использованием «раскрашенного» вывода команды ls -F --color:

    user@desktop / $ ls -F --color
    bin/   dev/  home/  mnt/  proc/  sbin/  tmp/  var/
    boot/  etc/  lib/   opt/  root/  sys/   usr/

    Директории отмечаются синим цветом и знаком «/» после имени.

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

    user@desktop / $ ls -F --color ~
    user@desktop / $

    Возможно, домашний каталог пуст.

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

    user@desktop / $ cd
    user@desktop ~ $
  7. Создать директорию test с помощью команды mkdir test:

    user@desktop ~ $ mkdir test
  8. Посмотреть обновлённое содержимое домашнего каталога ls -F --color:

    user@desktop ~ $ ls -F --color
    test/
  9. Создать поддиректорию subtest в директории test командой mkdir test/subtest:

    user@desktop ~ $ mkdir test/subtest
  10. Посмотреть содержимое домашнего каталога и его подкаталогов с помощью ключа рекурсивного просмотра -R в команде ls -F --color -R:

    user@desktop ~ $ ls -F --color -R
    .:
    test/
    test:
    subtest/
    
    test/subtest:

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

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

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

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

    user@desktop ~ $ touch test/first.txt
    user@desktop ~ $ ls -F --color test/                
    first.txt  subtest/
  2. Добавить строку текста в конец файла с помощью команды echo "Hello, world" >> test/first.txt и перенаправления вывода:

    user@desktop ~ $ echo "Hello, world" >> test/first.txt
  3. Посмотреть содержимое файла с помощью команды cat test/first.txt:

    user@desktop ~ $ cat test/first.txt
    Hello, world
    user@desktop ~ $
  4. Посмотреть расширенную информацию о каталоге, используя ключ -l команды ls. ls -F --color -l test:

    user@desktop ~ $ ls -F --color -l test
    итого 4
    -rw-r--r--  1 user users 13 Окт 15 20:48 first.txt
    drwxr-xr-x  2 user users 48 Окт 13 21:33 subtest/
  5. Добавить псевдоним командной оболочки, чтобы сократить размер команды, с помощью команды alias ls='ls -F --color -l':

    user@desktop ~ $ alias ls='ls -F --color -l'
    user@desktop ~ $ ls test
    итого 4
    -rw-r--r--  1 user users 13 Окт 15 20:48 first.txt
    drwxr-xr-x  2 user users 48 Окт 13 21:33 subtest/
  6. Посмотреть глубже на директорию test, используя ключи -a и -i. ls -a -i test

    user@desktop ~ $ ls -a -i test
    итого 7
    drwxr-xr-x   3 user users  104 Окт 15 20:49 ./
    drwx------  67 user users 3352 Окт 15 20:42 ../
    -rw-r--r--   1 user users   13 Окт 15 20:48 first.txt
    drwxr-xr-x   2 user users   48 Окт 13 21:33 subtest/

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

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

    user@desktop ~ $ cd test
  8. Скопировать файл с помощью команды cp first.txt copy1.txt:

    user@desktop test $ cp first.txt copy1.txt
    user@desktop test $ ls -a -i 
    итого 11
    5522107 drwxr-xr-x   3 user users  136 Окт 15 20:54 ./
    384269 drwx------  67 user users 3352 Окт 15 20:42 ../
    5938127 -rw-r--r--   1 user users   13 Окт 15 20:54 copy1.txt
    5937954 -rw-r--r--   1 user users   13 Окт 15 20:48 first.txt
    6292625 drwxr-xr-x   2 user users   48 Окт 13 21:33 subtest/

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

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

    user@desktop test $ mv first.txt orig.txt
    user@desktop test $ ls -a -i
    итого 11
    5522107 drwxr-xr-x   3 user users  128 Окт 15 20:59 ./
    384269 drwx------  67 user users 3352 Окт 15 20:42 ../
    5938127 -rw-r--r--   1 user users   13 Окт 15 20:54 copy1.txt
    5937954 -rw-r--r--   1 user users   13 Окт 15 20:48 orig.txt
    6292625 drwxr-xr-x   2 user users   48 Окт 13 21:33 subtest/

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

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

    user@desktop test $ ln orig.txt copy2.txt
    user@desktop test $ ls -a -i
    итого 15
    5522107 drwxr-xr-x   3 user users  160 Окт 15 21:00 ./
    384269 drwx------  67 user users 3352 Окт 15 20:42 ../
    5938127 -rw-r--r--   1 user users   13 Окт 15 20:54 copy1.txt
    5937954 -rw-r--r--   2 user users   13 Окт 15 20:48 copy2.txt
    5937954 -rw-r--r--   2 user users   13 Окт 15 20:48 orig.txt
    6292625 drwxr-xr-x   2 user users   48 Окт 13 21:33 subtest/

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

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

    user@desktop test $ ln -s orig.txt orig.lnk
    user@desktop test $ ls -a -i
    итого 15
    5522107 drwxr-xr-x   3 user users  184 Окт 15 21:18 ./
    384269 drwx------  67 user users 3352 Окт 15 21:02 ../
    5938127 -rw-r--r--   1 user users   13 Окт 15 20:54 copy1.txt
    5937954 -rw-r--r--   2 user users   13 Окт 15 20:48 copy2.txt
    5938189 lrwxrwxrwx   1 user users    8 Окт 15 21:18 orig.lnk -> orig.txt
    5937954 -rw-r--r--   2 user users   13 Окт 15 20:48 orig.txt
    6292625 drwxr-xr-x   2 user users   48 Окт 13 21:33 subtest/

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

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

    user@desktop test $ cat orig.txt
    Hello, world
    user@desktop test $ cat copy2.txt
    Hello, world
    user@desktop test $ cat orig.lnk
    Hello, world

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

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

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

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

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

    user@desktop ~ $ cd test
  2. Вывести список всех файлов и директорий в текущей директории, включая содержимое поддиректорий с помощью команды find:

    user@desktop ~ $ find
    .
    ./orig.lnk
    ./orig.txt
    ./subtest
    ./copy1.txt
    ./copy2.txt
  3. Найти все файлы и дериктории в текущей директории и ее поддиректориях, которые начиняются на «o» с помощью команды find -name "o*":

    user@desktop ~ $ find -name "o*"
    ./orig.lnk
    ./orig.txt
  4. Найти все файлы и дериктории в директории /etc и ее поддиректориях, которые начиняются на «o» с помощью команды find /etc -name "o*":

    user@desktop ~ $ find /etc -name "o*"
    /etc/apm/other.d
    /etc/joe/syntax/ocaml.jsf
    /etc/opt
    /etc/ppp/options-pptp
    /etc/ppp/options-pppoe
    /etc/ppp/options
    /etc/ssl/openssl.cnf
    /etc/dpkg/origins
    /etc/pam.d/other
    /etc/texmf/tex/plain/config/omega.ini
  5. Найти все обычные файлы в директории /etc и ее поддиректориях, которые начинаются на «o» с помощью команды find /etc -name "o*" -a -type f:

    user@desktop ~ $ find /etc -name "o*" -a -type f
    /etc/joe/syntax/ocaml.jsf
    /etc/ppp/options-pptp
    /etc/ppp/options-pppoe
    /etc/ppp/options
    /etc/ssl/openssl.cnf
    /etc/pam.d/other
    /etc/texmf/tex/plain/config/omega.ini
  6. Найти все обычные файлы в директории /var/ и ее поддиректориях, заканчивающиеся на «log»:

    user@desktop ~ $ find /var -name "*log" -a -type f
    find: /var/lib/mysql: Permission denied
    find: /var/lib/samba/private: Permission denied
    ...
    /var/log/emerge.log
    /var/log/lastlog
    /var/log/faillog
    /var/log/Xorg.0.log

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

  7. Исключить вывод сообщений об ошибках (например, «Permission denied») с помощью перенаправления вывода ошибок в специальное устройство /dev/null. Для этого ввести команду find /var -name "*log" -a -type f 2>/dev/null

    user@desktop ~ $ find /var -name "*log" -a -type f  2>/dev/null
    /var/log/emerge.log
    /var/log/lastlog
    /var/log/faillog
    /var/log/Xorg.0.log
  8. Создать директорию logs с помощью команды mkdir test/logs:

    user@desktop ~ $ mkdir test/logs
  9. Скопировать найденные файлы в локальную директорию с помощью параметра -exec команды find. Для этого ввести команду find /var -name "*log" -a -type f -exec cp {} test/logs/ \; 2>/dev/null

    user@desktop ~ $ find /var -name "*log" -a -type f -exec cp {} test/logs/ \; 2>/dev/null
    user@desktop ~ $ ls test/logs
    итого 789
    -rw-r-----  1 user users 601033 Окт 16 18:37 emerge.log
    -rw-r--r--  1 user users 292292 Окт 16 18:37 lastlog
    -rw-r--r--  1 user users  37383 Окт 16 18:37 Xorg.0.log

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

Архивирование и деархивирование файлов и директорий

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

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

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

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

    user@desktop ~ $ tar -czf test.tar.gz test
    user@desktop ~ $ ls
    drwxr-xr-x   4 user users   208 Окт 16 18:36 test/
    -rw-r--r--   1 user users 79173 Окт 16 18:49 test.tar.gz
  3. Создать новую директорию для содержимого архива командой mkdir test2:

    user@desktop ~ $ mkdir test2
  4. Перейти в новую директорию с помощью команды cd test2:

    user@desktop ~ $ cd test2
  5. Развернуть содержимое архива в текущую директорию с помощью команды tar -xzf ../test.tar.gz:

    user@desktop test2 $ tar -xzf ../test.tar.gz
  6. Убедиться, что содержимое распакованного архива совпадает с оригинальной директорией. Ввести команду ls -l -F:

    user@desktop test2 $ ls -l -F
    итого 0
    drwxr-xr-x  4 user users 208 Окт 16 18:36 test/
    user@desktop test2 $ ls -l -F test
    итого 12
    -rw-r--r--  1 user users  13 Окт 15 20:54 copy1.txt
    -rw-r--r--  2 user users  13 Окт 15 20:48 copy2.txt
    drwxr-xr-x  2 user users 136 Окт 16 18:37 logs/
    lrwxrwxrwx  1 user users   8 Окт 16 18:54 orig.lnk -> orig.txt
    -rw-r--r--  2 user users  13 Окт 15 20:48 orig.txt
    drwxr-xr-x  2 user users  48 Окт 13 21:33 subtest/

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

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

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

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

    user@desktop test $ echo "One line"
    One line

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

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

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

    user@desktop test $ echo "A line" >> second.txt
  4. Вывести содержимое файла с помощью команды cat second.txt:

    user@desktop test $ cat second.txt
    One line
    A line
  5. С помощью команды cat можно создавать многострочные файлы –, если переопределить вывод программы в файл и вводить текст до нажатия Ctrl+D (конец ввода). Ввести команду cat >multiline.txt и набрать текст

    user@desktop test $ cat >multiline.txt
    Simple text:
    blah-blah-blah
    1 2 3 4 5 6 7 8 9 0
    
    bye!
    
    (Ctrl+D)
    user@desktop test $
  6. Убедиться, что содержимое файла совпадает с введённым текстом, включая все переводы строки. Для этого ввести команду cat multiline.txt

    user@desktop test $ cat multiline.txt
    Simple text:
    blah-blah-blah
    1 2 3 4 5 6 7 8 9 0
    
    bye!
  7. Основным назначением команды cat является объединение файлов, имена которых передаются как аргументы командной строки. Объединить файлы с помощью команды cat orig.txt second.txt multiline.txt > big.txt:

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

    user@desktop 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@desktop test $ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/bin/false
    daemon:x:2:2:daemon:/sbin:/bin/false
    adm:x:3:4:adm:/var/adm:/bin/false
    lp:x:4:7:lp:/var/spool/lpd:/bin/false
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ...

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

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

    user@desktop test $ cat /etc/passwd | cut -f1 -d:
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    ...
  3. Отсортировать список пользователей по алфавиту с помощью команды cat /etc/passwd | cut -f1 -d: | sort:

    user@desktop test $ cat /etc/passwd | cut -f1 -d: | sort
    adm
    alias
    apache
    at
    bin
    cron
    cyrus
    ...
  4. Выделить седьмой столбец в каждой записи, соответствующий командной оболочке пользователя, с помощью команды cat /etc/passwd | cut -f7 -d:

    user@desktop test $ cat /etc/passwd | cut -f7 -d:
    /bin/bash
    /bin/false
    /bin/false
    /bin/false
    /bin/false
    /bin/sync
    ...

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

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

    user@desktop test $ cat /etc/passwd | cut -f7 -d: | uniq
    /bin/bash
    /bin/false
    /bin/sync
    /sbin/shutdown
    /sbin/halt
    /bin/false
    ...

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

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

    user@desktop test $ cat /etc/passwd | cut -f7 -d: | sort | uniq
    /bin/bash
    /bin/false
    /bin/sync
    /dev/null
    /sbin/halt
    /sbin/shutdown
  7. Выделить первый и седьмой столбец файла /etc/passwd в отдельные файлы. Для этого ввести команды cat /etc/passwd | cut -f1 -d: > users и cat /etc/passwd | cut -f7 -d: > shells:

    user@desktop test $ cat /etc/passwd | cut -f1 -d: > users
    user@desktop test $ cat /etc/passwd | cut -f7 -d: > shells
  8. Объединить результаты с помощью команды paste users shells:

    user@desktop test $ paste users shells
    root    /bin/bash
    bin     /bin/false
    daemon  /bin/false
    adm     /bin/false
    lp      /bin/false
    sync    /bin/sync
    ...

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

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

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

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

    user@desktop test $ wc -l /etc/passwd
    44 /etc/passwd
  2. Или другим способом: посчитав число слов в созданном ранее файле users с помощью команды cat users | wc -w:

    user@desktop test $ cat users | wc -w
    44
  3. Посмотреть первые несколько строк длинного файла с помощью команды head logs/Xorg.0.log:

    user@desktop test $ head logs/Xorg.0.log
    X Window System Version 6.8.2
    Release Date: 9 February 2005
    X Protocol Version 11, Revision 0, Release 6.8.2
    Build Operating System: Linux 2.6.13-gentoo i686 [ELF]
    Current Operating System: Linux thinkpad 2.6.13-gentoo #1 Wed Sep 7 01:03:14 MSD 2005 i686
    Build Date: 08 October 2005
    Before reporting problems, check http://wiki.X.Org
    to make sure that you have the latest version.
    Module Loader present
  4. Аналогично, посмотреть последние несколько строк с помощью команды tail logs/Xorg.0.log:

    user@desktop test $ tail logs/Xorg.0.log
    (II) RADEON(0): [RESUME] Attempting to re-init Radeon hardware.
    (II) RADEON(0): [agp] Mode 0x1f000201 [AGP 0x8086/0x3340; Card 0x1002/0x4c66]
    (II) Mouse1: ps2EnableDataReporting: succeeded
    SetClientVersion: 0 8
    SetGrabKeysState - disabled
    SetGrabKeysState - enabled
    (II) 3rd Button detected: disabling emulate3Button
    SetClientVersion: 0 8
    SetGrabKeysState - disabled
    SetGrabKeysState - enabled

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

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

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

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

  1. Скопировать файл журнала rpmpkgs

  2. Среди найденных системных журналов посмотреть файл журнала пакетного менеджера rpm с помощью команды less test/log/rpmpkgs :

    user@desktop ~ $ less test/log/rpmpkgs

    Выйти из less можно нажатием клавиши q.

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

    user@desktop ~ $ grep "^(WW)" test/log/XFree86.0.log
    (WW) The directory "/usr/share/fonts/freefonts/" does not exist.
    (WW) The directory "/usr/share/fonts/unifont/" does not exist.
    (WW) The directory "/usr/share/fonts/artwiz/" does not exist.
    ...
  4. Получить все строки, содержащие следующий шаблон: последовательность из 1 или более цифры или буквы, затем символ собаки, затем еще одна последовательность 1 или более цифры или буквы или точки, затем символ точки, затем от двух до четырёх букв (имя домена первого уровня). Также служебный вывод ошибок удаляется (перенаправляется в нулевое устройство). Для этого ввести команду grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:

    user@desktop ~ $ grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null
    /etc/devfsd.conf:# Richard Gooch  <rgooch@atnf.csiro.au>                3-JUL-2000
    /etc/inittab:# Author:  Miquel van Smoorenburg, <miquels@cistron.nl>
    /etc/inittab:# Modified by:  Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
    ...

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

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

    user@desktop ~ $ grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null
                          # Richard Gooch  <rgooch@atnf.csiro.au>                3-JUL-2000
                          # Author:  Miquel van Smoorenburg, <miquels@cistron.nl>
                          # Modified by:  Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
                          ...
  6. Для вывода только найденной подстроки используется ключ -o. Ввести команду grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null:

    user@desktop ~ $ grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null
    rgooch@atnf.csiro.au
    miquels@cistron.nl
    volkerdi@ftp.cdrom.com
    ...
  7. Получить все файлы директории /etc/ с помощью команды find /etc -type f 2>/dev/null, игнорируя ошибки:

    user@desktop ~ $ find /etc -type f 2>/dev/null
    /etc/X11/xorg.conf.example
    /etc/X11/Sessions/kde-3.4
    /etc/X11/Sessions/Xsession
    /etc/X11/chooser.sh
    ...
  8. Для каждого из найденных файлов произвести поиск подстроки «nameserver». Для этого ввести команду find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null:

    user@desktop ~ $ find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null
    # merge the new nameservers with the other options from the old ...
    grep --invert-match '^nameserver[[:space:]]' $REALRESOLVCONF
    nameserver 10.22.10.20
    ...
  9. Для большего удобства добавить вывод имени файла (ключ -H) и номера строки (ключ -n), на которой было найдено совпадение, с помощью команды find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null:

    user@desktop ~ $ find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null
    /etc/ppp/ip-up:24:              # merge the new nameservers with the other optio...
    /etc/ppp/ip-up:26:                      grep --invert-match '^nameserver[[:space...
    /etc/ppp/resolv.conf:1:nameserver 10.22.10.20
    ...

    Таким образом, команда 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.

Контрольные вопросы

  1. Какие утилиты для архивирования существуют в Linux?

  2. Какие основные различия между файловыми системами Ext2, Ext3 и Ext4?

  3. Как просмотреть информацию о файловой системе, включая индексные дескрипторы, блоки и размер блока?

  4. Как проверить, какие файловые системы уже смонтированы в системе Linux?

  5. Какую команду следует использовать для вывода 25 последних строк файла?

cat
cd
cp
cut
echo
find
grep
head
ln
ls
mkdir
mv
paste
pwd
sort
tail
tar
touch
uniq
wc