Tarball linux что это

Обновлено: 04.07.2024

Не так давно Ростелеком объявил о создании центра компетенций по разработке программных решений под отечественные процессоры. Первая задача, которую нам пришлось решать как нам разграничить серверные ресурсы между сотрудниками занимающимися портированием и разработкой, организовать демонстрационные стенды, а, в перспективе, при росте нагрузок, ещё и управлять такими ресурсами как память и процессорное время.

Традиционно эту задачу решают средствами виртуализации, но, к сожалению, наши процессоры еще не поддерживают её. Альтернативным решением является контейнеризация. Изучив доступные варианты, которые можно реализовать на ОС Эльбрус, мы остановились на LXC как стабильном решении. В данной статье я хочу рассказать как пользоваться LXC в ОС Эльбрус.

Что мы еще рассматривали

chroot - имеет право на жизнь, но хочется аналог виртуальных машин, что даст нам больше гибкости.

docker - есть только в экспериментальной версии, возможно вернемся к нему, но хочется сосредоточиться на работе, а не выяснении почему все упало.

В ОС Эльбрус есть собранный Bochs , но он не умеет эмулировать e2k архитектуру разработка под которую является целевой для нас.

QEMU - в версии ядра 2.6 для ОС Эльбрус работал QEMU в режиме паравиртуализации, потом его убирали на доработку. В пакетах ОС Эльбрус он есть, но его работоспособность мной не проверялась (как проверим, обязательно расскажем).

Исходные данные

Итак, для начала у нас имеется:

сервер на базе процессоров Эльбрус-8С;

на сервер установлена ОС Эльбрус версии 6.0.1

в качестве rootfs бэкенда в LXC мы будем использовать каталог (опция lxc.rootfs.backend = dir ), это даст нам дополнительные возможности, о которых я расскажу ниже.

Подготовка и настройка сервера

Устанавливаем пакеты lxc и lxcfs командой:

Настраиваем сеть для контейнеров, для этого создаем файл /etc/default/lxc-net следующего содержания:

Для применения сетевых настроек ко вновь создаваемым контейнерам вносим изменения в файл /etc/lxc/default.conf :

Для создания сетевого моста нужно запустить службу lxc-net :

Ну и включаем необходимые службы для автоматического запуска при старте операционной системы:

Создание первого контейнера

С ОС Эльбрус идет шаблон osl для создания контейнера из образа установочного диска. Для создания нашего первого контейнера копируем на сервер iso -образ (в моем случае я его залил в /opt/iso ) и монтируем его:

Следует заметить, что монтировать нужно строго в /mnt/cdrom так как этот путь зашит в скрипте шаблона.

Создаем контейнер командой:

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

У нас есть работающий контейнер, который уже можно использовать как замену виртуальной машины. В нем потребуется еще произвести настройку и установку необходимых для работы пакетов.

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

Шаблон для создания контейнера из тарбола

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

За основу нового шаблона был взят аналогичный шаблон из SaltStack с небольшими доработками под специфику ОС Эльбрус.

Первая правка которую нам нужно внести касается задания hostname , в ОС Эльбрус имя хоста задается в файле /etc/sysconfig/network для этого в файл шаблона в конец функции deploy_tar() дописываем:

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

Задаем новое имя нашему файлу, в LXC имена шаблонов имеют вид lxc-<имя шаблона> , где часть <имя шаблона> потом используется в команде lxc-create , для файла выставляем права на запуск и копируем его в /usr/share/lxc/templates/ . Свой шаблон я назвал osl-img :

Создаем шаблонный образ rootfs

Прежде всего создаем контейнер по первой части нашей инструкции и проводим настройку контейнера.

Исправление ошибок при выполнении команды chkconfig

Данные действия можно произвести без запуска контейнера, напрямую отредактировав файлы. По умолчанию LXC создает новые контейнеры в /var/lib/lxc/<имя вашего контейнера> (далее пути будут указаны относительно этого пути).

Нам нужно отредактировать файл rootfs/etc/init.d/sysklogd вписав после строки

Удаляем файл rootfs/etc/rcsysinit.d/S05mknod и создаем файл rootfs/etc/init.d/mknod со следующим содержимым:

Настройка сети

В своих тарболах я использую назначение адресов по DHCP, если требуются другие настройки, то это уже конфигурируется для конкретных контейнеров. Настройки сетевых интерфейсов в ОС Эльбрус располагаются в /etc/sysconfig/network-devices/ifconfig.<имя интерфейса>/ipv4 , для интерфейса eth0 создаем файл rootfs/etc/sysconfig/network-devices/ifconfig.eth0/ipv4 следующего содержания:

