Обзор наиболее употребимых команд

Команды оболочки — очень эффективное средство для выполнения многих постоянно использующихся операций. С их помощью осуществляется навигация по файловой системе, поиск файлов, их создание, объединение, копирование, перемещение, удаление и многое другое.

Для вывода сообщений на экран служит встроенная команда echo , имеющаяся и в большинстве других оболочек. Она просто выводит на экран текст, введенный в виде аргумента. Например, команда

echo Hello, world!

выведет соответствующее сообщение:

Hello, world!

А в форме

echo $SHELL

она сообщит название используемой в данном сеансе оболочки; в случае оболочки bash ответом на нее будет

/bin/bash

Таким образом, команда echo может использоваться для получения информации о переменных окружения, таких, как пути к исполняемым файлам, абсолютный адрес домашнего каталога пользователя, системный редактор по умолчанию и т.д. (см. ниже).

Далее, группа команд предназначеная для просмотра содержимого файловой системы и навигации по ней. Первой цели служит многократно упоминавшаяся команда ls .

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

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

ls *.html

будет выведен список всех документов HTML текущего каталога.

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

Путь может указываться в абсолютной форме (от корневого каталога) и в относительной (от текущего каталога). Первая форма требует обязательного указания символа / (означающего корневой каталог всей файловой системы):

Is /home/userdir/subdirl ответом на что будет список

filel file2 ... file99

Относительный путь может задаваться различными путями. Например, если текущим является домашний каталог пользователя (/home/userdir), то команда

Is subdirl

выдаст список файлов в подкаталоге /home/userdir/subdirl. Каталог, находящийся одним уровнем выше текущего, обозначается символами .. (две точки). И, соответственно, при наличии в домашнем каталоге двух подкаталогов — /home/userdir/subdirl и /home/userdir/subdir2, содержание второго можно просмотреть, находясь в первом, следующей командой:

Is ../subdir2

Наконец, для обозначения домашнего каталога данного пользователя приняты обозначения ~/ или $НОМЕ (где $НОМЕ — имя пользователя). Таким образом, командой

Is ~

или эквивалентной ей командой

Is $HOME

пользователь может просмотреть содержимое своего домашнего каталога, вне зависимости от текущего каталога (для обозначения которого, к слову сказать, принят символ точки).

Все описанные выше соглашения о путяхотносятся не только к команде Is, но и к любым другим командам Linux.

Кроме аргументов, команда Is имеет многочисленные опции. Так, опция - 1 (от list) предписывает выводить полную информацию о содержащихся

в каталоге файлах, включая права доступа к ним, количество ссылок, имя владельца и наименование группы, размер файла, дату и время создания (содержание всехэтихатрибутов детально рассмотрено в«Руководстве администратора»). Для примера, команда

ls -l ~

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

drwxrwxr-x 6 alv alv 4096 Июн 12 12:23 office52

drwxrwxr-x 6 alv alv 4096 Июн 10 20:56 other

-rw-rw-r-- 1 alv alv 55 Июн 19 14:43 probe.txt

Полностью ознакомиться с опциями команды ls можно при помощи команды man ls . Заметим только, что опция -a (или --all ) выводит все файлы каталога, в том числе и помеченные как скрытые, а опция -F предписывает отличать имена каталогов от имен файлов косой чертой, то есть

ls -aF

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

.xmms/ soft/ .joerc .xnviewrc .bash_history .kde/ Desktop/

где имена вида .joerc являются скрытыми файлами, а soft/ — каталогам. Как нетрудно догадаться, имена вида .kde/ — суть скрытые каталоги.

Первое, что требуется для навигации по файловой системе — это определение положения текущего каталога в ее структуре, так как от этого зависят все дальнейшие действия. Этой цели служит команда pwd . Она не требует ни опций, ни аргументов, выводя в ответ полный абсолютный путь до текущего каталога. Например, сразу после авторизации пользователя это будет:

/home/username

Вторая из навигационныхкоманд, cd , служит для перехода из каталога в каталог. Это внутренняя команда оболочки, не имеющая опций. В качестве ее аргумента выступает путь (абсолютный или относительный) к каталогу назначения, который подчиняется всем правилам, описанным для команды ls . Таким образом, команда

