Командная строка или терминал является важным компонентом операционной системы Linux, поскольку позволяет осуществлять всеохватное администрирование и управление всей операционной системой. Даже если речь идет о дистрибутиве Linux, который использует графический интерфейс, то все равно понадобится терминал, чтобы раскрыть всю мощь и потенциал Linux.
Для работы в командной строке Linux предоставляет то, что называется "оболочка" или shell. Оболочка — это командный интерпретатор: она отвечает за то, чтобы что-то сделать из того, что вы вводите в командной строке. Наиболее популярная оболочка - bash (сокращение от "Bourne Again Shell", где "Bourne Shell" - название первой оболочки в Unix). Также могут применяться другие оболочки. Они могут предоставлять дополнительные возможности, но в целом работают идентично. Например, оболочка tcsh предоставляет скриптовый язык, который аналогичен языку программирования С. Также довольно распространена оболочка zsh
Для взаимодействия с операционной системой через командную строку применяются команды. В Linux очень много команд, и новые команды добавляются регулярно. Однако все эти команды имеют общий способ работы. Так, все команды состоят из трех частей: сама команда, ее параметры и аргументы. Например, возьмем одну из самых распространенных команд - ls, которая предназначена для вывода списка файлов и каталогов в определенной папке. При простом вводе ls мы получим список файлов и каталогов из текущей папки:
eugene@Eugene:~$ ls Android extensions Public Desktop gnome snap Documents Music Templates Downloads Pictures Videos eugene@Eugene:~$
В качестве второго параметра команды обычно принимают набор необязательных параметров. У каждой команды может быть множество различных параметров, и в зависимости от команды можно одновременно применять несколько из них. Например, команда ls может принимать параметр -l, который позволяет отобразить более детальную информацию о файлах и каталогах, в частности, права доступа, дату создания и т.д. Применим эту опцию:
eugene@Eugene:~$ ls -l total 72 drwxrwxr-x 3 eugene eugene 4096 Feb 19 10:24 Android drwxr-xr-x 2 eugene eugene 4096 Jan 28 14:39 Desktop drwxr-xr-x 15 eugene eugene 4096 Mar 7 20:49 Documents drwxr-xr-x 2 eugene eugene 12288 Mar 8 07:15 Downloads -rw-rw-r-- 1 eugene eugene 0 Jan 28 15:20 extensions -rw-rw-r-- 1 eugene eugene 0 Jan 28 15:20 gnome drwxr-xr-x 2 eugene eugene 4096 Jan 28 14:39 Music drwxr-xr-x 3 eugene eugene 4096 Feb 18 23:06 Pictures drwxr-xr-x 2 eugene eugene 4096 Jan 28 14:39 Public drwx------ 12 eugene eugene 4096 Mar 7 19:56 snap drwxr-xr-x 2 eugene eugene 4096 Jan 28 14:39 Templates drwxr-xr-x 2 eugene eugene 4096 Jan 28 14:39 Videos eugene@Eugene:~$
И кроме параметров команды могут принимать аргументы. Аргументы обычно представляют объекты, к которым применяется команда. Аргумент указывается в конце команды.
Например, команда ls в качестве аргумента получает путь к каталогу, содержимое которого надо получить. В примерах выше путь к каталогу не передавался, поэтому по умолчанию
команда ls
применялась к текущему каталогу. Но теперь передадим путь к каталогу /usr:
eugene@Eugene:~$ ls /usr bin games include lib lib32 lib64 libexec local sbin share src eugene@Eugene:~$
Если команда также принимает параметры, то аргумент указывается после необязательных параметров:
eugene@Eugene:~$ ls -l /usr total 148 drwxr-xr-x 2 root root 61440 Mar 4 19:40 bin drwxr-xr-x 2 root root 4096 Oct 16 13:38 games drwxr-xr-x 83 root root 16384 Feb 23 06:47 include drwxr-xr-x 109 root root 4096 Feb 23 15:13 lib drwxr-xr-x 3 root root 4096 Feb 18 22:41 lib32 drwxr-xr-x 2 root root 4096 Feb 5 22:04 lib64 drwxr-xr-x 22 root root 12288 Feb 26 19:25 libexec drwxr-xr-x 12 root root 4096 Mar 5 14:14 local drwxr-xr-x 2 root root 20480 Mar 3 12:05 sbin drwxr-xr-x 253 root root 12288 Mar 3 12:05 share drwxr-xr-x 6 root root 4096 Mar 8 07:08 src eugene@Eugene:~$
С помощью символа | (прямая вертикальная черта) можно составлять цепочки команд. Например, возьмем цепочку команд:
ls -R / | less
Здесь команда ls -R
выполняется и отправляет свой результат команде less. А команда less разделит полученные вывод на страницы и показывать вывод первой команды страницу
за страницей.
Еще один часто применяемый в терминале оператор — это оператор перенаправления >. По умолчанию результат выполнения команды отображается на консоли.
Используя же перенаправление, вы можете отправить его куда угодно, например, в файл. Например, вывдеем результат команды ls -l
в файл folder.txt
ls -l > folder.txt
В результате выполнения этой команды в текущей папке будет создаваться файл "folder.txt", если файл ранее не был создан. Если такой файл уже имеется, то он будет перезаписан.
Если такой файл есть, но его надо не перезаписать, а добавить результат команды к уже имеющемуся содержимому. Тогда можно использовать оператор >>
ls -l >> folder.txt
В процессе выполнения команды могут возникать ошибки. Для вывода ошибок применяется оператор 2>, например:
ls -l 2> errors.txt
Однако при выполнении команды мы можем точно не знать, будет ли ошибка или нет. В этом случае мы можем разграничить обычный вывод команды и вывод ошибок, например:
ls -l > folder.txt 2> errors.txt
В данном случае вывод команды записывается в файл "folder.txt". Но если будут ошибки, то они записываются в "errors.txt".
Для получении информации о командах Linux предоставляет специальную команду man (сокращение от "manual" - "руководство"). Этой команде передается название команды, о которой необходимо получить информацию:
man название_команды
Например, получим информацию о команде ls:
man ls
Консоль нам выведет что-то наподобие:
LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is speci‐ fied. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with .
Вывод команды man обычно включает следующие секции:
Name: это имя команды, а также вкратце назначение команды.
Synopsis: краткая информация об использовании команды. Она отображает все доступные параметры и указывает, является ли параметр необязательным (показан в квадратных скобках) или обязательным (не в скобках).
Description: описание команды.
Options: это полный список всех доступных параметров
Files: краткий список файлов, связанных с командой (при их наличии).
See also: список связанных команд.
Author: автор команды, а также его почтовый адрес
Другим способом получить информацию о команде представляет использование опции --help, которую имеют практически все команды. Например, получим справку по команде ls:
eugene@Eugene:~/Documents$ ls --help Usage: ls [OPTION]... [FILE]... List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --author with -l, print the author of each file -b, --escape print C-style escapes for nongraphic characters --block-size=SIZE with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format below -B, --ignore-backups do not list implied entries ending with ~ -c with -lt: sort by, and show, ctime (time of last modification of file status information); with -l: show ctime and sort by name; otherwise: sort by ctime, newest first -C list entries by columns --color[=WHEN] color the output WHEN; more info below
Таким образом, мы можем посмотреть все возможные опции, которые принимает команда, ее описание и синтаксис.
Оболочка Bash запоминает историю ввода команд и позволяет повторно использовать недавно использованные команды. Многие дистрибутивы запоминают последние 1000 команд,
которые использовал пользователь; на самом деле количество команд, которые запоминает оболочка, определяется в системной переменной с именем HISTSIZE
.
Сама история (последние 1000 команд) хранится в файле .bash_history в домашнем каталоге каждого пользователя. Чтобы увидеть всю эту историю, можно открыть данный файл, либо можно ввести в терминале команду history:
eugene@Eugene:~$ history 1 ls 2 ls -l 3 ls /usr/ 4 ls -l /usr 5 ls --help 6 history eugene@Eugene:~$
Linux позволяет повторить команду, использовав ее номер в истории. Например, в выводе выше под номером 4 идет команда ls -l /usr
. И чтобы повторить эту команду, достаточно ввести !4
(перед номером ставится восклицательный знак):
eugene@Eugene:~$ !4 ls -l /usr total 148 drwxr-xr-x 2 root root 61440 Mar 4 19:40 bin drwxr-xr-x 2 root root 4096 Oct 16 13:38 games drwxr-xr-x 83 root root 16384 Feb 23 06:47 include drwxr-xr-x 109 root root 4096 Feb 23 15:13 lib drwxr-xr-x 3 root root 4096 Feb 18 22:41 lib32 drwxr-xr-x 2 root root 4096 Feb 5 22:04 lib64 drwxr-xr-x 22 root root 12288 Feb 26 19:25 libexec drwxr-xr-x 12 root root 4096 Mar 5 14:14 local drwxr-xr-x 2 root root 20480 Mar 3 12:05 sbin drwxr-xr-x 253 root root 12288 Mar 3 12:05 share drwxr-xr-x 6 root root 4096 Mar 8 07:08 src eugene@Eugene:~$
Также можно очистить всю историю с помогает команды
history -c