Создаем служебного пользователя

Я являюсь противником работы от пользователя root , поэтому создадим служебного пользователя под которым можно будет производить дальнейшие настройки.

Стартуем наш контейнер lxc-start -n <имя контейнера> , и подключаемся к нему lxc-attach -n <имя контейнера> . Создаем пользователя admin :

Редактируем файл /etc/sudoers разрешая членам группы wheel выполнять команды через sudo . Для этого раскомментируем строку:

Не лишним будем установить новый пароль пользователю root :

Автозапуск служб

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

Упаковка rootfs в тарбол

Останавливаем контейнер командой lxc-stop -n <имя контейнера> . И выполняем команду:

Получившийся архив перемещаем в удобное для хранения место.

Как пользоваться?

Свой шаблон я назвал osl-img , поэтому в примерах он будет фигурировать с таким именем. Что-бы развернуть новый контейнер нам потребуется выполнить команду:

Если все сделали правильно, то мы получим новый контейнер, который даже работает.

Доступ в контейнеры по SSH

Подключаться к контейнеру через lxc-attach конечно хорошо, но не очень удобно, тем более некоторые IDE позволяют производить компиляцию на удаленном хосте через SSH, что было бы очень удобно при портировании и разработке под Эльбрус.

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

/.ssh/config следующие строки:

После этих настроек все соединения на хосты с адресами 192.168.103.1/24 (сеть которую мы настраивали ранее в файле /etc/default/lxc-net ) будут осуществляться через хостовую систему.

Второй вариант, выставить контейнер наружу сетевым интерфейсом. Такое возможно, если вместо veth мы будем использовать macvlan , для этого в конфигурацию контейнера ( /var/lib/lxc/<имя контейнера>/config ) нужно внести следующие изменения:

Если ваш контейнер был запущен, то перезапускаем его. Подключаемся к нему и настраиваем сетевой интерфейс. Пример файла ipv4 для статического адреса выглядит так:

Вместо заключения

В статье не затронуто много аспектов работы с LXC, я постарался сделать больше упор на специфику ОС Эльбрус. Как вы уже поняли, работа с LXC на Эльбрусе не отличается от таковой в других дистрибутивах Linux и на других архитектурах процессоров.

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

запустить альтернативные операционные системы в контейнерах (под Эльбрус есть как минимум еще Альт и Astra Linux)

создать контейнеры с GUI для случаев когда требуется посмотреть как это будет работать у пользователя

ну и мы уже начали работу по автоматизации, там тоже поле не паханое и очень интересное.

Есть несколько способов разархивировать файлы с помощью этой команды

Когда вы получаете сжатый архив в Linux, распаковать его так же просто. В Linux доступно множество переключателей, что означает, что у вас есть много способов извлечь файлы с помощью команды unzip в командной строке.

Распаковать отдельные ZIP-файлы

Основной синтаксис для распаковки файла:

Например, скажем, вы загрузили альбом с названием Угроза трезвости . Чтобы распаковать этот файл в текущую папку, вам нужно просто выполнить следующую команду:

Распаковать несколько файлов ZIP

Команда man позволяет распаковывать более одного файла за раз, используя следующий синтаксис:

Если вы заархивировали три файла альбомов Алисы Купер с именами Trash , Hey Stoopid и Dragontown по отдельности, вы можете попробовать разархивировать их. их:

Тем не менее, вы получите эту ошибку:

Предполагая, что эти три файла находятся в одной папке, лучше использовать следующую команду:

Будьте осторожны, хотя. Эта команда неразборчива и распаковывает каждый ZIP-файл в текущей папке.

Исключить некоторые ZIP-файлы

Если у вас есть ZIP-файл, и вы хотите извлечь все файлы, кроме одного, используйте переключатель -x .

Извлечь ZIP-файл в другой каталог

Если вы хотите поместить содержимое файла ZIP в каталог, отличный от текущего, используйте переключатель -d .

Например, чтобы распаковать файл Trash.zip в файл /home/music/Алиса Купер/Trash , вы должны использовать следующий синтаксис:

Как показать содержимое сжатого Zip-файла

Чтобы просмотреть содержимое сжатого файла, используйте переключатель -l .

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

Возвращенная информация включает в себя:

  • Длина в байтах
  • Дата создания
  • Время создано
  • название

