Инсталляция Linux.

перевод Балуева А. Н.

Оглавление

  • ГЛАВА 3. УЧЕБНОЕ ПОСОБИЕ ПО LINUX

    ГЛАВА 3. УЧЕБНОЕ ПОСОБИЕ ПО LINUX

    В начало страницы

    3.1 Введение.

    В начало страницы

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

    Мы не предполагаем у вас почти никаких предварительных знаний, кроме знакомства с персональнями компьютерами и операционной системой MS-DOS. Однако, даже если вы -- не пользователь MS-DOS, вы будете в состоянии понимать здесь все. На первый взгляд, Linux выглядит подобным MS-DOS--ведь части MS-DOS были созданы по образцу операционной системы CP/M, которая в свою очередь моделирует UNIX. Вместе с тем только по своим поверхностным свойствам Linux сходен с MS-DOS. Даже если вы полный новичок в мире PC, это пособие будет полезным для вас.

    И, передтем как начать, советуем вам: не бойтессь экспериментировать. Система вас не укусит. Работая на системе, вы ничего не сможете испортить. Linux имет встроенную систему защиты, которая не позволяет "нормальным" пользователям нанести ущерб файлам, существенным для системы. Самое плохое, что вы можете сделать -- уничтожить несколько или все свои файлы и вам придется переустанавливать систему. И в этой позиции вам будет уже нечего терять!

    3.2 Основные понятия Linux.

    В начало страницы

    Linux есть многозадачная многопользовательская операционная система. Это значит, что многие люди могут выполнять в одно и то же время на одном компьютере различные прикладные программы. Это отличает Linux от MS-DOS, где только один пользователь может работат на системе в каждый период времени. В Linux, для того чтобы представить себя системе, вы должны зарегистрироваться (log in), что состит в вводе вашего пользовательского имени (имени, которое система использует для вашей идентификации) и вводе вашего пароля, служащего вашим персональным ключом для регистрации в вашей учетной записи. Поскольку только вы знаете свой пароль, никто другой не может войти в систему под вашим пользовательским именем.

    По традициям систем UNIX, системный администратор присваивает вам пользовательское имя и начальный пароль, когда на вас в системе заводится учетная запись. Однако, поскольку в Linux tt вы и есть системный администратор, вы сами заводите свою учетную запись перед тем как можете входить (log in) в систему. В последующих примерах мы будем использовать воображаемое пользовательское имя "larry."

    Каждая система имеет имя хоста. Именно это имя служит именем вашей машины и определяет ее индивидуальность в сети (если она входит в сеть). В наших примерах мы для этого будем пользоваться именем "mousehouse".

    3.2.1 Создание учетной записи.

    В начало страницы

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

    Для того, чтобы создать для себя учетную запись, войдите в систему как корневой пользователь и воспальзуйтесь командой useradd или adduser. См. раздел 4.6 для информации об этой процедуре.

    3.2.2 Вход в систему (Logging in).

    В начало страницы

    Во время входа вы увидите приглашение следующего вида:

    mousehouse login:  
    Введите ваше пользовательское имя и нажмите Enter.
    Наш герой, larry, должен напечататьсвое имя и 
    ввести пароль:
    
    mousehouse login: larry Password:
    
    Символы пароля, которые вы вводите, 
    не появятся на экране, так что набирайте
    их тщательно. 
    При ошибке в пароле вы увидите сообщение:
    
    Login incorrect
    
    и должны попытаться ввести пароль снова. 
    Если вы правильно ввели имя и пароль,
    вы официально вошли в систему и можете 
    пользоваться ее услугами.
    

    3.2.3 Виртуальные консоли.

    В начало страницы

    Системную консоль образуют монитор и клавиатура, связанные непосредственно с системой. (Поскольку Linux есть многопользовательская операционная система, вы можете иметь и другие терминалы, связанные с последовательными портами вашей системы, но они не будут консолями). Linux, как и некоторые другие версии UNIX, обеспечивает доступ к виртуальным консолям (сокращенно VC), что дает вам возможность иметь более одной зарегистрированной сессии на консоли в одно и то же время.

    Чтобы продемонстрировать это, войдите в вашу систему. Затем нажмите Alt-F2 . Вы увидите снова приглашение login: . Теперь перед вами вторая виртуальная консоль. Для возвращения обратно к первой VC нажмите Alt-F1 . Вот так! Вы возвратились теперь к первой регистации входа.

    Вновь установленная система Linux, вероятно, позволит вам доступ к нескольким первым VC с помощью нажимов от Alt-F1 до Alt-F4, в зависимости от того, сколько VC конфигурированы в вашей системе. Возможно установить до 12 VC-- по одной на каждую функционаальную клавишу на вашей клавиатуре. Как вы можете видеть, использование VC есть мощное средство, так как вы можете работать в нескольких различных сесиях одновременно.

    Хотя использование виртуальных консолей есть несколько ограниченное средство (ведь вы можете одновременно наблюдать только одну VC), это может дать вам представление о многопользовательских способностях Linux. Во время работы на первой VC вы можете переключиться на вторую VC и поработать над чем-то другим.

    3.2.4 Оболочки и команды.

    В начало страницы

    В большинстве ваших экскурсий в мир Linux вы будете разговаривать с системой через оболочку, т.е. программу, которая принимает введенные вами команды и переводит их на язык инструкций операционной системы. Ее можно сравнить с программой COMMAND.COM в MS-DOS, которая по сушеству выполняет ту же самую обязанность. Оболочка представляет один из интерфейсов с Linux. Имеется много возможных интерфейсов, подобных системе X Window, которые позволяет выполнять команды с помощью мыши и клавиатуры.

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

    mousehouse login: larry
    Password: larry's password
    
    Добро вожаловать в  Mousehouse!
    /home/larry#

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

    /home/larry# make love make
     Система на это ответит так:
     `Не могу найти `love'. Stop`.
    /home/larry#
    

    Оказывается, make есть имя действующей в системе программы, и оболочка выполняет эту программу, когда получает команду make. (К несчастью, система ведетсебя не очень дружелюбно). Это подводит нас к горячему вопросу: Что такое команда? Что происходит, если вы печатаете "make love ..."? Первое слово в командной строке, "make", означает имя команды, которую нужно выполнить. Все остальное в командной строке воспринимается как аргументы этой команды. Например:

    /home/larry# cp foo bar

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

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

    А что произойдет, если оболочка не найдет программу с указанным именем? Давайте введем следующее:

    /home/larry# eat dirt
    
    eat: command not found /home/larry#
    
    

    Очень просто, если оболочка не может найти программу с указанным в командной строке именем ("eat" в нашем случае), она печатает сообщение об ошибке. Вы будете часто получать это сообщение, неверно вводя имя команды (например, если бы ва набрали "mkae love" вместо "make love").

    3.2.5 Выход из системы (Logging out).

    В начало страницы

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

    /home/larry# exit .

    Есть и другие способы выхода, но этот самый надежный.

    3.2.6 Смена вашего парля.

    В начало страницы

    Вы должны уметь изменить свой пароль. Команда passwd пригласит вас сообщить ваши старый и новый пароли. Она также попросит вас ввести повторно новый пароль для подтверждения. Остерегайтесь забыть ваш пароль -- если это произойдет, вам придется просить системного администратора переустановить его для вас. (Если вы -- системный администратор, см. стр. 201.)

    3.2.7 Файлы и каталоги.

    В начало страницы

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

    Файл идентифицируется его именем. Например, файл, содержащий вашу историю болезни, может храниться под именем history-paper. Эти имена обычно идентифицируют файл и его содержание в какой-то понятной вам мнемонике. Имена файлов в Linux не имеют никакого стандартного формата, в отличие от MS-DOS и некоторых других операционных систем (за исключением употребления знака / -- см. ниже определение путевого имени) и должны состоять не более чем из 256 символов.

    С понятием файла связано понятие каталога. Каталог есть группа файлов. Она может рассматриваться как "папка", которая содержит много разных файлов. Каталоги (они же директории) имеют имена, идентифицирующие их. Более того, каталоги имеют древовидную структуру; другими словами, каталоги могут содержать другие каталоги.

    Следовательно, вы можете ссылаться на файл по его путевому имени (path name), которое состоит из имени файла и предшествующего ему имени каталога, содержащего этот файл.

    Например, пусть Larry имеет каталог с именем papers, который содержит три файла: history-final, english-lit и masters-thesis. Каждый из этих трех файлов содержит информацию о проектах Larry. Ссылаясь на файл english-lit, Larry может указать его путевое имя, такое как: papers/english-lit.

    Как вы видите, имена каталога и файла разделены одним знаком слеш (/). По этой причине сами имена файлов не могут содержать символ / . Пользователи MS-DOS найдут знакомым это соглашение, хотя в мире MS-DOS для этого используется обратный слеш (\).

    Как уже упоминалось, каталоги могут содержаться один в другом. Например, предположим,что внутри papers имеется другой каталог с именем notes и он содержит файлы math-notes и cheat-sheet. Путевое имя файла cheat-sheet будет papers/notes/cheat-sheet . То-есть, путевое имя есть на самом деле путь к к файлу. Каталог, который содержит данный подкаталог, называется родительским каталогом данного подкаталога. В нашем случае каталог papers есть родитель каталога notes.

    3.2.8 Дерево каталогов.

    В начало страницы

    Большинство систем Linux используют стандартное расположение файлов, так что системные ресурсы и программы могут быть легко найдены. Это расположение образует дерево каталогов, которое начинается в каталоге "/", нзываемом также "корневой каталог". Непосредственно под / среди других подкаталогов расположены подкаталоги /bin, /etc, /dev и /usr. В свою очередь, эти каталоги содержат другие каталоги, которые содержат системные конфигурационные файлы, программы и т.д..

    В частности , каждый пользователь имеет начальный каталог, в котором он хранит все его или ее файлы. В приведенны выше примерах все фалы Larry (такие как cheat-sheet и history-final) содержатся в корневом каталоге, принадлежащем Larry. Обычно корневые каталоги пользователей содержатся под /home и названы по именам их владельцев. Так, Larry имеет корневой каталог /home/larry.

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

    
    /---bin
      |-dev
      |-etc
      |-home------larry
      |         |-sam
      |-lib
      |-proc
      |-tmp
      |-usr ----- X11R6
      |         |-bin
      |         |-emax
      |         |-etc
      |         |-g++-include
      |         |-include
      |         |-lib
      |         |-local-------bin
      |         |           |-emax
      |         |           |-etc
      |         |           |-lib
      |         |-man
      |         |-scr
      |
      |-var-----|-spool-------linux
                |-tmp
    
    
    			Рисунок 3.1:
    Типовое(сокращенное) дерево каталогов Linux.
    
    

    3.2.9 Текущий рабочий каталог.

    В начало страницы

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

    Вот пример:

    Larry имеет каталог papers, который содержит файл history-final. Если Larry хочет посмотреть на этот файл, он может воспользоваться командой:

    /home/larry# more /home/larry/papers/history-final

    Команла more просто воспроизводит файл, по одному экрану за раз. Но, поскольку его текущий рабочий каталог есть /home/larry, он может вместо этого сослаться на этот же файл относительно своей текущей позиции, используя команду:

    /home/larry# more papers/history-final

    Если называемое вами имя файла (подобное papers/final) начинается с символа, отличного от / ,то вы ссылаетесь на файл относительно вашего текущего рабочего каталога. Это называется относительным путевым именем. С другой стороны, если вы начинаете имя файла с / , система рассматривает его как полное путевое имя , т.е. как путевое имя, включающее полный путь к файлу, начиная с корневого каталога /. Оно называется абсолютным путевым именем.

    3.2.10 Ссылки на начальный каталоги

    В начало страницы

    В оболочках tcsh или bash [1*] вы можете указывать свой начальный каталог знаком тильды (~).

     
    Например, команда:
    
    /home/larry# more ~/papers/history-final
    эквивалентна команде:
    
    /home/larry# more /home/larry/papers/history-final
    

    Оболочка заменяет знак ~ на имя вашего начального каталога. Вы можете также указывать начальные каталоги других пользователей знаком тильда.

    Путевое имя ~karl/letters заменяется оболочкой на /home/karl/letters (если /home/karl есть корневой каталог пользователя с именем karl). Употребление тильды служит простым сокращением; нет каталога с именем ~ -- это просто "ситаксический сахар", обеспечиваемый оболочкой.

    3.3 Первые шаги в Linux.

    В начало страницы

    Перед началом очень важно отметить, что все имена файлов и команд в Linux чувствительны к регистру (в отличие от такой операционной системы, как MS-DOS). Например, команда make весьма отлична от Make или MAKE. Тоже самое верно для имен файлов и каталогов.

    [*1] tcsh и bash есть две оболочки, используемые в Linux. Оболочкой называется программа, которая читает команды пользователя и выполняет их; большинство систем Linux обеспечивают для образования новых регистрационных записей или tcsh или bash.

    3.3.1 Передвижение по каталогам (Moving around).

    В начало страницы

    Теперь, когда вы умеете входить в систему и знаете, как ссылаться на файлы по путевым именам, познакомимся с тем, как можно, для облегчения жизни, менять ваш рабочий каталог. Команда для движения по каталожной структуре есть cd, сокращение для "change directory". Многие часто употребляемые команды Linux состоят из двух-трех букв.

     
    Формат команды cd есть
    cd directory
    где directory есть имя каталога, который вы 
    хотите сделать теущим рабочим каталогом.
    

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

    /home/larry# cd papers и получит новое приглашение:
    /home/larry/papers#
    
    

    Как видите, приглашение изменилось, показывая теперь текущир рабочий каталог пользователя Larry (То-есть он знает, где тепеорь находится). Теперь, когда он находится в каталоге papers, он может посмотреть свой файл history-final по команде:

    /home/larry/papers# more history-final

    Теперь Larry находится в подкаталоге papers. Чтобы перейти обратно в следующий по направлению вверх (т.е. родительский) каталог, используйте команду:

    /home/larry/papers# cd ..  
    
    и получите новое приглашение
    /home/larry#
    

    (Обратите внимание на пробел между "cd" и "..".) Каждый каталог имеет имеет вход с именем "..", который означает родительский каталог. Аналогично, каждый каталог имеет вход с именем ".", означающим ссылку на себя. Поэтому команда

    /home/larry/papers# cd . ничего не меняет.

    С командой cd можно использоватьи абсолютные путевые имена. Чтобы попасть в начальный каталог Karl'а, можно воспользоваться командой:

    /home/larry/papers# cd /home/karl
    
     и получить новое приглашение:
    /home/karl#
    
    Если выполните команду  cd без аргументов, 
    вернетесь в собственный начальный каталог:
    
    /home/karl# cd даст новое приглашение 
    /home/larry#
    

    3.3.2 Обзор содержания каталогов.

    В начало страницы

    Теперь, когда вы знаете как перемещаться по каталогам, вы можете подумать, "Что же дальше?" Движение по каталогам само по себе не имеет смысла. Введем новую команду, ls. Эта команда выдает листинги файлов и каталогов, по умолчания из текущего каталога.

    Например:
    /home/larry# ls Mail letters papers 
    /home/larry#
    

    Из этого мы видим, что в текущем каталоге Larry содержатся три объекта с именами: Mail, letters и papers. Но это не говорит нам ничего о том, файлы это или каталоги? Мы можем использовать параметр -F команды ls, чтобы получить более детальную информацию.

    /home/larry# ls --F Mail/ letters/ papers/
    /home/larry#
    

    По знаку / в конце каждого имени мы заключаем, что все они есть имена подкаталогов. Результатом ls -F может быть также добавление "*" к концу имени в списке результатов. Это значит, что так отмеченное имя есть имя выполнимого файла, т.е. программы. Если к имени не добавлено ничего, это есть имя "простого, обычного файла", т.е. ни каталога, ни программы.

    Вообще говоря, каждая команда UNIX может иметь несколько параметров, в добавление к остальным аргументам. Эти параметры обычно начинаются с "-", как параметр -F в предыдущем примере. Параметр -F требует от ls выдать больше информации о файлах и каталогах -- в нашем случае она печатает / после каждого имени каталога. Если дать команде ls имя каталога, система напечатает содержание этого каталога:

    
    /home/larry# ls --F papers english-lit 
    					history-final masters-thesis notes/
    /home/larry#
    

    Или, чтобы получить более интересный листинг, посмотрим, что содержит системный каталог /etc:

    /home/larry# ls /etc Images ftpusers lpc rc.new shells adm getty magic rc0.d startcons bcheckrc gettydefs motd rc1.d swapoff brc group mount rc2.d swapon brc~ inet mtab rc3.d syslog.conf csh.cshrc init mtools rc4.d syslog.pid csh.login init.d pac rc5.d syslogd.reload default initrunlvl passwd rmt termcap disktab inittab printcap rpc umount fdprm inittab.old profile rpcinfo update fstab issue psdatabase securetty utmp ftpaccess lilo rc services wtmp

    /home/larry#

    Если вы -- пользовател MS-DOS, вы заметите, что имена файлов могут быть длиннее 8 символов и могут содержать точки в любых позициях. И можно употреблять более одной точки в одном имени. Давайте теперь перейдем в вершину дерева каталогов, а затем опустимся до другого каталога по командам:

    /home/larry# cd .. 
    /home# cd .. 
    /# cd usr 
    /usr# cd bin 
    /usr/bin#
    

    Можно достичь того же результата в один шаг, выполнив команду cd /usr/bin. Попробуйте двигаться по различным каталогам, используя команды ls и cd. В некоторых случаях вы наткнетесь на предупредительное сообщение об ошибке "Permission denied". Это как в UNIX окрик защиты: для того, чтобы использовать команды ls или cd, вы должны получить разрешение на это. Мы поговорим об этом больше на стр. 161.

    3.3.3 Создание новых каталогов.

    В начало страницы

    Теперь поучимся создавать новые каталоги. Это делаетя командой mkdir. Попробуем сделать следующее:

    /home/larry# mkdir foo 
    /home/larry# ls -F Mail/ foo/ letters/ papers/
    /home/larry# cd foo 
    /home/larry/foo# ls 
    /home/larry/foo#
    

    Поздравляем! Вы создали ноый каталог и перешли в него. Так как он не содержит ничего, научимся копировать файлы с одного места на другое.

    3.3.4 Копирование файлов.

    В начало страницы

    Для копирвания файлов используйте команду cp следующим образом:

    /home/larry/foo# cp /etc/termcap . 
    /home/larry/foo# cp /etc/shells .
    /home/larry/foo# ls --F shells termcap 
    /home/larry/foo# cp shells bells
    /home/larry/foo# ls --F bells shells termcap 
    /home/larry/foo#
    

    Команда cp копирует файлы, перечисленные в командной строке, в файл или каталог, служащий ее последним аргументом. Заметим, что мы используем "." для ссылки на текущий каталог.

    3.3.5 Перемещение файлов.

    В начало страницы

    Команда mv не копирует, а переносит файлы. Ее синтаксис тот же самый:

    /home/larry/foo# mv termcap sells 
    /home/larry/foo# ls -F bells sells shells
    /home/larry/foo#
    

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

    Отметим: mv и cp переписывают файл-назначение, не меняя его имени и не предупреждая [*3] вас. Будьте осторожны, когда вы переносите файл в другой каталог. В ней может оказаться файл с тем же самым именем, который вы перезапишите!

    3.3.6 Уничтожение файлов и каталогов.

    В начало страницы

    Для уничтожения файлов служит команда rm, сокращение слова "remove". Она действует так:

    /home/larry/foo# rm bells sells 
    /home/larry/foo# ls -F shells 
    /home/larry/foo#
    

    У нас остался только shells, но мы не будем протестовать. Заметим только, что по умолчанию rm не предупреждает вас об уничтожении файла, так что будьте осторожны.

    Аналогичная команда для каталогов есть rmdir. Эта команда уничтожает каталог, но только если он пуст. Если каталог содержит какие-нибудь файлы или подкаталоги, rmdir будет протестовать.

    3.3.7 Просмотр файлов.

    В начало страницы

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

    /home/larry/foo# more shells

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

    Используя команду more, нажимайте Space для вывода следующей страницы текста и b для возвращения на предыдущую страницу. В more имеются и другие команды. Например, для прекращения действия more нужно нажать q.

    Остановите more и попробуйте cat /etc/termcap. Текст, вероятно, пролетит быстрее, чем вы сможете его прочесть. Имя "cat" есть сокращение для "concatenate", что показывает настоящее предназначение этой программы. Команду cat можно использовать для конкатенации нескольких файлов и помещения результата в другой файл. Мы вернемся к этому в разделе 3.14.1.

    3.3.8 Получение помощи в диалоге (online help).

    В начало страницы

    Почти каждая система UNIX, включая и Linux, имеет средство, известное как ручные страницы (manual pages). Эти страницы содержат диалоговую документацию по командам системы, ресурсам, конфигурационным файлам и пр. Команда доступа к ним есть man. Если интересны параметры команды ls, вы можете напечатать /home/larry# man ls и увидите страницу с описанием ls. К сожалению, болшая часть manual pages написана для тех, кто уже имеет представление о том, что делает команда или ресурс. По этой причине manual pages обычно содержат только технические детали команд, без подробных объяснений. Но они могут служить неоценимым средством для освежения вашей памяти в отношении синтаксиса команд. Manual pages также расскажут вам о командах, которых мы не коснемся в этой книге.

    Я советую вам заглядывать в man по поводу команд, которые мы уже рассмотрели, а также когда я объясняю новую команду. Некоторых из этих команд нет в manual pages по нескльким причинам. Во-первых, для них страницы могут быть еще не написаны. (The Linux Documentation Project также может быть причиной этого в в Linux. Мы постепенно собираем большинство страниц для этой системы). Во-вторых, команда может быть внутренней командой оболочки или алиасом (см. об этом на стр. 133), который может не иметь собственной страницы в man. Примером может служить cd, которая есть внутренняя команда оболочки. Сама оболочка выполняет cd, которая не имеет отдельной программы.

    3.4 Доступ к файлам MS-DOS.

    В начало страницы

    Если по каким-то причинам вы хотите получит досту к файлам MS-DOS, в Linux это легко сделать. Обычный путь -- смонтировать раздел MS-DOS или дискету в Linux, что даст вам доступ к файлам прямо через файловую систему. Например, если имеете дискету MS-DOS в /dev/fd0, то команда:

    # mount -t msdos /dev/fd0 /mnt

    смонтирует ее в /mnt. См. подробности о монтировании дискет в разделе 4.8.4. Вы можете также смонтировать раздел MS-DOS на вашем жестком диске для доступа из Linux. Если вы имеете раздел MS-DOS в /dev/hda1, то команда:

    # mount -t msdos /dev/hda1 /mnt

    смонтирует его. Не забудьте выполнить для раздела команду umount, когда кончите использовать его. Вы можете иметь автоматическое монтирование раздела MS-DOS во время зарузки, если внесете его в /etc/fstab. См. детали в разделе 4.4. Следующая строка в /etc/fstab смонтирует раздел MS-DOS на /dev/hda1 каталога /dos:

    /dev/hda1 /dos msdos defaults
    
    Вы можете также смонтировать файловую систему VFAT, 
    которой пользуется Windows 95:
    # mount -t vfat /dev/hda1 /mnt
    

    Это дкст доступ к длинным именам в Windows 95. Только это применимо к разделам, в которых фактически есть файлы с длинными именами. Вы не можете смонтировать нормальную файловую систему FAT16 и использовать это для получения длинных файловых имен.

    Программное обеспечение Mtools также можно использовать для доступа к файлам MS-DOS. Команды mcd, mdir и mcopy ведут себя как их двойникам в MS-DOS. Если вы установили Mtools, у вас должны быть manual pages для этих команд.

    Но одно дело -- доступ к файлам MS-DOS; совсем другое дело -- выполнение программ MS-DOS. Для Linux разрабатывается эмулятор MS-DOS; он широко доступен и включается в большинство дистрибуций. Его можно получить во многих местах, включая различные сайты Linux FTP, перечисленных в приложении B. Эмулятор MS-DOS по отзывам достаточно мощен для того, чтобы исполнять многие приложения, включая WordPerfect, из Linux. Но Linux и MS-DOS все же сильно различные операционные системы. Можность всякого эмулятора MS-DOS в UNIX ограничена. Кроме того, разрабатывается эмулятор Microsoft Windows, работающий в X Windows.

    3.5 Обзор основных команд UNIX.

    В начало страницы

    В этом разделе рассматриваются некоторые из наиболее употребительных базовых команд системы UNIX, включая и те, которые описаны в предыдущих разделах. Заметим, что параметры обычно начинаютсч с "-", и в большинстве случаев можно указывать более одного параметра с единственным "-". Например, вместо команды ls -l -F можно писать ls -lF. Не перечисляя всех параметров для каждой команды, мы сейчас представим только часто используемые или важные команды. Большинство из этих команд имеют множество параметров, которые почти никогда не используются. Вы можете с помощью команды man увидеть manual pages для каждой команды, в которых перечислены все возможные параметры. Отметим также, что многие из команд имеют в качестве аргументов списки файлов или каталогов. Такие аргументы-списки обозначаются в таблице как "file1 . . . fileN ". Например, cp имеет аргументом список файлов для копирования, за которым следует аргумент-назначение, являющийся файлом или каталогом. Если копируется более чем один файл, назначение должно быть каталогом.

    cd 
    Изменить текущий рабочий каталог.
    Syntax: cd directory
    

    Здесь directory означает каталог, в который вы хотите перейти. (При этом "." означает текущий каталог, а ".." -- родительский каталог. Если никакой каталог не указан, по умолчанию это означает ваш собственный начальный каталог ( your home directory)).

    Пример: cd .. /foo
    переход из теущего каталога в его родительский, 
    а затем в каталог  foo.
    

    ls Выдает информацию об названных файлах и каталогах. Syntax: ls files Здесь files означает список имен файлов и каталогов, о которых надо выдать информацмю. Наиболее употребительные параметры есть -F (выдать тип файла), и -l(выдать "длинный" листинг, включающий размер файла, владельца, допуск и т.д.)

    Пример: ls -lF /home/larry
    выдает содержимое каталога  /home/larry.
    
    cp Копирует один или более файлов 
    в указанный файл или каталог.
    
    Syntax: cp files destination
    Здесь files есть список копируемых файлов,  
    destination есть файл или каталог для результата.
    
    Пример: cp ../frog joe   
    копирует файл ../frog в файл или каталог joe
    

    mv Переносит один или более файлов в другой файл или каталог. Эта команда действует эквивалентно команде копирования, но с уничтожение исходных файлов. Ее можно использовать для переименования файлов, подобно команде RENAME в MS-DOS.

    Syntax: mv files destination
    Здесь files перечисляет переносимые файлы, 
    destination есть файл или каталог назначения.
    
    Пример: mv ../frog joe
    переносит файл  ../frog в файл или каталог joe.
    
    
    rm Уничтожает файлы. 
    Заметим, что если вы уничтожаете файлы в  UNIX, их нельзя
    восстановить (в отличие от  MS-DOS, 
    где обычно можно "undelete" файл).
    
    Syntax: rm files
    Здесь  files описываюет имена уничтожаемых файлов. 
    Параметр -i просит
    подтверждения перед уничтожением файла.
    
    Пример: rm -i /home/larry/joe /home/larry/frog
    уничтожает файлы joe и frog
    в  /home/larry.
    
    mkdir Создает новые каталоги.
    Syntax: mkdir dirs
    Здесь  dirs перечисляет вновь создаваемые каталоги.
    
    Пример: mkdir /home/larry/test
    создает подкаталог  test в /home/larry.
    

    rmdir Уничтожает пустые каталоги. При использовании rmdir текущий рабочий каталог не должен лежать в уничтожаемом каталоге. Syntax: rmdir dirs Здесь dirs указывает уничтожаемые каталоги.

    Пример: rmdir /home/larry/papers
    уничтожает каталог  /home/larry/papers,
    если он пуст.
    

    man Выдает страницу manual page для указанной команды или ресурса (т.е. некоторого системного средства, отличного от команды, например, библиотечной функции.) Syntax: man command Здесь command есть имя команды или ресурса, для которого нужна помощь.

    Пример: man ls
    выдает помощь для команды ls.
    
    more 
    Выдает содержимое названных файлов порциями 
    по одной странице экрана.
    Syntax: more files
    Здесь  files перечисляют файлы для выдачи.
    
    
    Пример: more papers/history-final
    выдает файл papers/history-final.
    

    cat Официально предназначена для конкатенации файлов, cat можно также использовать для выдачи файла на экран. Syntax: cat files Здесь files перечисляет файлы для выдачи.

    Пример: cat letters/from-mdw
    выдает файл  letters/from-mdw.
    
    
    echo  Выдает на экран свои аргументы.
    Syntax: echo args
    Здесь args перечисляет аргуенты в echo.
    
    Пример: echo "Hello world"
    выдает строку "Hello world".
    

    grep Выдает из одного или более файлов каждую строку, соответствующую данному образцу. Syntax: grep pattern files Здесь pattern есть регулярное выражение для образца, files перечисляет файлы, в которых производится поиск образца.

    Пример: grep loomer /etc/hosts
    выдает все строки файла /etc/hosts, которые
    содержат образец "loomer".
    

    3.6 Исследование файловой системы.

    В начало страницы

    Файловая система есть множество (collection) файлов и дерево каталогов в системе. Теперь пришло время провести с вами экскурсию по файлово системе. У вас теперь достаточно знаний для того, чтобы понять файловую систему Linux и вы имеете ее дорожную карту. (Посмотрите на диаграмму на стр. 137).

    Прежде всего, перейдите в корневой каталог (cd /) и выполните ls -F для получения листинга его содержания. Вероятно, вы увидите следующие каталоги

    [2*] : bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr и var.

    [2*] Вы можете увидеть и другие, и вы можете не увидеть их всех. Каждый выпуск Linux имеет свои отличия.

    Давайте взглянем на каждый из этих каталогов. /bin

    /bin есть сокращение "binaries", или исполнимые. Он хранит много важных системных программ.

    Используйте ls -F /bin для листинга его файлов. Если вы всмотритесь в него, вы можете увидеть несколько команд, которые вы знаете, такие как cp, ls и mv. Это -- программы этих команд. Когда вы пользуетесь командой cp, например, вы выполняете программу /bin/cp.

    Воспользовавшись командой ls -F, вы обнаружите, чтo почти все (если не все) файлы в /bin имеют звездочку ("*") после их имен. Это показывает, что они -- исполнимые файлы, как это написано на стр. 140. /dev

    "Файлы" в /dev есть файлы устройств--они обеспечивают доступ к системным устройствам и ресурсам, таким как дисководы, модемы и память. Как ваша система может читать даные из файлов, она может читать ввод от мыши, обращаясь к /dev/mouse.

    Имена файлов, начинающиеся с fd, есть устройства гибких дисков (дискет). fd0 есть первый дисковод и fd1 есть второй такой дисковод. Вы можете заметить, что есть больше устройств fd, кроме двух упомянутых: они относятся к специальным типам гибких дисков. Например, fd1H1440 обслуживает дискеты highdensity 3.5" в дисководе 1.

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

    *** /dev/console относится к системной консоли--то-есть к монитору, связанному непосредственно с вашей системой.

    *** Различные устройства /dev/ttyS и /dev/cua используются для доступа к последовательным портам. /dev/ttyS0 связано с "COM1" в MS-DOS. Устройства /dev/cua есть внешние ("callout") устройства, используемые с модемами.

    *** Имена, начинающиеся с hd, относятся к жестким дискам. /dev/hda связан со всем первым жестким диском, а /dev/hda1 относится к первому разделу на /dev/hda.

    *** Устройства с именами на sd есть дисководы SCSI. Если вы имеете жесткий дисковод SCSI, то вместо доступа к нему через /dev/hda, вы должны использовать /dev/sda. Лентопротяжки SCSI доступны через устройства st, а SCSI CD-ROM -- через устройства sr.

    *** Имена устройств, начинающиеся на lp, обеспечивают доступ через параллельные порты. /dev/lp0 есть то же самое, что и "LPT1" в мире MS-DOS.

    *** /dev/null используется как "черная дыра"--посланные в него данные пропадают навсегда. Зачем это нужно? Например, если вы хотите подавить вывод от команды на вашем экране, вы можете послать его в /dev/null. Позже мы поговорим об этом подробнее.

    *** Устройства с именем на /dev/tty с последующими номерами тносятся к "виртуальным консолям" вашей системы (доступным при нажиме Alt-F1 , Alt-F2 и т.д.) /dev/tty1 относится к первой VC, /dev/tty2 ссылается на вторую, и т.д.

    *** Устройства с /dev/pty есть псевдотерминалы, которые используются для обеспечения "терминалов" при отдаленых сессиях login. Например, если ваша машина есть узел сети, то входящие telnet logins будут использовать одно из устройств /dev/pty .

    /etc

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

    /sbin

    /sbin содержит существенные для системы исполнимые файлы, нужные для системной администрации.

    /homeные каталоги.

    Например, /home/larry есть начальный каталог пользователя "larry". На вновь установленных системах в этом каталоге нет никаких пользователей.

    /lib

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

    /proc

    /proc поддерживает "виртуальную файловую систему", в которой файлы хранятся в оперативной памяти, а не на диске. Эти "файлы" связаны с различными процессами в системе и позволяют вам получать информацию о программах и процессах в любое время. Более подробно об этом говорится на стр. 166.

    /tmp

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

    /usr

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

    /usr/X11R6

    /usr/X11R6 содержит систему X Window, если вы ее установили. Эта система представляет обширное мощное графическое окружение, обеспечивающее большое число графических утилит и программ, располвгающихся в "окнах" на вашем экране. Если вы в целом знакомы с Microsoft Windows или окружением Macintosh, то X Windows покажется вам знакомым. Каталог /usr/X11R6 содержит все исполнимые, конфигурационные и вспомогательные файлы для X Windows.

    /usr/bin

    /usr/bin есть настоящий склад программного обеспечения для любой системы Linuxm, содержащий большинство исполнимых файлов, не попавших в другие каталоги, подобные /bin.

    /usr/etc

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

    /usr/include

    /usr/include содержит файлы include для C-компилятора. Эти файлы (большинство их имен кончаются на .h, сокращение от "header") объявляют имена структур данных, подпрограмм и констант, используемых в программах на C.

    Файлы из /usr/include/sys используются обычно при программировании на системном уровне в UNIX. Еди вы знакомы с языком Cи, вы здесь найдете заголовочные файлы, такие как stdio.h, объявляющие функции, подобные printf().

    /usr/g++-include

    /usr/g++-include содержит файлы include для компилятора C++ (и во многом похож на /usr/include).

    /usr/lib

    /usr/lib содержит библиотечные эквиваленты типов "stub" и "static" для фйлов из /lib. При компилировании программы, она редактируется ("linked") с библиотеками из /usr/lib, которые затем отправляют программу на поиск в /lib, если она нуждается в фактическом библиотечном коде. Кроме того, различные другие программы берут из /usr/lib различные конфигурационные файлы.

    /usr/local

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

    /usr/man

    Этот каталог содержит manual pages. Он имеет по два подкаталога для каждой "секции" manual (см. детали по команде man man). Например /usr/man/man1 содержит источник (т.е. бесформатный оригинал) для manual pages в секции 1, а /usr/man/cat1 содержит форматированные manual pages для секции 1.

    /usr/src

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

    /var

    /var содержит каталоги, которые часто различны в размерах и имеют тенденции к росту. Мнгие из таких каталогов располагаются в /usr, но поскольку те, кто поддерживает Linux, стараются держать их относительно неизменными, каталоги, которые часто изменяются, были перенесены в /var. Некоторые дистрибуции Linux держат их базы данных для лрограммных пакетов в подкаталогах в /var.

    /var/log

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

    /var/spool

    /var/spool содержат файлы которые буферизуются ("spooled") в других программах. Например, если ваша машина связана с сетью, входящая почта хранится в /var/spool/mail, пока вы не прочтете или сотрете ее. Выходящие или входящие сообщения с новостями хранятся в /var/spool/news и т.д.

    3.7 Типы оболочек.

    В начало страницы

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

    Многие из возможностей, которые мы рассмотрим в этом разделе, есть свойства самой оболочки. Не следует смешивать действия Linux (как операционной системы) с действиями оболочки -- интерфейса с лежащей под ней операционной системы. Оболочка обеспечивает функции, дополнителные к функциям самог Linux.

    Оболочка служит не только интерпретатором интерактивных команд, которые вы вводите по приглащениям, она является также мощным программным языком. Она дает вам возможность писать сценарии оболочки, объединяя (to "batch") несколько команд оболочки в отдельный файл. Если вы знакомы с MS-DOS, вы увидите их сходство с пакетными файлами ("batch files"). Сценарии оболочки представляют очень мощное средство, помогающее вам автоматизировать и расширить использование Linux. Подробнее об этом говорится на стр. 181.

    В мире Linux существуют несколько типов оболочек. Два главных типа есть оболочка Бурне ("Bourne shell") и оболочка Си ("C shell"). Бурне использует командный синтаксис, подобный оригинальной оболочке ранних систем UNIX, аналогичной System III. Название оболочки Бурне на большинстве систем Linux есть /bin/sh (где sh означает "shell"). Оболочка Си (не спутайте с sea shell -- морская ракушка) использует другой синтаксис, напоминающий программный язык Си, и на большинстве систем Linux называется /bin/tcsh.

    В Linux используются несколько вариаций этих оболоче. Наиболее часто используют Bourne Again Shell, или "Bash" (/bin/bash) и "Tcsh" (/bin/tcsh). bash есть форма оболочки Бурне, которая содержит многие передовые особенности из оболочки Си. Так как bash использует синтаксис, охватывающий синтаксис облочки Бурне, сценарий оболочки, написаный по стандарту Бурне, работает в bash. Для тех, кто предпочитает использовать синтаксис оболочки Си, Linux поддерживает tcsh, являющийся расширением оригинальной оболочки Си.

    Тип оболочки, котрую вы решили использовать, есть вопрос, подобный религии. Некоторын предпочитают синтаксис оболочки Бурне с прогрессивными чертами bash, а другим нравится более структурированный синтаксис оболочки Си. Что касается нормалных команд, таких как cp или ls, синтаксис их в обеих оболочках одинаков. Разность в синтаксисах обнаруживается лишь тогда, когда вы начнете писать сценарий или используете продвинутые свойства оболочки. Если мы будем обсуждать свойства различных оболочек, вы обнаружите разницу между оболочками Бурне и Си. Однако, в рамках настоящего руководства эта разница минимальна. (Если вы в этом заинтересованы, читайте man pages для bash и tcsh).

    3.8 Wildcards (трафаретные символы).

    В начало страницы

    Ключевое свойство всех оболочек в Linux есть возможность ссылки на более чем один файл по имени, содержащему специальные символы. Эти трафаретные символы (wildcards) позволяют вам сослаться, скажем, на все файлы с именами, содержащими букву "n".

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

    Вот короткий пример. Предположим, что Larry имеет файлы frog, joe и stuff в его текущем каталоге:

    /home/larry# ls frog joe stuff 
    /home/larry#
    Чтобы указать все файлы из текущего каталога, 
    содержащие букву "o" в своем
    имени, воспользуйтесь командой:
    
    /home/larry# ls *o* frog joe 
    /home/larry#
    
    Как вы видите, из текущего каталога 
    выбираются все файлы, содержащие в
    своем имени букву "o".
    Употребление одной  "*" выбирает все файлы, 
    так как трафаретному символу *
    отвечает дюбое имя:
    
    /home/larry# ls * frog joe stuff 
    /home/larry#
    
    Вот еще несколько примеров:
    /home/larry# ls f* frog 
    /home/larry# ls *ff stuff
    /home/larry# ls *f* frog stuff 
    /home/larry# ls s*f stuff 
    /home/larry#
    

    Процесс превращения трафарета в последовательность имен файлов называется расширением трафарета. Его осущствляет оболочка. Важно отметить следующее: индивидуальная команда, такая как ls, никогда не видит "*" в своем списке параметров. Оболочка расширяет трафарет (wildcard) до множества всех файловых имен, корорые ему соответствуют. Так, команда

    /home/larry# ls *o*  
    
    расширяется оболочкой в 
    /home/larry# ls frog joe
    

    Еще одно важное замечание о трафарете "*" : он не соответствует файловым именам, начинающимся с одной точки ("."). Такие файлы рассматриваются как скрытые файлы -- хотя они на самом деле не скрыты, они не показываются в в нормальных листингах по команде ls и не затрагиваются при использовании трафарета "*" .

    Вот один пример. Мы ранее упоминали, что каждый каталог содержит два специальных входа (entries): "." означает ссылку на текущий каталог и ".." означает ссылку на родительский каталог. Но когда вы используете ls, эти два входа не показываются:

    /home/larry# ls frog joe stuff 
    /home/larry#
    Если вы используете переключатель  -a с ls,
    то вы можете обнаружить файлы
    с именами, начинающимися с точки  ".". 
    
    Посмотрите:
    /home/larry# ls -a . .. .bash profile .bashrc frog joe stuff 
    /home/larry#
    
    

    Этот листинг содержит два специальных входа, "." и "..", так же как два других "скрытых" файла--.bash profile и .bashrc. Эти два файла есть стартовые файлы, используемые оболочкой bash при регистрации larry. Они описываются с начала стр. 185.

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

    /home/larry# ls * frog joe stuff /home/larry#

    Это защитная особенность. Если бы трафаретный символ "*" выдавал файловые имена, начинающиеся с ".", он также выдавал бы каталожные имена "." и "..". Это было бы опасно при использовании некоторых команд. Другим трафаретным символом служит "?". Он соответствует только одному символу. Так, "ls ?" выдает только односимвольные имена фйлов. И "ls termca?" выдаст "termcap", но не покажет "termcap.backup". А вот другой пример:

    /home/larry# ls j?e joe 
    /home/larry# ls f??g frog 
    /home/larry#ls ????f stuff 
    /home/larry#
    

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

    Например:
    
    /home/larry# cp /etc/s* /home/larry
    
    копирует все из /ets все файлы с именами, 
    начинающимися с "s", в каталог
    /home/larry. Формат команды cp таков:
    
    cp files destination
    

    где files перечисляет файлы, которые копируются, а destination обозначает файл или каталог назначения. Аналогичный формат имеет команда mv. Если вы копируете или переносите боле одного файла, назначение должно быть каталогом. В отдельный файл можно переносить или копировать только один файл.

    3.9 Трубопроводы в Linux (Linux plumbing).

    В начало страницы

    3.9.1 Стандартный ввод и стандартный вывод.

    В начало страницы

    Многие команды Linux получают входные данные с того, что носит название стандартного ввода или посылают свои результаты в стандартный вывод (эти имена часто сокращаются до stdin и stdout). Оболочка полагает, что stdin есть ваша клавиатура, а stdoutput есть ваш экран. Приведем пример использования команды cat. Нормально cat читает данные из всех файлов, указанных в командной строке, и посылает их прямо в stdout. Поэтому команда:

    /home/larry/papers# cat history-final masters-thesis

    выдает содержимое файла history-final и вслед за ним содержимое файла masters-thesis. Но, если вы не указали имя файла, то cat читает данные со stdin и посылает их на stdout. Вот пример:

    /home/larry/papers# cat Hello there. Hello there. Bye. Bye.
    Ctrl-D 
    /home/larry/papers#
    

    Каждая строка, которую вы печатаете, немедлено выдается командой cat в виде эхо. При чтении со stdin конец ввода указывается сигналом EOT (end-of-text), которым обычно служит нажим Ctrl-D . Вот другой пример. Команда sort читает строки текста (опять со stdin, если вы не указываете одно или более файловых имен) и посылает отсортированный результат в stdout. Попробуйте следующее:.

    /home/larry/papers# sort bananas carrots apples
    
    Ctrl-D apples bananas carrots 
    /home/larry/papers#
    

    Теперь мы можем сортировать по алфавиту наш список покупок ... Linux приность пользу, не правда ли?

    3.9.2 Перенаправление ввода и вывода.

    В начало страницы

    Пусть мы теперь хотим послать результат от sort в файл, чтобы сохранить наш закупочный список на диске. Оболочка позвляет вам перенаправить стандартный вывод в файл, использую символ ">". Вот как зто делается:

    /home/larry/papers# sort ? 
    			shopping-list bananas carrots apples
    Ctrl-D 
    /home/larry/papers#
    
    Как видите, теперь результат команды sort не 
    выдается на экран. 
    Но он поступает в файл с именем  shopping-list. 
    Посмотрим на этот файл:
    
    /home/larry/papers# cat shopping-list 
    							apples bananas carrots
    /home/larry/papers#
    

    То-есть вы можете сортировать ваш список и потом сохранять его! Давайте предположим теперь, что вы кладете неотсортированный список в файл items. Другой путь сортировки информации и сохранения ее результата в файле состоит в том, чтобы указать команде sort имя файла для чтения вместо стандартного ввода и затем перенаправить стандартный вывод, как мы сделали раньше:

    /home/larry/papers# sort items ? shopping-list
    /home/larry/papers# cat shopping-list apples bananas carrots
    /home/larry/papers#
    

    Однако, имеется и другой путь проделать это. Можно перенаправить не только стандартный вывод, это можно сделать также с стандартным вводом с помощью символа "<".

    
    /home/larry/papers# sort ! items apples bananas carrots 
    /home/larry/papers#
    
    Технически, sort < items  эквивалентно записи  sort items. 
    Но рассмотрим следующий аспект: 
    
     sort < items  действует как если бы  данные в файле
     

    items были напечатаны в стандартном вводе. Перенаправление производит оболочка. Команде sort не передается для чтения имя файла (items); а что касается sort, она читает из стандартного ввода, как если бы вы напечатали туда данные с клавиатуры.

    Это подводит нас к понятию фильтра. Фильтр есть программа, которая читает данные со стандартного ввода, как-то перерабатывает их и посылает результат на стандартный вывод. Используя перенаправление, стандартный ввод и вывод могут ссылаться на файлы. Как уже говорилось выше, stdin и stdout по умолчанию есть соответственно клавиатура и экран. sort есть пример простого фильтра. Она сортирует входные данные и посылает результат на стандартный выход. cat еще проще. Она не делает ничего с входящими данными, она просто выводит то, что к ней поступает.

    3.9.3 Использование конвейеров (pipes).

    В начало страницы

    Мы уже показывали, как использовать sort в качестве фильтра. Но эти примеры предполагали, что вы имеете данные, хранящиесягде-то в файле или можете сами печатать данные со стандартного ввода. А что делать, если данные, которые вы хотите сортировать, приходят с вывода другой команды, подобной ls?

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

    /home/larry/papers# ls english-list history-final 
    masters-thesis notes
    Теперь перенаправим вывод  ls в файл с именем  file-list:
    /home/larry/papers# ls ? file-list 
    /home/larry/papers# sort -r file-list
    

    notes masters-thesis history-final english-list /home/larry/papers# Здесь вы сохранили вывод от ls в некотором файле и затем выполнили run sort -r на этом файле. Но это громоздко и использует временный файл для хранения данных от ls. Лучше использовать конвейер (pipelining). Это делает оболочка. Она связывает цепочку команд через "конвейер". stdout первой команды посылается в stdin второй команды. В нашем случае мы хотим посылать stdout от ls в stdin команды sort. Для создания конвейера используем символ "|":

    /home/larry/papers# ls j sort -r notes 
    					masters-thesis history-final
    english-list 
    /home/larry/papers#
    
    Такая командв короче и ее легче печатать.
    Вот другой полезный пример. 
    Команда:
    /home/larry/papers# ls /usr/bin
    
    выдает длинный список файлов, большинство 
    которых покидают экран слишком
    быстро, чтобы успеть прочесть их имена. 
    И мы хотим использовать more для
    воспроизведения списка файлов в  /usr/bin:
    
    /home/larry/papers# ls /usr/bin j more
    

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

    /home/larry/papers# ls j sort -r j head -1 notes 
    /home/larry/papers#
    

    Здесь head -1 выдает первую строку из ввода, который она получит (в нашем случа это поток отсортированныех в обратном порядке данных от ls).

    3.9.4 Неразрушающее перенаправление вывода.

    В начало страницы

    Использование знака ">" для перенаправления вывода к файлу носит деструктивный характер. Другими словами, команда:

    /home/larry/papers# ls ? file-list

    переписывает содержимое файла file-list. Но если вы для перенаправления воспользуетесь знаками ">>", то вывод будет добавляться в конец названного файла, не меняя его прежнего содержимого.

    Например,

    /home/larry/papers# ls ?? file-list

    добавит вывод ls в конец файла file-list. Помните, что перенаправление и конвейеры есть функции оболочки -- она поддерживает действия ">", ">>" и "|". Это не имеет никакого отношения к действиям самих команд.

    3.10 Допуск к файлам.

    В начало страницы

    3.10.1 Понятия допуска к файлам.

    В начало страницы

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

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

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

    Может быть также несколько системных групп (таких как bin и admin), которые используются самой системой для контроля доступа к ресурсам -- очень редко фактические поьзователи входят в эти системные группы.

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

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

    3.10.2 Интерпретация допуска к файлам.

    В начало страницы

    Рассмотрим один пример, который демонстрирует допуск к файлам. Используем комнду ls с параметром -l, которая выдает "длинный" листинг файла, содержащего допуск к файлу.

    /home/larry/foo# ls -l stuff
    -rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff 
    /home/larry/foo#
    

    Первое поле в листинге представляет допуск к файлу. Третье поле есть владлец файла (larry) и четвертое поле есть группа, к которой относится файл (users). Очевидно, что последнее поле есть имя файла (stuff). Остальные поля мы объясняем ниже.

    Этот файл принадлежит larry и относится к группе users. Строка -rw-r--r-- перечисляет, по порядку, допуски для владельца файла, группы и всех остальных. Первый символ в поле допуска ("-") представляет тип файла. Знак "-" означает, что это обычный файл (в отличие от каталога или драйвера устройства). Следующие три символа ("rw-") представляют допуски, данные владельцу файла larry. "r" означае "read" и "w" означает "write". То-есть, larry может читать и писать в файл stuff.

    Как было сказано, кроме разрешения на чтение и запись имеется также разрешение на "execute", которое представляется буквой "x". Однако, здесь вместо "x" стоит "-", так что Larry не имеет разрешения на исполнение этого файла. И это очень хорошо, так как файл stuff не является программой. Конечно, поскольку Larry есть владелец этого файла, он может получить себе разрешение на исполнение этого файла, если захочет (об этом будет вскоре сказано.)

    Следующие три символа ("r--") представляют групповое разрешение на этот файл. Группа, владеющая этим файлом, есть users. Поэтому здесь стоит одно "r" и каждый пользователь из группы users может читатьэтот файл. Последние три символа, также ("r--"), представляют разрешение, гарантируемое каждому пользователю системы (отличному от владельца и тех, кто входит в группу users). И опять, поскольку присутствует только "r", остальные пользователи могут читать файл, но не писать в него или его исполнять. Вот другие примеры допусков:

    -rwxr-xr-x Владелец этого файла может его читать, писать в него и выполнять его. Пользователи из группы файла и все остальные пользователи могут читать и исполнять файл.

    -rw------- Владелец этого файла может читать и писть в файл. Никакие другие пользователи не имеют доступа к этому файлу.

    -rwxrwxrwx Все пользователи могут читать, писать и исполнять этот файл.

    3.10.3 Зависимости разрешений.

    В начало страницы

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

    /home/larry допуск -rwx------.

    Тогда никакой другой пользователь не сможет получить доступ к его катлогу и ко всем файлам и каталогам внутри него. И Larry не нужно беспокоиться об индивидуальном допуске на каждом из его файлов.

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

    Обычно пользователи системы Linux ведут себя свободно по отношению к файлам. Обычная форма доступа к файлам есть -rw-r--r--, что позволяет другим пользователям читать файлы, никак не изменяя их. Обычная форма доступа к каталогам есть -rwxr-xr-x, что позволяет другим пользователям просматривать ваши каталоги, но не создавать или уничтожать файлы в их пределах. Однако, многие пользователи не хотят допускать других пользователей к их файлам. Установка доступа к файлу на -rw------- запрещает всем другим пользователям, кроме владельца, доступ к файлу. Таким же образом, установка доступа к каталогу на -rwx------ не допускает других пользователей в этот каталог.

    3.10.4 Изменение формы доступа.

    В начало страницы

    Команда chmod используется для установки доступа к файлу. Только владелец файла имеет право изменять доступ к своему файлу. Синтаксис chmod таков:

    chmod fa,u,g,ogf+,-gfr,w,xg filenames

    Коротко говоря, вы меняете одну или более позиций доступа для всех, для пользователя, для группы или остальных пользователей. Затем вы указываете, добавляете вы право(+) или отбираете его(-), Наконец, вы указываете одно или более из read, write и execute. Вот несколько примеров правильных команд:

    chmod a+r stuff  
    дает всем пользователям право чтения файла.
    
    chmod +r stuff   
    аналогична прежней команде -- при отсутствии  a, u, g или o
    подразумевается буква a.
    
    chmod og-x stuff  
    отбирает право x от всех пользователей кроме владельца.
    
    chmod u+rwx stuff  
    позволяет владельцу файла читать, писать и исполнят файл.
    
    chmod o-rwx stuff  
    отбирает права r, w и x от пользователей, кроме владельца и
    членов файловой группы.
    

    3.11 Менеджмент файловых связей (links).

    В начало страницы

    Связи (Links) позволяют отдельным фйлам иметь более одного имени. Фактически файлы идентифицируютя в системе их индексными номерами-дескрипторами (inode numbers), представляющими уникальные системные идентификаторы файлов. Фактически каждый каталог есть список индексных дескрипторов, сопровождаемых соответствующими им именами файлов. Каждое имя в каталоге имеет ссылку (link) на индексный дескриптор.

    3.11.1 Жеские связи (links).

    В начало страницы

    Команда ln используется для создания нескольких связей для одного файла. Пусть, например, вы имеете в каталоге файл с именем foo. Используя ls -i, you можете узнать индексный номер этого файла:

    /home/larry# ls -i foo 22192 foo /home/larry#

    Мы видим, что foo имеет в файловой системе индексный номер 22192. Вы можете создать другую связь к foo с именем bar следующим путем:

    /home/larry# ln foo bar

    С помощью ls -i вы увидите, что оба файла имеют один и тот же индексный номер:

    /home/larry# ls -i foo bar 22192 bar 22192 foo 
    /home/larry#
    

    Теперь по именам foo или bar вы ссылаетесь на тот же самый файл. Если вы внесете изменения в foo, те же изменения претерпит bar. В любом случае foo и bar представляют один и тот же файл. Такие связи называются жесткими связями, так как они представляют прямую связь с индексным номером. Отметим, что вы можете жестко связать файлы только в одной и тойже файловой системе; символические связи (см. ниже) не имеют такого ограничения.

    Когда вы удаляете файл по команде rm, вы фактически удаляете только одну связь only deleting one link to a файла. Если вы используете команду

    /home/larry# rm foo

    вы удаляете только связь с именем foo, а bar продолжает существовать. Файл уничтожается в системе на самом деле только когда уничтожены все связи к нему. Обычно файлы имеют только одну связь, так что команда rm его уничтожает. Но если у файла несколько связей, rm уничтожает только одну из них; для уничтожения файла нужно уничтожить все его связи. Команда ls -l выает количество связей файла (вместе с прочей информацией):

    /home/larry# ls -l foo bar 
    
    -rw-r--r-- 2 root root 12 Aug 5 16:51 bar
    -rw-r--r-- 2 root root 12 Aug 5 16:50 foo
    /home/larry# 
    
    

    Вторая колонка в листинге "2", указывает количество связей у файла. Каталог фактически есть файл, содержащий информацию о связях своего индексного дескриптора. То-есть каждый каталог содержит по крайней два жестких указателя: "." (указатель на себя) и ".." (указатель на родительский каталог). каталогом). В корневом каталоге (/) указатель ".." указывает опять на / (другими словами, родитель корневого каталога есть он сам.)

    3.11.2 Символические связи (links).

    В начало страницы

    Символические связи (или коротко symlinks), представляют другой тип связи, отличный от жесткой связи. Символическая связь позволяет вам давать файлу еще одно имя, но не связывает его с индексным дескрипторо (inode). Команда ln -s создает символическую (symbolic) связь с файлом. Например, если вы используете команду:

    /home/larry# ln -s foo bar

    вы создаете символическую связь с именем bar, которое указывает на файл foo. Если вы употребите ls -i, вы увидите, что два файла имеют разные дескрипторы (inodes):

    /home/larry# ls -i foo bar 22195 bar 22192 foo 
    /home/larry#
    Однако по команде  ls -l вы увидите, 
    что файл bar есть symlink, указывающая
    на foo:
    /home/larry# ls -l foo bar 
    lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar
    -> foo -rw-r--r-- 1 root root 12 Aug 5 16:50 foo
    /home/larry#
    
    

    Разрешения на доступ к символической связи не используются (он всегда есть rwxrwxrwx). Вместо него доступ к симвоической связи определяется разрешением на доступ к назначению (target) символического указателя (в нашем примере это файл foo).

    Функционаально жесткая и символическая связи похожи, но есть и отличия. Во первых, можно создать символическую связь с файлом, который не существует; это невозмжно при жесткой связи. Символические связи обрабатываются ядром не так, как жесткие связи. Отличие чисто техническое, но иногда оно важно. Символические связи полезны потому, что они идентифицируют файл, на который указывают; при твердых связях нет простого способа определить, какие файлы связаны с тем же самым индексным дескриптором (inode). Связи используютя во многих местах системы Linux. Символические связи особенно важны для совместных библиотечных образов в /lib. См. стр. 223 с более подробным описанием.

    3.12 управление заданиями.

    В начало страницы

    3.12.1 Задания и процессы.

    В начало страницы

    Управление заданиями есть свойство, присущее многим оболочкам (в том числе bash и tcsh), которое позволяет вам управлять многими исполняющимися командами, или заданиями, одновременно. Прежде чем двигаться дальше, нам нужно поговорить о процессах.

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

    /home/larry# ps
    PID TT STAT TIME COMMAND
    24   3  S   0:03 (bash)
    161  3  R   0:00 ps
    /home/larry#
    

    PID, указанный в первой колонке, есть идентификатор процесса, уникальный номер, данный каждому исполняющемуся процессу. Последняя колонка, COMMAND, есть имя выполняемой команды. Здесь мы видим только процессы, котрые сейчас запустил и исполняет сам Larry. (На самом деле в системе имеется много других работающих процессов и их всех может показать команда "ps -aux".) Это процессы bash (оболочка, используемая Larry) и сама команда ps. Как вы видите, bash исполняется параллельно с командой ps. bash исполняет ps, когда Larry напечатал эту команду. После того, как ps закончила работу (после выдачи таблицы процессов), управление было возвращено процессу bash, который выдал приглашение и готов выполнять следующую команду.

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

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

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

    3.12.2 Передний и задний планы.

    В начало страницы

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

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

    Задание можно задержать. Задержанное (suspended) задание есть задание, которое временно остановлено. После задержки вы можете продолжить его как задание первого плана или, если хотите, как фоновое. Продолжение задержанного задания никак не влияет на его состояние -- работа продолжается с того места, на котором она была приостановлена.

    Задержка задания -- это не прерывание процесса. Когда вы прерываете исполняюшийся процесс (нажав на клавишу прерывания, обычно это Ctrl-C), процесс убивается навсегда. А если задание убито, нет никакой надежды его продолжить. Нужно выполнять команду снова. Некоторые прграммы перехватывают прерывания, так что нажим Ctrl-C не убивает задание немедленно. Это позволяет им произвести некотрые операции по очистке перед своим окончанием. А есть и такие программы, которые не позволяют убить их прерыванием.

    3.12.3 Перевод на фоновый план и снятие (killing) заданий.

    В начало страницы

    Начнем с простого примера. Команда yes кажется командой, не имющей смысла: она посылае на стандартный вывод бесконечный поток букв y. (На самом деле это полезная команда. Если вы перенаправите этот поток от yes на вход другой команды, которая требует серии yes и ничего другого, этот поток y будет утвердительно отвечать на все ее вопросы).

    Попробуйте это:
    /home/larry# yes y y y y y
    

    Буква y будет выдаваться без конца. Вы можете убить этот процесс, нажав на клавишу прерывания, которая обычно есть Ctrl-C . Так мы справимся с этим раздражающим потоком. Клавишу прерывания можно вызвать командой stty.

    Давайте перенаправим стандартный вывод команды yes в /dev/null. Как вы помните, /dev/null действует как "черная дыра" для данных. Любые данные, посланные туда, исчезают. Это очень эффективныфй метод успокоения слишком болтливых программ.

    /home/larry# yes ? /dev/null

    Теперь много лучше. Ничего не печатается, по и приглашение оболочки не возвращается. Это происходит потому, что yes все еще работает и посылает бесконечные y в /dev/null. Чтобы убить процесс, нажмите клавишу прерывания.

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

    /home/larry# yes ? /dev/null & [1] 164 
    /home/larry#
    

    Как вы видите, приглашение оболочки вернулось. Но что означают "[1] 164"? И продолжает ли работать команда yes ?

    "[1]" представляет номер задания для процесса yes. Оболочка присваивает номер задания каждому работающему заданию. Так как yes есть первое и единственное задание, которое мы запустили, оно есть задание номер 1.

    "164" есть идентификатор процесса, или PID, номер, данный заданию системой. Вы можете использовать любой из этих номеров для ссылки на задание, как мы увидим это позже. Теперь у нас процесс yes исполняется как фоновый, непрерывно посылая поток y в /dev/null. Чтобы проверить статус этого процесса, используем внутреннюю команду оболочки jobs:

    /home/larry# jobs [1]+ Running yes >/dev/null & /home/larry#

    Мы видим, что он работает. Можно было бы для проверки статуса задания воспользоваться ранее описанной командой ps. Чтобы снять (terminate) задание, нужно применить команду kill. Эта команда имеет своим аргументом или номер задания или идентификационный номер процесса. Наше задание имеет номер 1, так что команда:

    /home/larry# kill %1

    убьет задание. При идентификации задания перед его номером следует писать знак процента ("%"). Теперь, убив задание, снова воспользуемся для проверки командой jobs:

    /home/larry# jobs [1]+ Terminated yes >/dev/null /home/larry#

    Задание убито на самом деле, и если вы снова выдадите команду jobs, в ответ ничего напечатано не будет. Вы можете также убить задание, указав идентификационный номек процесса (PID), выданный вместе с номером задания, когда вы запускали задание. В нашем примере ID процесса был 164, так что команда

    /home/larry# kill 164 эквивалентна команде
    /home/larry# kill %1
    
    При ссылке на задание по ID 
    процесса знак "%" употреблять не нужно.
    

    3.12.4 Остановка и перезапуск заданий.

    В начало страницы

    Имеется и другой путь перевести задание в фоновый режим. Можно запустит задание нормально, на первом плане, остановить его и затем перезапустить как фоновое. Сначала запустим процесс на первом плане, как делали раньше: /home/larry# yes ? /dev/null и снова, так как yes работает на первом плане, мы не получим приглашения оболочки. Теперь, вместо прерывания задания по Ctrl-C , задержим задание. Задержка не убивает его: она только временно приостанавливает его до перезапуска. Чтобы сделать это, нажмите клавишу задержки, которой обычно служит Ctrl-Z:

    /home/larry# yes ? /dev/null
    ctrl-Z [1]+ Stopped yes >/dev/null /home/larry#
    

    Задержанное задание не работает. на него не тратится время CPU. Вместе с тем вы можете пустить его дальше (restart), что продолжит его исполнение так, как-будто задержки не было. Оно продолжит работу с точки задержки. Чтобы перезапустит задание на первом плане, используйте команду fg (сокращение "foreground"):

    /home/larry# fg yes >/dev/null

    Оболочка воспризводит снова имя команды, чтобы вы знали, какое задание вы запустили на первом плане. Остановите задание опять по Ctrl-Z . На этот раз используйте команду bg (сокращенное background). Это заставит команду выполняться так, как если бы вы ее запустили с "&", как в предыдущем разделе:

    /home/larry# bg [1]+ yes >/dev/null & 
    /home/larry#
    

    И вы опять получили приглашение оболочки. Команда jobs теперь сообщила бы, что yes работает, и вы можете убить ее, как делали это раньше. А как можно опять задержать задание? Ctrl-Z не сработает, так как задание исполняется как фоновое. Ответ состоит в том, чтобы перевести его на первый план, а затем задержать. Дело в том, что команду fg можно использовать или на задержанных заданиях или на фоновых.

    Имеется большая разница между фоновым заданием и задержанным заданием. Задержанное задание не исполняется--оно не тратит времени CPU и не производит никакой работы (такое задание все еще занимет системную память, хотя и может быть перекинуто на диск). Фоновое задание исполняется и использует память, выполняя свою задачу, пока вы занимаетесь другой работой. Оно может пытаться выдать текст на ваш терминал, что может помешать вашей работе над чем-то другим. Например, если вы используете команду /home/larry# yes & без перенаправления stdout в /dev/null, поток y будет выдаваться на ваш дисплей, не давая вам никакой возможности прервать его (вы не можете использовать Ctrl-C, чтобы прервать фоновое задание). Для того, чтобы остановить бесконечные y, воспользуйтесь командой fg для перевода здания на первый план, а затем убейте его по Ctrl-C.

    Еще одно замечание. Команды fg и bg нормально воздействуют на задание, которое было приостановлено последним (это указывается знаком "+" после номера задания, когда вы пользуетесь командой jobs). Если вы исполняете сразу много заданий, вы можете переводить их на первый план иди на задний, указывая номер задания как аргумент fg или bg, как в

    /home/larry# fg %2 (перевести задание номер 2 на первый план), или

    /home/larry# bg %3 (для перевода задания номер 3 на задний план).

    В командах fg или bg нельзя указывать номер процесса. Далее, использование одного толькономера задания по приглашению:

    /home/larry# %2     эквивалентно команде:
    /home/larry# fg %2
    

    Вспомним, что управление заданиями есть функция оболочки. Команды fg, bg и jobs есть внутренние команды оболочки. Если по какой-то причине вы используете оболочку, котрая не поддерживает управление заданиями, не ожидайте найти в ней эти команды. Кроме того, управление заданиями имеет некоторые аспекты, которые по разному решаются в bash и tcsh. Некоторые оболочки вообще не обеспечивают управления заданиями, но большинство оболочек Linux это делают.

    3.13 Использование редактора vi.

    В начало страницы

    Текстовый редактор есть программа, используемая для редактирования файлов, представляющих некий текст: письмо, программа на языке Си или системный конфигурационный файл. Есть много разных редакторов, доступеых в Linux, но имеется один редактор, который гарантированно присутствует в любой системе UNIX или Linux, это редактор vi-- "визуальный редактор". vi не является самым простым редактором и он не очень самопонятен (self-explanatory). Вместе с тем, поскольку vi очень распространен в мире UNIX/Linux, а иногда и необходим, он заслуживает рассмотрения в нашей книге.

    Ваш выбор редактора есть дело личного вкуса и стиля. Многие пользователи предпочитают причудливый, самопонятный и мощный Еmacs--редактор, обладающий большим количеством возможностей, чем всякая другая программа в мире UNIX. Например, Emacs имеет свой собственый встроенный диалект программного языка LISP и имеет много расширений (одно из котрых есть программа искуственного интеллекта, подобная программе Eliza). Вместе с тем, поскольку Emacs и поддерживающие его файлы относительно обширны, он может не быть установлен на некоторых системах. В противоположность этому, vi невелик и мощен, но более труден в употреблении. Однако, если вы его изучите, он окажется фактически очень простым. Настоящий раздел представляет введение в vi--мы не будем обсуждать все возможности языка, а только то, что нужно знать для начала. Вы можете обращаться к man pages для vi, если хотие изучить его подробнее. Как альтернативу, можно читать книгу

    Using the vi Editor Learning the vi Editor, автор O'Reilly и др., или VI Tutorial из Specialized Systems Consultants (SSC) Inc. См. приложение A.

    3.13.1 Понятия.

    В начало страницы

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

    В режиме вставки вы фактически вставляете или редактируете текст. Используя vi, вы проводите большинство времени именно в этом режиме. Переход в него из командного режима происходит по команде "i" ("insert"). Находясь в режиме вставки, вы можете вставлять текст в документ с позиции курсора. Возврат в командный режим происходит при нажиме клавиши Esc. Режим последней строки используется для добавления в vi нескольких расширенных команд. При печатании этих команд они появляются в последней строке экрана (отсюда и название режима). Например, если вы напечатаете ":" в командном режиме, вы переходите в режим последней строки и можете использовать команды, подобные "wq" (записать файл и покинуть vi) или "q!" (покинуть vi без запоминания изменений). Режим последней строки обычно используется для команд vi, которые длиннее одного символа. В этом режиме вы вводите команду и нажимаете Enter для ее выполнения.

    3.13.2 Запуск vi.

    В начало страницы

    Лучший путь усвоить эти понятия -- забыть (to fire up) про vi и редактировать какой-нбудь файл. Приводимый ниже пример "screens" показывает только несколько строк текста на экране с высотой 6 строк вместо 24.

    Синтаксис обращения к vi такой:
    vi filename
    где filename есть имя редактируемого файла. 
    Запустите vi, напечатав
    
    /home/larry# vi test
    
    для редактирования файла. Вы увидите что-то вроде
    
     ~
    ~
    ~
    ~
    ~
    ~
    "test" [New file]
    
    
    Колонка символов "~" показывает вам, 
    что вы находитесь в конце файла. 
    Знак  представляет курсор.
    

    3.13.3 Вставка текста.

    В начало страницы

    Программа vi теперь находится в командном режиме. Вставьте текст в файл, нажав i , что переведет редактор в режим вставки, и начните печатать.

    Now is the time for all good men to 
    come to the aid of the party. 
    ~
    ~
    ~
    ~
    ~
    
    
    

    Напечатайте столько строк, сколько хотите (нажимая Enter после каждой). Вы можете исправлять ошибки с помощью клавиши Backspace. Для выхода из режима вставки и возвращения в командный режим нажмите Esc . В командном режиме вы можете использовать клавиши со стрелками для передвижения по файлу. (Если вы имеете только одну строку текста, то при попытке нажима клавиш "вверх" или "вниз" заставите vi сказать вам "beep"). Есть много путей к вставке текста, кроме команды i. Команда a вставляет текст, начиная после текущей позиции курсора, вместо его текущей позиции. Например, используйте стрелку влево, чтобы подвинуть курсор между словами "good" и

    "man", нажмите a для перехода в режим вставки, напечатайте "wo" и затем нажмите Esc для возврата в командный режим:

    Now is the time for all good women to 
    come to the aid of the party. 
    ~
    ~
    ~
    ~
    ~
    
    

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

    Now is the time for all good women to 
    come to the aid of the party.
    Afterwards, we'll go out for pizza and beer. 
    ~
    ~
    ~
    ~
    

    3.13.4 Уничтожение текста.

    В начало страницы
    
    В командном режиме команда x уничтожает 
    символ под курсором. 
    Если вы нажмете x пять раз, вы получите:
    
    Now is the time for all good women to 
    come to the aid of the party.
    Afterwards, we'll go out for pizza and  
    ~
    ~
    ~
    ~
    
    Теперь нажмите  a  и вствьте какой-нибудь 
    текст а затем нажмите esc :
    
    Now is the time for all good women to 
    come to the aid of the party.
    Afterwards, we'll go out for pizza and Diet Coke. 
    ~
    ~
    ~
    
    Вы можете уничтожать целые строки, используя 
    команду  dd (то-есть, нажимая
    d два раза подряд). Если курсор стоит на второй 
    строке и вы печатаете  dd,
    вы увидите:
    
    Now is the time for all good women to 
    come to the aid of the party.
    ~
    ~
    ~
    ~
    Для уничтожения слова, на котором стоит курсор, 
    используйте команду dw.
    Поместите курсор на слово "good" и печатайте dw.
    
    Now is the time for all  women to come to the 
    aid of the party.
    ~
    ~
    ~
    ~
    

    3.13.5 Замена текста.

    В начало страницы
    
    Вы можете заменить часть текста, используя команду  R. 
    Переместите курсор на первую букву в "party", 
    нажмите  R  и печатайте слово "hungry".
    
    
    Now is the time for all women to 
    come to the aid of the hungry.
    ~
    ~
    ~
    ~
    Использование  R для редактирования текста 
    подобно командам  i  и  a , но  R
    переписывает, а не вставляет текст.
    
    Команда  r заменяет одну букву под курсором. 
    Например, подвиньте курсор на
    начало слова "Now" и нажмите  r а за 
    ним С и вы увидите:
    
    Cow is the time for all women to 
    come to the aid of the hungry.
    ~
    ~
    ~
    ~
    
    Команда "~" меняет регистр буквы под 
    курсором на противоположный. 
    Например,если вы поместите курсор 
    на  "o" в  "Cow" и 
    будете повторно нажимать  ~ , вы
    получите:
    
    COW IS THE TIME FOR ALL WOMEN TO 
    COME TO THE AID OF THE HUNGRY.
    ~
    ~
    ~
    ~
    

    3.13.6 Команды для перемещения курсора.

    В начало страницы

    Вы уже знаете, как использовать клавиши со стрелками для передвижения по тексту документа. В дополнение к этому вы можете использовать команды h, j, k и l для движения курсора соответственно влево, вниз, вверх и вправо. Это удобно, если (по какой-то причине) клавиши со стрелками не работают. Команда w двигает курсор в начало следующего слова; команда b двигает его к началу предыдущего слова.

    Команда 0 (клавиша нуля) передвигает курсор в начало текущей строки, а команда $ переносит его в конец строки.

    При редактировании большого файла вам может понадобиться продвинуться вперед или назад на целый экран. Нажимая Ctrl-F, вы продвигаете курсор на экран вперед, а Ctrl-B продвигает курсор на экран назад. Для перехода в конец файла нажмите G. Вы можете также продвинуться к произвольной строке; например, напечатав команду 10G, вы попадете в строку 10 файла. Для продвижения в начало файла используйте 1G. Вы можете соединять команды передвижения с другими командами, такими как уничтожение текста. Например, команда d$ уничтожает все от курсора до конца строки; dG уничтожает все от курсора до конца файла, и т.д.

    3.13.7 Запоминание файлов и выход из vi.

    В начало страницы

    Для выхода из vi без изменения файла используйтк команду :q!. Когда вы нажимаете ":", курсор передвигается в последнюю строку экрана и вы переходите в режим последней строки экрана:

    COW IS THE TIME FOR ALL WOMEN TO 
    COME TO THE AID OF THE HUNGRY.
    ~
    ~
    ~
    ~
    :
    

    В режиме последней строки доступны некоторые расширенные команды. Одна из них есть q!, которая приводит к выходу из vi без сохранения изменений. Команда :wq запоминает файл и затем приводит к выходу из vi. Команда ZZ (из командного режима, без ":") эквивалентна команде :wq. Если файл не изменялся со времени последнего сохранения, происходит только выход из vi, с сохранением состояния файла на момент последнего его запоминания. Напоминаем, что вы должны нажать Enter после ввода команды в режиме последней строки. Для запоминания файла без выхода из vi, используйте :w.

    3.13.8 Редактирование другого файла.

    В начало страницы

    Для редактировня другого файла используйте команду :e . Например, прекратить редактирование test и перейти вместо этого к редактированию файла foo, используйте команды

    COW IS THE TIME FOR ALL WOMEN TO 
    COME TO THE AID OF THE HUNGRY.
    ~
    ~
    ~
    ~
    :e foo
    
    Если вы употребите :e , не сохранив прежде файл, 
    вы получите сообщение об
    ошибке:        No write since last 
    change (":edit!" overrides)
    что означает, что vi отказывается редактировать 
    другой файл, пока вы не
    запомнили первый. 
    Вы должны с помощью :w запомнить первый файл, а затем
    использовать  :e или  воспользоваться командой
    
    COW IS THE TIME FOR ALL WOMEN TO 
    COME TO THE AID OF THE HUNGRY.
    ~
    ~
    ~
    ~
    :e! foo
    
    Знак "!" собщает редактору  vi, 
    что вы на самом деле хотите
    редактировать новый файл, не сохраняя изменений, 
    сделанных в первом.
    

    3.13.9 Вставка других файлов.

    В начало страницы

    По команде :r вы можете вставит содержимое другого файла в текущий редактируемый файл. Например, команда :r foo.txt вставляет содержимое файла foo.txt в текст в позицию курсора.

    3.13.10 Выполнение команд оболочки.

    В начало страницы

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

     
    
    :r! ls -F
    вы сделаете добавку в конец файла :
    
    COW IS THE TIME FOR ALL WOMEN TO 
    COME TO THE AID OF THE HUNGRY.
    letters/ misc/ papers/
    ~
    ~
    ~
    

    Вы можете также "выйти в оболчку" из vi, то-есть, выполнить ее команду изнутри vi, а затем вернуться в редактор. Например, если вы исполните команду
    :! ls -F
    то будет исполнена команда ls -F и ее результат поступит на экран, вместо вставки в редактируемый файл. Если вы используете команду
    :shell, то vi запустит экземпляр программы оболочки, позволяющий вам временно покинуть vi и задержать его, пока вы исполняете другие команды. Для возвращения в vi нужно только выполнить команду exit.

    3.13.11 Получение help для vi.

    В начало страницы

    vi само по себе содержит мало интерактивной помощи (как и большинство программ в Linux), но вы всегда можете читать man page для vi. vi есть визуальный подход (front-end) к редактору ex, который обрабатывает многие команды vi в режиме последней строки. Так что, в дополнение к man page для vi, смотрите их также для ex.

    3.14 Настройка вашего окружения.

    В начало страницы

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

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

    3.14.1 Сценарии оболочки.

    В начало страницы

    Предположим, что вы часто используете какую-то последовательность команд и хотите съэкономить время, сгруппировав их вместе в одну "команду". Например:

    /home/larry# cat chapter1 chapter2 chapter3 ? book 
    /home/larry#wc -l book 
    /home/larry# lp book
    

    Здесь первая команда сцепляет файлы chapter1, chapter2 и chapter3 и помещает результат в файл book. Вторая команда выдает количество строк в book, а третья команда, lp, печатает book.

    Вместо ввода этих трех команд вы можете объединить их в сценарий оболочки. Сценарий исполнения эти команд может выглядеть так:

    #!/bin/sh
    # A shell script to create and print the book
    cat chapter1 chapter2 chapter3 > book wc -l book lp book
    

    Сценарии оболочки -- это простые текстовые файлы; вы можете писать их с помощью редакторов, таких как emacs или vi, описание которых начинается на стр. 172.

    Всмотримся в этот сценаий. Его первая строка, "#!/bin/sh", идентифицирует файл как сценарий оболочки и сообщает оболочке, как его выполнять. Она инструктирует оболочку передать сценарий для исполнения в /bin/sh, где /bin/sh есть сама программа оболочки. Почему это важно? На большинстве систем Linux /bin/sh есть оболочка типа Bourne, подобная bash. Принуждая сценарий оболочки исполняться с использованием /bin/sh, вы предписываете сценарию оболочки исполнение согласно синтаксису оболочки Bourne (а не C shell). Это заставит оболочку исполнять ваш сценарий по синтаксису Bourne, даже если вы используете tcsh (или другую C shell) в качестве вашей зарегистрированной оболочки (login shell).

    Вторая строка есть комментарий. Он начинается с символа "#" и продолжается до конца строки. Комментарии игнорируются оболочкой --они предназначены для программиста и помогают понимать смысл сценария.

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

    Для сценариев оболочки важны допуски к файлам. Если вы создаете сценарий, обеспечьте себе разрешение на исполнение сценария, чтобы иметь возможность исполнять его. Когда вы создаете текстовые файлыs, допуск по умолчанию обычно не предусматривает разрешения на исполнение, и вы должны явно установить его. См. дикуссию о допуске файлов на стр. 161. Вкратце, если сценарий был запомнен в файе makebook, вы могли бы воспользоваться командой

    /home/larry# chmod u+x makebook

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

    /home/larry# makebook

    для выполнения команд сценария.

    3.14.2 Переменные оболочки и ее окружения.

    В начало страницы

    Оболочка позволяет вам определять переменные, как это делается в большинстве языков программирования. Переменная есть просто единица данных, снабенная именем. tcsh, так же как и другие оболочки типа C, используют различные механизмы для определения переменных, подобные описанным здесь в предположении, что используется оболочка Bourne, такая как bash. См. детали в tcsh manual page.

    Когда вы присваиваете перменной значение (используя оператор "="), вы можете потом получить доступ к ее значению, предваряя ее имя знаком "$", как это показано ниже.

    /home/larry# foo=``hello there''
    
    Теперь переменная  foo получила 
    значение  hello there. 
    Вы можете ссылаться на него по ее 
    имени с префиксом  "$" . 
    Например, команда
    
    /home/larry# echo $foo hello there 
    /home/larry#
    
    приведет к тому же результату, 
    что и команда
    
    /home/larry# echo ``hello there'' hello there 
    /home/larry#
    
    

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

    вы можете запомнить его в переменной, как было показано выше. Команда set выдает список всех определенных переменных оболочки.

    Вместе с тем оболочка позволяет вам экспортировать переменные в окружение. Окружение (environment) есть множество переменных, которые доступны всем командам, которые вы исполняете. Если вы определили переменную внутри оболочки, ее экспорт делает ее также частью окружения.

    Здесь опять мы имеем различие между bash и tcsh. Если вы используете tcsh, другой синтаксис использутся для установки переменных окружения (используется команда setenv). См. детали в tcsh manual page.

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

    Вот небольшой пример. Переменная окружения PAGER используется командой man. Она побуждает команду выдавать manual pages по одному экрану за раз. Если вы устанавливаете PAGER на имя некоторой команды, на использует эту команду для выдачи, вместо команды more (которая используется по у

    молчанию). Установим PAGER на "cat". Это приведет к тому, что выход от man будет выдаваться на экран сразу, без остановки между страницам.

    /home/larry# PAGER=cat
    
    Затем экспортируем PAGER в окружение:
    
    /home/larry# export PAGER
    

    Если теперь выполнить команду man ls, то man page будут пролетать по экрану безостановочно. Теперь, если мы установим PAGER на "more", то то длч выдачи man page будет использоваться команда more.

    /home/larry# PAGER=more
    Заметим, что теперь не нужно использовать команду export после изменения значения PAGER. Экспортировать переменную нужно только раз; все изменения, вносимые в нее после, автоматически передаются в окружение.

    Часто оказывается необходимым "закавычивать" строки, чтобы воспрепятствовать оболочке рассматривать ее символы как специальные. Например, это нужно, чтобы не дать оболочке интерпретировать специальные значения символов "*", "?" или пробела. Есть и много других символов, которые могут нуждаться в подобной защите. Подробные объяснения и описание квотирования смотрите в SSC's Bourne Shell Tutorial. Справочник manual pages для отдельных команд предупреждает вас, если команда использует какие-нбудь переменные окружения. Например, man man page сообщает, что PAGER используется для спецификации команды pager.

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

    /home/larry/papers# echo $HOME /home/larry

    Другая интересная переменная окружения есть PS1, которая определяет главное приглашение системы. Например:

    /home/larry# PS1=``Your command, please: '' Your command, please:

    Чтобы возвратить прежнее приглашение (которое состоит из текущего рабочего каталога и последующего символа "#"), нужно выполнить

    Your command, please: PS1=``\w# '' /home/larry#

    Синтаксис, используемый для установки приглашения, описывает bash manual page. Еще одна переменная окружения есть PATH. Когда вы используете команду ls, как оболочка ищет исполнимую форму ls? В боьшинстве систем зта команда находится в /bin. Оболочка использует переменную PATH, чтобы находить исполнимые файлы команд, которые вы вводите. Например, ваша переменная PATH может иметь значение /bin:/usr/bin:/usr/local/bin:. Это -- список каталогов, в которых должна производить поиск оболочка. Каталоги разделены символом ":". Когда вы используете команду ls, оболочка сначала ищет /bin/ls, затем /usr/bin/ls, и т.д.

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

    /home/larry# cp foo bar

    то оболочка не использует PATH для нахождения файлов foo и bar--эти файловые имена предполагаются окончательными. Оболочка использует PATH только для нахождения исполнимого файла cp.

    Настраивайте ваше окружение. Это съэкономит ваше время и позволит вам не запоминать, где хранятся исполнимые файлы всех команд. На многих системах исполнимые файлы разбросаны во многих местах, таких как /usr/bin, /bin или /usr/local/bin. Вместо того, чтобы давать командам полное путевое имя (такое как /usr/bin/cp), вы можете установить PATH на список каталогов, в которых оболочка будет автоматически производить поиск исполнимых файлов.

    Заметим, что PATH содержит ".", означающую текущий рабочий каталог. Это позволяет вам писать сценарий или программу и выполнять их как команду из текущего рабочего каталога, не указывая его прямо (как в ./makebook). Если каталог не содержится в вашей PATH, то оболочка не будет искать в нем команды для исполнения; это относится также к текущему рабочему каталогу.

    3.14.3 Инициализационные сценарии оболочек.

    В начало страницы

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

    Инициализирующие сценарии есть просто сценарии оболочки. Они инициализируют ваше окружение, автоматически исполняясь при вашем log in. Если вы всегда используете команду mail для проверки почтового ящика при входе в систему, вам нужно поместить эту команду в инициализационный сценарий для ее автоматического исполнения.

    Обе оболочки, и bash и tcsh, отличают регистрационный вызов оболочки от других ее вызовов. Регистрционный вызов оболочки происходит, когда вы обращаетесь к оболочке для регистрации входа. Обычно это одна и та же оболочка. Однако, когда вы "shell out" из другой программы, такой как vi, вы запускаете другой экземпляр оболочки, отличный от вашего регистрационного экземпляра. Кроме того, каждый раз при исполнении сценария вы автоматически запускаете другой экземпляр оболочки для исполнения этого сценария.

    Инициализационные файлы, используемые оболочкой bash, есть следующие файлы: /etc/profile (устанавливается системным администратором, выполняется всеми пользователями bash при их первичной регистрации входа),

    $HOME/.bash profile 
    (выполняемый при login в сессии с bash),
    
    $HOME/.bashrc 
    полняемый всеми нерегистрирующими экземплярами bash).
    
    Если  .bash profile отсутствует, 
    о вместо него используется .profile.
    
    Оболочка tcsh использует следующие 
    инициализационные сценарии:
    
    /etc/csh.login 
    (выполняемый всеми пользователями tcsh во время login),
    
    $HOME/.tcshrc 
    (выполняемый во время login и всеми новыми экземплярами tcsh) и
    
    $HOME/.login 
    (выполняетя при  login, следующих после .tcshrc). 
    
    Если .tcshrc отсутствует,  
    вместо него используется .cshrc .
    
    Полное описание программирования оболочек выходит 
    за рамки настоящей книги.
    См.  manual pages для bash или tcsh, 
    чтобы узнать больше о настройке окружения
    Linux.
    

    3.15 Теперь вы, наверное, сможете продолжать действовать самостоятельно?

    В начало страницы

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


<<< Оглавление Страница: 3  4 >>>