Прежде всего важно знать, что все имена файлов и названия команд нужно вводить в правильном регистре (по-английски говорят, что эти имена «чувствительны к регистру»═ — case-sensitive). В этом ситуация отличается от системы MS-DOS. Например, команда make═ — совсем не то же самое, что команда Make или make. То же относится к именам файлов и каталогов.
Движение по дереву каталогов
Итак, вы умеете входить в систему и обращаться к файлам либо по их именам, либо указывая путь к ним. Однако иногда оказывается удобным изменить текущий каталог, чтобы можно было проще обращаться к файлам.
Команда, которая используется для движения по дереву каталогов, называется cd — сокращение от «change directory» («изменить каталог»). Заметим, что большинство наиболее употребительных команд в системе Linux содержат в своём названии всего два или три символа. Команда cd употребляется следующим образом:
cd directory
где directory — имя каталога, который должен стать текущим.
Как указывалось выше, при входе в систему текущим каталогом назначается домашний каталог пользователя. Если Ларри хочет перейти в подкаталог papers, ему нужно использовать команду
/home/larry# cd papers /home/larry/papers#
Как мы видим, вид приглашения изменился (в приглашение входит имя текущего каталога, чтобы пользователь знал, где он находится). Таким образом, теперь текущим каталогом является каталог papers, и пользователь может обратиться к своему файлу следующей командой:
/home/larry/papers# more history-final
Теперь Ларри находится в каталоге 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#
Просмотр содержимого каталогов
Вводим новую полезную команду — ls (сокращение от англ. list). Эта команда выводит на экран список файлов и каталогов, по умолчанию (если не указаны параметры) — список, относящийся к вашему домашнему каталогу. Пример:
/home/larry# ls Mail letters papers /home/larry#
Мы видим, что в данном примере в домашнем каталоге пользователя larry есть три элемента: Mail, letters и papers. Однако из этого списка нельзя понять — каталоги это или файлы. Чтобы получить более полную информацию от команды ls, можно использовать опцию -F:
/home/larry# ls -F Mail/ letters/ papers/ /home/larry\#
Из того, что к концу каждого имени приписан символ /, можно понять, что все три элемента в этом списке — подкаталоги.
Если в списке, выданном командой ls -F, к имени файла приписан символ *, то значит, данный файл является исполняемым (executable), или программой, которую можно исполнять. Если к имени файла в этом списке ничего не приписано, то мы имеем дело с обычным файлом (не каталогом и не исполняемым файлом).
Почти каждой команде в системе UNIX можно указывать несколько опций в дополнение к её обязательным аргументам. Как правило, эти опции начинаются с символа -. Так было в продемонстрированном выше случае, где опция -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, вы можете отметить, что в Linux имена файлов могут быть длиннее восьми символов и точка может находится на любом месте. Более того, в имени файла может быть несколько точек.
Отправимся в начало дерева каталогов и спустимся теперь в другой каталог. Для этого используем следующие команды:
/home/larry# cd .. /home# cd .. /# cd usr /usr# cd bin /usr/bin#
По дереву каталогов можно также двигаться в один шаг, например, отдав команду cd /usr/bin.
Попробуйте теперь самостоятельно двигаться по дереву каталогов, используя команды ls и cd. В некоторых случаях вам встретится сообщение Permission denied (запрещён доступ). Это сообщение об ошибке выдаёт система безопасности, предусмотренная в системе UNIX. Для того, чтобы исполнить команды ls или cd, надо иметь на это разрешение. Более подробно об этом будет говориться в разделе, посвящённом правам доступа.
Создание новых каталогов
Попробуем теперь создавать новые каталоги командой mkdir (сокращение от make directory). Попробуйте использовать следующие команды:
/home/larry# mkdir foo /home/larry# ls -F Mail/ foo/ letters/ papers/ /home/larry# cd foo /home/larry/foo# ls /home/larry/foo#
Итак, вы создали новый каталог и вошли в него. Этот новый каталог оказывается пустым, в нем нет никаких файлов. Вскоре мы научимся копировать файлы из одного каталога в другой.
Копирование файлов
Для копирования файлов используется команда cp (сокращение от copy). Пример:
/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 копирует файлы, перечисленные в командной строке, в файл или каталог, который указан последним аргументом. Обратите внимание, что для указания текущего каталога используется символ ..
Перенос файлов
Команда mv (сокращение от move) переносит файлы, а не копирует. Синтаксис команды очень простой:
/home/larry/foo# mv termcap sells /home/larry/foo# ls -F bells sells shells /home/larry/foo\#
В данном примере файлу termcap было дано новое имя sells. Команда mv может быть использована также для переноса файлов в совершенно другой каталог.
ВНИМАНИЕ!
Команды mv и cp создают файл с новым именем (либо путём копирования, либо переноса). Однако если файл с этим новым именем уже существует, то старый файл будет уничтожен, а на его месте появится новый, при этом система не спросит разрешения это сделать и не выдаст никакого предупреждения. При переносе файлов в другой каталог следует соблюдать осторожность. В этом каталоге уже может находиться файл с таким именем, и он будет уничтожен, а вместо него появится новый файл.
Уничтожение файлов и каталогов
Для уничтожения файлов используется команда rm (сокращение от remove), например:
/home/larry/foo# rm bells sells /home/larry/foo# ls -F shells /home/larry/foo\#
Ещё раз отметим, что по умолчанию команда rm не всегда настроена таким образом, чтобы выдавать предупреждения перед уничтожением файла, так что нужно быть осторожным.
Для уничтожения каталогов используется команда rmdir (произошло от remove directory). Эта команда уничтожает каталог только в том случае, если каталог пуст. Если в этом каталоге есть какие-нибудь файлы или подкаталоги, то команда rmdir выдаст сообщение об ошибке.
Просмотр содержимого файлов
Для просмотра содержимого файлов используются команды more и cat. Команда more выводит содержимое файла на экран по одному экрану за один раз, в то время как команда cat выводит весь файл сразу. Усовершенствованная версия more называется less.
Для того, чтобы увидеть содержание файла shells, введём следующую команду:
/home/larry/foo# more
Тем, кто интересуется, что же записано в файле shells, сообщаем, что там содержится список командных оболочек, доступных пользователю в данной системе. В большинстве систем в этот список входят /bin/sh, /bin/bash, /bin/csh. О различных командных оболочках речь пойдёт ниже.
При использовании программы more для вывода на экран следующей порции текста надо нажимать клавишу Space, а для того, чтобы вывести предыдущую порцию — клавишу b. При работе программы more доступны ещё несколько команд — здесь даются только основные. Чтобы закончить работу команды more, нужно нажать клавишу q.
Итак, заканчивайте работу с командой more и попробуйте команду cat /etc/termcap. Весьма возможно, что этот текст промелькнёт по экрану слишком быстро, чтобы его можно было прочесть. Название команды cat происходит от слова concatenate (связывать). В действительности, команда cat используется именно для того, чтобы приписывать содержимое одного файла к окончанию другого файла и помещать результат в третий файл. Это также будет обсуждаться в разделе, посвящённом скриптам командной оболочки.
Экранная документация
Почти все системы семейства UNIX, включая систему Linux, имеют экранную документацию (man pages). Её тексты содержат документацию по системным командам, ресурсам, конфигурационным файлам и т. д. и могут быть выведены на экран в процессе работы.
Для доступа к экранной документации используется команда man (сокращение от manual). Если вы хотите узнать, какие ещё есть опции у команды ls, вы можете ввести команду:
/home/larry# man ls
и на экран будет выведена экранная документация для команды ls
К сожалению, большинство экранных документаций написано для тех пользователей, которые уже имеют некоторое представление о том, что делает данная команда[5]. Поэтому большинство текстов экранной документации содержит исключительно технические детали команды без особых пояснений. Тем не менее, экранная документация оказывается очень ценной в том случае, если вы помните название команды, но её синтаксис просто выпал у вас из памяти. Кроме того, экранная документация имеются и для тех команд, которые в данной книге не объясняются.
Попробуйте с помощью команды man вывести на экран документацию для тех команд, которые ранее встречались в этом тексте, а также используйте её всякий раз, когда встречается новая команда. Для некоторых из этих команд может не быть экранной документации (по разным причинам). Во-первых, тексты экранной документации могут быть просто ещё не написаны. Экранная документация разрабатывается в рамках проекта Linux Documentation Project. Постепенно в этом проекте собирается вся экранная документация для этой системы. Во-вторых, команда может быть внутренней командой командной оболочки или же псевдонимом, для которых не пишутся отдельные экранные документации. Примером может служить команда cd, которая является внутренней командой командной оболочки. Эта команда интерпретируется самой командной оболочкой, поэтому не существует отдельной программы для исполнения этой команды.
[5] и также владеют английским языком.