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

LXF151:Покорим командную строку

Материал из Linuxformat
Перейти к: навигация, поиск
Ваши пальцы обладают суперсилой, главное – уметь ею пользоваться. Джонатан Робертс овладевает командной строкой...

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

И всем известно, что нажатие не на ту клавишу переведет компьютер в секретный скоростной режим, который расплавит процессор и уничтожит все данные.

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

Наша статья обучит вас всему, что необходимо знать. Сперва мы объясним, что такое командная строка и как выполнять команды и интерпретировать результаты. Затем мы займемся двумя мини-проектами. Первый познакомит вас с командами, потребными для повседневных задач, а также покажет ряд трюков для более продуктивной работы; во втором будут рассмотрены инструменты и приемы применения командной строки для диагностики и ликвидации проблем.

Присматривайте за врезками с примерами, поскольку проверка теории на практике – это лучший способ ознакомиться с материалом. А в качестве небольшого бонуса, сотрудники LXF открыли свои любимые трюки в командной строке. Мы многое увидим, многое узнаем и здорово позабавимся, так чего же вы ждете?

Содержание

Перво-наперво

Перед погружением в настоящую работу давайте начнем с самого начала (я знаю, это тавтология) и убедимся, что мы мыслим одинаково. Командная строка – это просто вариант интерфейса к вашему компьютеру, как Gnome или KDE. Ее отличает то, что здесь вы не нажимаете мышью на красивые кнопочки, а управляете компьютером, вводя команды с клавиатуры.

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

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

Например, моя домашняя папка, которая является подпапкой системной папки home (а та, в свою очередь, является подпапкой корневой папки), выглядит как /home/jon/. К такому представлению мы будем прибегать неоднократно, и это скоро сделается вашей второй натурой.

Ваша первая команда: ls

(thumbnail)
Чтобы получить доступ к командной строке, она же — оболочка, запустите приложение Terminal в Gnome или Konsole в KDE.

Разобравшись с основой, пора вызвать первую команду. Команда, с которой мы хотим начать, называется ls – она всего-навсего выводит список содержимого каталога. Действия команды легко запомнить: она похожа на “list”. Сначала мы вызовем терминал (см. врезку), после чего вы увидите на рабочем столе новое окно. Там на белом (или черном) фоне будет виден непонятный текст. Этот текст, с мигающим курсором после него, называется приглашением – оно указывает, что компьютер готов принимать команды.

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

Если посмотреть на выведенный текст повнимательнее, можно заметить, что он вам знаком... ба, это же список всех файлов вашей папки home!

Ваш первый аргумент

(thumbnail)
Ко­ман­да ls с пап­кой Music, ко­то­рую пе­ре­да­ли ей в ви­де ар­гу­мен­та.

Мило и несложно, не так ли? Но почему же команда вывела содержимое именно домашней папки, а не папки Music или какой-либо другой?

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

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

Однако мы можем сообщить ls, что намерены заглянуть в другое место, путем «передачи аргумента» этой команде. По сути это означает, что после ввода имени команды вы указываете расположение папки, содержимое которой вас интересует. Так, если вам хочется посмотреть содержимое папки с музыкой, команда должна быть ls Music.

Заметьте, что мы ввели просто Music, а не полный путь к этой папке, который выглядит как /home/jon/Music. Это называется «относительным путем»: поскольку мы уже внутри нашей домашней папки, полный путь указывать не нужно. Командная строка просто произведет поиск папки с заданным именем в текущем каталоге.

МИНИ-ПРОЕКТ 1 Рулим папками и файлами

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

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

Опять же для взаимопонимания, мы включили макет домашней папки на диск этого номера. Скопируйте его в вашу родную домашнюю папку и распакуйте любой понравившейся вам программой, внимательно проследив за именем папки (jons-home).

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

Первая наша задача в командной строке – попасть в эту лжедомашнюю папку. Запустите новое окно терминала и выполните команду ls, чтобы убедиться, что мы находимся в нашей домашней папке. Если вы распаковали фальшивую папку сюда, то в списке вы должны увидеть jons-home. Чтобы попасть в нее, необходимо использовать команду cd.

cd означает – по крайней мере, в нашем понимании – change directory [сменить каталог]; именно это команда и делает. Вызов cd без аргументов переместит вас в ваш домашний каталог, но нам туда не надо. А если приписать к команде аргумент – имя папки, куда вы хотите попасть – команда переместит вас в эту папку, что намного полезнее. Чтобы оказаться в jons-home, нужна, стало быть, команда cd jons-home.

По выполнении команды вроде бы ничего не происходит. Действительно, результат не так заметен, как в команде ls. Но, присмотревшись внимательнее, вы увидите, что текст в приглашении изменился. Тильда ~ пропала, и на ее место очутилось jons-home, имя новой текущей папки.

