В зависимости от вашего опыта работы с компьютерами Linux покажется вам либо удивительно сложной и непостижимой (в том случае, если вы работали ранее с Microsoft Windows или компьютерами Macintosh), либо (если вы работали с MS-DOS или UNIX) еще одной простейшей операционной системой, управляемой из командной строки. Истина — посередине. Да, Linux может временами быть сложной и непостижимой, и, кроме того, она действительно построена на основе гштерфейса командной строки (даже если вы используете Х Window). Однако Linux не сложнее, чем MS-DOS или UNIX, и имеет утилиты, соперничающие с аналогичными программами для Windows или Macintosh.
Прежде чем вы начнете погружаться в глубины Linux, запомните два правила, которые упростят вам жизнь:
• Linux — это набор небольших простых команд. Если вы упростите вашу задачу и разобьете ее на отдельные подзадачи, вы сможете сделать практически все.
• Даже когда вы работаете с XFree86 (графическим интерфейсом Linux), вы работаете с набором небольших простых команд.
Вы уже должны были понять, что тот, кто хочет разобраться с Linux, должен в первую очередь стремиться разобраться с командами Linux. Предлагаемая вашему вниманию книга содержит описания команд Linux. Однако до того, как вы начнете изучать команды, вы должны понять, как вводить команды п как Linux их обрабатывает.
Командная строка
Мы уже отмечали, что работа с Linux основана на использовании командной строки. Команды вводятся в команд-нон строке. Когда Linux готова к приему команд, она сообщает вам об этом, выводя на ваш экран символ доллара:
Знак доллара называется приглашением командной строки и сообщает вам о том, что Linux готова к приему команд. Вы можете ввести либо отдельную команду, либо набор команд и параметров, которые вместе называются командной строкой.
Командой обычно называется то же самое. Все, что вы вводите с клавиатуры после приглашения командной строки, Linux воспринимает как команду — приказ сделать что-нибудь. Вы можете использовать команды как для выполнения каких-либо действий (например, перемещения или копирования файлов), так и для запуска программ (таких, как elvis ILTII emacs). Linux имеет вполне определенный набор команд, поэтому если то, что вы введете, не будет распознано как одна из команд, вы получите предупреждение о невозможности найти указанную команду. Вы можете найти полный список команд в определенных каталогах, но не будем забегать вперед. Операционная система Linux имеет сотни команд.
Команды могут иметь параметры, которые определяют, как именно будет выполняться команда и что она будет делать. Параметры также могут указывать, что команда должна выполняться только при соблюдении определенных условии. В качестве примера мы разберем одну из команд и некоторые ее параметры.
Как вы можете видеть, текущий каталог в нашем примере содержит единственный файл — 00601. tif. (Имена файлов и каталогов, упоминаемые в этой главе, не важны; все, что вам требуется запомнить, — это способы обозначения файлов и каталогов, которые могут быть использованы в сочетании с почти любой командой.) Однако команда Is без параметров выводит список только тех файлов, которые доступны всем пользователям и не являются скрытыми.
Глава 1. Основные понятия и команды
Скрытые файлы имеют имена, начинающиеся с точки (.):
если вы хотите, чтобы они тоже вошли в список, вы должны указать это команде Is. Вы должны указать соответствующий параметр. Для этой цели используется параметр -а. Если вы укажете его после команды, то будет выведен список всех файлов и подкаталогов текущего каталога, включая скрытые.
Продолжая наш пример, приведем результат выполнения команды Is с параметром -1, который указывает на необходимость вывода подробной информации о файлах и каталогах.
В главе 5, содержащей описание команд, значительное внимание уделено описанию их параметров. Очень немногие команды Linux не имеют параметров или аргументов какого-либо рода.
Файлы
Команда Is используется для вывода списка файлов в текущем либо любом другом заданном каталоге. С точки зрения Linux достаточно странно, что аргументом этой команды может служить не файл. Изучая эту книгу, вы обнаружите, что подавляющее большинство команд имеют дело с файлами.
Практически все, с чем вы имеете дело в Linux, является файлами. Вы уже знаете, что команда Is выводит список файлов в каталоге, и именно потому, что все является файлом, эта команда так удобна. Команды — это не что иное, как файлы, содержащие программы. Устройства, присоединенные к вашему компьютеру, представлены в Linux файлами, которые, как правило, находятся в каталоге /dev. Когда вы печатаете текст, вы на самом деле просто отправляете его в файл, представляющий принтер.
Грубо говоря, файл представляет собой просто упорядоченную область на устройстве хранения информации, состоящую из битов. Бит — это наименьшая единица информации, он может содержать одно из двух значений: О или 1. Операционная система Linux организует биты в форму, понятную как вам, так и компьютеру. Без этой организации жесткий диск представлял бы собой бессмысленную смесь нулей и единиц. Система организации жесткого диска называется файловой системой.
Вот почему основная функция операционной системы Linux — управление файлами. Важность команды Is трудно переоценить — ведь она позволяет вам узнать, какие файлы находятся в данном месте файловой системы в данное время. И именно поэтому другие часто используемые команды Linux также связаны с управлением файлами — такие команды, как elvis для редактирования, пп для удаления и mv для перемещения файлов.
Всего имеются четыре типа файлов:
• файлы устройств,
• каталоги,
• ссылки,
• обычные файлы.
Ниже приведены описания этих типов файлов в порядке их важности л-тя операционной системы Liniix:
• Обычные фпй:1ы — рядовые файловой системы'. Обычно они содержат .танные, используемые программами и операционной системен. Обычный файл может содержать текст, данные для какой-либо программы (например, это может быть файл форматирования для программы разбивки на страницы пли база данных), код программы пли текст программы для интерпретируемого языка программирования, такого как Peri пли Тс1.
• Катало/и являются файлами, содержащими информацию о других файлах. Файловая система в Liniix имеет иерархическую структуру, организованную при помощи каталогов. Каталоги обсуждаются ниже в этой главе.
• Файлы устройств представляют устройства, подключенные к вашему компьютеру. Эти файлы обычно находятся в каталоге /dev. Например, файл, представляющий устройство накопления на магнитной ленте, может иметь имя /dev/stO.
• Ссылки позволяют хранить один 4>айл в файловой системе под различными именами. Ссылки не играют большой роли в Linux, если только вы не работаете в сети2. Ссылки — наследие былых времен, когда места для хранения данных было так мало, что пользователи должны были использовать один и тот же файл, но, в связи со строением сети, ему должны были быть присвоены различные имена.
Каталоги
Как мы упоминали ранее, каталоги — это файлы, предназначенные для хранения других файлов. Каталоги необходимы в операционной системе наподобие Linux. В Linux каждая команда является файлом, каждое устройство является файлом н каждая программа состоит по крайней мере пз одного файла (а обычно из значительно большего их количества). Запишите все эти файлы в одно место — и вы совершенно потеряетесь среди тысяч отдельных файлов. Может быть и хуже — при работе в сети пользователь может иметь доступ нс только к файлам на своем компьютере, но и к тысячам файлов на других машинах и. возможно, на файловом сервере. Конечно, нет никакого способа не запутаться в этих (файлах, за исключением создания некоторой иерархической структуры для их хранения. Тут-то на передний план н выходят каталоги.
Иерархия каталогов в Linux (вы можете представлять се себе как пирамиду) достаточно проста. На вершине пирамиды находится корневой каталог, обозначаемый символом косой черты (/). Каждый каталог является подкаталогом корневого каталога. Кроме того, подкаталоги могут также содержать подкаталоги и т. д.
Любой пользователь в каждый момент времени «находится» в каком-либо каталоге, называемом текущим каталогом. Приглашение командной строки обычно содержит имя текущего ката-лога (начинающееся с косой черты, обозначающей, что каталог содержится в иерархической структуре, вершиной которой является корневой каталог).
Обычная Linux-система, такая как Slackware Linux, имеет вполне определенный набор каталогов.
Некоторые из этих каталогов имеются практически в любой UNIX-системе — это каталоги etc, sbin, usr и var. Heкоторые из каталогов типичны для Linux-систем — это boot, cdrom, mnt, proc. shiib'. Каталоги root 11 home предназначены для хранения информации пользователей. Если вы сами устанавливаете Linux, то, скорее всего, в вашей системе будет по крайней мере один домашний катало/ root, используемый, когда вы входите в систему как пользователь root, и, вероятно, еще один — в каталоге home.
Linux содержит набор команд, позволяющих вам создавать ваши собственные каталоги. Эти команды обсуждаются далее в этой книге.
Стандартный ввод/вывод и их перенаправление
Третья часть головоломки Linux — связь между командами и файлами, организуемая при помощи стандартного ввода и вывода. Не пугайтесь технического термина — это понятие на самом деле касается того, как структурирована командная строка и куда отправляются результаты выполнения команды.
Linux, как и любая операционная система, при выполнении команды нуждается в информации, откуда команда будет получать данные и куда их выводить. Другие операционные системы, такие как Windows и Macintosh, самостоятельно делают предположения об источнике входных данных и назначении выходных. Зачастую так поступает и Linux. Однако, в большинстве случаев, вам самим следует подумать, откуда команда будет получать данные и куда выводить. Ниже мы объясним основы концепции стандартного ввода/вывода на примере.
Стандартный ввод/вывод и их перенаправление
Команда cat — удивительно многосторонняя команда. Она может использоваться для вывода содержимого файла на экран, добавления данных в конец файла и других операций. Она даже может быть использована в качестве простейшего текстового редактора:
$ cat
После ввода этой команды курсор переместится в следующую строку, п вы сможете вводить текст с клавиатуры. Поскольку в команде нс указано, куда должен быть отправлен вводимый текст, то Linux и команда cat предполагают, что текст должен быть выведен на экран. После того как текст выведен на экран, он потерян навсегда. Большинство команд Linux по умолчанию используют в качестве стандартного ввода клавиатуру, а в качестве стандартного вывода — экран. Поэтому команду cat саму по себе вы можете использовать для тренировки навыков ввода информации с клавиатуры, но в таком виде для какой-либо другой цели она бесполезна.
Однако область применения команды cat существенно расширяется, если вы указываете в командной строке имена файла. Команда cat с именем файла в качестве аргумента выводит содержимое этого файла на экран.
В этом примере команда cat использует в качестве стандартного ввода не клавиатуру, а указанный файл. Содержимое файла не изменяется, оно просто выводится на экран.
Вы можете использовать команду cat для записи строк в файл. Для этого вам следует использовать символы перенаправления. Эти символы позволяют любой команде использовать в качестве стандартного ввода или вывода вместо клавиатуры или экрана файл или стандартный ввод/ вывод другой команды. В следующем примере стандартный вывод команды cat вместо экрана направляется в файл kevin.report:
$ cat > kevin.report
Вводимый с клавиатуры текст построчно записывается в файл kevin.report. Нажатие клавиш Ctrl+D останавливает перенаправление и заканчивает выполнение команды cat.
Перенаправление может использоваться как для стандартного вывода, так и для стандартного ввода. Команда cat может использоваться для копирования файлов следующим образом:
$ cat kevin.report > pat.report
В этом примере стандартным вводом служит файл kevin.report, а стандартным выводом — файл pat.report. Содержимое файла kevin.report не изменяется.
Для того чтобы дописать данные в конец существующего файла, используется специальный символ перенаправления. В следующем примере содержимое файла kevin.report дописывается в конец файла pat.report:
$ cat kevin.report » pat,report
Если бы в этом примере было опущено имя файла kevin.report, то команда cat дописала бы вводимый с клавиатуры текст в конец файла pat.report. Соответствующая команда выглядит так:
$ cat » pat.report
Существуют всего четыре символа перенаправления стандартного в вода/вы вола:
• Символ > используется для перенаправления стандартного вывода команды в 4)аил. Например, cat > file запишет выводимую командой cat информацию в файл file.
• Символ < используется для переназначения стандартного ввода команды. Например, при выполнении команды cat < file в качестве стандартного ввода cat используется не клавиатура, а файл file.
• Символ » используется для дописывапия стандартного вывода команды в конец существующего файла. Например, cat » file допишет выводимую командой cat информацию в конец файла file.
• Символ ¦ является символом потока. Он используется, когда вы хотите передать стандартный вывод одной команды на стандартный ввод другой. Например, cat ¦ grep отправит стандартный вывод команды cat на стандартный ввод команды grep. (Потоки более подробно обсуждаются ниже в этой главе.)
На первый взгляд может показаться, что эти символы — не что иное, как несколько способов сделать одно и то же. На самом деле символы < и > можно менять местами в командной строке, но они оба нужны. Команды, которые выглядят похоже, на самом деле могут совершенно по-разному обрабатываться операционной системой. Например, команда
$ cat pat.file выполняет те же действия, что и команда
$ cat < pat.file
Однако на самом деле это различные команды. В первом случае pat.file — это аргумент команды cat. С точки зрения Linux аргументы — это переменные, используемые в командной строке. В данном случае получилось так, что аргумент — это файл. Во втором же примере файл pat.file играет роль стандартного ввода для команды cat.
Нет никаких ограничений на использование символов перенаправления в командной строке. Достаточно часто используются сразу два символа перенаправления, особенно в сценариях интерпретаторов командной строки:
$ cat < filel > file2
Эта команда использует файл filel в качестве стандартного ввода команды cat, а файл file2 — в качестве стандартного вывода.
Потоки
Поток, обозначаемый символом ¦, — это просто еще один способ перенаправления стандартного ввода/вывода. Использование потоков позволяет работать непосредственно с командами, передавая информацию, выводимую одной из команд, на ввод другой. Синтаксис таков:
$ commandl ¦ command2
Сочетание команд и символа потока часто также называется потоком. Потоки часто используются при подготовке файлов к печати