Навигация в файловой системе #

Андрей Михайлович Васильев, 2022

Версии презентации

Структура команд Bash #

После ввода команды в эмулятора терминала и нажатия клавиши Enter строка передаётся в командный интерпретатор

Общая структура простого запроса интерпретатору

команда --аргумент1 аргумент2 аргумент3

Команда определяет действие, которое вы хотите выполнить, а аргументы уточняют поведение

  1. Команда cd меняет рабочий каталог, её необязательный аргумент говорит куда надо его изменить
  2. Команда touch создаёт файлы, аргументы указывают какие файлы надо создать и в каком состоянии

Аргументы, параметры и ключи #

  • На первом месте в выражении, которое передаётся интерпретатору, находится команда для исполнения
  • Все остальные элементы называются аргументами или параметрами
  • Аргументы делятся на 2 группы: позиционные аргументы и ключи
    • Ключи обычно не являются обязательными для включения
    • Ключи модифицируют поведение приложения
    • Смысл ключа зависит от его названия и его значения
    • Позиционные аргументы зачастую являются обязательными
    • Смысл позиционного аргумента заключается в своём значении, например пути к файлу
  • Порядок аргументов зачастую важен, следует уделять этому внимание

Короткие и длинные ключи #

Короткий, однобуквенный ключ: -l -a

  • Состоит из одного символа
  • Перед символом ставится один дефис
  • Обычно служит для включения или выключения одного аспекта поведения приложения
  • Короткие ключи можно комбинировать: ls -l -a, ls -al

Длинный ключ: --size --width=100

  • Состоит из одного слова
  • Перед словом стоит двойной дефис
  • Может служить переключателем, как и короткий ключ
  • Обычно человек может воспринять без чтения документации
  • Для указания значения такому ключу необходимо его передать с помощью символа =

Некоторые ключи имеют как короткую, так и длинную форму

Разные типы команд #

На месте команды могут располагаться следующие элементы:

  1. Встроенные команды интерпретатора (builtin)
  2. Функции интерпретатора (function)
  3. Псевдонимы интерпретатора (alias)
  4. Исполняемый файл (file)

Если команда сформулирована корректно, тогда она будет выполнена вне зависимости от её типа

Определение типа команд #

В BASH для определения типа команд можно воспользоваться встроенной командой type

Типичный пример использования type:

$ type cd
cd — это встроенная команда bash
$ type mkdir
mkdir является /usr/bin/mkdir

Встроенные команды интерпретатора builtin #

Данные команды направлены для управления состоянием интерпретатора, а не на прямое взаимодействие с внешним окружением

Перечислим знакомые нам встроенные команды:

  • cd — изменение рабочего каталога интерпретатора
  • exit — завершение работы интерпретатора
  • type — определение типа команды

Получение помощи по встроенной команде #

Для получения информации о функционировании встроенной команды используется команда help:

$ help cd

Разбор описания помощи для встроенных команд #

$ help cd
cd: cd [-L|[-P [-e]] [-@]] [каталог]
    Change the shell working directory.

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

Аргументы описывают детали действия, которое мы хотим выполнить над приложением

  • [-@] указывает, что аргумент -@ является опциональным: его можно указывать, а можно и не указывать
  • | указывает на то, что есть 2 взаимоисключающих варианта

Порядок аргументов может быть важен! Нельзя указать каталог до других аргументов

У команды cd нет обязательных аргументов

Разбор описания помощи. Продолжение #

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

Options:
 -L	force symbolic links to be followed: resolve symbolic
    links in DIR after processing instances of `..'
 -P	use the physical directory structure without following
    symbolic links: resolve symbolic links in DIR before
    processing instances of `..'
 -e	if the -P option is supplied, and the current working
    directory cannot be determined successfully, exit with
    a non-zero status

Получение помощи по приложениям #

Хорошие консольные приложения предоставляют встроенную помощь по использованию, которую можно посмотреть с помощью аргумента --help

$ mkdir --help
Использование: mkdir [КЛЮЧ]… КАТАЛОГ…
Создает КАТАЛОГ(и), если он ещё не существует.

Аргументы, обязательные для длинных ключей, обязательны
и для коротких.
  -m, --mode=РЕЖИМ   установить права доступа к файлу
                     (как в chmod), а не a=rwx - umask
  -p, --parents      не выдавать ошибку, если существует,
                     создавать родительские каталоги,
                     если необходимо
  -v, --verbose      печатать сообщение о каждом созданном
                     каталоге

Не все приложения поддерживают данный аргумент

Получение информации из руководства #

Много приложений предоставляют информацию о своём использовании в формате руководства в системе man

Для получения информации по программе program

man program

Если руководство будет найдено, то оно будет отображено с помощью приложения для просмотра текстовых документов less

Интерактивное приложение less #

Приложение less является интерактивным просмотрщиком текстовых документов

less data.txt

В отличие от предыдущих оно не завершает свою работу сразу после запуска, а предоставляет интерактивный интерфейс