Эта часть приглашения всегда отображает имя текущей папки, чтобы вы не потерялись. Тильда ~, которая сперва кажется странной, на деле является сокращением для домашнего каталога пользователя. При желании в этом можно убедиться, если ввести сначала cd ~, а затем ls – вы снова попадете в ваш домашний каталог. Ура! Теперь взглянем командой ls на то, что внутри jons-home. Вы увидите, что там несколько файлов для каждой из статей, которые я написал для данного номера. Глупо и неряшливо. Не будет ли аккуратнее завести для каждой статьи отдельную папку? Думаю, да, и этим-то вы и займетесь.

Первым делом создадим папку для каждой статьи командой mkdir. Возможно, вам будет просто ее заучить, так как она напоминает “make directory” [создать каталог].

Чтобы команда mkdir сработала, ей нужно передать один аргумент, указывающий имя создаваемого каталога. Допустим, для создания каталога под файлы этой статьи выполните mkdir command-feature.


Возьмите себя в скобки

(thumbnail)
При­гла­ше­ние круп­ным пла­ном. Об­ра­ти­те вни­ма­ние, что по­сле ко­ман­ды cd оно ме­ня­ет­ся, что­бы все­гда по­ка­зы­вать те­ку­щий ка­та­лог.

Вам нужно выполнить эту команду три раза, поочередно вместо command-feature подставляя first-steps и WoE, чтобы создать папки для моих трех статей. Однако это долго, и командная строка предоставляет более быстрый способ проделывать такую операцию – раскрытие скобок [brace expansion].

Звучит немного глупо, но зато работает. Взгляните на следующую команду:

[jon@adam jons-home]$ mkdir {commandfeature, WoE,first-steps}

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

Этот трюк сработает не только с командой mkdir, но и с любой командой. Например, сейчас, когда у нас есть все три папки, мы можем переместить в них файлы (командой mv), вызвав одну команду для каждой группы файлов:

[jon@adam jons-home]$ mv {commandnotes, command-feature-1,commandfeature- 2} command-feature/

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

Правка текстовых файлов

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

Текстовые редакторы отличаются от рассмотренных нами команд тем, что они интерактивны, а не типа ввел-и-запустил. Представить такое сложно; однако, последовав пошаговому руководству, вы скоро все поймете. Мы возьмем текстовый редактор nano, так как он, безусловно, самый интуитивный. Но существует и множество других, и мы всячески приветствуем, чтобы вы исследовали их в свободное время, если nano будет недоступен (а вот Vi обязательно отыщется на любой системе Linux).

Поддерживайте порядок

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

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

Во-вторых, воспользуемся командой rm, передав ей в качестве аргумента имя файла, который нужно удалить. Но будьте осторожны с этой командой – для нее нет корзины, и если файл удален, то это навсегда: восстановить его будет невозможно.

Ни один из этих способов не будет работать, если вы захотите применить cp или rm ко всему каталогу – они годятся только для отдельных файлов. Чтобы показать, как это можно приспособить для каталога, познакомимся с опциями.

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

Знайте свои опции

(thumbnail)
Об­ра­ти­те вни­ма­ние, как оп­ция -l из­ме­ни­ла ра­бо­ту ls.

Каждая опция связана с отдельной буквой или строке текста, и в командной строке задается этой буквой или текстом, предваряемыми минусом или двумя минусами, соответственно. Чтобы понять, что имеется в виду, рассмотрим пример:

[jon@adam ~]$ ls -l jons-home

Опция -l команды ls означает “long” [длинная] и велит команде предоставить больше подробностей о содержимом рассматриваемой папки. Особенно приятно то, что опции можно сочетать с аргументами: даже когда мы велим ls выдать больше информации, мы все равно можем указать команде папку, которую хотим проверить.

Применительно к командам cp и rm, у них обеих есть опция -r, которая велит команде работать «рекурсивно». Это означает, что будет копироваться или удаляться все, что содержится внутри папки, включая подпапки и саму папку.



МИНИ-ПРОЕКТ 2 Найти и убрать проблемы

(thumbnail)
Об­ра­ти­те вни­ма­ние, что jon по­ме­нял­ся на root, то есть по­сле su — все ва­ши ко­ман­ды вы­пол­ня­ют­ся от име­ни не обыч­но­го поль­зо­ва­те­ля, а root.

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

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

Затем мы перейдем к командам, требуемым для сбора информации об оборудовании, и покажем важные файлы журнала, где хранится информация о работе системы.