cd ..

обеспечивает переход в каталог верхнего уровня,

cd /

в корневой каталог и т.д. Конструкции

cd $HOME и

cd ~

предписывают переход в домашний каталог данного пользователя, как и команда cd без указания аргумента.

Важным аспектом навигации по файловой системе является поиск файлов. Для этого предназначена команда find, отличающаяся своеобразным синтаксисом:

find [path] -option argument -action

Здесь path — это каталог, с которого следует начинать поиск, -option — критерий поиска, -action — действие в отношении найденного файла. В качестве опции могут выступать практически любые атрибуты файла, значения которыхуказываются в качестве аргумента: имя (-name) с аргументом — именем файла, владелец (-user), группа, к которой приписан файл (-group), тип файла (-type) с аргументами — обычный файл (f), символическая ссылка (1), каталог (d) и т.д. Возможные акции в отношении найденныхфайлов — вывод имен (с указанием полного пути) на экран в кратком (-print) или полном (-Is) формате, исполнение определенной команды (-exec) и т.д. Например, по команде

find /usr -type 1 -Is

будет произведен поиск символическихссылок, начиная с каталога /usr, и результат поиска будет выведен в виде списка файлов с указанием ихатрибутов (владельцев, прав доступа, даты создания и т.д.).

При задании имен файлов как аргументов поиска также можно применять шаблоны, однако символ шаблона должен предваряться символом \. Например, команда

find ~/ -name \*.html -print

предписывает найти все html-документы в домашнем каталоге данного пользователя. Однако, следует заметить, что расширение имени файла (в данном случае — *.html ) в Linux никак не связано с его типом и употребляется для удобства или для совместимости с другими ОС.

Следующая группа команд предназначена для управления файлами — ихко-пированием ( cp — от copy ), перемещением и переименованием ( mv — от move ), удалением ( rm — от remove ). Рассмотрим ихпо порядку.

Команда cp имеет два аргумента — имя исходного файла и имя файла целевого.

То есть конструкция вида cp file1 file2

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

cp ~/subdir1/file1 ~/subdir2/

скопирует указанный файл в другой каталог с тем же именем; обратите внимание, что имя файла во втором аргументе отсутствует. Хотя никто не запрещает задать его отличным от имени исходного файла, в результате чего в двухкаталогахбудут присутствовать одинаковые файлы с разными именами — подобно тому, как это имело место при копировании внутри одного каталога.

Особенностью команды cp является то, что если в целевом каталоге имеется файл с именем, совпадающим с именем исходного файла, содержание его будет уничтожено: оно заместится содержанием первого. И потеря эта — безвозвратна. Потому из многочисленныхопций команды cp одной из важ-нейшихявляется опция -i (--interactive ), которая вынуждает программу запрашивть подтверждение на исполнение необратимыхдействий, как-то перезаписывания файла в целевом каталоге.

Обычно во избежание случайного уничтожения файла при копировании (и тому подобныхнеобратимыхдействиях) опция -i включается как действующая по умолчанию (как — будет рассказано в разделе о настройке оболочки). В дистрибутивеASPLinuxтакое правило действует по умолчанию для администратора системы ( root ), который в состоянии уничтожить не только собственные файлы, но и любые другие файлы. Обычные пользователи должны сами позаботиться о сохранности своих данных.

Команда mv (от move — двигать) служит как для переименования, так и для перемещения файлов. В первом случае ее формат

mv file1 file2

в результате чего в текущем каталоге файл-источник замещается целевым файлом. При перемещении файла, каталоги, содержащие файл-источник и целевой файл, должны различаться:

mv ~/subdirl/filel ~/subdir2/

Имя целевого файла можно не указывать. Однако можно использовать эту команду и для переименования файла одновременно с перемещением. При использовании команды mv новый файл не создается, а существующий просто включается в состав другого каталога. В результате он сохраняет все свои атрибуты (дату создания, владельца, права доступа). Командой жесробразуется именно новый файл, отличающийся от файла-источника как минимум датой создания и, возможно, владельцем.

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

Команда rm (от remove — удалять) удаляет один или несколько файлов, указанныхв качестве ее аргументов.

Кроме указания имен файлов в качестве аргументов могут использоваться их маски (шаблоны). Правила ихобразования такие: символ ? заменяет любой символ, символ * — последовательность из любого количества символов. Например, команда

rm file*

удалит не только файлы с именами filel, file2 ... file99, но и файл с именем file.

Опция -i (--interactive) имеет силу и для команд mv и rm. При ее указании запрашивается подтверждение на выполнение действий, к уничтожению какихлибо данных. Как и для командыср, вASPLinuxэта опция задействована по умолчанию только для суперпользователя.

Командыср, rm применимы не только к единичным файлам или ихсериям, но и к каталогам. Для этого существует опция -R. Она распространяет действие команд, в качестве аргумента которыхуказаны имена каталогов, на все входящие в них файлы и вложенные подкаталоги. Так, команды

ср-R -iv ~/subdirl/ ~/subdir2/

и

rm -R -iv ~/subdirl

копируют и удаляют, соответственно, каталог subdir1 (со всем его содержимым, включая вложенные подкаталоги). В данныхпримерахвторая группа опций указывает на необходимость запроса подтверждения действий (-i ), во-первых, и вывод сообщений о ходе действий (-v ), во-вторых.

Рекурсия, применимая практически ко всем командам Linux, является мощным инструментом для всякого рода файловыхопераций. Однако она требует осторожного обращения. Так, команда

rm -R /

данная от лица суперпользователя, уничтожит всю файловую структуру начиная с корневого каталога.1

Существуют также команды, специально ориентированные на управление каталогами и неприменимые к отдельным файлам. Так, команда mkdir (от make directory ) создает новый каталог, а команда rmdir (от remove dir ) — удаляет существующий. В отличие от команды rm с опцией -R , она в состоянии делать это только с пустыми каталогами.

Наконец, серия часто используемыхкоманд предназначена для просмотра содержимого файлов. Первой следует назвать команду cat (от concatenate — объединение, смысл чего станет ясным в следующем разделе). Если в качестве аргумента в ней задать имя существующего файла, она отобразит его содержимое на стандартном устройстве вывода (обычно на экране). Аргументов у команды cat может быть несколько. В этом случае все перечисленные файлы будут выведены один за другим.

Заданная без параметров, команда cat считывает данные со стандартного устройства ввода (обычно клавиатуры). В данном случае это практического смысла не имеет, так как введенные символы исчезнут по завершении работы команды. Однако эта ее особенность будет использована в дальнейшем.

Команда cat только выводит содержимое файла на экран, без возможности перемещения по нему. Конечно, с помощью простой комбинации клавиш Shift + PageUp / PageDown содержимое это может быть просмотрено в буфере экрана, но это обусловлено свойствами консоли Linux, а не оболочки bash или самой команды.

Команда more также предназначена для просмотра содержимого файлов, имена которых(одного или нескольких) обязательны в качестве аргумента. Однако она предоставляет возможность перемещения по файлу, правда, только в одном направлении (от начала к концу) — построчно (с помощью клавиши Enter ) или постранично (с помощью клавиши Пробел ). Приглашение командной строки в ней возвращается после полного пролистывания файла или после нажатия на клавишу q .

1 ВНИМАНИЕ!Не пытайтесь проверить действие команды на работающей системе!

Команда less, в отличие от more, допускает двунаправленную навигацию по выведенному тексту — вперед и назад, как построчно (клавишами Down и Up I), так и постранично (клавишами PageDown и PageUp I). Кроме того, для однонаправленного просмотра могут использоваться клавиши Enter и Пробел (как и в more). По достижении конца файла команда less допускает дальнейший его просмотр назад, так как не возвращает приглашения командной строки автоматически — это следует сделать принудительно, нажав клавишу

И

Приведенными примерами список команд, доступныхв оболочке bash, не исчерпывается. Некоторые из необходимых и часто используемых команд будут упомянуты в следующихразделахэтой главы. Напомним, что более подробные сведения о нихможно получить из интерактивной документации — с помощью конструкций man имя_команды или info имя_команды.

Еще материалы по теме: