Bash: использование команды tree для отображения структуры папок

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

Большинство современных операционных систем, за исключением WINDOWS, построены на базе UNIX. Среди них много дистрибутивов Linux, macOS, iOS, Android и др. Достаточно одного взгляда на схему развития операционных систем, основанных на UNIX, чтобы подчеркнуть важность UNIX, и именно по этой причине она стала широко использоваться на производстве. На самом деле, бэк-энд многих вычислительных систем, включая такие промышленные гиганты, как Facebook и Google, в значительной степени используют UNIX.

Shell

Shell — это интерфейс командной строки для запуска программ на компьютере. Пользователь набирает в строке запроса кучу команд, оболочка запускает программы для пользователя, а затем выводит результат. Команды могут быть либо введены непосредственно пользователем, либо прочитаны из файла, называемого shell-скриптом или shell-программой.

Bash: использование команды tree для отображения структуры папок

Shell. Какие бывают

UNIX-система обычно предлагает различные типы оболочек shell. Некоторые из них наиболее распространены:

Однако в этой статье мы ограничимся оболочкой Bash. Тем не менее, вам рекомендуется прочитать и попробовать другие оболочки, особенно zsh, так как уже в версии MacOS под названием Catalina zsh заменил оболочку bash. Так что будет хорошей идеей познакомиться с ним сейчас.

Terminal

Терминал — это программа, которая используется для взаимодействия с оболочкой. Это просто интерфейс к оболочке и к другим программам командной строки, которые запускаются внутри нее. Это похоже на то, как веб-браузер является интерфейсом для веб-сайтов. Вот как выглядит типичный терминал в Mac:

Bash: использование команды tree для отображения структуры папок

У Mac и Linux есть соответствующие версии терминала. Windows также имеет встроенную командную оболочку, но она основана на командной строке MS-DOS, а не на UNIX. Так что давайте посмотрим, как мы можем установить шелл и программу терминала в операционной системе Windows, которая работает так же, как и в системах Mac и Linux.

Установка терминала в WINDOWS

  • Подсистема Windows для Linux (WSL)

Это новая система совместимости с Linux в Windows 10. WSL позволяет разработчикам запускать GNU/Linux окружение — включая большинство инструментов командной строки, утилит и приложений — прямо под Windows, без изменений, без дополнительных виртуальных машин. Подробнее о его установке и функциях вы можете прочитать здесь.

  • Git Bash
Bash: использование команды tree для отображения структуры папок

Git Bash — это то, что мы будем использовать в этой статье. Скачайте Git на компьютер с Windows отсюда и установите его со всеми настройками по умолчанию. В конце концов, вы получите окно терминала, вроде того, что показано ниже.

Изучение терминала

Всякий раз, когда мы открываем окно терминала, мы видим наши последние учетные данные для входа и приглашение Shell. Строка shell появляется всякий раз, когда оболочка готова принять входные данные. Она может немного отличаться в зависимости от дистрибутива, но в основном она отображается как имяпользователя@имякомпьютера, за которым следует знак $.

Если вам не нужна вся эта информация, вы можете использовать PS1 для настройки командной строки.

Теперь терминал будет показывать только $ в строке. Однако это только временно и после перезапуска терминал вернется к своим первоначальным настройкам.

Bash: использование команды tree для отображения структуры папок

Приступим

Чтобы немного развлечься, давайте начнем с нескольких простых команд:

  • echo: выводит все, что вы набираете в командной строке шелла, аналогично Print на Python.
  • date: отображает текущие время и дату.
  • cal: отображает календарь на текущий месяц.
Bash: использование команды tree для отображения структуры папок
  • clear: очистит окно терминала, также можно использовать сочетание клавиш Ctrl-L.

Подсчитать количество файлов в папке Linux с помощью find

Чтобы посчитать количество всех файлов в определенной директории (например /home/captain) возможно использовать команду find и она посчитает количество файлов рекурсивно для всех вложенных папок:

Читайте также:  Использование арифметических операторов в сценариях Bash

find /home/captain -type f| wc -l

Дабы посчитать количество всех папок в определенной директории (например /home/captain) возможно использовать команду find и она посчитает количество папок рекурсивно для всех вложенных директория:

find /home/captain -type d| wc -l

Хочу отметить следующее, что утилита find трудится хорошо, но очень нагружает сервер, лучше использовать команду ls.

