Основы взаимодействия с ОС

Методические указания к лабораторной работе по курсу «инфокоммуникационные системы и сети»

В рамках данной лабораторной работы предлагается получить опыт работы с широким классом «команднострочных» программ — на примере включенных в такие системы, как Debian GNU/Linux и FreeBSD. Основным стандартом в данной работе является IEEE Std 1003.1-2017 (POSIX.1-2017.)

Номинальный вклад этой работы в оценку — 30 баллов.

Стандартный ввод-вывод

  1. Выполните нижеприведенные команды-источники.

    • alias
    • apg
    • arch
    • ascii
    • atq
    • cal
    • calendar
    • date
    • ddate
    • df
    • dir
    • du
    • echo
    • eval
    • export
    • faillog
    • false
    • fc-cat
    • fc-list
    • filan
    • find
    • findmnt
    • free
    • from
    • groups
    • help
    • history
    • hostid
    • hostname
    • id
    • infocmp
    • ip link
    • ip address
    • ip addrlabel
    • ip route
    • ip rule
    • ip neigh
    • ip ntable
    • ip tunnel
    • ip tuntap
    • ip maddress
    • ip mroute
    • ip mrule
    • ip netns
    • ip tcp_metrics
    • ip token
    • ip netconf
    • ip vrf
    • ip sr
    • ipcs
    • jobs
    • last
    • lastb
    • lastlog
    • locale
    • logname
    • ls
    • lsattr
    • lsblk
    • lscpu
    • lsipc
    • lslocks
    • lslogins
    • lsmem
    • lsns
    • lsof
    • manpath
    • mcd
    • mcheck
    • mcookie
    • mdir
    • mesg
    • mlabel
    • mount
    • mtoolstest
    • ncal
    • netstat
    • nproc
    • panoinfo
    • pg_isready
    • pg_lsclusters
    • pinky
    • printenv
    • prlimit
    • procan
    • ps
    • pstree
    • pwd
    • readonly
    • resize
    • revpath
    • rpcinfo
    • set
    • shopt
    • showrgb
    • slabtop
    • sselp
    • stty
    • sync
    • time
    • times
    • toe
    • trap
    • tree
    • true
    • tty
    • type
    • typeset
    • ulimit
    • umask
    • uname
    • uptime
    • users
    • uuidgen
    • validateconf
    • vdir
    • vmstat
    • w
    • which
    • who
    • whoami
    • wmname
    • xdpyinfo
    • xdriinfo
    • xfsinfo
    • xgamma
    • xhost
    • xlsatoms
    • xlsclients
    • xlsfonts
    • xrandr
    • xrefresh
    • xvinfo
    1. (1 балл) Сверившись, при необходимости, с документацией, объясните вывод каких-либо трех успешно завершившихся из команд выше. (Обратите внимание, что не все команды могут быть доступны на конкретной системе, или иметь смысл в конкретном контексте.)

    2. (1 балл) Передавая выбранным командам аргументы командной строки, добейтесь предсказуемого изменения их вывода.

  2. Выполните нижеприведенные команды-фильтры. (Обратите внимание, что ввод с клавиатуры по-умолчанию завершается вводом C-d; cf., e. g., (coreutils)stty invocation.)

    • base32
    • base64
    • cat
    • cksum
    • col
    • colcrt
    • colrm
    • column
    • hexdump
    • nl
    • od
    • rev
    • sha224sum
    • sha256sum
    • sha384sum
    • sha512sum
    • shuf
    • sort
    • tac
    • wc
    1. (1 балл) Сверившись, при необходимости, с документацией, опишите преобразования, выполняемые какими-либо тремя из команд выше.

    2. (2 балла) Сформируйте из команд-источников и команд-фильтров три нетривиальных конвейера (вида: источник | фильтр) и опишите их работу. При необходимости используйте аргументы командной строки.

  3. (2 балла) Ознакомьтесь с документацией на программы постраничного просмотра less, more и most. Сформируйте два конвейера вида источник | просмотрщик и два конвейера вида источник | фильтр | просмотрщик. Добавьте к команде просмотрщика какой-либо из найденных в документации аргументов («ключей») командной строки. Объясните результирующие изменения в поведении программы — или же отсутствие таковых.

Локаль