Как проверить, является ли ZIP-файл действительным

Чтобы проверить, правильно ли структурирован ZIP-файл и можно ли его правильно использовать перед извлечением, используйте переключатель -t .

Например, чтобы проверить, является ли Trash.zip допустимым, вы можете выполнить следующее:

См. Подробную информацию в файле ZIP

Переключатель -v (подробный) может дать более подробную информацию.

Чтобы использовать этот переключатель с Trash.zip для просмотра дополнительной информации, мы набрали бы:

Вывод содержит следующую информацию:

  • Длина в байтах
  • метод
  • Размер
  • Процент сжатия
  • Дата и время создания
  • CRC
  • название

Распакуйте ZIP-файл без создания каталогов

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

Например, при извлечении filename1.zip , который имеет следующие три папки, будут извлечены те же самые папки:

  • Папка 1: filea.txt, fileb.txt, filec.txt
  • Папка 2: filed.txt, filee.txt
  • Папка 3: filef.txt

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

Распакуйте ZIP-файл без запроса перезаписи

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

Однако вы можете использовать переключатель -n , если хотите не перезаписывать существующие файлы. Каждый файл из архива ZIP, имя которого соответствует файлу в извлеченной папке, не будет перезаписывать что-либо при использовании этого параметра. Однако все остальное, имеющее уникальное имя, будет извлечено.

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

Извлечение защищенных паролем ZIP-файлов

Если вам нужно разархивировать файл, для доступа к которому требуется пароль, используйте переключатель -p , а затем пароль.

Например, чтобы разархивировать файл с именем cats.zip с паролем kittens123 , используйте следующее:

Разархивируйте файл, не отображая вывод

По умолчанию команда unzip перечисляет все, что она делает, включая отображение всех файлов в архиве по мере их извлечения командой. Вы можете подавить этот вывод, используя переключатель -q .

Это распаковывает имя файла без предоставления какого-либо вывода и возвращает вас к курсору, когда он закончил.

Ваша система управления пакетами определяет процесс установки

Основной дистрибутив Linux расширяется за счет использования пакетов, представленных в онлайн-каталогах. Различные дистрибутивы полагаются на архитектурные сборки, ориентированные на конкретные системы управления пакетами. Используемый вами менеджер пакетов определяет, как вы будете устанавливать или обновлять новые пакеты.

Что такое пакет?

Пакеты являются программными приложениями для Linux. Так же, как Apple App Store и Google Play Music предлагают курированные приложения для iOS и Android, а Microsoft Store поддерживает Windows 10, менеджер пакетов получает доступ к библиотеке программ, разработанных для работы с архитектурными стандартами вашего дистрибутива.

Что такое менеджер пакетов?

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

На рынке имеется более одного менеджера пакетов, и их пакеты не всегда легко совместимы. Кроме того, не все пакеты существуют в каталоге каждого менеджера пакетов.

Общие системы управления пакетами включают в себя:

  • dkpg : используется Debian и Ubuntu и поддерживается такими инструментами, как apt, aptitude и Synaptic Package Manager
  • Pacman : используется Arch Linux
  • Portage : используется Gentoo Linux
  • Snappy : относительно новый, автономный формат пакета, разработанный материнской компанией Ubuntu
  • Диспетчер пакетов RPM : разработан Red Hat и поддерживается такими инструментами, как YUM и zypper

Как мне установить или обновить пакеты?

Начинающим пользователям Linux следует использовать встроенный инструмент управления пакетами, включенный в ваш дистрибутив. Вы найдете это в оконной системе. Каждый инструмент настроен по-разному и предлагает различные параметры, но все они основаны на графике и требуют административного пароля для работы.

В инструменте «укажи и щелкни» вы можете искать новые пакеты, удалять существующие пакеты или находить обновления для установленных пакетов.

Ручное управление пакетами

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

Каждый менеджер пакетов поддерживает различные команды оболочки, но в целом для каждой из них требуется указать учетные данные корневого уровня (пароль root или пароль учетной записи пользователя, уполномоченного управлять пакетами) для изменения операционной системы.

Например, чтобы установить популярный текстовый редактор Nano, вы должны использовать следующие команды оболочки:

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

Материал, перевод которого мы публикуем сегодня, предназначен для тех, кто хочет освоить командную строку Linux. Умение эффективно пользоваться этим инструментом позволяет экономить немало времени. В частности, речь здесь пойдёт о командной оболочке Bash и о 21 полезной команде. Также мы поговорим о том, как пользоваться флагами команд и псевдонимами Bash, которые позволяют ускорить ввод длинных инструкций.


