Основные сведения о Bash

Завершено

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

Полный синтаксис команды Bash:

command [options] [arguments]

Bash обрабатывает первую найденную строку как команду. В следующей команде используется команда Bash ls (от "list" — "список") для вывода содержимого текущего рабочего каталога:

ls

Аргументы часто сопровождают команды Bash. Например, в команде ls можно указать имя пути, чтобы вывести содержимое другого каталога:

ls /etc

Большинство команд Bash имеют параметры, позволяющие изменить порядок их работы. Эти параметры, также называемые флагами, предоставляют командам уточняющие указания. Например, файлы и каталоги, имена которых начинаются с периода, скрыты от пользователя и не отображаются ls. Однако в команде -a можно включить флаг ls (от "all" — "все"), чтобы просмотреть все объекты в целевом каталоге:

ls -a /etc

Для краткости флаги можно объединять. Например, вместо длинной команды ls -a -l /etc для отображения всех файлов и каталогов в каталоге /etc можно ввести укороченный вариант:

ls -al /etc

Bash отличается лаконичностью. Иногда просто поражает (и является особым предметом гордости среди любителей Bash), как много можно достичь с помощью всего одной команды.

Получить помощь

С разными командами можно (или нужно) использовать разные параметры и аргументы. Поэтому для удобства документация Bash встроена в операционную систему. Справка всегда рядом с командой. Чтобы узнать о параметрах для команды, используйте команду man (от "manual" — "руководство"). Например, чтобы просмотреть все параметры для команды mkdir ("make directory"), введите следующее:

man mkdir

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

Большинство команд Bash и Linux поддерживают параметр --help. С его помощью можно получить описание синтаксиса и параметров команды. Например, введите mkdir --help. Выходные данные выглядят примерно так:

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

Справка, полученная таким способом, обычно более краткая, чем справка, полученная с помощью команды man.

Использование подстановочных знаков

Подстановочные знаки — это символы, представляющие один или несколько символов в командах Bash. Самый распространенный подстановочный знак — звездочка. Она представляет отсутствие символов или последовательность символов. Предположим, что в текущем каталоге содержится несколько сотен файлов изображений, но вы хотите увидеть только PNG-файлы, т. е. файлы, имена которых оканчиваются на .png. Вы можете получить список только таких файлов с помощью следующей команды:

ls *.png

Примечание.

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

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

ls *.jpg *.jpeg

И вот еще один:

ls *.jp*g

Подстановочный знак * представляет от 0 до любого числа символов, но подстановочный знак ? представляет один символ. Если в текущем каталоге содержатся файлы с именами 0001. jpg, 0002. jpg и т. д. до 0009. jpg, следующая команда выведет все эти файлы:

ls 000?.jpg

Для фильтрации выходных данных с помощью подстановочных знаков вы также можете использовать квадратные скобки, которые обозначают группы символов. Следующая команда выводит список всех файлов в текущем каталоге, в именах которых содержится точка и сразу следом за ней строчная буква J или P. Эта команда выведет список всех файлов с расширениями .jpg, .jpeg и .png, но не файлы с расширением .gif:

ls *.[jp]*

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

ls *.[jpJP]*

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

ls [a-z]*

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

ls [A-Z]*

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

ls [a-zA-Z]*

На основе всего этого можно угадать, что делают следующие команды?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Если вам нужно использовать один из подстановочных знаков в качестве обычного символа, сделайте его литералом или escape-символом, добавив обратную косую черту. Например, если по каким-то причинам в имени файла содержится звездочка (то, что никогда не следует делать преднамеренно), можно найти этот файл с помощью следующей команды:

$ ls *\**