Изучите вывод команды locale.

  1. (1 балл) Установив (export) переменную окружения LC_MESSAGES, LC_NUMERIC или LC_TIME в некоторое новое (осмысленное) значение удостоверьтесь, что поведение двух команд-источников изменилось соответственно новому значению переменной.

    Некоторое представление о допустимых значениях может дать статья List of ISO 639-1 codes англоязычной Википедии и, в случае GNU/Linux, вывод команды ls -- /usr/lib/locale.

    Обратите внимание, что значение переменной LC_ALL имеет преимущество перед всеми прочими переменными локали. При наличии переменной LC_ALL в окружении ее имеет смысл удалить (export -n, или же unset.)

  2. (1 балл) Подавите локализацию установив LC_ALL=C. Проверьте, что какая-либо из прежде локализованных команд-источников формирует вывод строго в кодировке ASCII. Удалив переменную из окружения удостоверьтесь, что локализация восстановлена.

  3. (2 балла) Измените значение категории LC_CTYPE. Продемонстрируйте соответствующее изменение поведения какой-либо программы.

Файловая система

В зависимости от контекста, под файловой системой понимают или совокупность всех файловых объектов («файлов»), доступных конкретному процессу в конкретный момент времени; или же конкретный способ организации данных, позволяющий интерпретировать эти данные как набор файлов («тип файловой системы»; например: Btrfs, Ext2, FAT, SquashFS, etc.); или же реализацию этого способа на конкретном носителе. В данном разделе мы рассмотрим работу файловой системы в первом смысле.

  1. (1 балл) Выполните три командных строки вида источник > файл && фильтр < файл. Поясните, в чем отличие от использования конвейера.

  2. Стандарт IEEE Std 1003.1-2017 (POSIX.1-2017) предполагает иерархическую организацию файловой системы: особый тип файлов — директории содержат записи, связывающие имена файлов с собственно файлами — включая другие (вложенные) директории. Директорию, являющуюся корнем результирующего дерева, называют корневой.

    Изучите следующие команды.

    • cd
    • mkdir
    • pwd
    • rmdir
    • touch
    • tree
    1. (1 балл) Создайте пять новых директорий, сформировав из них дерево глубиной 3. Отобразите его командой tree.

    2. (1 балл) Создайте где-либо в дереве новые пустые обычные файлы с именами .utwo (например: touch -- директория/.utwo) и kones. Сравните вывод команд tree -F и tree -a для данного дерева.

  3. Еще одним типом файлов (помимо обычных и директорий) являются файлы устройств.

    Изучите функции следующих файлов директории /dev.

    • full
    • null
    • random
    • tty
    • urandom
    • zero
    1. (1 балл) Прочитайте 64 байта из каких-либо двух файлов выше. (Например, командой od -N64 или hexdump -n64.) Объясните результат.

    2. (1 балл) Попробуйте записать какую-либо строку в два файла выше. Объясните результат.

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

    Изучите следующие команды.

    • link
    • ln
    • mv
    • readlink
    • rm
    • stat
    • unlink
    1. (1 балл) Создайте новый обычный файл и, используя ln (или link), создайте ему еще одно имя в какой-либо другой директории. Удостоверьтесь в равноценности имен, сначала записав данные используя одно имя и считав используя другое; затем удалив первое имя, и считав данные вновь используя второе.

    2. (1 балл) Создайте символьную ссылку (ln -s) на некоторый существующий файл. Переименовав файл, покажите неравноценность исходного имени и ссылки.

    3. (1 балл) Сравните поведение ln и ln -s в отношении файла, находящегося на другой файловой системе (например, /etc/passwd или /proc/mounts.)

Доступ к документации

Документация в Debian GNU/Linux представлена гипертекстовыми материалами формата GNU Info, страницами руководства Unix («man» — в формате на основе roff), и сопроводительными материалами вне этих двух категорий — файлами истории изменений (changelog), HTML, PDF, etc. Кроме того, копию документации можно найти во Всемирной паутине — http://manpages.debian.org/, http://packages.debian.org/, http://gnu.org/, etc.

  1. (1 балл) Используя команду man, ознакомьтесь с содержанием man-страниц трех из использованных ранее команд.

  2. (1 балл) Подберите аргументы команды apropos так, чтобы результат запроса включал ровно 7 ÷ 11 страниц.

  3. (2 балла) Найдите описание двух из использованных ранее команд в системе GNU Info.

Регулярные выражения

  1. (1 балл) Составьте регулярное выражение для фильтра grep -E так, чтобы из конкретного потока данных (формируемого командой-источником, или же взятого из файла) было выделено не менее трех строк, и не менее трех строк было исключено.

  2. (1 балл) Измените вывод команды grep -E используя одну из следующих опций.

    • -v
    • -w
    • -x
    • -y
  3. (1 балл) В некоторых случаях бывает необходимо применить более одного регулярного выражения к потоку данных. Вместо использования двух или более команд grep последовательно в конвейере, можно воспользоваться поточным редактором sed, подобно (где !d оставляет соответствующие выражению строки, d — удаляет):

    $ sed -e '/RE1/!d' \
          -e '/RE2/d' 
    
    

    Сформируйте командную строку sed, содержащую три регулярных выражения.