Мы не станем показывать, какие файлы настройки надо редактировать и как это делается, поскольку тут слишком много возможностей, а данная задача сводится к запуску текстового редактора в сочетании с su -, и это мы все равно сейчас рассмотрим.

Права доступа, su и sudo

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

Каждый файл в системе, таким образом, «закреплен» за определенным пользователем, владельцем этого файла. Владелец может указывать, какие другие пользователи могут считывать и изменять его файлы, то есть владелец устанавливает права доступа.

Попробуйте, например, зайти в домашний каталог другого пользователя. Система просто не пустит вас туда. И это прекрасно, ведь система становится более защищенной и безопасной.

Более важно, однако, то, что системные файлы и файлы пользователя отделены друг от друга. Большую часть времени, когда вы вошли в систему как jon или fred, у вас ограниченный доступ к системе, и вы можете менять в основном только файлы из своего домашнего каталога.

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

В командной строке это достигается командой su (сокращение от switch user – смена пользователя). Если вы введете su -, вас сразу спросят пароль пользователя root. После его ввода появится новое приглашение, и если приглядеться, то можно заметить некоторые различия.

Та часть приглашения, что похожа на адрес электронной почты, уже не содержит имени пользователя: вместо него там стоит root@. В этой части приглашения всегда отображается имя пользователя, который в данный момент работает за компьютером. Если вам известен пароль пользователя, вы можете использовать su для переключения в любого пользователя, заменив - на его имя.

В Ubuntu и аналогичных системах для выполнения отдельных команд более привычно использовать команду под названием sudo (от super-user do), а не запускать целый сеанс пользователя root. То есть в Ubuntu вам нужно к каждой команде из этого раздела приписывать вначале sudo. В первый раз у вас затребуют ваш пароль, а в последующие вызовы – уже нет (если только у вас не будет простоя на пять или более минут).

Полный контроль

Описанные простые шаги обеспечат вам полный контроль над вашим компьютером. В дальнейшем не забывайте об этом, так как при работе от имени root потенциальная опасность от неправильно введенной команды намного выше (на самом деле, вам вряд ли удастся наделать много вреда: просто осторожнее обращайтесь с командой rm и никогда не вызывайте ее в папке /).

Разобравшись в правах доступа и научившись становиться root, мы можем начать сбор информации о вашей системе и получить помощь при наличии проблем. Сперва рассмотрим файлы журнала.

Ваш компьютер, работая, постоянно записывает информацию о своей деятельности и о проблемах, с которыми сталкивается. Вся эта информация хранится в файлах журнала [log files] – это простые текстовые файлы, и хранятся они в каталоге /var/log.




Файлы журнала

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

Причина здесь в том, что пользователем файлов из /var/log является root, как обсуждалось выше. Чтобы узнать содержимое любого из этих файлов, вам нужно воспользоваться командой su — или sudo, дающие полномочия root, и только потом вызывать nano или cat.

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

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

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

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

Информация о железе

(thumbnail)
Боль­шой и жут­кий вы­вод lspci удоб­нее пе­ре­на­пра­вить в файл.

Бывают моменты, когда наряду с файлами журнала требуется предоставить подробную информацию об оборудовании, на котором работает ваша система.

Смотреть какой-либо файл для этого не требуется: существуют специальные команды, которые выводят информацию о любом оборудовании, подключенном к вашей системе. Чаще всего из этих команд используются lspci и lsusb – они выводят список подключенных устройств PCI и USB, соответственно.

От lsusb, вероятно, большого прока не будет, зато lspci чрезвычайно полезна, поскольку большая часть основного оборудования вашей системы, включая графическую и сетевую карты, подключено через этот интерфейс.

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

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

Перенаправление

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

Перенаправление, делается символом > или |, помещаемым между той командой, чей вывод вы хотите взять, и файлом или программой, куда вы хотите направить этот вывод. Вот пример использования с командой lspci:

[jon@adam ~]$ lspci > lspci.txt

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

Заметим, что одиночный > перезапишет содержимое существующего файла, а >> припишет новые данные в конец существующего файла – очень важное и полезное отличие.

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

Супер-совет от man

(thumbnail)
Полезнейшая команда — man. Запуск man man покажет, как эффективнее ею пользоваться, и помните, что перемещение по экрану производится клавишами курсора.

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

Но прежде чем закончить, и в лучших традициях TuxRadar, расскажем еще об одном. Многие рассмотренные нами команды могут иметь различные опции и аргументы, и как прикажете упомнить, какие аргументы и опции передавать каждой команде, и в каком порядке?

Ну, благодаря команде под названием man у вас нет нужды запоминать все эти подробности для каждой команды. Вызовите man, передайте ей имя какой угодно команды вашей системы, и вы увидите страницы руководства для этой команды.

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

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