Термины

В ходе освоения работы в командной строке Linux вам может встретиться множество понятий, в которых полезно будет ориентироваться. Некоторые из них, вроде «Linux» и «Unix», или «командная оболочка» и «терминал», иногда путают. Поговорим об этих и о других важных терминах.

Unix — это популярная операционная система, которая была разработана Bell Labs в 1970-х. Её код был закрытым.

Linux — это самая популярная Unix-подобная операционная система. Она в наши дни используется на множестве устройств, в том числе — и на компьютерах.

Терминал (terminal), или эмулятор терминала — это программа, дающая доступ к операционной системе. Одновременно можно открывать несколько окон терминала.

Оболочка (shell) — это программа, которая позволяет отправлять операционной системе команды, написанные на особом языке.

Bash расшифровывается как Bourne Again SHell. Это — самый распространённый язык командной оболочки, используемый для взаимодействия с операционной системой. Кроме того, оболочка Bash по умолчанию используется в macOS.

Скрипт (script) — это небольшая программа, которая содержит последовательность команд командной оболочки. Скрипты записывают в файлы, использовать их можно многократно. При написании скриптов можно пользоваться переменными, условными конструкциями, циклами, функциями и другими возможностями.

Теперь, когда мы рассмотрели важные термины, хочу отметить, что здесь я буду пользоваться терминами «Bash», «оболочка» и «командная строка» как взаимозаменяемыми, равно как и понятиями «директория» (directory) и «папка» (folder).

Стандартные потоки, которыми мы будем здесь пользоваться — это стандартный ввод (standard input, stdin ), стандартный вывод (standard output, stdout ) и стандартный вывод ошибок (standard error, stderr ).

Если в примерах команд, которые будут приводиться ниже, вы встретите нечто вроде my_whatever — это означает, что данный фрагмент нужно заменить чем-то вашим. Например — именем файла.

Теперь, прежде чем приступать к разбору команд, которым посвящён этот материал, давайте взглянем на их список и на их краткие описания.

21 Bash-команда

▍Получение информации

  • man : выводит руководство пользователя (справку) по команде.
  • pwd : выводит сведения о рабочей директории.
  • ls : выводит содержимое директории.
  • ps : позволяет просматривать сведения о работающих процессах.

▍Манипуляции с файловой системой

  • cd : изменение рабочей директории.
  • touch : создание файла.
  • mkdir : создание директории.
  • cp : копирование файла.
  • mv : перемещение или удаление файла.
  • ln : создание ссылки.

▍Перенаправление ввода-вывода и конвейеры

  • < : перенаправление stdin .
  • > : перенаправление stdout .
  • | : перенаправление с помощью конвейера вывода одной команды на вход другой команды.

▍Чтение файлов

  • head : чтение начала файла.
  • tail : чтение конца файла.
  • cat : чтение файла и вывод его содержимого на экран или конкатенация файлов.

▍Удаление файлов, остановка процессов

  • rm : удаление файла.
  • kill : остановка процесса.

▍Поиск

  • grep : поиск информации.
  • ag : продвинутая команда для поиска.

▍Архивация

Подробности о командах

Для начала давайте разберёмся с командами, результаты работы которых выдаются в форме stdout . Обычно эти результаты появляются в окне терминала.

▍Получение информации

man command_name : вывод руководства по команде, то есть — справочной информации.

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

ls : вывод содержимого директории. Эта команда тоже используется весьма часто.

ls -a : вывод скрытых файлов. Здесь применён флаг -a команды ls . Использование флагов помогает настраивать поведение команд.

ls -l : вывод подробной информации о файлах.

Обратите внимание на то, что флаги можно комбинировать. Например — так: ls -al .

ps : просмотр выполняющихся процессов.

ps -e : вывод сведений обо всех выполняющихся процессах, а не только о тех, которые связаны с текущей оболочкой пользователя. Данную команду часто используют именно в таком виде.

▍Манипуляции с файловой системой

cd my_directory : изменение рабочей директории на my_directory . Для того чтобы перейти на один уровень выше в дереве каталогов используйте в качестве my_directory относительный путь ../ .


touch my_file : создание файла my_file по заданному пути.

mkdir my_directory : создание папки my_directory по заданному пути.

mv my_file target_directory : перемещение файла my_file в папку target_directory . При указании целевой директории нужно использовать абсолютный путь к ней (а не конструкцию вроде ../ ).