Поддерживаемые клавиши:

  • Page UP, b подняться на страницу вверх
  • Page Down, space, d опуститься на страницу вниз
  • Стрелка ввех подняться на одну строку
  • Стрелка вниз опуститься на одну строку
  • G перейти к концу текстового файла
  • 1G или g перейти к началу файла
  • /СТРОКА начать поиск вниз до следующего вхождения строки СТРОКА
  • n повторить поиск и переход
  • h показать поиск
  • q завершить работу less

Разбор структуры man-страниц #

$ man cp
CP(1)                                       User Commands
NAME
       cp - copy files and directories
SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to
       DIRECTORY.
       -a, --archive
              same as -dR --preserve=all

Разделы man-руководств #

  1. Исполняемые программы или команды оболочки (shell)
  2. Системные вызовы (функции, предоставляемые ядром)
  3. Библиотечные вызовы (функции, предоставляемые программными библиотеками)
  4. Специальные файлы (обычно находящиеся в каталоге /dev)
  5. Форматы файлов и соглашения, например о /etc/passwd
  6. Игры
  7. Разное (включает пакеты макросов и соглашения), например man(7), groff(7)
  8. Команды администрирования системы (обычно, запускаемые только суперпользователем)
  9. Процедуры ядра [нестандартный раздел]

Просмотр руководства из нужного раздела #

man man
СИНТАКСИС
       man [параметры man] [[раздел] страница ...] ...

Просмотр информации о приложении passwd

$ man 1 passwd
passwd(1)                             Пользовательские команды
НАЗВАНИЕ
       passwd - изменяет пароль пользователя

Просмотр информации о файле passwd

$ man 5 passwd
passwd(5)                                  Форматы файлов
НАЗВАНИЕ
       passwd - файл паролей

Поиск информации по man-страницам #

Существует множество страниц с разными названиями, которые могут не совпадать с названием приложения

Для поиска руководств можно воспользоваться:

  • приложением apropos: apropos passwd
  • приложением man: man -k passwd
chpasswd (8)         - обновляет пароли в пакетном режиме
gpasswd (1)          - administer /etc/group and /etc/gshadow
passwd (1)           - изменяет пароль пользователя

Руководства в файловой системе #

Множество приложений помимо установки могут поставлять документацию в любом удобном для них формате. Обычно документация располагается в каталоге /usr/share/doc/, в подкаталоге с именем приложения.

Для простых приложений там может располагаться текстовый файл README, который можно посмотреть с помощью less

Некоторые файлы могут иметь расширение .gz, что обозначает что они заархивированы. less тоже может их открыть и просмотреть, если они текстовые

Работа с псевдонимами alias #

При долгой работе с командным интерфейсом иногда хочется выполнять ряд действий быстрее. Для решения этой задачи можно ввести псевдоним команды

Для управления псевдонимами используется команда alias

$ type alias
alias — это встроенная команда bash

Для отображения списка псевдонимов вызовите команду без аргументов

Для определения псевдонимов надо воспользоваться

alias: alias [-p] [имя[=значение] ... ]

    Если не указать аргументы, alias выводит список псевдонимов
    в виде «alias имя=значение» на стандартный вывод.

Определение и использование псевдонимов #

Например нам необходимо часто просматривать права доступа к файлам и вызывать ls -l. Мы хотим сэкономить время на набор команды, поэтому добавляем псевдоним ll:

$ alias ll='ls -l'
$ alias
alias ll='ls -l'
alias ls='ls --color=auto'
$ ll
итого 20
drwx------  3 root   root   60 сен 12 07:41 alsa
drwxr-xr-x  2 avahi  avahi  80 сен 12 07:41 avahi-daemon
...

Время жизни псевдонима #

Определение псевдонима — действие по настройке интерпретатора Bash, как и изменение текущего рабочего каталога

При завершении сессии, при старте новой сессии состояние сбрасывается на начальное и все команды, которые были определены с помощью alias сбросятся

Чтобы эти псевдонимы были доступны всегда, их надо описать внутри конфигурационного файла bash, который считывается при каждом старте интерпретатора:

~/.bashrc

Удаление псевдонима #

Для удаления псевдонима используется команда unalias

Где Bash ищет исполняемые файлы #

Переменная окружения PATH определяет список директорий, в котором Bash ищет исполняемые файлы, которые мы можем вызвать

Для просмотра текущего значения переменной PATH можно воспользоваться

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games

Пути в списке разделены двоеточием

Перекрытие одних исполняемых файлов другими #

Если в каталогах /usr/bin и /bin есть исполняемые файлы с одинаковыми именами, то будет запущен файл из /usr/bin, так как в списке он идёт раньше /bin

Определение пути к исполняемому файлу #

Для определения абсолютного пути к исполняемому файлу используйте which

$ man which
NAME
       which - locate a command
SYNOPSIS
       which [-a] filename ...

Троеточие обозначает, что команде можно передать несколько команд одновременно

$ which mkdir which
/usr/bin/mkdir
/usr/bin/which