Список основных команд оболочки bash в Linux 🅱️

Основные команды bash классифицируются на 10 групп

  1. Файловые — выполнение различных операций с объектами файловой системы, к которым относятся файлы и каталоги.
  2. Архивация — работа с архивами.
  3. Работа с deb-пакетами — установка и удаление приложений, просмотр файловой структуры инсталлятора и информации о пакете.
  4. Менеджер пакетов apt — действия с deb-пакетами на удаленных серверах или других интернет-ресурсах.
  5. Операции с текстом — позволяет выполнять манипуляции с содержимым текстовых файлов.
  6. Пользователь и система — информация о пользователях и сведения о системном окружении.
  7. Работа с правами доступа — изменение доступа к файлам и папкам.
  8. SSH-подключение — использование сетевого защищенного SSH-протокола для безопасного подключения к серверу.
  9. Операции с датой и временем — позволяет узнать текущее время, дату и день недели, а также отображать отдельные временные единицы (например, только дату).
  10. Управление процессами — позволяет просмотреть все запущенные процессы и управлять ими.

Основные преимущества

На данный момент разработано множество различных вариаций Bourne-Shell. Но, по сравнению с ними, командный интерпретатор Bash обладает рядом преимуществ.

  • Позволяет работать со структурами «[[» (в sh доступна только «[» с ограничениями).
  • Поддерживает работу с массивами в Линуксе.
  • Доступно множество расширений, выполненных по стандартам C, включая циклы с тремя аргументами «for((i=0;i<=3;i ))», возможность присваивать инкремент « =» и многое другое.
  • Поддерживает синтаксис «<<<‘here strings’».
  • Работает с расширениями «.{png,jpg}».
  • Доступны алиасы для перенаправления, подобно «Csh», подобно «&|» для «2>&1 |» и «&>» для «> … 2>&1».
  • Поддерживает сопроцессы с перенаправлением «<>».
  • Огромный комплект расширений нестандартных конфигураций, включая изменение регистра.
  • Существенно увеличены возможности арифметики (правда, нет поддержки чисел с плавающей точкой).
  • Переменные «$RANDOM», «$SECONDS», «$PIPESTATUS[@]» и «$FUNCNAME» в Bash являются расширениями.
  • Доступно огромное количества функций, обеспечивающих работу в интерактивном режиме. Хотя на поведение скриптов они не влияют.

Примечание. Чем новее интерпретатор, тем больше функций он предоставляет. Узнать версию Bash в Linux можно командой:

$SHELL --version

Основные термины

  • Интерфейс — совокупность программных средств, обеспечивающих взаимодействие пользователя с аппаратной частью компьютера.
  • Консоль — вид интерфейса, который позволяет управлять пользователями, файловой системой, протоколами и другими объектами операционной системы.
  • Эмулятор консоли — специальная программа или совокупность программных средств, позволяющих представить консоль в виде окна операционной системы.
  • Консольное окружение — совокупность консолей Ubuntu.
  • Объекты операционной системы — логические единицы, с которыми осуществляется диалог на программном и пользовательском уровнях (аппаратная и программная части). Объектами операционной системы являются логические диски, каталоги, окна и т. д.
  • Полное имя файла — путь к файлу с указанием логического диска и каталогов, в которых он находится, а также его название.

Понимание основных элементов сценариев оболочки

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

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

Ниже показан очень простой скрипт:

Что такое bash

Bash (Bourne again shell или «возрождённый» shell) – это модифицированная версия программной оболочки Bourne-shell (sh или «Оболочка Борна»). Она является командным процессором, работающим интерактивно в текстовом окне. Bash нужен для приема команд пользователя и их отправки операционной системе для последующей обработки.

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

|| и &&

Вместо написания полных операторов

if… then

вы можете использовать логические операторы

||

а также

&&||

является логическим «ИЛИ» и выполнит вторую часть оператора, только если первая часть не верна;

&&

является логическим «И» и выполнит вторую часть оператора только в том случае, если первая часть верна.

Рассмотрим эти две строки:

Командные оболочки

Существует множество дистрибутивов(форков) операционных систем(ОС) семейства Linux, наиболее известные среди них: Ubuntu, Debian, CentOS, Red Hat, Fedora, SuSE, FreeBSD, Mint.

Здесь есть большая схема со всеми форками Linux.

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

Список доступных командных оболочек можно получить командой

cat /etc/shells

При необходимости можно установить нужную командную оболочку командой sudo apt install <имя_оболочки>. Например, для установки ksh нужно выполнить

sudo apt install ksh

Первые команды

Итак, мы подключились к терминалу и находимся в shell. Давайте сориентируемся в пространстве.
Чтобы узнать имя машины(сервера), на которой мы находимся, введем hostname и нажмем Enter:

test@osboxes:~$ hostname
osboxes

Имя пользователя, под которым мы подключены, как правило отображается в приглашении командной строки (test@osboxes:~$). Если имя текущего пользователя не отображается (например, если задан другой формат приглашения), то его можно получить командой whoami, или id (также отображает группы пользователя):

test@osboxes:~$ whoami
test
test@osboxes:~$ id
uid=1001(test) gid=1001(test) groups=1001(test),27(sudo)

Aron griffis

Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint.

Bash: история команд

В Bash доступна функция автоматического завершения команды по кнопке tab. Введите начальную часть команды и нажмите tab, чтобы терминал предложил полную строку.

geekpress@proglib:~dir$ ls <ENTER>
mobilizeemberduty  mobilizeember  mobilize

geekpress@proglib:~dir$ ls t <TAB>

Нажмите клавишу tab после ls t, и команда будет завершена автоматически.

geekpress@proglib:~dir$ ls mobilizeemberduty <ENTER>
mobilizeemberduty

Иногда нужно нажимать tab несколько раз:

geekpress@proglib:~dir$ ls m <TAB>

geekpress@proglib:~dir$ ls mo <TAB>
mobilize  mobilizeember

Bash хранит историю ранее введенных команд. Чтобы выполнить поиск нажмите Ctrl r:

geekpress@proglib:~dir$

Нажимаем Ctrl r:

(reverse-i-search)`':

Вводим «mobi» и находим последнюю команду с этой строкой:

(reverse-i-search)`mobi': touch mobilize

Cd и домашняя директория

Если бы мы хотели переместиться в нашу домашнюю директорию, то могли бы набрать:

$ cd

If then else


Конструкция

if then else

является общей для оценки конкретных условий. Вы уже видели пример с ним. Этот условный оператор часто используется вместе с командой

test

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

Подробнее о test можно узнать в справочнике командой man test.

Основная конструкция

if

есть

if… then… fi

Она сравнивает одно условие, как показано в следующем примере:

Login shell?

Сперва нужно выбрать, находитесь вы в командной оболочке входа (login shell) или нет.

Оболочка входа — это первая оболочка, в которую вы попадаете при входе в систему для интерактивного сеанса. Оболочка входа не требует ввода имени пользователя и пароля. Вы можете форсировать запуск оболочки входа, добавив флаг –login при вызове bash, например:

bash --login

Оболочка входа настраивает базовую среду при первом запуске оболочки bash.

Ssh-подключение

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

А у вас запущен bash?

Вы можете убедиться, что используете bash, набрав:

Абсолютные пути

Ниже несколько из них:

/dev/usr/usr/bin/usr/local/bin

Как можно заметить, у всех абсолютных путей есть одна общая черта, они начинаются с /. Указывая, допустим, /usr/local/bin в качестве аргумента для cd, мы сообщаем, что хотим попасть в / директорию, затем в usr директорию внутри нее, и так далее в local и bin, вниз по дереву. Абсолютные пути всегда отсчитываются начиная от / сперва.

Активация консоли

После загрузки операционной системы создается 7 виртуальных консолей с текстовым интерфейсом (консольное окружение). Для навигации и их активации используется сочетание клавиш — Ctrl Alt F(1-7), где «F(1-7)» — соответствующие номера консолей.

Например, если требуется перейти во вторую консоль, то нужно нажать — Ctrl Alt F2. При переходе необходимо учитывать, что седьмая имеет графический интерфейс.

Быстрый просмотр и редактирование файлов

head выводит первые строки файла. Флаг -n указывает количество отображаемых строк:

# вывод трех начальных строк
geekpress@proglib:~$ head -n 3 tempfile
first
three
lines

tail выводит последние строки файла. Можно получить последние n строк или конец файла, начиная с N-й строки, с помощью tail -n N:

# выводит конец файла, начиная с 4-ой строки
geekpress@proglib:~$ tail -n  4 testfile
last
from
fourth

Используйте cat с одним или несколькими файлами: так можно быстро посмотреть содержание.

geekpress@proglib:~$ cat x
file x
geekpress@proglib:~$ cat x y
file x
file y

nano – минималистичный текстовый редактор командной строки. Редактор подходит начинающим и тем, кто не любит разнообразия. На начальных этапах он покроет все ваши требования.

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

Современные редакторы предлагают функции поиска и замены, подсветки синтаксиса и так далее. vi (m) и emacs функциональней nano и nedit, но сложней в освоении.

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

В интерактивной оболочке?


Если вы находитесь в интерактивной оболочке без входа в систему (non-login shell), предполагается, что вы уже побывали в оболочке входа, окружение настроено и будет унаследовано.

В этом случае выполняются по порядку следующие два файла, если они существуют:

/etc/bash.bashrc
~/.bashrc

В оболочке входа?

Если вы находитесь в оболочке входа, то bash ищет файл

/etc/profile

и запускает, если он существует.

Затем ищет любой из этих трёх файлов в следующем порядке:

~/.bash_profile
~/.bash_login
~/.profile

Когда находит один, то запускает его и пропускает другие.

Деревья каталогов, использование диска и процессы

По умолчанию mkdir создает только один каталог. Это означает, что, например, если каталога a/b не существует, то a/b/c не может быть создан с помощью mkdir:

geekpress@proglib:~example$ ls && mkdir a/b/c
x  y  z
mkdir: cannot create directory 'd/e/f': No such file or directory

Но если указать флаг -p, mkdir создаст все директории, которые отсутствуют в указанном пути:

geekpress@proglib:~example$ mkdir -p a/b/c && ls
x  y  z  a

tree отображает структуру каталога в виде отформатированного дерева. По умолчанию tree печатает древовидную структуру, начиная с указанного каталога, но количество уровней ограничивается флагом -L:

geekpress@proglib:~example$ tree -L 2
.
|-- x
|-- y
|-- z
`-- a
    `--b

3 directories, 2 files

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

geekpress@proglib:~example$ tree --prune
.
|-- x
`-- y

df показывает, сколько места занимают файлы на дисках.

geekpress@proglib:~example$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           389M  6.3M  383M   2% /run
...

В приведенной выше команде -h означает не «help», а «human-readable». Некоторые команды используют этот флаг для отображения размеров в K для килобайт и G для гигабайт, вместо записи гигантского числа байтов.

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

geekpress@proglib:~example$ du
12760	./.git/objects
13016	./.git
72	./container/intsets
76	./container
27380	.

df принимает флаг –max-deep = N, который показывает директории только на N уровней в указанном каталоге:

ps показывает запущенные процессы пользователей:

geekpress@proglib:~example$ ps
  PID TTY          TIME CMD
15333 pts/0    00:00:00 bash
15344 pts/0    00:00:00 ps

Вот вам и основы Bash. Но давайте копнем чуть глубже.

Диаграмма

Эта блок-схема обобщает все процессы при запуске bash.

Теперь подробнее рассмотрим каждую часть.

Другие домашние директории пользователей

Bash воспримет одиночную ~ как указатель на вашу домашнюю директорию, но вы также можете использовать её для указания на домашние директории других пользователей. Например, если мы хотели сослаться на файл под названием fredsfile.txt в домашней директории пользователя fred, то могли бы набрать:

$ ./myprog ~fred/fredsfile.txt

Продолжение…

Другие полезные команды bash

Меняйте пароль учетной записи с помощью passwd. Команда проверяет текущий пароль и просит ввести новый пароль дважды:

Задания cron

У меня в 95% случаев отладка запуска bash связана с тем, что задание cron работает не так, как ожидалось.

Эта проклятая задача работает нормально, когда я запускаю её в командной строке, но фейлится при запуске в crontab.

Здесь две причины:


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

PATHalias

настроены так, как вы ожидаете.

Вот почему зачастую приходится установить конкретный PATH для задачи cron, как здесь:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

Интерактивный?


Затем вы определяете, является оболочка интерактивной или нет.

Это можно проверить по наличию переменной PS1 (она устанавливает функцию ввода команд):

Использование ..

Относительные пути могут также содержать одну или более “..” директории. Директория “..” специальная; она указывает на родительскую директорию. Так, продолжая с примера выше:

$ pwd/usr/local/bin$ cd ..$ pwd/usr/local

Как видно, наша текущая директория теперь /usr/local. Мы смогли переместиться «назад» на одну директорию относительно текущей, где были до того.

Кроме того, мы также можем использовать “..” в существующем относительном пути, позволяющем нам переместиться в директорию «рядом» с той, в которой находимся:

$ pwd/usr/local$ cd ../share$ pwd/usr/share

Использование «cd»

Вы, возможно, уже обнаружили, что пялиться на приглашение bash — не самое впечатляющее занятие в мире. Ну что ж, давайте узнаем как путешествовать по нашей файловой системе. В приглашении введите пожалуйста следующую команду (без $):

$ cd /

Вы только что сообщили bash, что хотите работать в директории /, также известной, как корневая; все директории в системе имеют форму дерева, и / является его вершиной, т.е. корнем (в информатике деревья растут наоборот, корень вверху, а ветки спускаются вниз — прим. пер.). cd устанавливает директорию, в которой вы в данный момент работаете, также известную как «текущая рабочая директория».

Использование переменных и входных данных

bash-скрипты — это гораздо больше, чем просто список команд, которые выполняются последовательно. Одна из приятных сторон скриптов заключается в том, что они могут работать с переменными и входными данными, чтобы сделать скрипт гибким. В этом разделе вы узнаете, как с ними работать.

Использование позиционных параметров


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

Использование условий и циклов

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

В bash есть несколько условных операторов и циклов, которые часто используются.

История создания

Предшественница Bash  –  Bourne-shell (sh, «Оболочка Борна») была одной из первых оболочек для операционных систем Unix. Ее создал в 1978 году британский ученый Стивен Борн, давший Bourne-shell свое имя.

Изначально оболочка sh обладала относительно небольшим набором функций. Но в 1987 году Bourne-shell заинтересовался программист Брайан Фокс, сумевший доработать и значительно расширить ее функционал. В 1989 году Брайан создал бета-версию Bash и продолжал поддерживать свое детище вплоть до 1993 года.

Брайан Фокс - создатель оболочки BashБрайан Фокс — создатель оболочки Bash.

Основные команды, правила их написания и прочие особенности Bash были перенесены из sh. Прочие возможности, включая историю, позаимствованы из Korn Shell и C Shell (других вариаций Bourne-shell). Bash практически полностью соответствует стандартам POSIX.

Сегодня оболочка Bash предустановлена в большей части дистрибутивов Unix/Linux. Взаимодействие оболочки и операционной системы обеспечивается с помощью специальной программы – терминала (например, lxterm, xterm, eterm, gnome-terminal).

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

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

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

Менеджер пакетов apt

Менеджер APT — специальное программное обеспечение для установки, модификации или удаления программ. Он компилирует deb-пакеты с репозиториев для конкретной конфигурации операционной системы.

  1. Установка и обновлениеapt-get install package_namepackage_name» — имя приложения).
  2. Получение обновленных списков пакетов — apt-get update.
  3. Обновление пакетов, установленных на Ubuntu — apt-get upgrade.
  4. Удалениеapt-get remove package_namepackage_name» — имя приложения).
  5. Проверка целостности пакетов и зависимостей  — apt-get check.

Ни один вариант?


Если вы не находитесь ни в оболочке входа, ни в интерактивной оболочке, то ваше окружение действительно будет пустым. Это вызывает большую путаницу (см. ниже о заданиях cron).

В этом случае bash смотрит на переменную BASH_ENV вашей среды и выполняет соответствующий файл, который там указан.

Об этом руководстве

Добро пожаловать в первую из четырех частей обучающего руководства по основам Linux, разработанного чтобы подготовить вас к сдаче экзамена Linux Professional Institute 101. В нем вы познакомитесь с bash (стандартной оболочкой командного интерпретатора в Linux), узнаете о большинстве возможностей таких стандартных команд Linux, как ls, cp и mv, разберетесь в инодах, жестких и символьных ссылках, и многом другом.

К концу этого руководства у вас сформируется некий фундамент знаний, и вы будете готовы к изучению основ администрирования Linux. К концу всего курса (8 частей), у вас будет достаточно навыков, чтобы стать системным администратором Linux и пройти сертификацию LPIC Level 1 от Linux Professional Institute, если конечно захотите.

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

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

:/>  Вставка в текст 6 букв первая В

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

Образ docker в песочнице

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

Запуск:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash


Dockerfile находится

Общие правила

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

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

При наборе команды требуется соблюдать общий формат: file_name_program_or_comand_name -key value («file_name_program_or_comand_name» — имя файла программы или команды, «key» — ключ и «value» — значение).

  • Ключ: параметр, указываемый после имени исполняемого файла или внутренней команды. Используется для указания настроек или действий, которые необходимо выполнить.
  • Значение: число или переменная, используемые при выполнении команды.

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

  1. открыть новый текстовый файл;
  2. указать в первой строке #!/bin/bash;
  3. ввести список команд в столбик, а затем сохранить изменения.

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

При двойном нажатии левой кнопкой мыши произойдет активация скрипта. Ниже приведен пример пакетного файла, который модифицирует команду rm, удаляющую файлы.

Вышеописанный bash-скрипт создает папку «~/.archive» и перемещает в нее файлы, указывая в начале имени дату удаления.

Операции с текстом

Для работы с текстовыми файлами применяется специальная команда sed и sort.

Отличие bash от bourne-shell

Bash в Linux способна выполнять практически все важные сценарии Bourne-shell без внесения дополнительных изменений. Исключение составляют те, где необходимо ссылаться на спецпеременные Bourne-shell или, где применяются ее встроенные команды.

В синтаксисе Bash применяются приемы из Korn Shell и C Shell:

  • редактирование командной строки;
  • вывод истории команд;
  • создание стеков директорий;
  • правила замены команд «$(…)»;
  • переменные «$PPID» и «$RANDOM».

Используя консоль Bash в качестве интерактивного интерпретатора, можно прибегать к автодополнению названий файлов, программ, переменных и команд нажатием клавиши Tab (↹).

Относительные пути

Другой тип пути называется «относительный путь». bash, cd, и другие команды всегда интерпретируют их относительно текущей директории. Относительные пути НИКОГДА не начинаются с /. Так, если мы сначала переместимся в /usr:

$ cd /usr

То, затем мы можем использовать относительный путь local/bin, чтобы попасть в директорию /usr/local/bin:

$ cd local/bin$ pwd/usr/local/bin

Пакетный файл

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

  1. открыть новый текстовый файл;
  2. указать в первой строке #!/bin/bash;
  3. ввести список команд в столбик, а затем сохранить изменения.

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

При двойном нажатии левой кнопкой мыши произойдет активация скрипта. Пример пакетного файла, который модифицирует команду rm, удаляющую файлы.

Вышеописанный bash-скрипт создает папку «~/.archive» и перемещает в нее файлы, указывая в начале имени дату удаления.

Переменные

Переменная — это метка, которая используется для обозначения определённого места в памяти, которое содержит определённое значение. Переменные могут быть определены статически с помощью NAME=value или динамическим способом. Существует два решения для динамического определения переменной:

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

Листинг 3. Пример скрипта, использующего команду read

Перемещаемся, копируем, ссылаемся

mv перемещает и переименовывает файл. Для переименования введите новое имя файла:

geekpress@proglib:~example$ ls && mv x 2 && ls
x  y  z  1
y  z  1  2

cp копирует файл:

geekpress@proglib:~example$ cp 2 22 && ls
y  z  1  2  22

ln -s создает симлинк:

geekpress@proglib:~example$ ln -s y b && ls
y  z  1  2  22  f  b

Понимание case


Последний из важных итерационных циклов — это

case

*. Оператор

case

используется для оценки ряда ожидаемых значений. В частности, инструкции

case

важны в сценариях запуска Linux, которые в предыдущих версиях использовались для запуска служб.

* — цикл ли?

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

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

Листинг 9

Понимание while и until


Если оператор for, о котором вы только что прочитали, полезен для работы с диапазонами элементов, то оператор

while

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

until

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

while

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

Примечание. Так и не понял, что делает этот скрипт. В моём случае используется CentOS 7 и по умолчанию там нет monitor, хотя в скрипте явно написано:

usage: monitor <processname>

Где-то пол часа гуглил для CetOS программу monitor, но так и не нашёл. И вообще не понятно каким тут боком monitor если используется ps aux. В любом случае так и не понял, что делает этот срипт. Большая просьба помочь решить этот вопрос, чтобы откорректировать текст и/или скрипт.Листинг 7

Пример скрипта

Ниже рассмотрен пример самого простого скрипта, выводящего надпись «Hello world».

Примеры относительных путей

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

$ cd /bin$ cd ../usr/share/zoneinfo

$ cd /usr/X11R6/bin$ cd ../lib/X11

$ cd /usr/bin$ cd ../bin/../bin

А теперь наберите их и проверьте свои предположения. 😉

Примеры применения

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

Работа в терминале

Новичкам рекомендуется начинать работу в терминале, который является эмулятором консоли.

В него можно зайти 2 способами:

  1. при помощи сочетания — Ctrl Alt T
  2. через контекстное меню — щелкнуть правой кнопкой мыши на пустой области рабочего стола и выбрать пункт «Открыть терминал».

Работа с deb-пакетами

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

  1. Установка или обновлениеdpkg -i package_name.debpackage_name.deb» — имя deb-файла).
  2. Удалениеdpkg -r package_namepackage_name.deb» — имя deb-файла).
  3. Показать все пакеты dpkg –l.

Работа с архивами

При помощи команды-архиватора tar можно создавать, разархивировать и просматривать любой tar-архив.

  1. Создание нового архива tar — cf arhive_name file_namearhive_name» — имя архива, в котором требуется указать расширение tar и «file_name» — имя файла или указание группы файлов). Например, если выполнить команду: tar — cf myarch.tar *.txt, то в архив «myarch.tar» будут добавлены все txt-файлы.
  2. Распаковкаtar — xvf arhive_name path_to_extractarhive_name» — имя архива и «path_to_extract» — путь для распаковки файлов).
  3. Просмотр содержимого архиваtar — tf arhive_namearhive_name» — имя архива).

Работа с датой и временем

  • Дата, время и день недели выводится при помощи специальной утилиты date. Если ввести ее без параметров, то она выводит на экран текущую дату, время и день недели.
  • Если выполнить команду sudo date —help или sudo man date, то можно получить полную информацию о ключах программы.

Работа с правами доступа

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

Синтаксис

Правила написания Bash представляют собой расширенный синтаксис Bourne-shell. Узнать подробности про основы взаимодействия с оболочкой, а также спецификации конкретных команд можно в руководстве Bash Reference Manual, распространяемом GNU. Это полезная шпаргалка для начинающих, позволяющая быстрее сориентироваться в оболочке.

Скорая помощь для тех, кто забыл

Даже если вы давно пользуетесь продвинутыми командами bash, вы все еще можете забыть что-то из базиса, и это нормально. Всегда можно получить подсказку для большинства утилит. Как? Просто введите -h или –help в конце команды:

:/>  Как сделать скрипт на компьютере самостоятельно

Скрипты, вызывающие друг друга

Ещё одна распространенная проблема, когда скрипты по ошибке настроены на вызов друг друга. Например,

/etc/profile

обращается к

~/.bashrc

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

Создаем и удаляем файлы/директории

touch нужен для изменения временных меток файлов и для создания пустого файла. Можно создать новый файл в nano:

geekpress@proglib:~temp$ ls

geekpress@proglib:~temp$ nano newfile

Затем править файл и сохранить:

geekpress@proglib:~temp$ ls
newfile

Или использовать touch:

geekpress@proglib:~temp$ touch another && ls
newfile another

mkdir создает новые каталоги:

geekpress@proglib:~temp$ ls && mkdir fold && ls
newfile another
newfile another fold

Теперь удалим файл с помощью команды rm.

WARNING: файл невозможно восстановить!

geekpress@proglib:~temp$ rm newfile && ls
another fold

Необходимость подтверждения вызывается флагом -i:

geekpress@proglib:~temp$ rm -i another
rm: remove regular empty file 'another'? y

Удаляйте пустые каталоги с помощью rmdir. Если ls -a используется в пустом каталоге, команда выводит только ссылку на сам каталог . и ссылку на родительский каталог ..:

geekpress@proglib:~temp$ rmdir fold && ls -a
.  ..

Команда rmdir удаляет только директории:

geekpress@proglib:~temp$ cd .. && ls temp/
zzz.txt  big.txt  4.txt  x  bb.txt  y  z

geekpress@proglib:~$ rmdir temp/
rmdir: failed to remove 'test/': Directory not empty

Чтобы удалить директорию с содержимым, используйте rm -rf:

geekpress@proglib:~$ rm –rf temp

Сортировка

  • Сортировка содержимого 2 файлов выполняется при помощи команды: sort file_name_1 file_name_2 («file_name_1» и «file_name_2» — имя первого и второго файла соответственно).
  • Сортировка содержимого 2 файлов и запись результата в log-файл: sort filetxt file2.txt >> log.

Список прав доступа

  • 400 — только чтение.
  • 644 — чтение и редактирование всеми пользователями.
  • 660 — право на чтение и редактирование владельцем и группой.
  • 666 — все пользователи могут читать и редактировать.
  • 700 — запуск, редактирование и чтение только владельцем.
  • 744 — пользователи могут только читать, а владелец читать, редактировать и запускать приложение.
  • 755 — любой пользователь может читать и запускать на выполнение, а владелец получает полный доступ.
  • 777 — все пользователи могут читать, редактировать и запускать приложение (полные права доступа).
  • 1555 — право на удаление файла или папки имеет только владелец, а все остальные могут только читать и запускать на выполнение.

Три bash команды для управления

Иногда вам потребуется запускать эти команды одну за другой. Тогда на помощь приходит оператор ;:

geekpress@proglib:~$ ls; pwd
imports temp playground README.md
/home/geekpress

Точка с запятой означает, что сначала перечисляется содержимое рабочего каталога с помощью ls, а затем pwd выводит местоположение каталога. Еще один полезный инструмент для создания цепочек команд – &&. При использовании && команда справа не будет выполняться, если команда слева не выполнена:

# Ой! Тут опечатка!
geekpress@proglib~:$ cd /pplayground/socket/ && pwd && ls && cd
-bash: cd: /pplayground/socket: No such file or directory

# теперь первая команда проходит, так что выполняются следующие
geekpress@proglib:~$ cd /playground/socket/ && pwd && ls && cd
/home/geekpress/playground/socket
socket.go  socket_test.go

Но если использовать ;, вторая команда выполняется даже после ошибки в первой:

# pwd и ls запустятся даже после ошибок в cd
geekpress@proglib:~$ cd /pplayground/socket ; pwd ; ls
-bash: cd: /pplayground/socket: No such file or directory
/home/geekpress
imports LICENSE playground README.md

А вот вам небольшой трюк в bash. Команда & похожа на &&, но на самом деле выполняет другую функцию. Часто процессы блокируют ввод в терминал во время работы. Чтобы свернуть подобный процесс в фон, используйте & в конце команды. Тогда процесс выполняется в фоне, не блокируя ввод в окно терминала:

geekpress@proglib:~$ cd /playground/socket && mv socket.go ~/ & cd
geekpress@proglib:~$

Управление процессами

Процесс — программа, которая выполняется в текущий момент.

  • Для мониторинга процессов используется специальная утилита top. Она отображает полную информацию о программе, нагрузку на центральный процессор, оперативную память, дисковое пространство и сеть.
  • Для вывода процессов текущего пользователя применяется утилита ps.
  • Команда kill служит для остановки запущенной программы. Однако ее использовать не рекомендуется во избежание потери данных.

Файловые команды

  • Навигация по директориям.
  1. Навигация по файловой системе осуществляется при помощи команды cd. Для перехода в домашнюю директорию нужно указать параметр «~», не прописывая ключи.
  2. Чтобы перейти в каталог, необходимо указать его путь. Например, для перехода из домашней директории в папку «music», находящейся в загрузках, требуется выполнить команду: sudo cd загрузки/music.
  3. Если требуется перейти на 2 директории выше, то следует набрать в терминале: cd /../... Для перехода в предыдущую папку необходимо ввести: cd —.
  4. При неверном указании пути в терминале появится предупреждение «слишком много аргументов». В этом случае необходимо проверить правильность пути к файлу или проверить ключи.
  • Получение пути текущего каталога. Для получения информации о текущем положении пользователя в файловой системе используется команда pwd.
  • Создание папки в текущем каталоге — mkdir name_folder1 name_folder2 («name_folder1» и «name_folder2» — имена каталогов, которые требуется создать).
  • Создание нового файла touch file_name («file_name» — имя нового файла).
  • Перемещениеmv file_name_or_folder_name path_to_move («file_name_or_folder_name» — имя файла или папки, «path_to_move» — путь, куда нужно переместить объект).
  • Переименованиеmv file_name_or_folder_name, new_file_name_or_folder_name («file_name_or_folder_name» — имя файла или папки, «new_file_name_or_folder_name» — новое имя). По синтаксису команды похожи, но вместо пути указывается новое имя. Переименовывать можно папки и файлы.
  • Копированиеcp file_name_or_folder_name, path_to_copy («file_name_or_folder_name» — имя файла или папки, «path_to_copy» — путь, куда нужно скопировать объект)
  • Удалениеrm file_name и rm -rf folder_name («file_name» и «folder_name» — имена файла и папки соответственно).
  • Поиск файлов — команда find.

          Примеры:

  1. Поиск по заданным параметрам производится с помощью команды следующего вида: find folder_name key key_options file_operationfile_name» и «folder_name» — имена файла и директории соответственно, «key» — имя ключа; «key_options» — параметры ключа). Операции над найденными файлами производятся с помощью команды: file_operation.
  2. Например, так осуществляется поиск в директории «dir1» всех файлов, имена которых начинаются на «myfile»: find /tmp/1/dir1 -name ‘myfile*’.
  3. А так — поиск в директории «dir1» всех txt-файлов, имена которых начинаются на «myf» и содержат три любых символа: find /tmp/1/dir1 -name ‘myf???.txt’.
  • Просмотр содержимого файлаcat file_name («file_name» — полное имя файла). Если данных в файле много, то команда cat применяется с параметром more для постраничного вывода. Пример: cat file_name | more.
  • Вывод содержимого каталогаls folder_name («folder_name» — имя каталога).

bash ключи - ls
Команда применяется с ключами для удобного отображения информации:

  • a — все файлы и директории;
  • s — размеры файлов в байтах;
  • h — показывает размеры файлов и директорий в КБ, МБ;
  • l — имя пользователя и права доступа).

Ключи можно комбинировать между собой.

Цикл for

Цикл

for

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

for

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

Листинг 5

Экономия времени

Терминал Ubuntu поддерживает горячие клавиши, позволяющие экономить время при наборе однотипных команд.

  • Ctrl P или — прокрутка недавно набранных команд вверх (первая команда при одном нажатии).
  • Ctrl N или — прокрутка команд вниз, которые недавно набирались (последняя команда при единичном нажатии).
  • Tab — автозаполнение при наборе команды.
  • history — список всех вводимых команд. Для улучшения его читабельности необходимо указывать sudo history | less. Последовательное выполнение команд sudo history -с и sudo history -w позволяет очистить историю терминала.
  • clear — очищает экран терминала, устанавливая курсор в первую строку.

Перенаправление вывода информации

Стандартным средством вывода информации о результатах команды, выполненной в терминале, является экран дисплея. Однако можно использовать альтернативный метод, воспользовавшись символами «>» (содержимое файла перезаписывается) или «>>» (добавление информации к существующей).

Терминал позволяет выполнять несколько команд в одну строку. Например, нужно записать все имена txt-файлов в log: find Temp/music -name ‘acords*.txt’ >> log. Log-файл будет создан в текущей директории.

Заключение

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

Оптимальное решение для размещения сайтов любого профиля и посещаемости — виртуальный сервер от Eternalhost. Оперативная техподдержка 24/7 и реально работающая бесплатная защита от DDoS.

Подводим итоги

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

Оставьте комментарий

Adblock
detector