# Выполнение команд. Простейшие команды для работы с каталогами

Обычно для запуска команды необходимо ввести ее имя. В командной строке можно указать сколько угодно специальных символов, которые будут интерпретированы bash еще до запуска команды. Таким же образом можно запускать команды в фоновом режиме, охватывать с помощью подстановочных символов (джокеров) одновременно много похожих имен файлов (например \*.tex), подставлять результаты выполнения одной команды в список параметров другой команды и т. д.&#x20;

**Фоновые процессы**. Важнейший и самый востребованный подстановочный символ — &. Если указать его в конце командной строки, bash запустит программу в фоновом режиме. Это имеет смысл в первую очередь тогда, когда на выполнение команды уходит много времени, чтобы можно было продолжать работу, не дожидаясь окончания выполнения такой программы.&#x20;

`User$ find / -name '*sh' > result &`&#x20;

`[1] 3345`&#x20;

Вышеуказанная команда ищет по всей файловой системе файлы, названия которых оканчиваются на *sh*. Список найденных файлов записывается в файле *result*. Поскольку команда выполняется в фоновом режиме, работу можно не прерывать. Вывод *\[1] 3345* означает, что фоновый процесс имеет номер **PID 3345**. Здесь PID означает **идентификатор процесса** (process ID). Номер PID интересен в том случае, когда процесс был аварийно завершен командой kill. Номер в квадратных скобках — это номер фонового процесса, запущенного в bash. Как правило, этот номер не важен.&#x20;

Если при запуске команды вы забудете поставить символ &, не следует ни дожидаться окончания выполнения программы, ни принудительно завершать программу нажатием Ctrl+C. Гораздо лучше приостановить выполнение программы, нажав Ctrl+Z, а затем продолжить ее работу в виде фонового процесса с помощью команды bg.&#x20;

**Выполнение нескольких команд**. После символа & вы также можете указать следующую команду. В таком случае первая команда будет выполняться в фоновом режиме, а вторая — на виду. В следующем примере рассмотренная выше команда find вновь запускается в фоновом режиме. Однако ls одновременно выводит содержание текущего каталога:&#x20;

`user$ find / -name '*sh' > result & ls`&#x20;

Если вместо символа **&** поставить точку с запятой, то bash поочередно выполнит команды в фоновом режиме:&#x20;

`user$ ls; date`

Эта команда сначала отображает содержание текущего каталога, а затем выводит текущий файл. Если необходимо перенаправить всю эту информацию в файл с помощью *>*, то обе команды ставятся в круглых скобках. В таком случае они выполняются одной и той же оболочкой.&#x20;

`user$ (ls; date) > content`&#x20;

В файле *content* теперь находится список файлов, созданный **ls**, а также текущая дата, выясненная **date**. Благодаря круглым скобкам обе команды выполняются одной и той же оболочкой и выдают общий результат (как правило, ситуация иная — при запуске каждой новой команды активируется новая оболочка).

Используя сочетания символов **&&** и **||**, можно выполнять команды относительно, то есть в зависимости от результата другой команды.&#x20;

`user$ команда1 && команда2`&#x20;

Выполняет *команду1*. Только в случае, если эта команда была выполнена успешно (без ошибки, без выдачи 0 в качестве возвращаемого значения), выполняется *команда2*.&#x20;

`user$ команда1 || команда2`

<figure><img src="https://1475196942-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUQ5Utaeg7lWvTKSyoVP7%2Fuploads%2F5BNf2SepW9zYvO5ZiML1%2Fimage.png?alt=media&#x26;token=1264d3bc-63f8-43d7-af29-75141eb1a60e" alt=""><figcaption><p>Выполнение команд</p></figcaption></figure>

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

**Простейшие команды для работы с каталогами.** Хотя при работе с KDE и Gnome в вашем распоряжении есть современные файловые менеджеры, опытные пользователи Linux охотнее работают с текстовыми командами. В след. табл. приведены самые важные из таких команд.

<figure><img src="https://1475196942-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUQ5Utaeg7lWvTKSyoVP7%2Fuploads%2Fa5ShozVDUgSzT8xD9cyd%2Fimage.png?alt=media&#x26;token=b6d62bfd-c1be-4805-817f-5e66b7e748cd" alt=""><figcaption></figcaption></figure>

Также, приведу краткую информацию по некоторым каталогам:

* Каталог **/** - корневой каталог системы
* Каталог **\~** - аналогичен каталогу **/home/\*username\*** и обозначает домашний каталог пользователя.&#x20;
