Опубликован: 18.04.2021 | Доступ: свободный | Студентов: 899 / 424 | Длительность: 04:36:00
Лекция 2:

Linux

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Linux: использование командной строки

Большинство проектов построено на Linux. Какими бы инструментами вы не пользовались, в какие бы кластеры не деплоилось ваши приложения, всё равно в основе этого с высокой долей вероятности будет лежать Linux.

У Linux очень хорошая документация, к которой всегда можно обратиться в случае возникновения вопросов.

Давайте начнём с основ - то есть с работы в консоли.

Работа в консоли

Как уже упоминалось, в Linux очень хорошая документация. Используйте команду man или ключ --help/-h. Это позволит вам понять как пользоваться любой другой командой.

Навигация

Файловая система Linux имеет иерархическую или древовидную структуру. Имеется корневая точка монтирования и от неё идёт вся структура файловой системы. Здесь нет дисковых разделов, таких как в Windows.

Для навигации по файловой системе можно пользоваться одной единственной командной - cd, которая расшифровывается как change directory.

cd принимает аргументом путь, куда вы хотите перейти. Пути разделяются на относительный и абсолютный. Относительный - относительно вашей текущей директории где вы находитесь. Абсолютный - это полный путь, начиная с корневой директории.

ls - позволяет посмотреть содержимое директории или атрибуты файла. Принимает множество аргументов. Основная, на мой взгляд, вариация команды это ls -lha, где

  • l - long, то есть показывается полный вывод, включая атрибуты файлов, права доступа, размер и дату
  • a - all, включает в вывод скрытые файлы
  • h - human-readable, переводит байтовые значения размеров файлов в форматы с приставками

Остальные базовые командам для работы в терминале:

  • pwd - print work directory. Если по какой-то причине вы не помните полный путь, где сейчас находитесь - используйте эту команду. Также её часто можно использовать в скриптах для составления полного пути.
  • mkdir - make directory. Создание папки, с полным либо с относительным путём, можно создать всю иерархию сразу, но нужно проверять ключи.
  • rm - remove. Удаление файлов, имеет множество ключей, требует особой осторожности.
  • touch - утилита создана для изменения даты создания файла, однако в подавляющем большинстве просто используется для создания пустых файлов.
  • find - поиск по файловой системе или самим файлам.
Переменные окружения

Переменные окружения - это набор пар ключ-значение, которые доступны другим процессам.

Для получения списка переменных окружения можно использовать команду env, а для более удобного просмотра - перенаправить её вывод в команду more или less через пайп env | less. Про пайпы поговорим немного позже.

Для получения значения из консоли можно сделать обращение через $VARIABLE. К примеру для вывода значения в консоль echo $VARIABLE.

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

VARIABLE=VALUE или команду export VARIABLE=VALUE. Команда export обеспечивает то, что все дочерние процессы от вашей командной строки также будут наследовать значение данной переменной.

'[root@li2155-195 ~]# TEST_VAR=test_value 
[root@li2155-195 ~]# echo $TEST_VAR test_value 
[root@li2155-195 ~]# bash 
[root@li2155-195 ~]# echo $TEST_VAR
[root@li2155-195 ~]# exit
[root@li2155-195 ~]# exp ort TEST_VAR 
[root@li2155-195 ~]# bash 
[root@li2155-195 ~]# echo $TEST_VAR 
test_value'

Для того чтобы убрать переменную можно присвоить ей нулевое значение или использовать команду unset.

[root@li2155-195 ~]# unset TEST_VAR 
[root@li2155-195 ~]# echo $TEST_VAR
Терминалы и оболочки консоли

Существует два вида терминалов в Linux: tty и pty:

  • TTY - tele-type-terminal
  • PTY - pseudo-type-terminal

Понятие этих терминалов является наследием первых tele-type терминалов, которые использовались для ввода/вывода и работы с первыми компьютерами. По сути это line-by-line ввод и вывод.

В самом Linux tty - это непосредственно ваши клавиатура и монитор, то есть физическое воплощение терминала. В то время как pty - это программная реализация терминала, необходимая для некоторых программ. Например, для удалённого подключения к машине через ssh.

Для примера можно посмотреть переменную окружения через ssh подключения которая указывает наш текущий терминал echo $SSH_TTY.

Сравнительно полезный трюк, можно перенаправлять вывод из одного псевдо-терминала в другой. Давайте посмотрим это на практике.

Две консоли, вывести в двух номера псевдо-терминалов: echo $SSH_TTY. Далее тестовая команда вроде

echo 'hello' > /dev/pts/1.

Теперь давайте рассмотрим, что такое оболочки терминала и какие существуют.

Оболочка терминала, это интерпретатор команд, который передаёт ваши команды в API ядра Linux. Эти оболочки бывают разными, и отличаются своим функционалом. Базово всегда присутствует интерпретатор sh, функционал которого не беден, но неприятен в управлении. Далее идёт самый популярный интерпретатор, который включен практически в любой Linux дистрибутив - bash, расшифровывается как bourne again shell. Включает в себя автодополнение, профили, и множество других полезных функций. Далее идут различные интерпретаторы вроде zsh, который лично я бы рекомендовал,а также fish, ksh и так далее. Все они отличаются функционалом и расширяемыми плагинами.

Расположение бинарных файлов

Не важно, где в файловой системе находятся исполняемые файлы (не обязательно бинарные), так как любой файл можно передать интерпретатору для запуска в виде ./command. Однако, если вы не хотите использовать постоянно запуск с полным или относительным путём, вы можете использовать дополнение переменной окружения $PATH, которая содержит в себе пути, где система будет искать вводимые команды по умолчанию.

Давайте посмотрим на формат содержимого этой переменной:

[root@li2155-195 ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

Как мы видим, это набор путей которые разделены двоеточиями. Для того, чтобы добавить, можно использовать следующую комбинацию команд:

[root@li2155-195 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@li2155-195 ~]# export PATH=$PATH:/root/new_bin_folder
[root@li2155-195 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/new_bin_folder
Пакетные менеджеры

Пакетных менеджеров существует довольно много, но большинство серверных систем и Docker образов основаны на трёх семействах Debian, Centos(Redhat) и Alpine. Так что список того что нам нужно рассмотреть ограничивается менеджерами apt-get, yum и apk соответственно.

Вы можете установить пакетные менеджеры на другие системы, но это это не распространено.

Давайте рассмотрим принципы работы пакетных менеджеров.

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

Для систем семейства Debian характерно использование пакетного менеджера apt-get и apt. Разница между ними в том, что apt являются надстройкой написаной на Python и использующей apt-get и еще несколько утилит для менеджмента пакетов, cache и репозиториев в системе.

В системах семейства CentOS и Redhat используется пакетный менеджер yum который, начиная с восьмой версии CentOS, заменён на dnf. Связано это с тем, что yum имел недостатки в виде низкой производительности и высокого потребления памяти.

В Alpine Linux используется пакетный менеджер apk или alpine packet manager. Отличается низким уровнем кэширования и использованием строго необходимых зависимостей для установки пакетов. Важно знать о нем, так как на базе alpine linux зачастую собираются образы в силу малого размера базового образа с системой.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Рустам Тагаев
Рустам Тагаев

Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция.