Журнал LinuxFormat - перейти на главную

LXF145:Shell

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Майк Сондерс ведёт тренинги Linux

Часть 5: Основательно покопавшись в «железе», файловой системе и пакетах, пора полностью освоить командную строку.


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

  • Она всегда с вами. Она существует за всеми слоями графики, видимыми в типичном настольном дистрибутиве Linux, и даже если оконный менеджер работает некорректно, можно нажать Ctrl+Alt+F2, переключиться в командную строку и исправить неполадки.
  • Ей не нужна графика. На компьютер можно зайти удаленно (по SSH) с другого конца света по коммутируемому соединению и работать так же, как на локальной машине. Не нужны тормозные VNC или удаленный рабочий стол. Аналогично, на многих компьютерах, например, на серверах, графический интерфейс ни к чему. Достаточно командной строки.
  • Она пряма и непосредственна. Она делает именно то, что ей велено. Никакой ерундистики вроде «кликните по красной кнопке недалеко от левого верхнего угла окна, затем найдите меню Foo и поставьте галочку рядом с ним». Вы просто набираете именно то, что должен выполнить компьютер, и он выполняет это. Никаких хождений вокруг да около.

Поэтому все хорошие администраторы обладают глубоким пониманием командной строки, и если вам нужен сертификат LPI, вы должны усвоить идеи и утилиты, о которых мы поговорим. Если вы новичок в Linux, это еще и прекрасный способ понять, насколько мощный и гибкий инструмент командная строка. В предыдущих статьях мы применяли несколько отдельных команд, а теперь изучим Bash – оболочку по умолчанию в 99,9 % дистрибутивов Linux – более глубоко; итак, начнем!


Раздел 1: Ориентируемся

Если у вас графический рабочий стол Linux, командную строку можно открыть с помощью меню – она обычно называется Terminal [терминал], Shell [оболочка], XTerm или Konsole [консоль]. В данном случае мы работаем в CentOS 5.5, где для вызова командной строки используется пункт меню Applications > Accessories > Terminal (Приложения > Стандартные > Терминал). После ее запуска мы увидим вот что:

[mike@localhost ~]$

Это строка приглашения, и она состоит из четырех частей. Первая – имя пользователя, который в данный момент находится в системе; здесь это mike. За ним следует имя хоста нашего компьютера – localhost. Тильда (~) показывает, в каком каталоге мы находимся; например, вместо нее могло бы быть bin, если бы мы находились в каталоге /usr/bin. Обычно сеанс терминала начинается в домашнем каталоге пользователя, и тильда – короткий способ указать на /home/mike, поэтому она здесь.

Наконец, символ доллара –приглашение для ввода. Оно значит, что мы вошли в систему как обычный пользователь; если ввести su для перехода в учетную запись суперпользователя (root), а затем пароль, символ доллара сменится на решетку (#). Попробуем ввести команду – часто это всего одно слово, например:

uname

Команда выводит название операционной системы – «Linux». Однако в закромах uname есть и другие возможности, и для доступа к ним служат флаги (они же – параметры, или ключи).

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

uname -a

Она запустит программу uname, но передаст ей флаг -a, который означает «показать всю информацию» – и вы получите гораздо более подробный вывод. Список доступных ключей для большинства команд можно просмотреть с помощью флага --help, например, uname --help.


Итак, теперь вы знаете, что искать в строке приглашения, как ввести команду и как изменить ее поведение. Это все основы – теперь перейдем к управлению файлами.

Сперва введите команду ls – вывести список файлов. Она показывает файлы и каталоги в текущем каталоге и в зависимости от дистрибутива может выделять цветом различные элементы списка: например, подкаталоги могут быть окрашены голубым.

Команда ls без параметров не отображает скрытых элементов – это файлы и каталоги, чьи имена начинаются с точки. Чтобы увидеть все файлы, наберите ls -a. (Скрытые файлы – обычно файлы настройки, они не отображаются, чтобы не путать их с обычными файлами.) Для более подробного вывода скомандуйте ls -l. Учтите, что флаги можно комбинировать – например, так: ls -l -a, или еще короче: ls -la. Эта команда выводит более подробную информацию о файлах и каталогах, включая владельца, размер, дату изменения и пр.

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

mkdir newdir

Мы можем войти в него по команде cd (change directory – сменить каталог):

cd newdir

Если теперь ввести ls, вы увидите, что внутри каталога ничего нет. Для возврата в предыдущий каталог введите cd .. (cd, пробел, точка, точка).


Если в прежние времена вы пользовались DOS, вам покажутся знакомыми эти две точки – они всегда являются ссылкой на родительский каталог. Однако в отличие от DOS в команде должен быть пробел. Стоит также отметить, что в отличие от DOS все команды и имена файлов чувствительны к регистру.

Команду cd можно вызывать в текущем каталоге с каталогами в качестве параметров, но можно указывать и полные пути. Например, можно перейти в каталог /usr/bin командой

cd /usr/bin

У команды cd есть еще одна удобная возможность: введя cd без параметров, вы перейдете в домашний каталог. Это экономит время – если у вас особо развесистый логин, вам не придется набирать что-то длинное вроде cd /home/bobthebob1234.

Чтобы вывести полный путь до каталога, в котором вы находитесь, введите команду pwd (сокращение от «print working directory – вывести рабочий каталог»). Если вы только что сменили каталог, например, с /usr/bin на /etc, введите команду cd — (cd, пробел, дефис), чтобы вернуться в каталог, где вы только что были.



Раздел 2: Ныряем глубже

Имена файлов и каталогов бывают длинными, особенно когда объединяются в пути, но в Bash есть хитроумное средство: дополнение по клавише Tab. Наберите несколько первых букв имени файла или каталога, нажмите Tab, и Bash попытается завершить его. Например, наберите cd /usr/lo и нажмите Tab – и путь должен дополниться до /usr/local. Если в /usr есть два или более каталогов, начинающихся с lo, Bash покажет все возможные варианты.

Дополнение по Tab экономит массу времени в Linux, как и история команд. С помощью стрелок вверх и вниз можно перемещаться по списку предыдущих команд (они хранятся в .bash_history в вашем домашнем каталоге). С помощью стрелок вправо и влево можно передвигаться по команде и редактировать ее. Введя history, вы увидите список последних введенных команд.

Теперь рассмотрим несколько команд для манипуляций с файлами. Чтобы скопировать файл, воспользуйтесь cp:

cp file1.txt file2.txt

Можно скопировать несколько файлов в каталог командой cp file1 file2 file3 dir. Команда перемещения файлов работает похожим образом, и с ее помощью можно переименовать файлы: mv oldname newname. Чтобы удалить файл, воспользуйтесь командой rm filename. Но – предупреждаем: rm не заходит в каталоги и не удаляет то, что внутри, включая подкаталоги. Для этого укажите ключ «рекурсивно»:

rm -r directory

Эта команда удаляет каталог и все файлы и подкаталоги внутри него – ну очень мощная и разрушительная команда! (Ее альтернатива – команда rmdir.) Если вам попадется файл, который вы не можете идентифицировать – например, его имя не слишком наглядно или у него нет осмысленного расширения – воспользуйтесь командой file, которая всегда под рукой:

file /usr/bin/emacs


Эта отличная утилитка берет несколько первых байтов файла и пытается определить его тип (если это возможно). Например, обнаружив заголовок JPEG, она скажет вам, что это файл JPEG. Система, которую использует file, называется «волшебной» и представляет собой базу данных байтов, определяющих тип файлов. Конечно, она работает корректно не во всех случаях, и может оказаться, что простой текстовый файл определится как «База данных Microsoft FoxPro» или другая жуть, если внутри него случайно окажется определенная последовательность байтов.

Иногда бывает нужно изменить время создания файла или создать пустой файл, и здесь в дело вступает команда touch. Опять же, часто нужно определить местоположение файлов командной строкой, и есть два способа это сделать: locate и find. Они работают примерно одинаково, но есть одно фундаментальное различие: команда locate foobar.txt свяжется с заранее созданной базой данных и быстро скажет вам, где находится файл. Эта база данных обычно обновляется раз в день по расписанию программой Cron, поэтому информация в ней может быть неактуальной.

Для более точных результатов воспользуйтесь командой find, например, так:

find /home/mike -name hamster


Она выполнит доскональный поиск в каталоге /home/mike (и его подкаталогах) в поисках всех файлов и каталогов, содержащих «hamster» в своем имени. Но что если вы намереваетесь произвести поиск в текущем каталоге? Вряд ли вам захочется набирать его полный путь. Выход есть: помните, ранее мы упоминали, что .. (две точки) – родительский каталог по отношению к текущему. А вот . (одна точка) – это текущий каталог. Поэтому предыдущую команду можно переписать так, учитывая, что вы уже находитесь в каталоге /home/mike:

find . -name hamster

В команде find также можно оговорить размер файла: find . –size +100k ищет все файлы размером больше 100 килобайт в текущем каталоге (используйте M для МБ и G для ГБ). Другая альтернатива – поиск по типу: find . -type f найдет только файлы, а -type d – только каталоги. Опции -name, -size и -type можно объединять для конкретизации условий поиска.

В Bash есть исчерпывающие возможности для указания маски нескольких файлов без необходимости перечислять их имена. Звездочка (*), например, означает «любая комбинация букв, цифр и других символов». Попробуйте выполнить команду

ls *.jpg

Она выведет список всех файлов с расширением .jpg, будь это bunnyrabbit.jpg, 4357634.jpg или что-то еще. Ею удобно пользоваться для перемещения и удаления файлов: если у вас есть каталог с изображениями и вы хотите избавиться от тех, что с расширением .bmp, можно выполнить команду rm *.bmp. Если нужна маска только для одного символа, воспользуйтесь знаком вопроса:

mv picture?.jpg mypics

Эта команда переместит picture1.jpg, pictureA.jpg и т.д. в каталог mypics.

Раздел 3: Разберемся в окружении

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

echo $BASH_VERSION

Здесь echo – команда, которая просто выводит текст, в данном случае значение переменной $BASH_VERSION, на экран. Вы увидите число вроде 3.2.25. Программы могут проверять значение переменной в собственных целях – например, чтобы узнать, запущена ли версия 3.0 или новее и, следовательно, есть ли в ней определенные функции. Чтобы увидеть полный список используемых переменных окружения с их значениями, введите env.

Можно создать и свою переменную среды:

export FOO=“bar”
echo $FOO

(Обратите внимание, что в первой команде нет знака доллара.) Новая переменная $FOO будет существовать, пока открыт сеанс терминала; когда вы закроете его, набрав exit или нажав Ctrl+D, переменная исчезнет. Чтобы сохранить переменную, добавьте ее в файл .bashrc в вашем домашнем каталоге. В этом файле содержатся определения переменных и другие настройки, которые считываются в начале нового сеанса. Сохраните изменения, перезапустите терминал, и они войдут в силу.

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

unset FOO

Эти возможности, в сочетании с дополнением по Tab, символами маски и историей команд, делают командную строку Linux необычайно эффективной, особенно по сравнению с неуклюжей командной строкой DOS из далекого прошлого. Чем ближе вы будете знакомится с командной строкой, тем больше будет соблазн покинуть файловый менеджер.

Главное, ситуация всегда у вас под контролем. При работе в командной строке нельзя случайно выбрать неверную опцию (не считая опечаток): вы делаете именно то, что хотите. Впрочем, это только часть истории – в следующий раз мы научимся перенаправлять вывод с одного терминала на другой или в файл для последующего просмотра. Не пропустите!

Персональные инструменты
купить
подписаться
Яндекс.Метрика