При входе вы увидите на экране подсказку, например, такого вида:
mousehouse login:
Введите свое имя и
нажмите клавишу larry
напечатает следующее:
mousehouse login: larry Password:
Login incorrect
и вам следует попытаться еще раз.
mousehouse login: larry Password: larry's password Welcome to Mousehouse! /home/larry#
/home/larry# make love make: *** No way to make target `love'. Stop. /home/larry#
/home/larry# cp foo bar
Здесь имя команды ``cp
'',
а аргументы ``foo
'' и ``bar
''.
/home/larry# eat dirt eat: command not found /home/larry#
/home/larry# exit
для выхода. Есть другие способы выхода, но этот самый безопасный.
papers/english-lit
papers/notes/cheat-sheet
/_____bin |_dev |_etc |_home_____larry | |_sam |_lib |_proc |_tmp |_usr__X386 |_bin |_emacs |_etc |_g++-include |_include |_lib |_local_____bin | |_emacs | |_etc | |_lib |_man |_spool |_src_____linux |_tmp Рис 3.1: Типичное (урезанное) дерево каталогов Unix
/home/larry# more /home/larry/papers/history-final
/home/larry# more papers/history-final
/home/larry# more ~/papers/history-final
/home/larry# more /home/larry/papers/history-final
Символ ``~'' просто заменяет имя вашего домашнего каталога.
cd <directory>
/home/larry# cd papers /home/larry/papers#
/home/larry/papers# more history-final
Чтобы вернуться назад
из подкаталога papers
, надо
использовать команду
/home/larry/papers# cd .. /home/larry#
/home/larry/papers# cd .
/home/larry/papers# cd /home/karl /home/karl#
Используя команду cd
без аргументов вы из любого места
дерева вернетесь в свой домашний
каталог.
/home/karl# cd /home/larry#
/home/larry# ls Mail letters papers /home/larry#
/home/larry# ls -F Mail/ letters/ papers/ /home/larry#
Приписанные справа к именам файлов / говорят о том, что это (под)каталоги.
Если вы напишете в
команде 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#
/home/larry# cd .. /home# cd .. /# cd usr /usr# cd bin /usr/bin#
/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#
Новая команда с именем mv
(MoVe) перемещает файлы вместо их
копирования. Синтаксис команды
очевиден.
/home/larry/foo# mv termcap sells /home/larry/foo# ls -F bells sells shells /home/larry/foo#
/home/larry/foo# rm bells sells /home/larry/foo# ls -F shells /home/larry/foo#
Чтобы посмотреть файл shells
,
используем команду
/home/larry/foo# more shells
/home/larry# man ls
и вам на экран будут выведены страницы Руководства.
cd <directory>
;<directory>
- каталог, в
который перейти (``.'' ссылается
на текущий каталог, ``..'' - на
родительский каталог).cd ../foo
переводит
из текущего каталога в ../foo
.ls <file1> ...
<fileN>
<file1> ... <fileN>
имена файлов или каталогов,
информацию про которые надо
выдать.-F
(для
представления информации о
типах файлов), и -l
(выдает в длинном (``long'') формате
информацию о размерах файлов,
владельцах, правах доступа и
т.д. В деталях это будет
обсуждаться далее).ls -lF /home/larry
выдаст содержимое каталога /home/larry
.cp <file1> ...
<fileN> <destination>
<file1> ... <fileN>
имена копируемых файлов, а <destination>
файл или каталог, в который
копируют.cp ../frog joe
копирует файл ../frog
в
файл или каталог joe
.RENAME
из MS-DOS.mv <file1> ...
<fileN> <destination>
<file1> ... <fileN>
имена перемещаемых файлов, а <destination>
имя файла или каталога, в
который перемещают.mv ../frog joe
перемещает файл ../frog
в
файл или каталог joe
.rm <file1> ...
<fileN>
<file1> ... <fileN>
имена удаляемых файлов.-i
потребует
вашего подтверждения перед
удалением файла.rm -i /home/larry/joe
/home/larry/frog
удаляет файлы joe
и frog
в каталоге /home/larry
.mkdir <dir1> ...
<dirN>
<dir1> ... <dirN>
создаваемые каталоги.mkdir /home/larry/test
создает каталог test
в
каталоге /home/larry
.rmdir
ваш
текущий рабочий каталог должен
находиться вне удаляемого
каталога.rmdir <dir1> ...
<dirN>
<dir1> ... <dirN>
удаляемые каталоги.rmdir /home/larry/papers
удаляет каталог /home/larry/papers
,
если он пустой.man <command>
<command>
имя команды
или ресурса, о котором
запрашивается информация.man ls
- дает помощь
по команде ls
.more <file1> ...
<fileN>
<file1> ... <fileN>
отображаемые файлы.more papers/history-final
представляет файл papers/history-final
.cat
используется также для выдачи
полного содержания файла разомcat <file1> ...
<fileN>
<file1> ... <fileN>
выдаваемые файлы.cat letters/from-mdw
выдает на дисплей файл letters/from-mdw
.echo <arg1> ...
<argN>
<arg1> ... <argN>
"повторяемые" аргументы.echo "Hello world"
выдает на экран ``Hello world
''.grep <pattern>
<file1> ... <fileN>
<pattern>
- образец
(представленный регулярным
выражением) и <file1> ...
<fileN>
- файлы, в которых
производится поиск.grep loomer /etc/hosts
выдаст все строки, в которых
файл /etc/hosts
, содержит
образец ``loomer
''.Присмотримся к каждому каталогу.
bin
- это
сокращенно от ``binaries'' (т.е.
двоичные или выполняемые
файлы). Здесь находится много
важных системных программ.
Используйте команду ``ls -F/bin
''
чтобы посмотреть имеющийся
здесь список файлов. Вы можете
обнаружить здесь уже знакомые
вам команды, вроде cp
, ls
и mv
. Это и есть программы
соответствующих команд. Когда,
например, вы используете
команду cp
, вы выполняете
программу /bin/cp
.
dev
. Вновь
посмотрите на содержимое с
помощью ls -F
.
Вот перечень некоторых из наиболее используемых файлов устройств.
/dev/console/
относится к системной
консоли, т.е. к монитору,
напрямую связанному с
системой. /dev/ttyS
и /dev/cua
устройства
используются для доступа к
последовательным портам.
Например, /dev/ttyS0
относится к ``COM1'' под MS-DOS.
Устройства /dev/cua
относятся к
"звонящим" (``callout'')
устройствам, которые
используются совместно с
модемами. hd
,
имеют доступ к жестким
дискам. /dev/hda
относится ко всему
первому жесткому диску, а 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
относятся к
"виртуальным
консолям" вашей системы
(доступ путем нажатия /dev/tty1
соответствует первой VC, /dev/tty2
соответствует второй и т.д.
/dev/pty
,
это
"псевдотерминалы".
Они используются для входа
с удаленных
"терминалов".
Например, если ваша машина
в сети, вход к вам по telnet
будет использовать одно из
устройств /dev/pty
./etc
содержит
множество всевозможных
системных файлов конфигурации.
Они включают /etc/passwd
(файл паролей), /etc/rc
(командный файл инициализации)
и т.д./sbin
используется для хранения
важных системных двоичных
файлов, используемых системным
администратором.home
содержит
домашние каталоги
пользователей. Например, /home/larry
- домашний каталог
пользователя ``larry
''. На
вновь инсталлированной
системе этот каталог может
быть пуст в связи с временным
отсутствием
зарегистрированных
пользователей./lib
содержит
образы разделяемых библиотек
(shared library images). Эти файлы
содержат код, который могут
использовать многие программы.
Вместо того, чтобы каждая
программа имела свою
собственную копию этих
выполняемых файлов, они
хранятся в одном общедоступном
месте - в /lib
. Это
позволяет сделать выполняемые
файлы меньше и сэкономит место
в системе./proc
- это
"виртуальная файловая
система", в которой файлы
хранятся в памяти, а не на
диске. Они связаны с различными
процессами, происходящими
в системе, и позволяют получить
информацию о том, что делают
программы и процессы в
указанное время. Более
детально мы рассмотрим это в
Разделе 3.11.1./tmp
(там
обычно чаще проводится уборка
мусора)./usr
- это очень
важный каталог. Он состоит из
ряда подкаталогов, которые в
свою очередь содержат наиболее
важные и полезные программы и
файлы конфигурации,
используемые системой.
/usr/X386
содержит
The X Window System, если вы ее
инсталлировали. The X Window System -
это мощная графическая среда,
которая содержит большое
количество графических утилит
и программ, отображающих
"окна" на вашем экране.
Если вы знакомы с Microsoft Windows или
Macintosh environments, то X Windows будет
выглядеть весьма похоже.
Каталог /usr/X386
содержит
все выполняемые и
конфигурационные файлы X Window, а
также файлы поддержки. Более
детально это будет обсуждаться
в Разделе 5.1./usr/bin
настоящее
хранилище для различных
программ UNIX. Он содержит
большинство выполняемых
программ, которых нет ни в
каких других местах, например,
в том же /bin
их нет./etc
,
содержит всевозможные
системные программы и
конфигурационные файлы. /usr/etc
содержит даже больше утилит и
файлов. В общем, файлы,
находящиеся в /usr/etc
несущественны для системы, в
отличие от тех, которые
находятся в /etc
, и очень
существенны./usr/include/sys
в общем случае используются
при программировании на
системном уровне UNIX. Если вы
знакомы с языком
программирования Си, здесь вы
найдете такие хэдеры
(фрагменты программ,
вставляемые обычно в начало
программы), stdio.h
, которые
описывают такие функции, как printf()
./usr/g++-include
содержит include-файлы для
компилятора Cи++ (очень похожие
на /usr/include
)./usr/lib
содержит
библиотеки-"заглушки" и
"статические" библиотеки,
эквивалентные файлам из /lib
.
При компиляции программа
"связывается" с
библиотеками, находящимися в /usr/lib
,
которые в свою очередь
направляют программы
обращаться в /lib
, если им
нужен актуальный код. Кроме
того, многие другие программы
хранят в /usr/lib
свои
конфигурационные файлы./usr/local
в большой
степени похож на /usr
- он
содержит различные программы и
файлы, несущественные для
системы, но превращающие ее в
удовольствие и восторг. В
общем, эти программы,
находящиеся в /usr/local
специализируются на специфике
вашей системы, т.е. /usr/local
сильно отличается в различных
UNIX. Здесь вы найдете такие
большие программные пакеты,
как TeX (система форматирования
документов) и Emacs (большой и
мощный редактор), если вы их
установите./usr/man/man1
содержит исходные тексты
(неотформатированный оригинал)
страниц Руководства в разделе 1
и /usr/man/cat1
содержит
отформатированные страницы
для раздела 1./usr/src
содержит
исходные коды
(неоткомпилированные
программы) для различных
программ вашей системы.
Наиболее важная вещь здесь, это
/usr/src/linux
, содержащий
исходные коды ядра Linux./var
содержит
каталоги, которые часто
меняются в размере или имеют
тенденцию быстро расти. Многие
из этих каталогов
"квартировались" в /usr
,
но поскольку мы стремимся
сделать его достаточно
стабильным, каталоги, которые
часто меняются были перенесены
в /var
. К числу таких
каталогов относятся:/var/adm
содержит
различные файлы, интересные
системному администратору,
специфические системные файлы,
фиксирующие ошибки и проблемы,
возникающие в системе. Другие
файлы фиксируют входы в
систему, как и неудачные
попытки войти. Это будет
обсуждаться в Главе 4./var/spool
содержит
файлы, которые предварительно
формируются для других
программ. Например, если ваша
машина подключена к сети,
входная почта будет помещаться
в /var/spool/mail
до тех пор,
пока вы не прочитаете ее или не
удалите. Входящие и исходящие
новости помещаются в /var/spool/news
и т.д./home/larry# ls frog joe stuff /home/larry#
Для обращения сразу ко
всем файлам с буквой ``o
'' в
имени, мы можем использовать
команду
/home/larry# ls *o* frog joe /home/larry#
/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#
/home/larry# ls *o* расширяется shell до фактической /home/larry# ls frog joe
/home/larry# ls frog joe stuff /home/larry#
Если вы используете
опцию -a
в команде ls
,
то вы сможете отобразить имена,
начинающиеся на ``.
'':
/home/larry# ls -a . .. .bash_profile .bashrc frog joe stuff /home/larry#
/home/larry# ls * frog joe stuff /home/larry#
/home/larry# ls j?e joe /home/larry# ls f??g frog /home/larry# ls ????f stuff /home/larry#
/home/larry# cp /etc/s* /home/larry
скопирует все файлы в /etc
, начиная с ``s''в каталог /home/larry
.
Формат команды cp
на самом
деле
cp <file1> ... <fileN> <destination>
/home/larry/papers# cat history-final masters-thesis
на экран пойдет файл history-final
,
а за ним следом masters-thesis
.
/home/larry/papers# cat Hello there. Hello there. Bye. Bye. [ctrl-D] /home/larry/papers#
/home/larry/papers# sort bananas carrots apples [ctrl-D] apples bananas carrots /home/larry/papers#
/home/larry/papers# sort > shopping-list bananas carrots apples [ctrl-D] /home/larry/papers#
/home/larry/papers# cat shopping-list apples bananas carrots /home/larry/papers#
/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#
/home/larry/papers# ls english-list history-final masters-thesis notes /home/larry/papers# ls > file-list /home/larry/papers# sort -r file-list notes masters-thesis history-final english-list /home/larry/papers#
/home/larry/papers# ls | sort -r notes masters-thesis history-final english-list /home/larry/papers#
Эта команда намного короче и, очевидно, проще набирается. Другой полезный пример. Команда
/home/larry/papers# ls /usr/bin
/home/larry/papers# ls /usr/bin | more
Теперь вы можете постранично листать файл в свое удовольствие.
/home/larry/papers# ls | sort -r | head -1 notes /home/larry/papers#
/home/larry/papers# ls > file-list
/home/larry/papers# ls >> file-list
добавит выходную
информацию команды ls в файл file-list
.
/home/larry/foo# ls -l stuff -rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff /home/larry/foo#
Вот еще несколько примеров на права доступа.
chmod {a,u,g,o}{+,-}{r,w,x} <filenames>
# ls -i foo 22192 foo #
# ln foo bar
С помощью ls -i
можно убедиться, что оба файла
имеют один и тот же индекс.
# ls -i foo bar 22192 bar 22192 foo #
# rm foo
Команда ls -l
покажет число ссылок на файл (кроме
прочей информации)
# 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 #
Вторая колонка с цифрой ``2'' показывает число связей файла.
# ln -s foo bar
# ls -i foo bar 22195 bar 22192 foo #
Однако, используя ls
-l
, мы видим, что файл bar
имеет символический указатель на foo
.
# 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# ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/larry#
/home/larry# yes y y y y y
/home/larry# yes > /dev/null
Чтобы переместить
процесс в фоновый режим, необходимо
после команды символ ``&
''.
/home/larry# yes > /dev/null & [1] 164 /home/larry#
/home/larry# jobs [1]+ Running yes >/dev/null & /home/larry#
/home/larry# kill %1
Теперь, после
ликвидации, мы можем снова
использовать jobs
для
проверки:
/home/larry# jobs [1]+ Terminated yes >/dev/null /home/larry#
/home/larry# kill 164 эквивалентна /home/larry# kill %1
Вам не надо
использовать ``%
'', когда вы
обращаетесь к работе по номеру
идентификатора процесса.
Сначала начнем работу "нормально":
/home/larry# yes > /dev/null
/home/larry# yes > /dev/null [ctrl-Z] [1]+ Stopped yes >/dev/null /home/larry#
/home/larry# fg yes >/dev/null
/home/larry# bg [1]+ yes >/dev/null & /home/larry#
/home/larry# yes &
/home/larry# fg %2
(перевод на передний план работы номер 2) или
/home/larry# bg %3
(перевод в фон работы номер 3).
/home/larry# %2 эквивалентно /home/larry# fg %2
Вызов vi vi <filename>
где <filename>
-
имя редактируемого файла.
/home/larry# vi test
для редактирования
файла test
. Вы увидите нечто
вроде
____________________________________________________________________ |~_ | |~ | |~ | |~ | |~ | |"test"_[New_file]__________________________________________________|
Столбец символов ``~'' говорит о том, что вы стоите на конце файла.
____________________________________________________________________ |Now is the time for all good men to come to the aid of the party._ | |~ | |~ | |~ | |~ | |~__________________________________________________________________|
Для завершения режима
вставки и возврата в командный
режим нажмите
____________________________________________________________________ |Now is the time for all good_men to come to the aid of the party. | |~ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |~ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |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._ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |Afterwards, we'll go out for pizza and _ | |~ | |~ | |~ | |~__________________________________________________________________|
Теперь нажмите
____________________________________________________________________ |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._ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |~ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |Now is the time for all women to come to the aid of the party. | |~ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |Now is the time for all women to come to the aid of the hungry._ | |~ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |Cow is the time for all women to come to the aid of the hungry._ | |~ | |~ | |~ | |~ | |~__________________________________________________________________|
____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~__________________________________________________________________|
Команда w
перемещает курсор на начало
следующего слова; b
-
перемещает на начало предыдущего
слова.
Для выхода из vi
без внесения изменений в ранее
существовавший файл используйте
команду :q!
.
____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:__________________________________________________________________|
____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:e foo_____________________________________________________________|
____________________________________________________________________ |No_write_since_last_change_(":edit!"_overrides)____________________|
____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:e! foo_____________________________________________________________|
:r foo.txt
вставит содержимое
файла foo.txt
в данное место
текста.
:r! ls -F
____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |letters/ | |misc/ | |papers/_ | |~ | |~__________________________________________________________________|
:! ls -F
:shell
/home/larry# cat chapter1 chapter2 chapter3 > book /home/larry# wc -l book /home/larry# lp book
#!/bin/sh # A shell script to create and print the book cat chapter1 chapter2 chapter3 > book wc -l book lp book
Если этот сценарий
будет помещен в файл makebook
, то
вы можете просто использовать
далее команду
/home/larry# makebook
/home/larry# chmod u+x makebook
чтобы дать самому себе
разрешение на выполнение
shell-сценария makebook
.
/home/larry# foo=``hello there''
/home/larry# echo $foo hello there /home/larry#
дает тот же самый результат, что и
/home/larry# echo ``hello there'' hello there /home/larry#
/home/larry# PAGER=cat
Теперь экспортируйте PAGER
в среду.
/home/larry# export PAGER
Попробуйте команду man
ls
. Руководство промелькнет по
вашему экрану без (желательных)
задержек.
/home/larry# PAGER=more
/home/larry/papers# echo $HOME /home/larry
Другая интересная
переменная среды - PS1
,
которая определяет главную
подсказки shell. Например,
/home/larry# PS1=``Your command, please: '' Your command, please:
Your command, please: PS1=``\w# '' /home/larry#
В Руководстве bash
есть подробное описание
синтаксиса, используемого при
установке подсказки.
Например, ваша
переменнаяPATH
может иметь
значение
/bin:/usr/bin:/usr/local/bin:.
/home/larry# cp foo bar