Основные сведения о 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 *\**