Книга построена в стиле "вопрос ответ". Ответы бывают двух видов
Вид материала | Книга |
- Книга Зоар, 76.85kb.
- Тест по теме Игра «вопрос-ответ», 30.32kb.
- Пояснительная записка Билеты устного зачёта по информатике состоят из двух частей:, 72.39kb.
- Ответ на вопрос 4 8 9 Ответы на вопросы, 1334.72kb.
- Задание Укажите правильный ответ на тестовые вопросы задания с использованием правовых, 204.52kb.
- Ответ: Лекция, 66.61kb.
- Чего мы хотим от школьной физической культуры? Ответы специалистов на этот вопрос часто, 279.04kb.
- Дэвид Хокинс, 5939.1kb.
- Измени свою жизнь, построй свой успех. Формула идеального успеха расширенная форма, 617.11kb.
- Как самому толковать библию ричард мэйхью, 1455.83kb.
A:Как работать с UNIX?
В работе с UNIX нет ничего мистического и освоить простейшие операции можно и в течение одного вечера, особенно если под рукой окажется книжка, написанная простым, толковым языком. К счастью, недостатка в литературе испытывать не приходится, но слишком много – так же плохо, как и совсем ничего. Попробуй, выбери одну книжку из десятка, разбросанных по витрине! Поэтому, в >>>>"Имя это книги" включена короткая глава, помогающая незнакомым с UNIX сделать свои первые шаги. На звание учебника она не претендует, но, по крайней мере, поясняет основные команды UNIX, используемые в этой книге.
Для UNIX существует множество интерактивных оболочек с развитым пользовательским интерфейсом – от Mortal Commander (аналог Norton Commander) до графических сред a la Windows. Они упрощают освоения мира UNIX, но оказываются крайне неудобными для удаленного управления компьютером. Даже консольный Mortal Commander ощутимо тормозит на модемных каналах. А о графических оболочках вспоминать и вовсе не приходится, – комфортная работа возможна лишь при наличии шустрой локальной сети! Поэтому, придется поступиться некоторыми удобствами, и, расставшись с мышью, разговаривать с компьютером языком текстовых команд. Такое общение с UNIX в чем-то напоминает работу с интерпретатором MS-DOS "command.com". Разумеется, названия команд окажутся другими, но в целом принцип тот же.
В UNIX (в отличие от MS-DOS) нет стандартной командной оболочки, и первая задача пользователя – выяснить, что именно установлено в системе, и какие альтернативные оболочки доступны.
Путь к используемой в данный момент оболочке содержится в переменной $SHELL, и вывести ее содержимое на экран поможет команда "echo" – "echo $SHELL" (внимание, – соблюдайте регистр – UNIX к нему чувствительна). Результат работы на компьютере автора выглядит так:
Эмулятор UWIN
>echo $SHELL
/usr/bin/ksh
Эмулятор CYGWIN
>echo $SHELL
/bin/sh
Теперь по таблице 6 легко определить, какая именно оболочка запущена (конечно, при условии, что никакие злые духи не изменили имя исполняемого файла).
-
Имя файла
Название оболочки
bash
Усовершенствованная оболочка Борна
csh
Оболочка С
ksh
Оболочка Корна
sh
Оболочка Борна
tcsh
Оболочка TC
Таблица 6 Имена исполняемых файлов некоторых популярных оболочек
Пару слов об особенностях каждой оболочки. Первой на свет появилась оболочка Борна, фактически представляющая собой язык программирования, ориентированный на управление процессами, вводом-выводом и операции шаблонного поиска. Никакого интерактивного взаимодействия с пользователем в ней не предусматривалось, и вся работа сводилась к написанию управляющих программ – скриптов, обрабатываемых оболочкой.
Первая интерактивная оболочка, получившая название "С", возникла в университете Беркли. Она быстро завоевала популярность, но имела множество недостатков и содержала кучу ошибок, поэтому полностью вытеснить оболочку Борна так и не смогла. Проблема же совместного сосуществования заключалась в полной несовместимости командных языков обоих оболочек. Это приводило к невозможности выполнения скриптов, написанных для одной оболочки, другой оболочкой.
К тому же открытость исходных текстов "С" вызвала появление массы несовместимых между собой клонов. Некоторые из них дожили и до наших дней (как, например, "TC",– своеобразный гибрид "С" и "TENEX" – операционной системы PDP-10).
Существовали и коммерческие оболочки. Из них наибольшей популярностью пользовалось творение, созданное Дэвидом Корном, объединившее в себе лучшие черты своих предшественников. Компания AT&T распространяла ее вместе с операционной системой System V, объявив стандартном де-юре.
Стандарт – хорошо, но платить компании никто не хотел, и вскоре оболочка Борна была полностью переписана в рамках проекта GNU, получив название bash – Borne Again Shell. Многочисленные усовершенствования и перенос в среду LINUX сделали bash самой популярной оболочкой всех времен и народов, хотя многие до сих пор предпочитают пользоваться C-Shell или оригинальной оболочкой Борна. К тому же, по-прежнему не иссякает поток энтузиастов, пишущих свои собственные оболочки.
Во многих случаях различия между оболочками не столь существенны и не отражаются на простейших операциях, но все примеры, приводимые в книге, предназначены для оболочки Корна и их успешное выполнение в других оболочках не гарантируется (хотя и предполагается). Поэтому, полезно знать, какие оболочки установлены администратором на машине. В этом поможет команда "cat /etc/shells", результат работы которой на свежеустановленном эмуляторе UWIN выглядит следующим образом:
cat /etc/shells
/usr/bin/ksh
/usr/bin/sh
/usr/bin/tcsh
/usr/bin/csh
/bin/sh
/bin/ksh
/bin/csh
/bin/tcsh
Запустить любую оболочку можно, набрав ее имя (возможно, вместе с полным путем), в командной строке. А вернуться назад обычно помогает команда "exit". В качестве тренировочного упражнения полезно запустить все доступные оболочки по очереди. (Чаще всего пути "/usr/bin" и "/bin" указывают на один и тот же каталог, поэтому эквивалентны друг другу).
$ echo $SHELL
/usr/bin/ksh
$ /usr/bin/sh
# echo $SHELL
/usr/bin/ksh
# exit
$ /usr/bin/tcsh
# echo $SHELL
/usr/bin/ksh
# exit
$ /usr/bin/csh
%echo $SHELL
/usr/bin/ksh
%exit
Для просмотра содержимого директорий в командном интерпретаторе "command.com" (MS-DOS) предусмотрена встроенная команда "dir", но UNIX-оболочки не поддерживают такой команды. Вместо этого пользователю предоставляется возможность вызвать внешнюю утилиту, выполняющую всю необходимую работу.
Обычно в UNIX для отображения содержимого каталога используется программа "ls", находящаяся в каталоге "/bin". Кстати, пользователи CYGWIN, прежде чем смогут ей воспользоваться, должны скачать с сервера архив fileutils.tar.gz – в минимальный комплект поставки она не входит.
Вызов без параметров выводит на экран содержимое текущего каталога, а заглянуть в корень поможет наклонная черта – "ls /"
ls /
A E proc
base.bat etc reg
baseserviceslink.sh F sys
bin H tmp
C home usr
D lib var
dev linka win
Узнать, что находится в каталоге "/etc" можно передав его имя в качестве параметра команде "ls":
$ ls /etc
crontab inetdconfig.sh passwd.add traceit
in.ftpd init.exe priv.exe tracer.exe
in.rlogind login.allow profile ucs.exe
in.rshd login.deny rc ums.exe
in.telnetd mailx.rc services
inetd.conf mkpasswd.exe shells
inetd.exe passwd stop_uwin
Конечно же, поддерживаются символы-джокеры, – знаки "звездочка" и "вопрос". В UNIX, в отличие от MS-DOS, существует конструкция [char set], которую имеет смысл рассмотреть подробнее. Но для начала нелишне вспомнить назначение "*" и "?". Знак "*" обозначает любое множество любых символов (включая пустое), а "?" всего один непустой символ. Поэтому, "ls x*" выведет на экран все файлы (и каталоги), начинающиеся с буквы "x", а "ls ?tmp"- покажет "_tmp","$tmp" и так далее.
Конечно же, временами гибкости таких шаблонов оказывается недостаточно, например, как быть, когда требуется получить список файлов, начинающихся и на букву "i", и на букву "p"? В MS-DOS с этим приходится управляться в два захода, последовательно отдавая команды "dir i*" и "dir p*". UNIX же с этой проблемой управляется за один присест! Например, так:
$ ls /etc/[ip]*
/etc/in.ftpd /etc/inetd.conf /etc/passwd
/etc/in.rlogind /etc/inetd.exe /etc/passwd.add
/etc/in.rshd /etc/inetdconfig.sh /etc/priv.exe
/etc/in.telnetd /etc/init.exe /etc/profile
А как быть, если необходимо отобразить все файлы, в имени которых присутствует хотя бы одна цифра? Неужели придется писать утомительно длительную последовательность "ls *[0123456789]*"? К счастью нет! - необходимый интервал можно задать следующим образом: "[0-9]", например, вот так:
$ls /etc/*[0-9]*
/etc/k1y /etc/mkss2old /etc/track7
Если такой информации окажется недостаточно и потребуется узнать, скажем, права доступа к файлу, имя владельца и время последнего изменения, то воспользуйтесь ключом "-l" (маленькая латинская буква L, не спутайте с единицей). Например, так:
ls –l /etc
-rwxr–-r–- 1 root Everyone 46 Feb 16 1999 crontab
-rwxr–-r–- 1 root Everyone 19968 Feb 17 1999 mkpasswd.exe
drwxr–-r–- 2 root Everyone 512 Jul 2 16:52 mydir
-rwxr––r–- 1 root Everyone 119 Jul 1 12:45 passwd
lrwxr–-r–- 1 root Everyone 20 Jun 4 03:10 services -> /C/WINDOWS//services
-rwxr––r–- 1 root Everyone 88 Feb 17 1999 shells
-rwxr–-r–- 1 root Everyone 73216 Feb 2 07:25 ums.exe
Первая слева колонка сообщает права доступа. Она состоит из тех трехсимвольных групп, определяющих права доступа создателя (то бишь владельца файла), его группы и всех остальных пользователей. Каждая группа в свою очередь состоит из трех атрибутов, разрешающих чтение (r), запись (w) и исполнение (x).
Рисунок 58 Рисунок 008.txt Расшифровка файловых атрибутов
Тут надобно заметить, что в UNIX выполняемые файлы распознаются по атрибуту "x", и могут иметь любое расширение или вовсе не иметь его. Обычно большинство файлов и каталогов имеют следующие права доступа "rwxr––r––r", т.е. создатель файла может делать с ним что угодно, а всем остальным разрешается читать, но не модифицировать или запускать.
Для изменения прав доступа предусмотрена утилита chmod (сокращение от Change Mode). Она принимает следующие аргументы командной строки: первой указывается группа пользователей ("u" – для владельца, "g" – для членов его группы, "o" – для всех прочих и "a" для всех-всех, т.е. "u"+"g"+"o" одновременно), затем наличие (знак "+") или отсутствие (знак "-") требуемого атрибута. Например, защитить собственные файлы от "чужого глаза" можно так: "chmod g-r,o-r *".
Директории отличаются от простых файлов по стоящему впереди символу "d" (смотри рисунок 58)
Рисунок 59 Рисунок 009.txt Директории в UNIX отличаются от файлов наличием атрибута "d"
Следующая колонка сообщает количество псевдонимов, под которыми файл (директория) известен системе. Например, для каталога "/bin" это число равно двум, поскольку обычно "/bin" и "/usr/bin" ссылаются на одну и ту же директорию.
drwxrwxrwx 2 root Everyone 512 Jun 4 00:50 bin
drwxrwxrwx 3 root Everyone 512 Jun 4 00:51 dev
drwxrwxrwx 16 root Everyone 512 Jun 4 00:51 lib
Третья колонка содержит имя владельца файла (в данном примере "root") и группу, к которой он принадлежит ("Everyone"). И замыкают строку размер, время создания и имя файла (директории). Вся остальная информация по работе с "ls" содержится в руководстве "man" и может быть получена с помощью команды "man ls".
Перейти в другой каталог, как и в MS-DOS, можно с помощью команды "cd". Стоит заметить: в UNIX нет понятия диска, поэтому нет и команды для его изменения – для навигации достаточно одного "cd". Например:
$ cd /
$ ls
A E proc
base.bat etc reg
baseserviceslink.sh F sys
bin H tmp
C home usr
D lib var
dev linka win
$ cd /A
$ ls
tpna.arj
$ cd /var
$ ls
adm tmp uninstall
Для создания новых каталогов предназначена команда "mkdir" (Make Directory). Вызов "mkdir myname" создаст в текущем каталоге новую директорию "myname". А вот попытка создать несколько вложенных друг в друга каталогов провалится, если не указать ключ "-p". Например:
$ mkdir temp
$ cd temp
$ ls
$ mkdir 1/2/3
mkdir: 1/2/3: [No such file or directory]
$ mkdir -p 1/2/3
$ ls
1
$ ls 1
2
$ ls 1/2
3
Кстати, обратите внимание, – в UNIX ключи задаются до имен файлов, иначе вместо ключа "-p" создастся директория с таким именем. Да, "mkdir" позволяет создать более одного каталога за вызов. Например:
$ mkdir 1 2 3
$ ls
1 2 3
Удалить ненужные каталоги поможет команда ‘rm’. По умолчанию удаляются одни файлы, а для уничтожения директорий необходимо задать дополнительный ключ ‘-d’. Если удаляемый каталог содержит вложенные директории, то начать удаление необходимо с самого «нижнего» из них или воспользоваться ключом ‘-r’, рекурсивно стирающим все без разбора. Так, для уничтожения созданных в предыдущем примере каталогов ‘/1/2/3’ можно воспользоваться следующими командами:
rm –d /1/2/3
rm –d /1/2
rm –d /1
Или обойтись всего одной:
rm –d –r /1
А для копирования файлов в UNIX предусмотрена утилита "cp" – аналог "copy" из MS-DOS. Например, скопировать "/etc/passwd" в свой собственный каталог можно командой: “cp /etc/passwd /home”, а просмотреть его содержимое поможет утилита "cat". Например:
$ cp /etc/passwd /home
$ cat /home/passwd
root:x:0:13:Built-in account for administering the computer/domain:/tmp:/usr/bin/ksh
telnetd:x:1:1:telnetd:/:/dev/null
Тут необходимо сделать небольшое пояснение. Изначально "cat" разрабатывалась для объединения нескольких файлов в один, но в качестве целевого файла использовался стандартный вывод, поэтому пользоваться утилитой приходилось приблизительно так “cat file1 file2 file3 > file123”. Знак “>” обрабатывался оболочкой, подменяющей стандартный вывод указанным файлом. Если же целевой файл не указывался, утилита последовательно выводила содержимое перечисленных файлов на экран.
Конечно, существуют и более элегантные способы просмотра содержимого файла и его редактирования. Например, редактор "vi" (от Visual Interface). Это классическая утилита UNIX может вызвать насмешку у пользователей MS-DOS/Windows, привыкших к визуальному редактированию, поскольку редактор "vi" управляется своим собственным командным языком, без знаний которого невозможно даже сохранить файл или выйти из vi!
Сначала это шокирует, но позже, освоившись с vi, начинаешь понимать насколько же оболванивает и ограничивает визуальный интерфейс. С другой стороны, edit.com не требует никакого обучения – сел и работай, а командный язык редактора vi можно изучать месяцами, в течение которых большую часть времени придется провести за листанием документации, с небольшими перерывами на собственно набивку текста.
Да, это так! Но при ближайшем рассмотрении недостатки оборачиваются преимуществами. Командный язык несравненно гибче системы меню и значительно ускоряет редактирование текста, стоит лишь освоить его в совершенстве. Конечно, можно возразить "лучше за час добежать, чем за день долететь", – машинное время сегодня не так критично, как стремление максимально облегчить умственную деятельность пользователей.
Действительно, в UNIX существуют вполне привычные пользователям Windows редакторы, и выбор того или иного – личное дело каждого. Разумеется, при условии, что выбранный редактор установлен в системе. К сожалению, администраторы многих серверов не балуют своих пользователей разнообразием, тем более, когда предоставляют хостинг бесплатно. Теоретически возможно связаться с администратором и попросить установить ваш любимый редактор, но практически это оказывается сложнее изучения vi, который поставляется со всеми UNIX-совместимыми системами, и всегда доступен.
Поэтому минимальные навыки работы с редактором vi никогда не помешают, и как знать – может быть, через некоторое время он окажется вашим любимым редактором!
Для того чтобы пользоваться vi, вовсе не обязательно устанавливать на своем компьютере операционную систему UNIX или один из ее эмуляторов, – vi дал рождение многочисленным клонам, некоторые из которых успешно перенесены в среду Windows 9x/Windows NT и даже MS-DOS. Большую популярность завоевал vim, портированный на платформы Amiga, Atari, Mac System 7, UNIX, MS-DOS, Windows, словом практически для любого компьютера существует реализация vim. Остается добавить, что vim свободно распространяется вместе с исходными текстами и находится, например, на быстром германском ftp сервере – ftp://ftp.fu-berlin.de/misc/editors/vim.
Сразу же после запуска, vi будет выглядеть приблизительно так, как показано на рисунке 59 (в данном случае vi был запушен с параметром hello для создания нового файла).
Рисунок 60 Рисунок 054.bmp Внешний вид редактора vim – клона vi, запущенный в операционной системе Windows
Знаки "~" (тильда) указывают на конец файла и в действительности отсутствуют в его теле.
Если попытаться набрать текст "Hello, World!" на экране ничего не появится, а vi ответит разраженным покрикиванием. Дело в том, что у vi есть два режима – командный режим и режим вставки.
В командном режиме можно перемещать курсор по экрану, искать и заменять фрагменты текста, сохранять и загружать файлы с диска – словом командовать редактором, а режим вставки предназначен для ввода самого текста.
Сразу же после запуска vi оказывается в командном режиме и переключиться в режим вставки можно, например, нажатием клавиши <i>. Дождавшись появления курсора вверху экрана, наберите восклицание "Hello, Word!" или что-нибудь в этом духе, а затем попробуйте сохранить файл на диск. Для этого нажмите клавишу <Esc>, чтобы переключиться в командный режим, и наберите следующую последовательность <:>,<q>,<w>,<ENTER>.
Да… сложная вещь vi, но на самом деле настоящие сложности еще впереди! Загрузите только что созданный файла в редактор, указав его имя в командной строке, и попробуйте отредактировать строку, например, измените "Hello, World!" на "Hello, my world!". Что, пытаетесь подвести курсор к месту правки, а стрелки не действуют? Хорошенькое начало, – чем же тогда управлять курсором?!
Не стоит волноваться понапрасну – раскладка клавиатуры обычно подбирается так, чтобы пользователи могли работать ни о чем не задумываясь, но все же иногда встречаются нерадивые администраторы, криво инсталлирующие vi на свою машину. Поэтому, на всякий случай полезно знать, что клавиша <h> в командном режиме перемещает курсор на одну позицию влево, <l> - вправо, а <j> и <k> вниз и вверх соответственно.
Нажмите шесть раз клавишу <l> или воспользуйтесь комбинацией <6><l> (обычно цифра стоящая перед любой командой предписывает повторить эту команду надлежащие количество раз). Теперь наберите "my", автоматически раздвигая остальные символы, а для замены большую буквы "W" на строчечную войдите в командный режим по <Esc> и включите режим вставки символа, нажатием <r>. Или же используйте команду "~" (тильда) для инвертирования регистра символов.
Конечно, никто не и не утверждает, что пользоваться vi легко, но тягостные дни и месяцы обучения окупятся богатыми предоставляемыми возможностями, – vi поддерживает именованные буферы, макросы, обладает развитым механизмом шаблонного поиска, позволяет запускать команды оболочки, не выходя из редактора, словом, в умелых руках способен творить чудеса. Но эта книга не учебник по vi, поэтому, не задерживаясь на нем дальше, вернемся к освоению UNIX.
Продемонстрировать многозадачность UNIX поможет тот же vi – как быть, если, не выходя из редактора, потребуется выполнить какое-нибудь действие? В Windows достаточно щелкнуть мышкой по заголовку окна другой программы или нажать <Alt>-<Tab>, но разработчики UNIX пошли по другому пути.
Если нажать <Ctrl-Z>, выполнение текущего процесса приостановится, и произойдет выход в оболочку. Убедиться в том, что "vi" еще жив поможет команда "ps", отображающая список всех процессов в системе (процесс vi.exe выделен жирным шрифтом):
$ ps
PID TT TIME COMMAND
148799 tty10 0 vi.exe
150872 tty10 0 ps.exe
320924 tty10 0 ksh.exe
Слева показаны идентификаторы процессов. Зная идентификатор процесса, его можно "прибить" командной "kill" или запустить передним планом утилитой "fg". Например, так: "fg 148799" или так – "fg %1", где "%1" –порядковый номер процесса в списке. Независимо от способа запуска "fg", редактор vi вновь появится на экране. Нажмите еще раз <Ctrl-Z> и убийте процесс командной kill – "kill 148799" или "kill %1" – оба варианта хороши одинаково, но второй писать существенно короче.
А как поступить, если в vi требуется провести поиск сложного шаблона по всему тексту, выполняющийся неприлично длительный промежуток времени, в течение которого ничего не остается, как сидеть и тупо пялится на экран?
На помощь приходит фоновое выполнение задач, – понижение приоритета процесса, с предоставлением экрана другому приложению. Перевести приложение в фоновой режим поможет команда "bg", запускаемая точно так же как и "fg" (которая, кстати, пригодится для возращения процесса из фонового в нормальный режим). Большинство оболочек распознают символ "&", расположенный в конце командной строки, и автоматически запускают приложение в фоновом режиме. Например:
$ vi &
[1] 141008
$ ps
PID TT TIME COMMAND
87458 tty10 0 ps.exe
141008 tty10 0 vi.exe
320924 tty10 0 ksh.exe
[1] + Stopped (SIGTTIN) vi &
$
На этом краткое введение в UNIX можно считать законченным. Умения прогуляться по каталогам и запустить нужную программу для начала окажется вполне достаточно. Конечно, это не избавляет от необходимости приобретения справочных руководств и учебников по UNIX, но множество полезной информации можно найти и во встроенной справочной системе, доступной для просмотра с помощью утилиты "man".
Получить помощь по любой команде можно, указав ее название в командной строке, например, так "man ls"
Родственные вопросы:
Как из Windows сделать UNIX?
Что такое telnet и как с ним работать?