Оболочка Bash — шпаргалка для начинающих
267К открытий283К показов
В данной шпаргалке затрагиваются следующие темы: введение в оболочку, навигация, основные команды, переменные окружения, коннекторы, конвейеры, перенаправление ввода/вывода, права доступа и комбинации клавиш.
Оболочка Bash: введение
Оболочка, или шелл (shell) — это программа, в нашем случае названная «bash», что является сокращением от Bourne Again Shell. Оболочка принимает ваши команды и передаёт их операционной системе. Для взаимодействия с системой используются терминалы, такие как gnome-terminal, eterm, nxterm и т. п.
Навигация
В Linux файлы и каталоги имеют иерархическую организацию, то есть существует некий начальный каталог, называемый корневым. В нём содержатся файлы и подкаталоги, которые в свою очереди содержат файлы и свои подкаталоги.
pwd
Команда pwd
, сокращение от print working directory, отображает текущее местоположение в структуре каталогов.
cd
Команда cd
позволяет перейти в новый каталог.
mkdir
Команда mkdir
создаёт новый каталог в текущем каталоге.
Основные команды
man
Команда man
отображает руководства по командам. Например, следующая команда выдаст всю информацию о команде cat
:
cat
Команда cat
считывает файл, переданный как аргумент, и выводит его содержимое по стандартному каналу вывода. Передача нескольких файлов в виде аргумента приведёт к выводу конкатенированного содержимого всех файлов.
echo
Команда echo
выводит свои аргументы по стандартному каналу вывода.
Если вызвать echo
без аргументов, будет выведена пустая строка.
head
Команда head
читает первые 10 строк любого переданного текста и выводит их по стандартному каналу. Число выводимых строк можно изменить:
tail
Команда tail
работает аналогично команде head
, но читает строки с конца:
Также можно просматривать добавляемые к файлу строки в режиме реального времени при помощи флага -f
:
less
Команда less
позволяет перемещаться по переданному файлу или куску текста, причём в обоих направлениях.
Подробнее о назначении символа | будет рассказано ниже в разделе команды history
.
true
Команда true
всегда возвращает ноль в качестве выходного статуса для индикации успеха.
false
Команда false
всегда возвращает не-ноль в качестве выходного статуса для индикации неудачи.
$?
$?
— это переменная, которая содержит выходной статус последней запущенной команды. Под статусом обычно понимается код возврата программы. 0 означает успешное выполнение программы, любое значение большее 0 отражает тот факт, что в процессе выполнения возникли некоторые ошибки. Кстати, именно поэтому в bash истинной (true) считается 0, а все, что не 0 — ложью (false):
grep
Команда grep
занимается поиском переданной строки в указанном файле:
grep
также может принимать несколько файлов и регулярных выражений для уточнения формата текста.
Также можно ознакомиться с руководством по regex. У нас на сайте тоже есть руководство по «регуляркам» в Python для новичков.
sed
Команда sed
— это потоковый редактор, преобразующий входные текстовые данные. Обычно её используют для замены выражений так: s/regexp/replacement/g
. Например, следующий код заменит все слова «Hello» на «Hi»:
Также вы можете ознакомиться с руководством по sed.
history
Команда history
выводит историю командной строки. Обычно её используют вместе с командой grep
для поиска конкретной команды. Например, следующий код найдёт все команды, содержащие строку g++
:
Здесь также используется символ | — это так называемый конвейер (pipe). Благодаря ему можно перенаправлять вывод одной команды на вход другой — таким образом в примере выше вся история, которая в обычном режиме выводится командой history
прямо в вывод терминала, будет перенаправлена в grep в качестве входных данных. Мы не увидим вывода команды history
, но увидим вывод команды grep
.
Это может быть довольно сложно для понимания без практики, поэтому поэкспериментируйте самостоятельно, например с командами ls
, history
, ps
(описана ниже), перенаправляя их вывод в grep
, sed
или less
, например.
export
Команда export
устанавливает переменные окружения для передачи дочерним процессам. Например, так можно передать переменную name
со значением student
:
ps
Команда ps
выводит информацию о запущенных процессах.
Выводится четыре элемента:
- ID процесса (PID),
- тип терминала (TTY),
- время работы процесса (TIME),
- имя команды, запустившей процесс (CMD).
awk
Команда awk
находит и заменяет текст в файлах по заданному шаблону: awk 'pattern {action}' test.txt
wget
Команда wget
скачивает файлы из Сети и помещает их в текущий каталог.
nc
Команда nc
— это утилита для отладки сети. Также можно ознакомиться с руководством по nc.
ping
Команда ping
тестирует сетевое подключение.
Статистика в конце показывает количество подключений, совершённых до завершения команды, и время их выполнения.
git
Git
— это популярная система контроля версий. Также можно ознакомиться с руководством по git и нашими материалами.
Переменные окружения
Переменные окружения — это именованные переменные, содержащие значения, используемые одним или несколькими приложениями.
Переменная PATH
содержит список каталогов, в которых система ищет исполняемые файлы.
Переменная HOME
содержит путь к домашнему каталогу текущего пользователя.
Коннекторы
Коннекторы позволяют запускать несколько команд одновременно.
Конвейеры
Конвейеры, или пайпы, позволяют соединять входные и выходные каналы различных команд. В следующем примере вывод команды ls
будет передан в head
, и в результате будет напечатано лишь 10 первых элементов.
Перенаправление ввода/вывода
Перенаправление вывода
Для стандартного перенаправления вывода используются символы >
и >>
.
Например, этот код передаст вывод ls
в файл, а не на экран:
Если файл не существует, он создаётся, а если существует, то перезаписывается. Во избежание перезаписи стоит использовать команду >>
— она дописывает данные в конец файла.
Перенаправление ввода
Для стандартного перенаправления вывода используется символ <
. В следующем примере sort
берет входные данные из файла, а не с клавиатуры:
Команда sort
выводит содержимое файла на экран, поскольку мы не перенаправили выход. Это можно сделать так:
Продвинутое перенаправление
Добавление &
к >
приводит к перенаправлению как стандартного потока выхода, так и потока ошибок. Например, файл test.cpp
выведет строку stdout
в cout
и строку stderr
в cerr
.
Если вы хотите вывести конкретный файловый дескриптор, вы можете приписать его номер к >
.
Например, для перенаправления stderr
в test.txt
нужно сделать следующее:
Права доступа
Команда ls -l
выводит много информации о правах доступа к каждому файлу:
chmod
Команда chmod
изменяет права доступа файла. Вот типичные сочетания флагов для изменения прав конкретных пользователей:
Вы можете вызвать chmod
с описанием действий над конкретным файлом. Символ -
обозначает удаление прав, символ +
— добавление. Следующий пример сделает файл доступным для чтения и записи владельцу и группе:
Кроме того, chmod
можно использовать с восьмеричными числами, где 1
— это наличие прав, а 0
— отсутствие:
Следующая команда сработает так же, как и предыдущая:
Также можно ознакомиться с руководством по правам доступа.
Сочетания клавиш
267К открытий283К показов