Команду mv , кроме того, можно использовать для переименования файлов или папок. Например, выглядеть это может так:

mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory : создание копии файла my_source_file и помещение её в папку target_directory .

ln -s my_source_file my_target_file : создание символической ссылки my_target_file на файл my_source_file . Если изменить ссылку, то изменится и исходный файл.

Если файл my_source_file будет удалён, то my_target_file останется. Флаг -s команды ln позволяет создавать ссылки и для директорий.

Теперь поговорим о перенаправлении ввода-вывода и конвейерах.

▍Перенаправление ввода-вывода и конвейеры

my_command < my_file : заменяет дескриптор файла стандартного ввода ( stdin ) на файл my_file . Это может оказаться полезным в том случае, если команда ожидает ввода неких данных с клавиатуры, а эти данные заранее сохранены в файле.

my_command > my_file : перенаправляет результаты работы команды, то есть то, что обычно попадает в stdout и выводится на экран, в файл my_file . Если файл my_file не существует — он создаётся. Если файл существует — он перезаписывается.

Например, после выполнения команды ls > my_folder_contents.txt будет создан текстовый файл, содержащий список того, что находится в текущей рабочей директории.

Если вместо символа > воспользоваться конструкцией >> , то, при условии существования файла, в который перенаправляется вывод команды, этот файл перезаписан не будет. Данные будут добавлены в конец этого файла.

Теперь взглянем на конвейерную обработку данных.


То, что выводит одна команда, подаётся на вход другой команды. Это похоже на подключение одной трубы к другой

В Linux конвейерную обработку данных можно организовать с использованием практически любой правильно составленной команды. Часто говорят, что всё в Linux — это конвейер.

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


Конвейер из нескольких команд можно сравнить с трубопроводом

Обратите внимание на то, что когда команда, находящаяся слева от символа | , выводит что-то в stdout , то, что она вывела, немедленно становится доступным в виде stdin второй команде. То есть оказывается, что, используя конвейер, мы имеем дело с параллельным выполнением команд. Иногда это может привести к неожиданным результатам. Подробности об этом можно почитать здесь.

Теперь поговорим о чтении данных из файлов и о выводе их на экран.

▍Чтение файлов

head my_file : считывает строки из начала файла и выводит их на экран. Читать можно не только содержимое файлов, но и то, что команды выводят в stdin , используя эту команду в качестве элемента конвейера.

tail my_file : считывает строки из конца файла. Эту команду тоже можно использовать в конвейере.


Head (голова) находится спереди, а tail (хвост) — сзади

Если вы работаете с данными, используя библиотеку pandas, тогда команды head и tail должны быть вам знакомы. Если это не так — взгляните на вышеприведённый рисунок, и вы без труда их запомните.

Рассмотрим другие способы чтения файлов, поговорим о команде cat .

Команда cat либо выводит содержимое файла на экран, либо конкатенирует несколько файлов. Это зависит от того, сколько файлов передано этой команде при вызове.


Команда cat

cat my_one_file.txt : когда этой команде передают один файл — она выводит его в stdout .

Если же передать ей два файла или большее количество файлов, то она ведёт себя по-другому.

cat my_file1.txt my_file2.txt : получив на вход несколько файлов эта команда конкатенирует их содержимое и выведет то, что получилось в stdout .

Если результат конкатенации файлов нужно сохранить в виде нового файла, можно воспользоваться оператором > :


Теперь поговорим о том, как удалять файлы и останавливать процессы.

▍Удаление файлов, остановка процессов

rm my_file : удаляет файл my_file .

rm -r my_folder : удаляет папку my_folder и все содержащиеся в ней файлы и папки. Флаг -r указывает на то, что команда будет работать в рекурсивном режиме.

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

kill 012345 : останавливает указанный выполняющийся процесс, давая ему время на корректное завершение работы.

kill -9 012345 : принудительно завершает указанный запущенный процесс. Флаг вида -s SIGKILL означает то же самое, что и флаг -9 .

▍Поиск

Для поиска данных можно использовать разные команды. В частности — grep , ag и ack . Начнём наше знакомство с этими командами с grep . Это — проверенная временем, надёжная команда, которая, правда, медленнее других и не так, как они, удобна в использовании.


Команда grep

grep my_regex my_file : выполняет поиск my_regex в my_file . При обнаружении совпадений возвращается, для каждого из них, вся строка. По умолчанию my_regex воспринимается как регулярное выражение.