Управление дисковой системой

  • Проверьте геометрию диска, установленного на вашем компьютере с помощью fdisk -l. (изучите таблицу разделов вашего жесткого магнитного диска). /sbin/fdisk -l /dev/sda
  • На каком разделе вашего диска имеется область подкачки swap? В разделе sda5 (у вас может быть другой раздел)
  • Определите размер сектора жесткого диска. 512 байт (fdisk -l)
  • Изучите содержимое файла /etc/fstab, определите подходит ли какая-либо запись для монтирования CD-ROM? Если нет, то какая запись в /etc/fstab должна быть? cat /etc/fstab (если такой записи нет, нужно добавить: mount -t iso9660 -r /dev/cdrom /media/cdrom )
  • Выведите информацию об использовании дискового пространства на всех смонтированных блочных устройствах в системе. df -h
  • Получите информацию об использовании дискового пространства домашним каталогом du -sh ~ (s — без информации о подкаталогах)
  • Advanced bash

    [[ > [

    [ (команда «test») и [[ (новый тест) используются для вычисления выражений. [[ работает только в Bash, Zsh и Korn shell. Также он более мощный. [ доступен в POSIX shells.

    #POSIX [ «$variable» ] || echo ‘переменная не задана или пуста’ [ -f «$filename» ] || printf ‘Файла (обычного) нет: %s\n’ «$filename» if [[ ! -e $file ]]; then echo «Файла нет, лидо он не доступен: $file» fi if [[ $file0 -nt $file1 ]]; then printf ‘файл %s новее %s\n’ «$file0» «$file1» fi

    Короче говоря, в bash мы используем [[ ]] — он новее, быстрее и т.д. Если имеем какую-нибудь старую POSIX-совместимую Unix оболочку, то используем [ ]. По большей части синтаксис [[ ]] и [ ] схож.

    # Унарные операции [[ -d $file ]] # файл типа директория [[ -e $file ]] # файл любого типа (проверка на существование (exists)) [[ -f $file ]] # обычный файл [[ ! -f $file ]] # не (обычный файл). «!» — отрицание [[ -z $var ]] # истина, когда переменная пуста (zero) [[ -n $var ]] # ложь , когда переменная пуста (nonzero) [[ -r $file ]] # файл существует и доступен для чтения [[ -w $file ]] # файл существует и доступен для запись [[ -x $file ]] # догадайтесь сами # Сравнение строк (лексикографический порядок) [[ a < b ]] [[ dog > cat ]] [[ sh = sh ]] [[ bash != sh ]] # Сравнение чисел [[ 5 -lt 10 ]] # less than [[ 100 -gt 99 ]] # greater than [[ 5 -eq 05 ]] # equal [[ 50 -ne 05 ]] # not equal # Логические операции [[ -n $var && -f $var ]] # переменная определеня и есть файл, указанный в ней. [[ $(pwd) == $HOME || $(pwd) == ‘/’ ]] # мы в директории $HOME или в корне. # Сравнение с шаблоном [[ $(pwd) == $HOME/* ]] # мы в поддиректории домашней папки или в ней # Регулярные выражения [[ $(date) =~ ^пятница ]] && echo Сегодня пара по ОСям

    printf

    printf — везде!

    Его можно найти в bash, C, C++, python, perl, php, …

    По сути — форматированный вывод. Рассмотрим варианты шаблонов вывода:

    %c Символ %d Десятичное целое число со знаком %i Десятичное целое число со знаком %e Научный формат (строчная буква е) %Е Научный формат (прописная буква Е) %f Десятичное число с плавающей точкой %g В зависимости от того, какой формат короче, применяется либо %e, либо %f %G В зависимости от того, какой формат короче, применяется либо %E, либо %f %o Восьмеричное число без знака %s Строка символов %u Десятичное целое число без знака %x Шестнадцатеричное число без знака (строчные буквы) %X Шестнадцатеричное число без знака (прописные буквы) %% Знак %

    Хех, не всё так просто!

    • Например, спецификатор %05d заполнит нулями пустующие позиции поля вывода, если количество цифр в целом числе, подлежащем выводу, будет меньше пяти.
    • Например, форматный код % выведет на экран число, у которого количество цифр не превышает 10, четыре из которых размещаются после десятичной точки.
    • На­пример, спецификатор % выравнивает число с двумя знаками после точки по левому краю поля, состоящего из 10 позиций.
    Читайте также:  Топ-5 лучших программ для просмотра онлайн-ТВ на компьютере

    Немного примеров:

    printf «%s\n» «Hello world» # Вывести строку с переводом строки printf «%.2f рублей» 2,3333333 # «2,33 рублей» printf «\e[1;34m%.3d\e[0m\n» 42 # Вывести жирным синим цифры

    Не успели. Всё же 2 пары за одну… Успели бы без ответов на вопросы. Но это не наш путь!

    • awk
    • раскраска вывода
    • sed

    Основные команды

    Команда интерпретатора Bash man

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

    $ man cat

    Команда интерпретатора Bash cat

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

    Команда интерпретатора Bash echo

    Осуществляет вывод своих аргументов по стандартному каналу вывода.

    $ echo Hello World Hello World

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

    Команда интерпретатора Bash head

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

    $ head -50

    Команда интерпретатора Bash tail

    Работает аналогично head, однако читает строки с конца:

    Основные команды

    $ tail -50

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

    $ tail -f

    Команда интерпретатора Bash less

    Позволяет перемещаться куску текста либо переданному файлу в обоих направлениях.

    $ less $ ps aux | less

    Кстати, о символе | мы расскажем ниже в блоке про команду интерпретатора Bash history.

    Команды интерпретатора Bash true и false

    Первая всегда возвращает ноль в качестве выходного статуса для индикации успеха, вторая, соответственно, не ноль в качестве выходного статуса для индикации неудачи.

    $? — это переменная, содержащая выходной статус последней запущенной команды. Выходной статус — код возврата программы. В нашем случае 0 будет означать успешное выполнение программы, а любое значение, которое больше нуля, будет отражать факт возникновения ошибок в процессе выполнения. Кстати, именно по этой причине в интерпретаторе Bash истиной (true) считается 0, а ложью (false) — всё, что не ноль.

    $ true $ echo $? $ false $ echo $? 1

    Команда интерпретатора Bash grep

    Служит для поиска переданной строки в указанном файле:

    $ cat user:student password:123 user:teacher password:321 $ grep 'student` user:student password:123

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

    Команда интерпретатора Bash sed

    Потоковый редактор, который преобразует входные текстовые данные. Используется для замены выражений следующим образом: s/regexp/replacement/g. К примеру, в следующем коде произойдёт замена всех слов «Hello» на «Hi»:

    $ cat Hello World $ sed 's/Hello/Hi/g' Hi World

    Руководство по sed.

    Команда интерпретатора Bash history

    Выводит историю командной строки. Часто используется совместно с grep при поиске конкретной команды. В коде ниже будут найдены все команды, которые содержат строку g++:

    $ history | grep g++ 155 g++ 159 g++

    Кстати, здесь тоже можно увидеть символ | — это конвейер (pipe). С его помощью происходит перенаправление вывода одной команды на вход другой. Так, в вышеописанном примере вся история (в обычном режиме она выводится с помощью history непосредственно в вывод терминала), перенаправляется в grep в качестве входных данных. То есть мы не увидим вывод команды history, зато увидим вывод команды grep.

    Команда интерпретатора Bash export

    Устанавливает переменные окружения для их передачи дочерним процессам. Допустим, так мы можем передать переменную name, имеющую значение student:

    $ export name=student

    Команда интерпретатора Bash ps

    Выводит данные о запущенных процессах.

    Основные команды

    $ ps PID TTY TIME CMD 35346 pts/2 00:00:00 bash

    В результате выведутся 4 элемента: — PID (ID процесса), — TTY (тип терминала), — TIME (время работы процесса), — CMD (имя команды, запустившей процесс).

    Команда интерпретатора Bash awk

    Находит и меняет текст в файлах на основании заданного шаблона: awk ‘pattern {action}’

    Команда интерпретатора Bash wget

    Закачивает файлы из интернета, помещая их в текущий каталог.

    $ wget -cs100

    Команда интерпретатора Bash nc

    Утилита для отладки сети. Вот руководство.

    Команда интерпретатора Bash ping

    Служит для тестирования сетевого подключения.

    $ ping PING (74) 56(84) bytes of data. 64 bytes from (74): icmp_req=1 ttl=57 time=7.82 ms — ping statistics — 1 packets transmitted, 1 received, % packet loss, time 8ms rtt min/avg/max/mdev = 7.794/ ms

    Статистика в конце отображает число подключений, которые были совершены до завершения команды. Также отображается время их выполнения.

    Читайте также:  Обзор iOS 14: что нового и как установить

    Статья написана специально для курса по Linux на основании материалов Bash-Cheatsheet.

    Как работать с Bash

    Рассмотрим, как пользоваться Bash на примере подключения к веб-серверу (где находятся файлы сайта) с установленным дистрибутивом Linux через протокол SSH с нуля.

    Для этого можно воспользоваться любым предпочитаемым способом. В данном случае рассматривается веб-сервер с Ubuntu, хотя в других дистрибутивах принцип остается тем же.

    1. После успешного ввода логина и пароля программа Терминал Linux в автоматическом режиме запустит Bash. Собственно, пользователь уже подключится к системе и увидит приглашение на ввод команд.

    2. Приглашение отображается относительно стандартно и имеет следующий вид:

    <имя пользователя>@<имя компьютера>:<текущий каталог><знак>.

    В примере:

    • размытием закрыто имя пользователя;
    • «vPro» – название компьютера;
    • графема тильда (~) в Линуксе обозначает домашнюю папку пользователя в сокращенном виде (/home/user). Она в Bash по умолчанию является текущей
    • знак доллара ($) указывает, что пользователь не имеет прав администратора. Работая как администратор, вместо знака доллара отображается знак решетки (#).

    3. Когда приглашение выполнено, терминал автоматически поставит пробел и будет находиться в ожидании ввода команд. На предложенном изображении была нажата кнопка «Enter». В следующей строчке введена команда «cd» перейти в существующий каталог «/opt». Еще ниже отображается результат вывода – рабочей папкой стала «/opt» и это показано в приглашении.

    Как работать с Bash

    4. Командная строка Linux позволит запускать любое установленное в системе приложение. Как правило, каталоги со списком исполняемых программ расположены в папках «/bin, /usr/bin». Проверяемые каталоги интерпретатор сохраняет в переменной «$PATH». Просмотреть их список можно командой:

    echo $PATH

    5. Далее можно воспользоваться командой «ls» и добавить к ней один из каталогов, найденных в «$PATH», чтобы увидеть список доступных программ. Например:

    6. Если приложение консольное, Bash произведет его запуск в терминале. Ниже показан пример запуска редактора Nano.

    7. Bash также позволяет осуществлять запуск приложений в фоновом режиме. Для запуска в фоне, после ввода названия программы в конце следует добавить знак амперсанда (&).

    Здесь строка «[2] 23258» – это номер и PID процесса. При этом nano находится в фоновом режиме. Вернуться к нему можно командой «fg» (добавив номер задачи, если их запущено несколько) или «jobs».

    Поскольку в фоне может работать достаточно много команд, проверить номер требуемой можно командой «bg». Она отобразит список активных задач.

    Пример № 5: Отображение файлов и каталогов вместе с их разрешениями на доступ

    Разрешения для файлов и каталогов считаются очень важными, особенно если мы хотим иметь дело с политиками управления доступом в операционной системе. Если вы хотите, чтобы права доступа к файлам и каталогам отображались в дереве каталогов, вам нужно будет выполнить команду «tree» с флагом «-p».

    $ sudo tree –p

    Пример № 5: Отображение файлов и каталогов вместе с их разрешениями на доступ

    Разрешения на «чтение», «запись» и «выполнение» показаны перед каждым именем файла и каталога в нашей структуре каталогов, как показано на следующем изображении. Кроме того, права доступа к каталогу также включают флаг «d», который указывает, что следующее имя относится к каталогу, а не к файлу.

    Циклы. Цикл for-in.

    Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение в списке поочерёдно присваивается переменной. Синтаксис следующий:

    for переменная in [список_значений] do команды done for NAME [in LIST ]; do COMMANDS; done # синтаксис для записи цикла в одну строку Если ключевое слово do находится в одной строке со словом for, то после списка аргументов (перед do) необходимо ставить точку с запятой.

    for arg in [list] ; do

    Рассмотрим небольшой пример:

    #!/bin/bash for i in 0 1 2 3 4 # переменной $i будем поочерёдно присваивать значения от 0 до 4 включительно do echo "Number is $i" done #цикл окончен exit 0

    В переменную $i поочерёдно подставляются значения из списка и в цикле идёт работа со значением этой переменной.

    Элементы в списке могут разделяться символами пробела или табуляции. Если список не помещается на одну строку, его можно продолжить на следующей, но перед тем как нажать на Enter, поставьте символ "\" для экранирования значения символа перевода строки.

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

    #!/bin/bash for i in `cat | cut -f1 -d ' ' | sed -e '/^#/ d'` do echo "$i" done exit 0