grep -i my_regex my_file : поиск выполняется без учёта регистра символов.

grep -v my_regex my_file : возвращает все строки, в которых не содержится my_regex . Флаг -v означает инверсию, он напоминает оператор NOT , имеющийся во многих языках программирования.

grep -c my_regex my_file : возвращает сведения о количестве совпадений с искомым шаблоном, найденных в файле.

grep -R my_regex my_folder : выполняет рекурсивный поиск во всех файлах, находящихся в заданной папке и в папках, вложенных в неё.

Теперь поговорим о команде ag . Она появилась позже grep , она быстрее, работать с ней удобнее.


ag my_regex my_file : возвращает сведения о номерах строк, и сами строки, в которых найдены совпадения с my_regex .

ag -i my_regex my_file : поиск выполняется без учёта регистра символов.

Команда ag автоматически обрабатывает файл .gitignore и исключает из вывода то, что найдено в папках или файлах, перечисленных в этом файле. Это очень удобно.

ag my_regex my_file -- skip-vcs-ignores : содержимое файлов систем автоматического контроля версий (наподобие .gitignore ) при поиске не учитывается.

Кроме того, для того чтобы указать команде ag на то, какие пути к файлам нужно исключить из поиска, можно создать файл .agignore .

В начале этого раздела мы упомянули о команде ack . Команды ack и ag очень похожи, можно сказать, что они взаимозаменяемы на 99%. Однако команда ag работает быстрее, поэтому я описал именно её.

Теперь поговорим о работе с архивами.

▍Архивация

tar my_source_directory : объединяет файлы из папки my_source_directory в один файл tarball. Такие файлы удобно использовать для того, чтобы передавать кому-нибудь большие наборы файлов.


Команда tar

Tarball-файлы, создаваемые этой командой, представляют собой файлы с расширением .tar (Tape ARchive). То, что в названии команды и в расширении имён файлов, создаваемых ей, скрыто слово «tape» (лента), говорит о том, как давно существует эта команда.

tar -cf my_file.tar my_source_directory : создаёт tarball-файл с именем my_file.tar с содержимым папки my_source_directory . Флаг -c расшифровывается как «create» (создание), а флаг -f как «file» (файл).

Для извлечения файлов, находящихся в .tar -файле, используется команда tar c флагами -x («extract», извлечение) и -f («file», файл).

tar -xf my_file.tar : извлекает файлы из my_file.tar в текущую рабочую директорию.

Теперь поговорим о том, как сжимать и распаковывать .tar -файлы.

tar -cfz my_file.tar.gz my_source_directory : здесь, с использованием флага -z («zip», алгоритм сжатия) указано, что для сжатия файлов должен использоваться алгоритм gzip (GNU zip). Сжатие файлов позволяет экономить дисковое пространство при хранении таких файлов. Если же файлы планируется, например, передавать другим пользователям, это способствует более быстрой загрузке таких файлов.

Распаковать файл .tar.gz можно, добавив флаг -z к команде извлечения содержимого .tar -файлов, которую мы рассматривали выше. Выглядит это так:

tar -xfz my_file.tar.gz
Надо отметить, что у команды tar есть ещё множество полезных флагов.

Bash-псевдонимы

Bash-псевдонимы (их ещё называют алиасами или сокращениями) предназначены для создания сокращённых наименований команд или их последовательностей, использование которых вместо обычных команд ускоряет работу. Если у вас, предположим, имеется псевдоним bu , за которым скрывается команда python setup.py sdist bdist_wheel , то для вызова данной команды достаточно воспользоваться этим псевдонимом.

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


Если в вашей системе нет файла

/.bash_profile , то вы можете создать его самостоятельно, воспользовавшись командой touch . После создания псевдонима перезапустите терминал, после чего вы сможете этим псевдонимом пользоваться. В данном случае ввод двух символов заменяет ввод более чем трёх десятков символов команды, которая предназначена для сборки Python-пакетов.

/.bash_profile можно добавлять псевдонимы для любых часто используемых команд.

▍Итоги

В этом материале мы рассмотрели 21 популярную команду Bash и поговорили о создании псевдонимов для команд. Если вам эта тема интересна — вот цикл публикаций, посвящённый Bash. Здесь можно найти pdf-версию этих публикаций. Кроме того, если вы хотите освоить Bash, помните о том, что тут, как и при изучении любой другой программной системы, важна практика.

Читайте также: