и чем этот документ не
Что это такое, и чем этот документ не является
DNS-- это Доменная Система Имен (Domain Name System). DNS преобразует имена машин в IP-номера, которые являются адресами машин, она преобразует из имен в адреса и из адресов в имена. Этот документ показывает как определить такие преобразования, используя систему на базе Linux. Преобразование -- это просто создание ассоциации между двумя вещами, в нашем случае между именем машины, таким как ftp.linux.org, и номером IP этой машины, например 199.249.150.4.
DNS является, для непосвященных (для вас ;-), одной из самых непрозрачных областей сетевого администрирования. Этот документ постарается сделать некоторые вещи понятнее. Здесь описывается как настроить простой
сервер DNS. Начав с настройки кэширующего сервера, мы перейдем к настройке основного сервера DNS для домена. Для более сложных настроек вы можете посмотреть раздел этого документа. Если он не описывает, то что вам нужно, то вам понадобится прочитать
полную документацию. Я возвращусь к тому из чего состоит эта полная документация в .
До начала этого процесса, вы должны настроить вашу машину так, чтобы вы могли выполнять команду telnet на нее/с нее, и производить любые сетевые соединения, и вам совершенно необходимо иметь возможность выполнять команду telnet 127.0.0.1 и входить на свою собственную машину (протестируйте это сейчас!). Вам также необходимо иметь правильно настроенные файлы /etc/nsswitch.conf (или /etc/host.conf), /etc/resolv.conf и /etc/hosts, поскольку я не буду объяснять их функции в этом документе. Если работа сети у вас еще не настроена, то в NET-3-HOWTO и/или PPP-HOWTO вам объяснят как это сделать. Прочитайте эти документы.
Когда я говорю `ваша машина' я подразумеваю ту машину, на которой вы пытаетесь настроить DNS. А ни какая другая машина, которую вы могли вовлечь в ваши сетевые эксперименты.
Я предполагаю, что вы не находитесь за firewall любого типа, который блокирует запрос имен. Если вы все-таки находитесь за firewall, то вам необходима специальная настройка, смотрите раздел .
В Unix задача разрешения имен выполняется программой, называемой named. Она является частью пакета ``bind'', который сопровождается Paul Vixie для Internet Software Consortium. Named включен в большинство дистрибутивов Linux, и обычно устанавливается как /usr/sbin/named. Если у вас есть named, то вы вероятно сможете использовать его; Если у вас его нет, то вы можете получить исполняемые файлы с основных ftp серверов Linux, или взять последнюю и наилучшую версию исходных текстов с . Этот документ описывает bind версии 8. Старые версии этого документа, описывающие bind версии 4, еще доступны по адресу , в том случае, если вы используете bind 4. Если справочная страница named ссылается (в самом конце, в разделе FILES) на файл named.conf, то у вас стоит bind 8, если она ссылается на named.boot, то у вас bind 4. Если у вас установлен bind версии 4 и вы ососзнаете необходимость сохранения безопасности, то вы действительно должны обновить вашу версию до версии 8.
DNS является базой данных во всемирной сети. Поэтому заботьтесь о том, что вы помещаете в нее. Если вы будете помещать в нее всякий хлам, то и вы и другие люди также получат всякий хлам. Храните вашу базу DNS в аккуратности и вы получите хорошее обслуживание с ее стороны. Учитесь как использовать ее, администрировать и отлаживать, и вы будете еще одним хорошим администратором, хранящим сеть от сбоев в результате неумелого управления.
В этом документе я констатирую набор вещей, которые в самом деле не являются полностью правильными (они являются по крайней мере наполовину правильными). Все это сделано в целях упрощения. Эти вещи (вероятно ;-) будут работать, если вы поверите, тому что я скажу.
Совет: Сделайте резервные копии всех файлов, которые я буду советовать изменить, если у вас они уже есть, так что если ничего не будет работать, то вы можете вернуться назад к рабочей конфигурации.
Настройка кеширующего сервера имен.
Это первый шаг в настройке DNS, очень полезный для dialup пользователей
Кеширующий сервер найдет ответ на запрос об имени машины и запомнит его, чтобы ответить, когда вы запросите эту же информацию в следующий раз. Это значительно уменьшит время ожидания ответа при следующем запросе, особенно если у вас медленное соединение.
Для начала вам нужен файл, названный /etc/named.conf. Из него named читает информацию при старте. Сейчас он должен просто содержать следующие строки:
// Файл настроек для только кеширующего сервера
options { directory "/var/named";
// Раскомментируйте следующую строку, если вы // работаете через firewall и система не работает:
// query-source port 53; };
zone "." { type hint; file "root.hints"; };
zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
Строка `directory' задает где искать файлы. Все файлы используемые впоследствии, будут именоваться относительно этой директории. Таким образом pz -- это директория в директории /var/named, т.е., /var/named/pz. /var/named -- это правильная директория согласно Linux File system Standard (Стандарту файловой системы Linux).
Файл названный /var/named/root.hints должен находится в указанной директории. Он должен содержать следующую информацию:
; Здесь может быть комментарии, если у вас уже есть этот файл. ; Если их нет, то не беспокойтесь. . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
Этот файл описывает имена корневых серверов имен по всему миру. Их список изменяется время от времени и эта часть в дальнейшем должна
сопровождаться. Смотрите
для того, чтобы узнать как хранить эту информацию соответствующей действительности.
Следующий раздел в named.conf -- это последняя зона. Я объясню как она используется в следующих разделах, сейчас просто создайте файл, названный 127.0.0 в поддиректории pz:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
Далее вам необходимо, чтобы ваш файл /etc/resolv.conf выглядел примерно так:
search subdomain.your-domain.edu your-domain.edu nameserver 127.0.0.1
Строка `search' задает в каких доменах должен идти поиск машин с кокторыми вы хотите соединиться. Строка `nameserver' указывает адрес вашего сервера имен, в нашем случае это ваша собственная машина, поскольку на ней запущен named (127.0.0.1 это правильный адрес, также никаких проблем, если ваша машина имеет другой адрес). Если вы хотите перечислите несколько серверов имен, то поместите их по одному в строку со словом `nameserver' для каждого. (Замечание: Named никогда не читает этот файл, это делает программа resolver, которая использует named).
Проиллюстрируем как это работает: Если клиент пытается найти машину с именем foo, то сначала программа пытается найти машину с полным именем foo.subdomain.your-domain.edu, затем с именем foo.your-fomain.edu, и в конце концов foo. Если клиент пытается найти sunsite.unc.edu, то сначала пробуется sunsite.unc.edu.subdomain.your-domain.edu (да это глупо, но вот так это работает), затем sunsite.unc.edu.your-domain.edu, и в конце концов sunsite.unc.edu. Вы можете не помещать слишком много доменов в строку поиска, поскольку поиск в них займет слишком много времени.
Пример предполагает, что вы находитесь в домене subdomain.your-domain.edu, и ваша машина вероятно называется your-machine.subdomain.your-domain.edu. Строка поиска не должна содержать ваш TLD (Top Level Domain (Домен Верхнего Уровня), `edu' в нашем случае). Если вам необходимо часто соединяться с машиной в другом домене, то вы можете добавить этот домен в строку поиска, примерно вот так:
search subdomain.your-domain.edu your-domain.edu other-domain.com
и так далее. Очевидно, что вам необходимо поместить в эту строку имена настоящих доменов, вместо вышеприведенных. Пожалуйста заметьте отсутствие точки в конце имени домена. Это важно, пожалуйста заметьте отсутствие точки в конце имени доменов.
Далее в зависимости от вашей версии libc вам необходимо вносить исправления либо в файл /etc/nsswitch.conf, либо в файл /etc/host.conf. Если у вас уже есть файл nsswitch.conf, то значит мы будем вносить исправления в него, если же его нет, то мы будем вносить изменения в файл host.conf.
/etc/nsswitch.conf
Это длинный файл описывающий как получить разные типы данных, из какого файла или базы данных. В начале он обычно содержит полезные комментарии, которые вы должны учесть при чтении этого файла. После того, как вы найдете строку начинающуюся с `hosts:', вы должны увидеть:
hosts: files dns
Если в этом файле нет строки начинающейся с `hosts:', то поместите вышеприведенную строку в файл. Эта строка указывает программам сначала выполнять поиск в файле /etc/hosts, а затем просматривать DNS в соответствии с порядком указанном в файле resolv.conf.
/etc/host.conf
Этот файл вероятно содержит разные данные, одна из строк должна начинаться со слова order и выглядеть примерно так:
order hosts,bind
Если строки с `order' нет, то вы должны ее добавить. Она заставляет подпрограмму разрешения имен сначала посмотреть в файле /etc/hosts, а затем сделать запрос к серверу имен (который в resolv.conf указан как машина с адресом 127.0.0.1).
Пример реального домена
Мы здесь перечислим несколько настоящих файлов зон
Пользователи предложили, чтобы я включил пример настроек действующего домена как учебное пособие.
Я использую этот пример с разрешения David Bullock из LAND-5. Эти файлы содержат информацию, которая являлась реальной на 24 Сентября 1996 года, и были отредактированы мною для соответствия правилам синтаксиса bind-8 и использовали некоторые мои расширения. Так что, то что вы увидите здесь будет отличаться от того, что вы увидите сделав запрос на настоящий сервер имен LAND-5.
Сопровождение
Содержание в рабочем состоянии.
Существует только одна задача по сопровождению named, кроме содержания его запущенным на машине. Это регулярное обновление файла root.hints. Наиболее легкий путь-- это использование программы dig. Сначала запустите dig без аргументов и вы получите файл root.hints, соответствующтй вашим данным. Затем запросите один из перечисленных корневых серверов, выполнив команду dig @rootserver. Вы заметите, что вывод этой команды выглядит ужасно похоже на файл root.hints. Сохраните выводимые данные в файл (с помощью команды dig @e.root-servers.net . ns >root.hints.new) и замените этим файлом старый файл root.hints.
Помните, что необходимо перезапустить named после замены файла.
Al Longyear послал мне этот скрипт, который может быть автоматически запущен для того, чтобы обновлять файл root.hints, создайте запись в crontab для запуска его раз в месяц и забудьте про него. В скрипте предполагается, что почтовая система работает и что определен почтовый алиас `hostmaster'. Вы должны подправить этот скрипт для соответствия вашим настройкам.
#!/bin/sh # # Обновляет информацию кеша сервера имен раз в месяц. # Он автоматически запускается раз в месяц с помощью cron. # # Original by Al Longyear # Updated for bind 8 by Nicolai Langfeldt # Miscelanious error-conditions reported by David A. Ranch # Ping test suggested by Martin Foster #
( echo "To: hostmaster <hostmaster>" echo "From: system <root>" echo "Subject: Automatic update of the named.conf file" echo
PATH=/sbin:/usr/sbin:/bin:/usr/bin: export PATH cd /var/named
# Мы подключены? проверка подключения к серверу вашего ISP case `ping -qnc some.machine.net` in *'100% packet loss'*) echo "The network is DOWN. root.hints NOT updated" echo exit 0 ;; esac
dig @rs.internic.net . ns >root.hints.new 2>&1
case `cat root.hints.new` in *NOERROR*) # It worked :;; *) echo "The root.hints file update has FAILED." echo "This is the dig output reported:" echo cat root.hints.new exit 0 ;; esac
echo "The named.conf file has been updated to contain the following information:" echo cat root.hints.new
chown root.root root.hints.new chmod 444 root.hints.new rm -f root.hints.old mv root.hints root.hints.old mv root.hints.new root.hints ndc restart echo echo "The nameserver has been restarted to ensure that the update is complete." echo "The previous root.hints file is now called /var/named/root.hints.old." ) 2>&1 | /usr/lib/sendmail -t exit 0
Некоторые из вас заметили, что файл root.hints также доступен по ftp с сервера Internic. Пожалуйста не используйте ftp для обновления файла root.hints, вышеприведенный метод более дружелюбен по отношению к сети.
Раньше это был раздел об
Раньше это был раздел об использовании bind 8, написанный David E. Smith (dave@bureau42.ml.org). Я немного изменил его для того, чтобы соответствовать имени раздела.
В нем совсем немного. За исключением использования файла named.conf вместо named.boot, все остальное тоже самое. И bind8 поставляется со скриптом на perl, который преобразует файлы настроек со старым синтаксисом в файл с новым синтаксисом. Пример файла named.boot (старый стиль) для кеширующего сервера имен:
directory /var/named cache . root.hints primary 0.0.127.IN-ADDR.ARPA 127.0.0.zone primary localhost localhost.zone
В командной строке, находясь в директории bind8/src/bin/named (этот пример предполагает, что у вас имеется исходный код пакета bind8. Если у вас бинарный пакет, то скрипт вероятно должен быть где-то рядом, хотя я не уверен, в том где точно он будет находится), наберите:
./named-bootconf.pl < named.boot > named.conf
Эта команда создаст соответствующий файл named.conf:
// generated by named-bootconf.pl
options { directory "/var/named"; };
zone "." { type hint; file "root.hints"; };
zone "0.0.127.IN-ADDR.ARPA" { type master; file "127.0.0.zone"; };
zone "localhost" { type master; file "localhost.zone"; };
Этот скрипт работает для всего, что могло быть записано в файле named.boot, хотя он не добавляет все новые расширения и опции настройки, которые разрешено использовать в bind8. Здесь я приведу более полный файл named.conf, который делает те же самые вещи, но немного более эффективно.
// Это файл конфигурации для named (для BIND 8.1 или более поздних). // Он обычно устанавливается как /etc/named.conf. // Отличие от `шаблонного' файла named.conf (кроме этого комментария :) // в том, что строка <tt/directory/ разкомментирована, поскольку // у меня уже есть файлы зон в директории /var/named.
options { directory "/var/named"; datasize 20M; };
zone "localhost" IN { type master; file "localhost.zone"; };
zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; };
zone "." IN { type hint; file "root.hints"; };
В директории bind8/src/bin/named/test исходных текстов bind8 содержится этот файл, а также копии файлов зон, которые многие люди могут просмотреть и использовать для быстрого старта с нуля.
Форматы файлов зон и файлов root.hints одинаковы, также как и команды для их обновления.
Вопросы и ответы
Пожалуйста прочитайте этот раздел до того, как соберетесь писать мне о чем либо.
Мой named требует наличия файла named.boot
Вы прочитали неправильный HOWTO. Пожалуйста посмотрите старую версию этого документа, которая описывает bind 4. Ее можно найти по адресу
Как использовать DNS изнутри сети, защищенной firewall?
Совет: вам также может понадобиться строка
query-source port 53;
в разделе ``options'' файла named.conf, как предполагается в примере, приведенном в разделе .
Как могу сделать круговорот DNS для определенного сервиса, например www.busy.site, среди доступных для него адресов, для того, чтобы получить эффект баланса нагрузки, или чего-то подобного.
Сделайте несколько разных записей A для www.busy.site и используйте bind версии 4.9.3 или старше. При этом bind при ответах будет смещаться по кругу между заданными адресами. Этот метод не
будет работать с более ранними версиями bind.
Я хочу установить DNS в закрытой корпоративной сети (intranet). Что мне надо сделать?
Вам необходимо убрать файл root.hints и просто использовать файлы зон. Это также означает, что вам никогда не нужно будет обновлять его.
Как я могу установить дополнительный (ведомый) сервер имен?
Если основной/ведущий сервер имен имеет адрес 127.0.0.1, то вам необходимо поместить примерно такую строку в файл named.conf дополнительного сервера имен:
zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 127.0.0.1; }; };
Вы можете перечислить несколько альтернативных основных серверов для зоны, которые могут копироваться, внутри списка masters, разделенного знаком ';' (точка с запятой).
Я хочу иметь работающий bind, в то время, когда я не подключен к сети.
Есть три подхода к решению этой проблемы:
Я получил это письмо от Ian Clark <ic@deakin.edu.au>, где он объяснял свой способ решения данной проблемы:
У меня запущен named на моей машине с 'Masquerading'. У меня есть два файла root.hints-- один, названный root.hints.real, который содержит настоящий список имен корневых серверов и второй, названный root.hints.fake, который содержит...
---- ; root.hints.fake ; этот файл не содержит информации ----
Когда я отключаюсь от провайдера, я копирую файл root.hints.fake в файл root.hints и перезапускаю named.
Когда я снова подключаюсь к провайдеру, то я копирую файл root.hints.real в root.hints и опять перезапускаю named.
Это делается из скриптов ip-down и ip-up соответственно.
Сначала я делаю запрос об имени домена, о котором named не имеет информации, и он помещает примерно такую строку в файл messages..
Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN
Кажется это работает в моем случае. Я могу использовать сервер имен для локальных машин в то время, когда я отключен от сети, без каких либо задержек по тайм-ауту для внешних доменов, и сервер имен работает нормально с внешними доменами, в то в время, когда я подключен к сети.
Я также получил информацию от Karl-Max Wanger о том, как bind взаимодействует с NFS и portmapper на большинстве большинстве машин, не имеющих доступа к внешней сети.
У меня запущен named на всех машинах, которые только время от времени подключены к Internet с помощью модема. Сервер имен только кеширует информацию, он не авторизует никакую информацию и запрашивает обо всем сервера перечисленные в файле root.cache. Как обычно в Slackware, он запускается до nfsd и mountd.
На одной из моих машин (портативный компьютер Libretto 30) у меня была проблема с тем, что иногда я мог примонтировать ее диск с другой машины, подключенной к моей локальной сети, но в остальное время эта операция не удавалось. У меня был один и тот же эффект, вне зависимости от использования PLIP, PCMCIA ethernet карты или PPP по последовательному интерфейсу.
После некоторого времени, проведенного в предположениях и экспериментах, я нашел, что named несомненно вносит беспорядок в процесс регистрации nfsd и mountd, что выполняется с помощью portmapper при запуске (я как обычно запускаю эти демоны во время загрузки). Запуск named после nfsd и mountd полностью устранил эту проблему.
Поскольку не ожидается никакого ущерба от такой измененной последовательности загрузки, то я рекомендую всем сделать также как сделал я, для предотвращения потенциальных осложнений.
В заключение, существует HOWTO об этом по адресу . Хотя это о bind 4, вы можете это применить и для bind 8.
Где кеширующий сервер имен хранит свой кеш? Есть ли способ контролировать размер кеша.
Кеш полностью хранится в памяти, он никогда сохраняется на на диск. Каждый раз, когда вы прекращаете выполнение named содержимое кеша теряется. Кеш не контролируется ни одним из способов. named обслуживает его, согласно некскольким простым правилам. Вы не можете контролировать кеш или его размер по любым причинам. Если вы хотите, то вы можете ``исправить'' это, подправив named. Однако это не рекомендуется.
Сохраняет ли named свой кеш между перезапусками? Как я могу заставить named сохранять его?
Нет, named не сохряняет кеш при завершении. Это означает, что кеш должен быть построен заново каждый раз при перезапуске named. Нет
способа, который заставил бы named сохранять кеш в файле. Если вы хотите, то вы можете ``исправить'' это, подправив named. Однако это не рекомендуется.
Как я могу получить домен? Я хочу настроить свой домен, названный (например) linux-rules.net. Как можно назначить этот домен для меня?
Свяжитесь с вашим провайдером интернет. Он сможет вам помочь в этом вопросе. Заметьте, что в большинстве частей мира вам необходимо заплатить деньги за получение домена.
Как стать более знающим администратором DNS.
Документации и утилиты.
Существует настоящая документация. Доступная в электронной и в печатной формах. Чтение некоторых из этих руководств требуется для того, чтобы сделать шаг от простого администратора DNS к крупному администратору. В печатном виде стандартной книгой является DNS and BIND авторов C. Liu и P. Albitz, выпущенная O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. Я читал ее, она великолепна. Также существует раздел о DNS в книге TCP/IP Network Administration, написанной Craig Hunt и изданной O'Reilly..., ISBN 0-937175-82-X. Также для администрирования DNS (или всего, относящегося к этому) должна быть хорошей книга Zen and the Art of Motorcycle Maintenance автора Robert M. Prisig :-) доступна как ISBN 0688052304, а также другие книги.
В электронной форме вы можете найти материалы на (Каталог ресурсов DNS), ; FAQ, справочные материалы (BOG; Bind Operations Guide), а также статьи и определения протоколов и дополнения (hacks) к DNS (эти, и большинство, если не все, RFC, упомянутые ниже, они также идут в поставке bind). Мне не нужны большинство из них, но я не являюсь крупным DNS администратором. Arnt Gulbrandsen читал BOG и находится в экстазе от его :-). В группе новостей происходят дискуссии о DNS. В добавление к этому, здесь перечислены некоторые RFC о DNS, самыми важными из которых вероятно являются следующие:
RFC 2052
A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location of services (DNS SRV), October 1996 RFC 1918
Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996. RFC 1912
D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996. RFC 1912 Errors
B. Barr Errors in RFC 1912, this is available at
RFC 1713
A. Romao, Tools for DNS debugging, 11/03/1994. RFC 1712
C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994. RFC 1183
R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990. RFC 1035
P. Mockapetris, Domain names - implementation and specification, 11/01/1987. RFC 1034
P. Mockapetris, Domain names - concepts and facilities, 11/01/1987. RFC 1033
M. Lottor, Domain administrators operations guide, 11/01/1987. RFC 1032
M. Stahl, Domain administrators guide, 11/01/1987. RFC 974
C. Partridge, Mail routing and the domain system, 01/01/1986.
/Etc/named.conf (или /var/named/named.conf)
Здесь мы обнаружим два раздела основных зон для двух необходимых обратных зон: для сети 127.0.0, а также для домена LAND-5 с номером 206.6.177. А записи для основной зоны домена land-5.com. Также заметим, что вместо размещения файлов в директории названной pz, как я делал здесь до этого, администратор поместил эти файлы в директорию названную zone.
// Загрузочный файл для сервера имен LAND-5
options { directory "/var/named"; };
zone "." { type hint; file "root.hints"; };
zone "0.0.127.in-addr.arpa" { type master; file "zone/127.0.0"; };
zone "land-5.com" { type master; file "zone/land-5.com"; };
zone "177.6.206.in-addr.arpa" { type master; file "zone/206.6.177"; };
Если вы поместите эти данные в ваш файл named.conf для того, чтобы поэкспериментировать с ними, то ПОЖАЛУЙСТА поместите строку notify no; в раздел зон, принадлежащих land-5, для того чтобы избежать инцидентов.
Как сделать лучше
В больших, хорошо организованных академических сетях или сетях ISP (Internet Service Provider) вы иногда сможете обнаружить, что администраторы сети настроили иерархию серверов DNS, которые помогут облегчить загрузку внутренней сети, также загрузку внешних серверов. Не так легко узнать находитесь ли вы внутри такой сети или нет. Однако это не совсем важно, и используя DNS-сервер вашего сетевого провайдера как ``forwarder'' вы можете сделать ответы на запросы быстрее и уменьшить загрузку вашей сети. Если вы используете модем, то это может быть большой победой. Для пользы этого примера мы предполагаем, что ваш сетевой провайдер имеет два сервера имен, который вы можете использовать, с сетевыми номерами 10.0.0.1 и 10.1.0.1. Затем в вашем файле named.conf, внутри открывающего раздела под названием ``options'' вставьте следующие строки:
forward first; forwarders { 10.0.0.1; 10.1.0.1; };
Перезапустите ваш сервер имен и протестируйте его используя nslookup. Все должно работать отлично.
Наш собственный домен
Теперь определим наш собственный домен. Мы будем делать домен linux.bogus и определим машины в нем. Я использую полностью поддельное имя домена, для того чтобы быть уверенным, что мы не побеспокоим никого во внешнем мире.
Одно важное замечание до того как мы начнем: Не все символы разрешено использовать в именах машин. Мы ограничимся символами английского алфавита: a-z, цифрами: 0-9 и символом '-' (тире). Придерживайтесь использования этих символов. Прописные и строчные символы не различаются DNS, так что pat.uio.no является равным Pat.UiO.No.
Мы уже начали эту часть строкой в named.conf:
zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };
Заметьте отсутствие `.' в конце имен доменов в этом файле. Это указывает, что мы сейчас будем определять зону 0.0.127.in-addr.arpa, и что мы будем основным сервером для нее, а также то, что она хранится в файле, названном pz/127.0.0. Мы уже сделали этот файл, в нем записано:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.
Заметьте наличие символа `.' в конце полных имен доменов в этом файле, в противоположность вышеприведенному файлу named.conf. Некоторые люди любят начинать каждый файл зон с директивы $ORIGIN, но это является излишним. Расположение (origin) (место зоны в иерархии DNS) файла зоны указывается в разделе зон в файле named.conf, в данном случае это 0.0.127.in-addr.arpa.
Этот `файл зоны' содержит 3 `записи ресурсов (resource records)' (RRs): A SOA RR, A NS RR и PTR RR. SOA это сокращение для Начала Полномочий (Start Of Authority). Символ `@' это специальный символ обозначающий расположение, и поскольку в колонке `домен (domain)' для этого файла записано 0.0.127.in-addr.arpa, то первая строка на самом деле значит
0.0.127.in-addr.arpa. IN SOA ...
NS это RR для сервера имен (Name Server). В начале строки символ '@' не указывается, это подразумевается, поскольку предыдущая строка начиналась с символа '@'. Это сэкономит нам несколько нажатий на клавиши. Так что строка NS в действительности читается как
0.0.127.in-addr.arpa. IN NS ns.linux.bogus
Эта строка сообщает DNS, что машина является сервером имен домена 0.0.127.in-addr.arpa, это ns.linux.bogus. 'ns' традиционное имя для серверов имен, но как и для web-серверов, чьим традиционным именем является www.что-нибудь, данное имя может быть любым.
И в в окончание - запись PTR гласит, что машина с адресом 1 в подсети 0.0.127.in-addr.arpa, например, 127.0.0.1 называется localhost.
Запись SOA находится в преамбуле каждого из файлов зон. Она описывает зону -- откуда она появляется (машина, названная ns.linux.bogus), кто отвечает за содержимое зоны (hostmaster@linux.bogus, вы должны вставить здесь свой адрес электронной почты), какая версия файла зоны текущая (serial: 1), и другие вещи, которые надо сделать для кеширующих и вторичных серверов DNS. Для полей refresh, retry, expire и minimum используйте числа приведенные в этом документе и вы должны быть в безопасности, используя их.
Затем перезапустите ваш named (команда ndc restart) и используйте программу nslookup для проверки того, что сделано:
$ nslookup
Default Server: localhost Address: 127.0.0.1
> 127.0.0.1 Server: localhost Address: 127.0.0.1
Name: localhost Address: 127.0.0.1
мы видим, что named работает и можно получить данные о localhost из домена 127.0.0.1, это очень хорошо. Теперь приступим к нашей основной задаче, домену linux.bogus, вставим новый раздел '(zone)' в файл named.conf:
zone "linux.bogus" { notify no; type master; file "pz/linux.bogus"; };
Заметим, что мы продолжаем опускать завершающий символ `.' в имени домена в файле named.conf.
В файле зоны linux.bogus мы поместим некоторые поддельные данные:
; ; Файл зоны для linux.bogus ; ; Полный файл зоны ; @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 1W ; expire, seconds 1D ) ; minimum, seconds ; NS ns ; Internet адрес сервера имен MX 10 mail.linux.bogus ; Основной почтовый сервер MX 20 mail.friend.bogus. ; Дополнительный почтовый сервер ; localhost A 127.0.0.1 ns A 192.168.196.2 mail A 192.168.196.4
Необходимо упомянуть две вещи о записи SOA. ns.linux.bogus
должен быть настоящей машиной с записью A. Не разрешается указывать машину с записью CNAME в записи SOA. Это имя не обязательно должно быть `ns', оно может быть любым правильным именем машины. Далее, hostmaster.linux.bogus должен читаться как hostmaster@linux.bogus, это должен быть почтовый псевдоним или почтовый ящик для человека сопровождающего DNS и читающего почту достаточно часто. Любая почта, относительно домена будет посылаться на адрес указаный здесь. Имя не обязательно должно быт `hostmaster', это может быть любой правильный адрес электронной почты, но адрес с именем `hostmaster' как ожидается будет работать.
В этом файле приведен еще один новый тип записи о ресурсах (RR) -- MX, или запись ресурса Почтовый Сервер (Mail eXchanger). Она сообщает почтовой системе куда посылать почту адресованную someone@linux.bogus, а именно серверам mail.linux.bogus или mail.friend.bogus. Число перед каждым именем машины -- это приоритет записи MX RR. Запись ресурса с наименьшим номером (10) -- это машины куда почта должна посылаться, если это возможно. Если происходит ошибка, то почта может быть послана на машину с большим номером, вторичному почтовому серверу, например, mail.friend.bogus для которого приоритет установлен равным 20.
Перезапустите named с помощью команды ndc restart. Проверьте результаты работы используя команду nslookup:
$ nslookup > set q=any > linux.bogus Server: localhost Address: 127.0.0.1
linux.bogus origin = ns.linux.bogus mail addr = hostmaster.linux.bogus serial = 199802151 refresh = 28800 (8 hours) retry = 7200 (2 hours) expire = 604800 (7 days) minimum ttl = 86400 (1 day) linux.bogus nameserver = ns.linux.bogus linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus linux.bogus preference = 20, mail exchanger = mail.friend.bogus linux.bogus nameserver = ns.linux.bogus ns.linux.bogus internet address = 192.168.196.2 mail.linux.bogus internet address = 192.168.196.4
При внимательном тестировании вы обнаружите ошибку. Строка
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
является полностью неправильной. Она должна выглядеть следующим образом
linux.bogus preference = 10, mail exchanger = mail.linux.bogus
Я сознательно сделал ошибку, чтобы вы смогли получить некоторый опыт --:-) Глядя в файл зоны мы обнаружим, что в строке
MX 10 mail.linux.bogus ; Основной почтовый сервер
отсутствует точка. Или лишний раз написано 'linux.bogus'. Если имя машины не заканчивается на символ точки в файле зоны, то к концу этого имени добавляется текущее расположение (origin), вызывая в итоге дублирование текста linux.bogus.linux.bogus. Так запись
MX 10 mail.linux.bogus. ; Основной почтовый сервер
или
MX 10 mail ; Основной почтовый сервер
является правильной. Я предпочитаю последнюю форму, поскольку надо меньше набирать на клавиатуре. Существуют пользователи bind, которые не согласны с этим подходом, но есть и те, которые согласны с этим. В файле зоны имя домена должно быть написано и закачиваться на символ `.' или домен не должен быть указан, в этом случае по умолчанию доменом будет текущее расположение (origin) машины.
Я должен подчеркнуть, что в файле named.conf не должно быть символа `.' после имен доменов. У вас может не быть понятия про символ `.' -- это слишком часто или наоборот слишком редко заполняет разные вещи и смущает много людей.
Так что опираясь на мою точку зрения мы напишем новый файл зоны, с некоторой дополнительной информацией.
; ; Файл зоны для linux.bogus ; ; Полный файл зоны ; @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 1W ; expire, seconds 1D ) ; minimum, seconds ; TXT "Linux.Bogus, your DNS consultants" NS ns ; Internet адрес сервера имен NS ns.friend.bogus. MX 10 mail.linux.bogus ; Основной почтовый сервер MX 20 mail.friend.bogus. ; Дополнительный почтовый сервер
localhost A 127.0.0.1
gw A 192.168.196.1 HINFO "Cisco" "IOS" TXT "The router"
ns A 192.168.196. 2 MX 10 mail MX 20 mail.friend.bogus. HINFO "Pentium" "Linux 2.0" www CNAME ns
donald A 192.168.196.3 MX 10 mail MX 20 mail.friend.bogus. HINFO "i486" "Linux 2.0" TXT "DEK"
mail A 192.168.196.4 MX 10 mail MX 20 mail.friend.bogus. HINFO "386sx" "Linux 1.2"
ftp A 192.168.196.5 MX 10 mail MX 20 mail.friend.bogus. HINFO "P6" "Linux 2.1.86"
Здесь присутствует несколько новых записей о ресурсах (RR): запись HINFO (Информация о машине, Host INFOrmation) имеет две части, хорошей привычкой является заключение каждой из этих частей в кавычки. Первая часть -- это информация об оборудовании машины, а вторая часть описывает программное обеспечение и операционную систему данной машины. Машина, названная 'ns', имеет процессор Pentium и работает под управлением Linux 2.0. CNAME (Каноническое имя, Canonical NAME) -- это способ присвоить каждой машине несколько имен. Так, что www является алиасом для ns.
Использование записи CNAME является немного неоднозначным. Но безопасным способом будет следовать правилу, что записи MX, CNAME или SOA никогда
не должны ссылаться на имя, указанное как запись CNAME, они должны ссылаться на имя определенное записью A, так что будет неправильно записать
foobar CNAME www ; NO!
но вместо этого необходимо записать
foobar CNAME ns ; Yes!
Также лучше считать, что запись CNAME не является настоящим именем машины для использования в адресе электронной почты: адрес webmaster@www.linux.bogus является неправильным адресом электронной почты. Вы можете ожидать, что некоторые администраторы электронной почты во внешнем мире следят за моблюдением этого правила, даже если у вас все работает нормально. Для того, чтобы избежать этого используйте запись A (и возможно также некоторые другие записи, такие как MX) вместо:
www A 192.168.196.2
Некоторые из разработчиков архитектуры bind (arch-bind-wizards), рекомендуют не использовать запись CNAME. Так, что ее использование надо рассматривать серьезно.
Но как вы видите, этот документ также как и множество других серверов не следуют этому правилу.
Загрузите новую базу данных выполнив команду ndc reload, это заставит named перечитать файлы зон заново.
$ nslookup Default Server: localhost Address: 127.0.0.1
> ls -d linux.bogus
Это означает, что должны быть перечислены все записи в данном домене. В результате получится следующее:
[localhost] $ORIGIN linux.bogus.
1D IN NS ns 1D IN NS ns.friend.bogus. 1D IN TXT "Linux.Bogus, your DNS consultants" 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. gw 1D IN A 192.168.196.1 1D IN HINFO "Cisco" "IOS" 1D IN TXT "The router" mail 1D IN A 192.168.196.4 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "386sx" "Linux 1.0.9" localhost 1D IN A 127.0.0.1 www 1D IN CNAME ns donald 1D IN A 192.168.196.3 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "i486" "Linux 1.2" 1D IN TXT "DEK" ftp 1D IN A 192.168.196.5 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "P6" "Linux 1.3.59" ns 1D IN A 192.168.196.2 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "Pentium" "Linux 1.2" @ 1D IN SOA ns hostmaster ( 199802151 ; serial 8H ; refresh 2H ; retry 1W ; expiry 1D ) ; minimum
Это хорошо. Как вы видите, это выглядит почти как сам файл зоны. Теперь проверим какой будет ответ только для машины с именем www:
> set q=any > www.linux.bogus. Server: localhost Address: 127.0.0.1
www.linux.bogus canonical name = ns.linux.bogus linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus ns.linux.bogus internet address = 192.168.196.2
Другими словами, настоящим именем для www.linux.bogus является ns.linux.bogus, и он также дается некоторая дополнительная информацию о машине ns, достаточная, чтобы соединиться с ней.
Теперь мы находимся на середине пути.
Но сначала некоторое количество сухой теории
До того как мы в действительности начнем этот раздел, я хочу дать вам некоторые теоретические сведения о том как работает DNS и пример ее работы. И вы должны читать дальше, потому что это полезно для вас. Если вы не `хотите' делать это, то вы по крайней мере должны быстро просмотреть его. Остановитесь, когда вы увидите указания о том, что вы должны делать с вашим файлом named.conf.
DNS-- это иерархическая, организованная в виде дерева система. Вершина записывается как `.' и произносится как `root (корень)'. В . существует некоторое количество Доменов верхнего уровня (Top Level Domains, TLDs), наиболее известными из которых являются ORG, COM, EDU и NET, но на самом деле их намного больше. ТОчно также как и дерево, они имеют корни и ветви. Если у вас есть некоторое образование в области компьютерных наук, то вы сможете думать о DNS как о дереве поиска, и вы сможете находить узлы, листья и связи между вершинами этого дерева.
При поиске машины, запрос обрабатывается рекурсивно, начиная с корня. Если вы хотите найти адрес машины prep.ai.mit.edu, то ваш сервер имен должен найти сервер имен, который обслуживает edu. Он запрашивает корневой сервер (.) (он уже знает корневые .
сервера -- они перечислены в файле root.hints), корневой сервер . дает список серверов edu:
$ nslookup Default Server: localhost Address: 127.0.0.1
Запросите корневой сервер:
> server c.root-servers.net. Default Server: c.root-servers.net Address: 192.33.4.12
Установите тип запроса (Query type) в NS (записи о серверах имен):
> set q=ns
Запросите его о edu:
> edu.
Заключительная точка . очень важна, она сообщает nslookup, что мы запрашиваем о edu находящемся прямо под корневым сервером .
(это ускоряет поиск).
edu nameserver = A.ROOT-SERVERS.NET edu nameserver = H.ROOT-SERVERS.NET edu nameserver = B.ROOT-SERVERS.NET edu nameserver = C.ROOT-SERVERS.NET edu nameserver = D.ROOT-SERVERS.NET edu nameserver = E.ROOT-SERVERS.NET edu nameserver = I.ROOT-SERVERS.NET edu nameserver = F.ROOT-SERVERS.NET edu nameserver = G.ROOT-SERVERS.NET A.ROOT-SERVERS.NET internet address = 198.41.0.4 H.ROOT-SERVERS.NET internet address = 128.63.2.53 B.ROOT-SERVERS.NET internet address = 128.9.0.107 C.ROOT-SERVERS.NET internet address = 192.33.4.12 D.ROOT-SERVERS.NET internet address = 128.8.10.90 E.ROOT-SERVERS.NET internet address = 192.203.230.10 I.ROOT-SERVERS.NET internet address = 192.36.148.17 F.ROOT-SERVERS.NET internet address = 192.5.5.241 G.ROOT-SERVERS.NET internet address = 192.112.36.4
Это дает нам информацию о том, что все ROOT-SERVERS.NET обслуживают edu., так что мы можем продолжать опрашивать сервер C. Теперь мы хотим знать кто обслуживает следующий уровень имени домена: mit.edu.:
> mit.edu. Server: c.root-servers.net Address: 192.33.4.12
Non-authoritative answer: mit.edu nameserver = W20NS.mit.edu mit.edu nameserver = BITSY.mit.edu mit.edu nameserver = STRAWB.mit.edu
Authoritative answers can be found from: W20NS.mit.edu internet address = 18.70.0.160 BITSY.mit.edu internet address = 18.72.0.3 STRAWB.mit.edu internet address = 18.71.0.151
Сервера steawb, w20ns и bitsy все обслуживают mit, выберите один из них и запросите у него информацию о ai.mit.edu:
> server W20NS.mit.edu.
Имена машин не зависят от регистра, но я просто использую мышь для вырезания и вставки текста, так что я получаю их такими же, как они написаны на экране.
Server: W20NS.mit.edu Address: 18.70.0.160
> ai.mit.edu. Server: W20NS.mit.edu Address: 18.70.0.160
Non-authoritative answer: ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU ai.mit.edu nameserver = TRIX.AI.MIT.EDU ai.mit.edu nameserver = MUESLI.AI.MIT.EDU ai.mit.edu nameserver = LIFE.AI.MIT.EDU ai.mit.edu nameserver = BEET-CHEX.AI.MIT.EDU ai.mit.edu nameserver = MINI-WHEATS.AI.MIT.EDU ai.mit.edu nameserver = COUNT-CHOCULA.AI.MIT.EDU ai.mit.edu nameserver = MINTAKA.LCS.MIT.EDU
Authoritative answers can be found from: AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU AI.MIT.EDU nameserver = LIFE.AI.MIT.EDU AI.MIT.EDU nameserver = BEET-CHEX.AI.MIT.EDU AI.MIT.EDU nameserver = MINI-WHEATS.AI.MIT.EDU AI.MIT.EDU nameserver = COUNT-CHOCULA.AI.MIT.EDU AI.MIT.EDU nameserver = MINTAKA.LCS.MIT.EDU ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5 GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4 TRIX.AI.MIT.EDU internet address = 128.52.37.6 MUESLI.AI.MIT.EDU internet address = 128.52.39.7 LIFE.AI.MIT.EDU internet address = 128.52.32.80 BEET-CHEX.AI.MIT.EDU internet address = 128.52.32.22 MINI-WHEATS.AI.MIT.EDU internet address = 128.52.54.11 COUNT-CHOCULA.AI.MIT.EDU internet address = 128.52.38.22 MINTAKA.LCS.MIT.EDU internet address = 18.26.0.36
Так что museli.ai.mit. edu является сервером имен для ai.mit.edu:
> server MUESLI.AI.MIT.EDU Default Server: MUESLI.AI.MIT.EDU Address: 128.52.39.7
Теперь я изменил тип запроса, поскольку мы нашли сервер имен и можем опрашивать его том, что мы хотим знать о prep.ai.mit.edu.
> set q=any > prep.ai.mit.edu. Server: MUESLI.AI.MIT.EDU Address: 128.52.39.7
prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix prep.ai.mit.edu inet address = 18.159.0.42, protocol = tcp ftp telnet smtp finger prep.ai.mit.edu preference = 1, mail exchanger = gnu-life.ai.mit.edu prep.ai.mit.edu internet address = 18.159.0.42 ai.mit.edu nameserver = beet-chex.ai.mit.edu ai.mit.edu nameserver = alpha-bits.ai.mit.edu ai.mit.edu nameserver = mini-wheats.ai.mit.edu ai.mit.edu nameserver = trix.ai.mit.edu ai.mit.edu nameserver = muesli.ai.mit.edu ai.mit.edu nameserver = count-chocula.ai.mit.edu ai.mit.edu nameserver = mintaka.lcs.mit.edu ai.mit.edu nameserver = life.ai.mit.edu gnu-life.ai.mit.edu internet address = 128.52.32.60 beet-chex.ai.mit.edu internet address = 128.52.32.22 alpha-bits.ai.mit.edu internet address = 128.52.32.5 mini-wheats.ai.mit.edu internet address = 128.52.54.11 trix.ai.mit.edu internet address = 128.52.37.6 muesli.ai.mit.edu internet address = 128.52.39.7 count-chocula.ai.mit.edu internet address = 128.52.38.22 mintaka.lcs.mit.edu internet address = 18.26.0.36 life.ai.mit.edu internet address = 128.52.32.80
Так начиная от корня ., мы нашли нужные сервера имен для каждого уровня, указанных в имени домена. Если бы вы использовали ваш собственный сервер DNS вместо использования всех перечисленных серверов, то ваш сервер конечно же кешировал бы всю информацию, которую он находил во время прохождения этого пути, и тогда бы он больше не запрашивал эту информацию при повторном обращении.
В аналогии с деревом каждый знак ``.'' в имени является точкой ответвления дерева. И каждая часть между знаками ``.'' является именем индивидуальной ветви в дереве.
Мы поднимаемся по дереву взяв нужное имя (prep.ai.mit.edu), потом находим корень дерева (.) и затем ищем следующую ветвь по которой будем подниматься, в нашем случае это edu. Однажды найдя эту ветвь, мы будем подниматься по ней, переключившись на сервер, который знает об этой части имени. Затем мы ищем ветвь mit в ветви edu (объединеное имя становится равным mit.edu) и поднимаемся по ней, переключившись на сервер, который знает о mit.edu. Далее мы ищем слудующую ветвь-- ai.mit.edu и переключаемся на сервер, который знает об этом домене. Теперь мы достигли нужного сервера в нужной точке ветвления. Последней задачей будет нахождение prep.ai.mit.edu, что является простой задачей. В научной литературе мы обычно называем машину prep листом дерева.
Менее обсуждаемым, но все равно важным является домен in-addr.arpa. Он также имеет иерархическую структуру, подобно `обычным' доменам. in-addr.arpa позволяет нам получить имя машины, по ее адресу. Необходимо заметить, то что ip-адреса в домене in-addr.arpa записаны в обратном порядке. Например, Если у вас есть машина с адресом: 192.128.52.43, то named обрабатывает ее точно также как в примере для prep.ai.mit.edu: находит сервера arpa.. Находит сервера для домена in-addr.arpa., находит сервера 192.in-addr.arpa., находит сервера для 128.192.in-addr.arpa., сервера для 52.128.192.in-addr.arpa.. А потом уже находит необходимые записи о 43.52.128.192.in-addr.arpa. Ловко? (скажите 'да'). Хотя обратный порядок может смущать, но это только первые два года.
Я вам солгал. DNS не работает точно так, как я это описал. Но достаточно близко к описанному процессу.
Обратная (reverse) зона
Теперь программы могут преобразовывать имена машин в домене linux.bogus в адреса, по которым они могут связаться с этими машинами. Но также, кроме этого, требуется обратная зона, которая дает возможность DNS преобразовывать адреса в имена машин. Эти имена используются достаточным количеством серверов различного рода (FTP, IRC, WWW и другими) для того, чтобы решить, хотят ли они с вами общаться или нет, и даже иногда имя машины используется для того, чтобы решить какой приоритет вам дать. Обратная зона требуется для полного доступа к различным сервисам в Internet.
Поместите следующие строки в файл named.conf:
zone "196.168.192.in-addr.arpa" { notify no; type master; file "pz/192.168.196"; };
Эти строки похожи на описание зоны 0.0.127.in-addr.arpa, а файл зоны также имеет сходное содержание:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; Serial, todays date + todays serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus.
1 PTR gw.linux.bogus. 2 PTR ns.linux.bogus. 3 PTR donald.linux.bogus. 4 PTR mail.linux.bogus. 5 PTR ftp.linux.bogus.
Теперь перезапустите ваш named (ndc restart) и снова проверьте его работу с помощью программы nslookup:
> 192.168.196.4 Server: localhost Address: 127.0.0.1
Name: mail.linux.bogus Address: 192.168.196.4
так, это выглядит нормально, теперь выдайте полный список машин в домене, для того чтобы проверить правильность информации:
> ls -d 196.168.192.in-addr.arpa [localhost] $ORIGIN 196.168.192.in-addr.arpa. @ 1D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 1W ; expiry 1D ) ; minimum
1D IN NS ns.linux.bogus. 1 1D IN PTR gw.linux.bogus. 2 1D IN PTR ns.linux.bogus. 3 1D IN PTR donald.linux.bogus. 4 1D IN PTR mail.linux.bogus. 5 1D IN PTR ftp.linux.bogus. @ 1D IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial 8H ; refresh 2H ; retry 1W ; expiry 1D ) ; minimum
Выглядит хорошо! Если вывод вашей команды выглядит не так, то посмотрите сообщения об ошибках в вашем syslog, я объяснял как это сделать в самом начале главы.
Обратная зона не делегируется
Когда вы просите вашего сетевого провайдера о предоставлении диапазона сетевых адресов и имени домена, то имя домена обычно делегируется. Делегирование является клеем, который связывает записи NS, которые помогают вам переходить от одного сервера имен к другому, как это описывалось в теоретическом разделе. Вы прочитали его, не так ли? Если ваша обратная зона не работает, то вернитесь назад и прочитайте нужный раздел. Прямо сейчас.
Обратную зону также надо делегировать. Если вы получили от вашего провайдера сеть 192.168.196 с доменом linux.bogus, то вам необходимо поместить запись NS в вашу обратную зону, точно так же как и для прямой зоны. Если вы проследуете по цепочке с in-addr.arpa и поднимитесь до своей сети то вы скорее всего обнаружете разорванную цепочку. Скорее всего в районе вашего сетевого провайдера. Обнаружив разрыв цепочки свяжитесь с вашим сетевым провайдером и попросите его исправить ошибку.
Официальная часть
Авторские права (c) Nicolai Langfeldt, 1995-1999. Не исправлять без изменения авторских прав, распространяется свободно при сохранении уведомления об авторских правах.
Почему не работает поиск в обратной зоне
Существует набор ``gotchas'', которые обычно избегаются в процессе поиска имен, что часто появляются при установке обратных зон. До того как вы продолжите продвигаться вперед вам необходимо обеспечить работу обратного поиска ваших машин на вашем сервере имен. Если эта часть не работает, то вернитесь назад и исправьте это до того, как продолжите читать.
Я буду обсуждать два сбоя обратного поиска так, как они видятся извне вашей сети:
Преамбула
Ключевые слова: DNS, bind, bind-4, bind-8, named, dialup, ppp, slip, isdn, Internet, домен (domain), имя (name), сервера (hosts), разрешение имен (resolving), кэширование.
Этот документ является частью Linux Documentation Project.
/Var/named/root.hints
Запомните, что это файл не является постоянным, и данные одного из перечисленных здесь серверов являются устаревшими. Вам лучше использовать вместо приведенного файла, файл сделанный перед этим помощью программы dig, как это объяснялось ранее.
; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUERY SECTION: ;; ., type = NS, class = IN
;; ANSWER SECTION: . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET.
;; ADDITIONAL SECTION: G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
;; Total query time: 215 msec ;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET. 198.41.0.4 ;; WHEN: Sun Feb 15 01:22:51 1998 ;; MSG SIZE sent: 17 rcvd: 436
Как основа файла обязательными записями
Как основа файла обязательными записями являются запись SOA, и запись, которая объявляет 127.0.0.1 как localhost. Требуется указать обе эти записи. Больше ничего не должно быть в этом файле. Его скорее всего никогда не надо будет обновлять, до тех пор пока не изменится адрес сервера имен или ответственного за машину (hostmaster).
@ IN SOA land-5.com. root.land-5.com. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com.
1 PTR localhost.
Я прокомментирую это файл после
Я прокомментирую это файл после этого листинга.
@ IN SOA land-5.com. root.land-5.com. ( 199609206 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. NS ns2.psi.net. ; ; Servers ; 1 PTR router.land-5.com. 2 PTR land-5.com. 2 PTR funn.land-5.com. ; ; Рабочие станции ; 200 PTR ws-177200.land-5.com. 201 PTR ws-177201.land-5.com. 202 PTR ws-177202.land-5.com. 203 PTR ws-177203.land-5.com. 204 PTR ws-177204.land-5.com. 205 PTR ws-177205.land-5.com. ; {много повторяющихся определений удалено} 250 PTR ws-177250.land-5.com. 251 PTR ws-177251.land-5.com. 252 PTR ws-177252.land-5.com. 253 PTR ws-177253.land-5.com. 254 PTR ws-177254.land-5.com.
Обратная зона является той частью настройки, которая кажется способной вызвать большое горе (печаль, grief). Она используется для того, чтобы найти имя машины по ее IP-адресу. Пример: у вас есть IRC-сервер и он принимает соединения от IRC-клиентов. Однако он находится в Норвегии и хочет принимать соединения только от клиентов из Норвегии и других скандинавских стран. Когда вы соединяетесь с клиентом, то с помощью библиотеки языка С вы можете узнать адрес соединяющейся с сервером машины, поскольку этот адрес содержится во всех пакетах, передаваемых по сети. Теперь сервер может вызвать функцию названную gethostbyaddr, которая ищет имя машины по заданному IP-номеру. Gethostbyaddr запросит сервер DNS, который выполнит поиск заданной машины в DNS. Допустим клиент соединяется с машины ws-177200.land-5.com. IP-номер, который библиотека C передает IRC-серверу, равен 206.6.177.200. Для того, чтобы найти имя машины нам необходимо найти домен 200.177.6.206.in-addr.arpa. DNS-сервер сначала найдет сервера домена arpa., затем найдет сервера in-addr.arpa., следуя дальше через сервера группы 206, затем 6 и в конце концов найдет сервер для зоны 177.6.206.in-addr.arpa в домене land-5. От которого он в конце концов может получит ответ, что для 200.177.6.206.in-addr.arpa у нас есть запись ``PTR ws-177200.land-5.com'', означающая что имя машины с адресом 206.6.177.200 равно ws-177200.land-5.com. Как и объяснение того, как мы искали prep.ai.mit.edu, этот пример вымышлен.
Вернемся к нашему примеру с IRC-сервером. IRC-сервер принимает соединения только из скандинавских стран, например, *.no, *.se, *.dk, имя ws-177200.land-5.com явно не соответствует этому правилу и сервер запретит соединение. Если бы не
было обратного мапирования адреса 206.2.177.200 с помощью зоны in-addr.arpa, то сервер не смог бы вообще найти имя машины и должен был бы сравнивать адрес 206.2.177.200 с заданными масками -- *.no, *.se и *.dk, которым этот адрес явно не соответствует.
Некоторые люди скажут, что обратное преобразование адресов важно только для серверов, и не важно для остальной работы. Это не так: многие ftp, news, IRC и даже некоторые http (WWW) сервера не принимают соединения от машин для которых они не могут найти имена. Так что в действительности обратное преобразование для машин является обязательным.
/Var/named/zone/land-5.com
Здесь мы увидим обязательную запись SOA, и необходимые записи NS. Мы можем видеть, что имеется дополнительный сервер имен расположенный по адресу ns2.psi.net. Всегда необходимо иметь дополнительный сервер имен за пределами домена в качестве резерва. Мы также можем видеть, что этот домен имеет основной сервер, названный land-5, который заботится о множестве разных сервисов Internet, это сделано используя записи CNAME (как альтернатива использованию записей A).
Как вы видите из записи SOA, файл зоны расположен в домене land-5.com, ответственным лицом является root@land-5.com. hostmaster-- это другой часто используемый адрес для ответственного за эту работу человека. Серийный номер записан в привычном формате yyyymmdd и дополнен серийным номером для текущего дня; это примерно 6-я версия файла зоны на 20 сентября 1996. Помните, что серийный номер должен увеличиваться монотонно, здесь только одна цифра для серийного номера текущего дня, так что после 9 поправок мы должны ждать завтрашнего дня, для того чтобы дальше продолжить редактировать файл. Рассмотрите возможность использования двух цифр для номера вместо одной.
@ IN SOA land-5.com. root.land-5.com. ( 199609206 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 1W ; expire, seconds 1D ) ; minimum, seconds NS land-5.com. NS ns2.psi.net. MX 10 land-5.com. ; Основной почтовый сервер
localhost A 127.0.0.1
router A 206.6.177.1
land-5.com. A 206.6.177.2 ns A 206.6.177.3 www A 207.159.141.192
ftp CNAME land-5.com. mail CNAME land-5.com. news CNAME land-5.com.
funn A 206.6.177.2 @ TXT "LAND-5 Corporation"
; ; Рабочие станции ; ws-177200 A 206.6.177.200 MX 10 land-5.com. ; Основная почтовая машина ws-177201 A 206.6.177.201 MX 10 land-5.com. ; Основная почтовая машина ws-177202 A 206.6.177.202 MX 10 land-5.com. ; Основная почтовая машина ws-177203 A 206.6.177.203 MX 10 land-5.com. ; Основная почтовая машина ws-177204 A 206.6.177.204 MX 10 land-5.com. ; Основная почтовая машина ws-177205 A 206.6.177.205 MX 10 land-5.com. ; Основная почтовая машина ; {много повторяющихся определений удалено} ws-177250 A 206.6.177.250 MX 10 land-5.com. ; Основная почтовая машина ws-177251 A 206.6.177.251 MX 10 land-5.com. ; Основная почтовая машина ws-177252 A 206.6.177.252 MX 10 land-5.com. ; Основная почтовая машина ws-177253 A 206.6.177.253 MX 10 land-5.com. ; Основная почтовая машина ws-177254 A 206.6.177.254 MX 10 land-5.com. ; Основная почтовая машина
Если вы поработаете с сервером имен домена land-5, то вы обнаружите, что имена машин имеют форму ws_номер. С последних версий bind 4 named начал ограничивать то, какие символы могут быть использованы в именах машин. Так, что эти имена нельзя было использовать с bind-8, и я подставил символ '-' (тире) вместо символа '_' (подчеркивание), для того, чтобы этот пример можно было привести в документе.
Другая вещь, которую необходимо заметить, это то, что все рабочие станции не имеют индивидуальных имен, а вместо этого состоят из префикса за которым следует 2 последних числа из IP-адреса. Используя такое соглашение вы можете значительно упростить работу по сопровождению, но это может быть достаточно безлично и в действительности может быть источником недовольства со стороны ваших клиентов.
Мы также видим, что имя funn.land-5.com это алиас для land-5.com, но используется запись A, а не запись CNAME. Это хорошая тактика, как было упомянуто выше.
Вы получили бесклассовую сеть.
Это может показаться сложной темой, но бесклассовые подсети в настоящее время являются часто используемыми и у вас вероятно есть такая сеть, если вы не являетесь компанией средних размеров.
Бесклассовая сеть -- это то, что сохраняет работу Internet в наши дни. Несколько лет назад было много разговоров о том., что ip-номера слишком коротки. Умные люди в IETF (Internet Engineering Task Force, они сохраняют Internet в рабочем состоянии) объединились вместе и решили данную проблему. За цену. Цена заключается в том, что вы получаете подсеть меньше подсети класса ``C'' и некоторые вещи могут не работать. Пожалуйста посмотрите страницу для подробного объяснения об этом и как с этим работать.
Вы прочитали эту информацию? Я ничего не буду объяснять здесь, так что пожалуйста прочитайте.
Первая часть проблемы заключается в том, что ваш провайдер должен понимать технологию, описанную Mr. DNS. Не все маленькие провайдеры имеют работающее решение данной проблемы. Если это так, то вы должны объяснить это провайдеру и быть настойчивы. Но сначала убедитесь, что вы сами это понимаете ;-). Они смогут установить правильную обратную зону на своем сервере, который вы должны проверить на работоспособность используя команду nslookup.
Вторая и последняя часть этой проблемы заключается в том, что вы должны понять применяемую технологию. Если вы не уверены в этом, то вернитесь назад и заново прочитайте все материалы. Затем вы сможете настроить обратную зону своей собственной бесклассовой сети, как это описано Mr. DNS.
Существует другая возможность для скрытой ошибки. Старые программы разрешения имен не смогут следовать приему с CNAME в цепочке разрешения имен и буду давать сбой при выяснении имени вашей машины. В результате этого различные сервисы будут относить вас к классу неправильного доступа, запрщать доступ или делать что-то подобное. Если вы столкнулись с таким сервисом, то решение (которое я знаю) заключается только в том, чтобы ваш правайдер вставил вашу запись PTR прямо в фиктивный файл бесклассовой зоны вместо фиктивной записи CNAME.
Некоторые провайдеры будут предлагать другие способы решения этой проблемы, подобные основанным на Web формам ввода ваших записей обратной зоны или другие автоматические системы.
Запуск named
После этих приготовлений пришло время запуска named. Если вы используете dialup соединение, то сначала производите подключение. Наберите `ndc start' без опций, и нажмите клавишу return. Если это не работает, то попробуйте следующую команду `/usr/sbin/ndc start'. Если опять попытка не удалась, то смотрите раздел . Если вы посмотрите в файл сообщений syslog (обычно названный /var/adm/messages, но может быть другая директория /var/log и другой файл syslog в которые необходимо посмотреть) во время запуска named (выполните команду tail -f /var/log/messages), то вы должны увидеть что-то подобное следующему:
(строки заканчивающиеся на \ продолжаются на следующей строке)
Feb 15 01:26:17 roke named[6091]: starting. named 8.1.1 Sat Feb 14 \ 00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0) Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \ (IN) loaded (serial 1) Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo) Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0) Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040 Feb 15 01:26:17 roke named[6092]: Ready to answer queries.
Если есть какие-нибудь сообщения об ошибках, то значит вы что-то сделали неправильно. Named укажет в каком файле ошибка (я надеюсь, что это один из файлов named.conf и root.hints :-). Завершите выполнение named и проверьте файлы конфигурации.
Теперь вы можете протестировать ваше настройку. Запустите nslookup для проверки вашей работы.
$ nslookup Default Server: localhost Address: 127.0.0.1
>
Если это выглядит так, то значит вы заставили систему работать. Мы так надеемся. Если что-то другое, то вернитесь назад и все проверьте. Каждый раз когда вы изменяете файл named.conf, вам необходимо перезапустить named, используя команду ndc restart.
Теперь мы можем ввести запрос на поиск информации. Попробуйте найти машину близкую к вам. pat.uio.no находится близко от меня, в Университете Осло:
> pat.uio.no Server: localhost Address: 127.0.0.1
Name: pat.uio.no Address: 129.240.130.16
Сейчас nslookup попросит ваш named посмотреть информацию о машине pat.uio.no. Затем он соединится с одним из серверов имен, перечисленных в вашем файле root.hints, и запросит у него путь к данной машине. Это может занять какое-то время, до того как вы получите результаты, поскольку система может понадобится попробовать найти заданную машину во всех доменах, перечисленных в вашем файле /etc/resolv.conf.
Если вы запросите то же самое, то вы получите такой ответ:
> pat.uio.no Server: localhost Address: 127.0.0.1
Non-authoritative answer: Name: pat.uio.no Address: 129.240.2.50
Заметим, что мы в это раз получили сообщение `Non-authoritative answer:'. Это означает, что named в этот раз не делал запрос к внешним серверам имен, информация находиться в кеше. Но кешированная информация может быть устаревшей. Так что он вас информируют об этой (весьма незначительной) опасности сообщением `Non-authorative answer:'. nslookup выдает это сообщение, когда вы второй раз запрашиваете об одной и той же машине-- это знак того, что named кеширует информацию и это значит, что он работает правильно. Вы можете завершить работу nslookup дав команду `exit'.
Права доступа и владение
Файлы и каталоги DOS имеют следующие атрибуты: A (архивный), H (скрытый), R (только чтение) и S (системный). В Linux только H и R имеют значение: скрытые файлы начинаются с точки, а для того чтобы задать атрибут R, читайте дальше.
В UNIX файл имеет ``права доступа'' и ``владельца'', который относится к ``группе''. Посмотрите пример:
$ ls -l /bin/ls -rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
Первое поле содержит права доступа к файлу /bin/ls, который принадлежит пользователю root, группы bin. Опуская другую информацию, запомните, что означает -rwxr-xr-x, слева направо:
- это тип файла (- = обычный файл, d = каталог, l = ссылка, и т.д.); rwx являются правами доступа для владельца файла (чтение, запись, выполнение); r-x являются правами доступа для группы, к которой относится владелец файла (чтение, выполнение); (Я не хочу делать обозрение концепции групп, вы можете выжить без нее, поскольку вы начинающий пользователь ;-) r-x являются правами доступа для всех остальных пользователей (чтение, выполнение).
Каталог /bin тоже имеет права доступа: смотрите раздел Права доступа к каталогамDirectories Permissions для дополнительной информации. Вот поэтому вы не можете удалить файл /bin/ls до тех пор, пока не станете пользователемroot: вы просто не имеете прав сделать это. Для изменения прав доступа к файлу используется команда:
$ chmod <whoXperm> <file>
где who---это u (пользователь, который является владельцем), g (группа), o (остальные), X---это либо +, либо -, perm---это r (чтение), w (запись), или x (выполнение). Вот общие примеры использования команды chmod:
$ chmod +x file
устанавливает право на выполнения данного файла.
$ chmod go-rw file
удаляет право на чтение и запись для всех, кроме владельца файла.
$ chmod ugo+rwx file
дает всем права на чтение, запись и выполнение.
# chmod +s file
делает так называемый ``setuid'' или ``suid'' файл---файл, который любой может выполнять с привилегиями владельца. Обычно, это применяется к файлам, владельцем которых является root; часто это важные системный файлы, такие как X-сервер.
Более коротким способом для ссылки на права доступа является использование цифрового обозначения: rwxr-xr-x может быть выражен как 755 (каждый символ соответствует биту: --- равен 0, --x равен 1, -w- равен 2, -wx равен 3...). Это выглядит трудным, но, немного попрактиковавшись, вы поймете концепцию. root, будучи администратором, может изменять права доступа на файлы любого пользователя. RMP.
Файлы: Перевод команд
На левой стороне находятся команды DOS; справа их аналоги в Linux.
ATTRIB: chmod COPY: cp DEL: rm MOVE: mv REN: mv TYPE: more, less, cat
Операторы перенаправления и конвейеризации: < > >> |
Символы шаблонов: * ?
устройство nul: /dev/null
Устройства prn, lpt1: /dev/lp0 or /dev/lp1; lpr
Права доступа к каталогам
Каталоги также имеют права доступа. Все что мы видели в разделе , также применяется и к каталогам (пользователь, группа, и другие). Для каталога rx
означает, что вы можете перейти в этот каталог, а w означает, что вы можете удалить файл в этом каталоге (конечно, соответствуя правам доступа к файлу), или сам каталог.
Например, для того, чтобы запретить другим пользователям рыться в каталоге /home/guido/text, используйте команду:
$ chmod o-rwx /home/guido/text
Каталоги: Перевод команд
DIR: ls, find, du CD: cd, pwd MD: mkdir RD: rmdir DELTREE: rm -rf MOVE: mv
Резервирование данных
Существуют разные пакеты, которые помогут вам в этом занятии, но по крайней мере вы должны знать, как делается многотомное резервирование данных (как пользователь root):
# tar -M -cvf /dev/fd0H1440 dir_to_backup/
Убедитесь, что имеется форматированный гибкий диск в устройстве и несколько дополнительных. Для восстановления ваших данных вставьте первый гибкий диск в устройство и выполните:
# tar -M -xpvf /dev/fd0H1440
Гибкие и жесткие диски и тому подобное
Существует два способа обслуживания устройств в Linux: DOS-способ и UNIX-способ. Сделайте ваш выбор.
Файлы инициализации системы
В DOS двумя важными файлами являютсяe AUTOEXEC.BAT и CONFIG.SYS, которые используются во время загрузки для инициализации системы, установки некоторых переменных среды, таких как PATH и FILES, и, возможно, запуска программ или пакетных файлов. В Linux существует большее количество инициализационных файлов, некоторые из которых лучше не трогать до тех пор, пока вы не будете знать, что вы делаете. Я скажу, что самыми важными являются:
ФАЙЛЫ ПРИМЕЧАНИЯ
/etc/inittab не трогайте его сейчас! /etc/rc.d/* так же
Если вы хотите установить переменные среды PATH или другие, или вы хотите изменить сообщение при входе в систему или автоматически запустить программу после входа в систему, посмотрите следующие файлы:
ФАЙЛЫ ПРИМЕЧАНИЯ
/etc/issue устанавливает сообщение перед входом /etc/motd устанавливает сообщение после входа /etc/profile устанавливает переменную $PATH и другие, и т.п. /etc/bashrc устанавливает алиасы и функции, и т.п. /home/your_home/.bashrc устанавливает ваши алиасы и функции /home/your_home/.bash_profile или /home/your_home/.profile устанавливает переменные среды и запускает ваши программы
Если последние файлы существуют (заметим, что это скрытые файлы), они будут считаны после входа в систему и команды, записанные в них, будут выполнены.
Пример---посмотрите на этот .bash_profile:
# Это комментарий echo Environment: printenv | less # эквивалент команде SET в DOS alias d='ls -l' # легко понять, что это алиас alias up='cd ..' echo "I remind you that the path is "$PATH echo "Today is `date`" # использовать вывод команды echo "Have a good day, "$LOGNAME # следующая часть является функцией командного процессора ctgz() # вывести содержимое архива .tar.gz \{ for file in $* do gzip -dc $\{file\} | tar tf - done \} # конец .profile
Вы правильно угадали, что $PATH и $LOGNAME
являются переменными среды,. Существует много других переменных; например, прочитайте справочные страницы для таких приложений, как less или bash.
Поместив эту строку в ваш файл /etc/profile вы получите грубый эквивалент PROMPT $P$G:
export PS1="\\w\\\\$ "
Скрипты командного процессора: Файлы .BAT на стероидах
Если вы использовали .BAT-файлы для создания сокращений для длинных командных строк (я сам так делал), то это может быть достигнуто вставкой соответствующих алиасов (смотрите вышеприведенный пример) в файлы profile или .bash_profile. Но если ваши .BAT-файлы были более сложными, то вы полюбите язык, предоставляемый командным процессором: он мощен, как старый QBasic, если не больше. Он имеет переменные, управляющие структуры, подобные while, for, case, if... then... else, и много других возможностей: он может быть хорошей альтернативой ``настоящим'' языкам программирования.
Для написания скрипта---эквивалента .BAT-файла в DOS все, что надо сделать---написать стандартный ASCII-файл, содержащий инструкции, сохранить его и затем сделать его исполнимым с помощью команды chmod +x <scriptfile>. Для выполнения скрипта наберите его имя.
Предупреждение. Системный редактор называется vi, и по моему мнению большинство новых пользователей найдет его трудным в использовании. Я не буду объяснять, как его использовать; пожалуйста посмотрите эту информацию в книге Matt Welsh или найдите учебное руководство в сети. Здесь достаточно сказать, что:
для вставки некоторого текста нажмите i, и затем вводите текст;
для удаления символов наберите <ESC>, а затем x;
для выхода из vi без сохранения изменений наберите <ESC>, а затем :q!
для сохранения и выхода наберите <ESC>, а затем :wq.
Примечание переводчика: На самом деле vi-- мощный редактор. Для получения встроенного учебника наберите <ESC>, а затем :help tutor, для получения справки по какому либо разделу наберите <ESC>, а затем :help имя_раздела или команды. Этот перевод был сделан используя вариант этого редактора под названием Vim, дополнительную информацию смотрите на .
Хорошим редактором для начинающих является joe: запустив его с помощью команды jstar, вы получите те же самые сочетания клавиш, как и в редакторе, используемом в DOSWin. jed в режиме WordStar или IDE, даже еще лучше. Пожалуйста посмотрите раздел для того чтобы узнать, где можно найти данные редактора.
Написание скриптов для bash -- это такой необъятный предмет, что сам по себе заслуживает книги и я не буду углубляться в этот предмет. Я просто дам вам пример скрипта командного процессора, из которого вы можете вычленить некоторые базовые правила. Прочитайте справочную страницу bash.
#!/bin/sh # sample.sh # это комментарий # не изменяйте первую строку, она должна быть такой echo "Система называется: `uname -a`" # использовать вывод команды echo "Мое имя $0" # Встроенные переменные echo "Вы передали мне следующие $# параметров: "$* echo "Первым параметром является: "$1 echo -n "Введите ваше имя? " ; read your_name echo заметьте разницу: "hi $your_name" # использование кавычек вида " echo заметьте разницу: 'hi $your_name' # использование кавычек вида ' DIRS=0 ; FILES=0 for file in `ls .` ; do if [ -d $\{file\} ] ; then # если файл является каталогом DIRS=`expr $DIRS + 1` # DIRS = DIRS + 1 elif [ -f $\{file\} ] ; then FILES=`expr $FILES + 1` fi case $\{file\} in *.gif|*jpg) echo "$\{file\}: графический файл" ;; *.txt|*.tex) echo "$\{file\}: текстовый файл" ;; *.c|*.f|*.for) echo "$\{file\}: файл исходных текстов" ;; *) echo "$\{file\}: обычный файл" ;; esac done echo "обнаружено $\{DIRS\} каталогов и $\{FILES\} файлов" ls | grep "ZxY--!!!WKW" if [ $? != 0 ] ; then # код завершения последней команды echo "ZxY--!!!WKW не найден" fi echo "достаточно... наберите 'man bash' если вам нужна дополнительная информация."
Установка приложений
Во первых: установка приложений-- это работа администратора. Большинство приложений для Linux распространяются в виде архивов .tar.gz, которые обычно содержат каталог, названный как и архив, который содержит файлы и/или подкаталоги.Хорошим правилом является установка этих программ из каталога /usr/local с помощью команды
# tar -zxf <archive.tar.gz>
прочитайте файл README или INSTALL. В большинстве случаев приложение распространяется в виде исходных текстов, которые вам надо скомпилировать; часто достаточно набрать команду make, а затем make install. Если в архиве есть файл configure, то сначала запустите его. Вам также необходимо иметь компилятор gcc или g++.
Другие архивы должны быть распакованы, находясь в каталоге /; это в случае с архивами, используемыми в Slackware. Другие архивы содержат только файлы, без подкаталогов---будьте осторожны, не запутайтесь! Всегда просмотрите список файлов в архиве до его установки.
Debian и Red Hat имеют свой собственный формат архивов -- соответственно .deb и .rpm. Последний приобретает широкое распространение; для установки пакета rpm наберите
# rpm -i package.rpm
Где найти приложения
Если вы удивляетесь, должны ли вы заменить ваши старые и привычные приложения под DOS/Win приложениями под Linux, я предполагаю, что вы просмотрели основные архивы программного обеспечения для Linux: , , и . Другим хорошим местом для поиска является ``Linux Applications and Utilities Page (Страница приложений и утилит для Linux)'' , и ``официальную'' страницу Linux .
Конец, пока что
Поздравляю! Вы теперь охватили небольшой кусочек UNIX и готовы начать работать. Помните, что ваше знание системы все еще ограничено, и что вы будете больше практиковаться в работе с Linux для того, чтобы работа с ним стала комфортабельной. Но если все, что вам нужно было---это получить набор приложений и начать работать с ними, то той информации, которую я включил в этот документ, будет достаточно.
Я уверен, что вы насладитесь работой с Linux и будете продолжать изучать его. Я бьюсь об заклад, что вы никогда не вернетесь к DOSWin! Я надеюсь, что я был понятен и дал хорошую информацию для моих 3-х или 4-х читателей.
C для вас
В UNIX системным языком является C, любите его или ненавидьте. Также доступны другие языки программирования (Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk...).
Считая, что вы знаете C, существует некоторое количество руководств для тех, кто испорчен использованием Turbo C++ или его собратьев по DOS. Компилятор С в Linux называется gcc и не содержит моргалки и дуделки, которые обычно сопутствуют его аналогам в DOS: нет IDE (Интегрированная среда разработки), оперативной подсказки, встроенного отладчика и т.п. Это просто командно-строковый компилятор, очень мощный и эффективный. Для компиляции стандартного hello.c вам необходимо выполнить команду:
$ gcc hello.c
которая создаст исполнимый файл, названный a.out. Для того, чтобы дать исполнимому файлу другое название, выполните команду:
$ gcc -o hola hello.c
Для подключения к программе библиотеки функций добавьте к командной строке ключ -l<libname>. Например, для подключения библиотеки математических функций:
$ gcc -o mathprog mathprog.c -lm
(Ключ -l<libname> заставляет gcc подключить библиотеку /usr/lib/lib<libname>.so; так что -lm
подключает библиотеку /usr/lib/libm.so).
Чем дальше, тем лучше, но когда ваша программа состоит из нескольких файлов исходных текстов, то вам понадобиться пользоваться утилитой make. Предположим, что вы написали разбор выражений: его файл исходных текстов называется: parser.c и подключает два заголовочных файла, parser.h и xy.h. Затем вы хотите использовать подпрограммы из parser.c в программе, допустим calc.c, которая подключает файл parser.h. Что за неразбериха! Что вам надо сделать для компиляции calc.c?
Вам необходимо написать так называемый Makefile, который сообщает компилятору зависимости между файлами исходных текстов и объектными файлами. В нашем примере:
# Это Makefile, используемый для компиляции calc.c # Нажмите клавишу <TAB> где показано!
calc: calc.o parser.o <TAB>gcc -o calc calc.o parser.o -lm # calc зависит от 2-х объектных файлов: calc.o и parser.o
calc.o: calc.c parser.h <TAB>gcc -c calc.c # calc. o зависит от двух файлов исходных текстов
parser.o: parser.c parser.h xy.h <TAB>gcc -c parser.c # parser.o зависит от трех файлов исходных текстов
# конец Makefile.
Сохраните этот файл как Makefile и наберите make для компиляции вашей программы; вы также можете сохранить его как calc.mak и набрать make -f calc.mak, и конечно RMP. Вы также можете получить некоторую помощь о функциях C, которые описаны в справочных страницах, раздел 3; например,
$ man 3 printf
Для отладки ваших программ используйте программу gdb. Наберите info gdb для того, чтобы узнать, как использовать отладчик.
Существует большое количество библиотек; среди них первыми вы скорее всего захотите использовать следующие: ncurses (для работы в текстовом режиме), и svgalib (для графики в консоли). Много редакторов могут работать как IDE; например emacs и jed, также они производят подсветку синтаксиса, автоматические отступы, и так далее. Также вы можете взять пакет rhide с . Это клон Borland IDE и есть шанс, что он вам понравится.
Что насчет Оконной системы?
`Эквивалентом'' Windows является графическая система X Window System. В отличии от Windows или Mac, X11 не был спроектирован для удобства использования, или для хорошего вида, а для обеспечения графических возможностей для рабочих станций с UNIX. Вот главные отличия:
В то время как Windows выглядит и ведет себя одинаково во всем мире, в X11 это не так: он настраивается более гибко. Весь вид X11 придается ключевым компонентом, который называется ``оконный менеджер ( w.m.)'', и среди которых есть большой выбор: fvwm, простой, но великолепный и эффективный в отношении памяти, fvwm2-95, Afterstep, WindowMaker, Enlightenment, и многие другие. w.m. обычно запускается из .xinitrc;
ваш w.m. может быть настроен так, что окна работают как в Windows: вы щелкаете по окну и оно появляется на переднем плане. Другая возможность заключается в том, что окно появляется на переднем плане, когда мышь находится поверх его (так называемый ``фокус''). Также расположение окон на экране может быть автоматическим или интерактивным: Если вместо программы появляется странный прямоугольник, то щелкните левой кнопкой мыши там, где вы хотите, чтобы появилось окно;
большинство свойств может быть настроено, редактируя один или несколько файлов настройки. Прочитайте документацию на ваш w.m.: файлами настройки могут быть .fvwmrc, .fvwm2rc95, .steprc, и т.д.. Простые файлы настройки обычно находятся в файлах /etc/X11/window-manager-name/system.window-manager-name;
приложения X11 написаны, используя специальные библиотеки (``наборы widget''); поскольку доступны разные наборы, то приложения выглядят по разному. Наиболее просто выглядят те, которые используют Athena widgets (2-D вид; xdvi, xman, xcalc); другие приложения используют Motif (netscape), Tcl/Tk, XForms, Qt, Gtk, и что еще есть. Почти все библиотеки обеспечивают привлекательный вид и feel как и Windows;
К сожалению, поведение может быть непохожим. Например, если вы выберете строку текста, используя мышь, а затем нажмете на клавишу <BACKSPACE>, вы будете ожидать, что текст будет стерт, правильно? Это не работает в приложениях, основанных на Athena, но будет работать с другими наборами widget;
как работают полосы прокрутки и изменение размера, зависит от w.m. и набора widget. Совет: Если вы обнаружили, что полоса прокрутки ведет себя не так, как вы ожидали, то попробуйте использовать центральную кнопку мыши или две кнопки вместе для перемещения бегунка на полосе прокрутки;
приложения по умолчанию не имеют иконок, но они могут иметь много иконок. Большинство w.m. вызывают меню нажатием кнопки мыши на десктопе (``главном окне''); излишне говорить, что меню может быть настроено. Для изменения вида главного окна используйте команды xsetroot или xloadimage;
Буфер обмена (clipboard) может содержать только текст и ведет себя странно. Как только вы выбрали текст, он уже скопировался в буфер обмена: переместитесь куда надо и нажмите среднюю кнопку мыши для вставки текста. Существует приложение xclipboard, которое обеспечивает несколько буферов обмена;
drag and drop является необязательным, и он доступен, только если вы используете приложения X11 и/или w.m., которые поддерживают это.
Для сохранения памяти вы должны использовать приложения, которые используют одни и те же библиотеки, но это тяжело осуществить на практике.
Существуют проекты, целью которых является придание X11 вида и поведения, похожего на Windows. Gnome, и KDE, , внушают благоговение. Дайте им шанс: в лбом случае вы не будете сожалеть о вашем десктопе под Windows.
Для нетерпеливых
Хотите добиться успеха? Посмотрите в эту таблицу:
DOS Linux Примечание ------------------------------------------------------------------------------
ATTRIB (+-)attr file chmod <mode> file полностью отличаются BACKUP tar -Mcvf device dir/ то же самое CD dirname\\ cd dirname/ почти тот же самый синтаксис COPY file1 file2 cp file1 file2 то же самое DEL file rm file будьте осторожны, нет восстановления файлов DELTREE dirname rm -R dirname/ то же самое DIR ls не полностью похожий синтаксис DIR file /S find . -name file полностью отличаются EDIT file vi file я думаю, вы не полюбите его (а зря!) jstar file выглядит как редактор в dos EDLIN file ed file забудьте его FORMAT fdformat, mount, umount достаточно отличный синтаксис HELP command man command, та же философия info command MD dirname mkdir dirname/ почти тот же самый синтаксис MORE file less file намного лучше MOVE file1 file2 mv file1 file2 то же самое NUL /dev/null то же самое PRINT file lpr file то же самое PRN /dev/lp0, /dev/lp1 то же самое RD dirname rmdir dirname/ почти тот же самый синтаксис REN file1 file2 mv file1 file2 не для множества файлов RESTORE tar -Mxpvf device другой синтаксис TYPE file less file намного лучше WIN startx на разных полюсах!
Если вам нужно больше, чем таблица команд, то пожалуйста, посмотрите следующие разделы.
Файлы: Предварительные замечания
Структура каталогов и файлов в Linux очень сходна с той, которая используется в DOSWin. Фалы имеют имена, которые подчиняются специальным правилам и хранятся в каталогах, некоторые из файлов являются исполнимыми и у некоторых из них существуют ключи командной строки. Более того, вы можете использовать символы шаблонов, перенаправление и конвейеризацию. Есть только несколько небольших отличий:
в DOS, имена файлов хранятся в так называемом формате 8.3; например NOTENOUG.TXT. В Linux мы можем делать лучше. Если вы установили Linux, используя файловую систему, подобную ext2 или umsdos, то вы можете использовать более длинные имена файлов (до 255 символов), и с более чем одной точкой в имени: например, This_is.a.VERY_long.filename. Пожалуйста заметьте, что я использовал символы и верхнего и нижнего регистра: в действительности...
символы верхнего и нижнего регистра в именах файлов отличаются друг от друга. Поэтому FILENAME.tar.gz и filename.tar.gz
являются разными файлами. ls является командой, а LS
является ошибкой;
пользователи Windows, будьте осторожны при использовании длинных имен в Linux. Если имя файла содержит пробелы (не рекомендуется, но возможно), то вы должны заключить имя файла в двойные кавычки при обращении к нему. Например:
$ # следующая команда создает каталог, названный "My old files" $ mkdir "My old files" $ ls My old files bin tmp
А Также некоторые символы не должны использоваться: это !*$&#.
не существует обязательных расширений типа .COM и .EXE для программ или .BAT для командных файлов. Исполнимые файлы отмечаются символом звездочка `*' в конце их имен, при использовании команды ls -F. Например:
$ ls -F I_am_a_dir/ cindy.jpg cjpg* letter_to_Joe my_1st_script* old~
Файлы cjpg* и my_1st_script* являются исполнимыми, то есть ``программами''. В DOS, файлы резервных копий заканчиваются на .BAK, тогда как под Linux они заканчиваются на знак тильды `~'. Также файл, чье имя начинается со знака точки, считается скрытым. Например: файл .I.am.a.hidden.file не будет показан при выполнении команды ls;
Ключи командной строки (switches) программ DOS задаются в виде /switch, Linux использует ключи в виде -switch или --switch. Пример: dir /s становится ls -R. Заметим, что много программ DOS, такие как PKZIP или ARJ, используют ключи в стиле UNIX.
Вы можете теперь перепрыгнуть к разделу , но я надеюсь, что вы будете читать дальше.
Инициализационные файлы программ
В Linux практически все может быть настроено для ваших требований. Большинство программ имеют один или несколько файлов инициализации, которые вы можете править, часто это файлы .prognamerc в вашем домашнем каталоге. Первыми файлами, которые вы захотите исправить:
.inputrc: используется bash для определения сочетаний клавиш;
.xinitrc: используется startx для инициализации X Window System;
.fvwmrc: используется оконным менеджером fvwm.
.joerc, .jstarrc: используется редактором joe;
.jedrc: используется редактором jed;
.pinerc: используется программой чтения почты pine;
.Xdefault: используется многим программами для X.
Со всеми этими и другими файлами вы встретитесь раньше или позже, RMP. Возможно я должен заинтересовать вас документом "Configuration HOWTO", ?
Использование tar и gzip
В UNIX существуют некоторые широко используемые приложения для архивации и сжатия файлов. tar используется для создания архивов---он похож на PKZIP или Winzip, но не производит сжатие, он только архивирует. Для создания нового архива используется команда:
$ tar -cvf <archive_name.tar> <file> [file...]
Для извлечения файлов из архива:
$ tar -xpvf <archive_name.tar> [file...]
Для перечисления содержимого архива:
$ tar -tf <archive_name.tar> | less
Вы можете сжать данные, используя программу compress, которая устарела и не должна больше использоваться, или с помощью gzip:
$ compress <file>
$ gzip <file>
что создает сжатые файлы с расширением .Z (compress) или .gz (gzip). Эти программы могут сжимать только один файл за раз. Для расжатия используются команды:
$ compress -d <file.Z>
$ gzip -d <file.gz>
RMP.
Также существуют утилиты unarj, zip и unzip
(совместимые с PK??ZIP). Файлы с расширениями .tar.gz или .tgz (архивированные с помощью tar, а затем сжатые gzip) являются такой же вещью в UNIX как файлы .ZIP в DOS. Вот как выдать список файлов в архиве .tar.gz:
$ tar -ztf <file.tar.gz> | less
Использование утилит для UNIX в DOS/Windows
Верьте этому или нет, но существуют утилиты, которые обеспечивают UNIX-подобную среду в DOS/Windows! Одной из них является набор Djgpp ( ) для DOS, в то время как Cygnus ( ) является более сложным портом для Win32. Они оба включают в себя те же средства разработки GNU и утилиты, как и Linux; хотя вы не получите той же стабильности и производительности.
Если вы хотите почувствовать вкус Linux, попробуйте пакет Djgpp. Скачайте и установите следующий файлы (во время написания последней версией была версия 2.02): djdev202.zip, bnu281b.zip, bsh1147b.zip, fil316b.zip, find41b.zip, grep22b.zip, gwk303b.zip, lss332b.zip, shl112b.zip.. Инструкции по установке включены в дистрибутив и вы можете получить помощь в .
В частности, использование bash в DOSWin является глотком свежего воздуха. Для его правильной настройки отредактируйте поставляемый файл BOOT.BAT для того, чтобы он соответствовал вашим настройкам, а затем поместите эти файлы в ваш домашний каталог (на разделе Windows) вместо тех, которые поставляются в дистрибутиве:
# это _bashrc
LS_OPTIONS="-F -s --color=yes" alias cp='cp -i' alias d='ls -l' alias l=less alias ls="ls $LS_OPTIONS" alias mv='mv -i' alias rm='rm -i' alias u='cd ..'
# это _bprof if [ -f ~/_bashrc ]; then . ~/_bashrc fi PS1='\\w\\$ ' PS2='> ' CDPATH="$CDPATH:~" # stuff for less(1) LESS="-M-Q" # long prompt, silent LESSEDIT="%E ?lt+%lt. %f" # edit top line VISUAL="jed" # editor LESSCHARSET=latin1 # visualise accented letters export PS1 PS2 CDPATH LS_OPTIONS LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET
Каталоги: Предварительные замечания
Мы рассмотрели различия между файлами в DOSWin и в Linux. То же самое и для каталогов, в DOSWin корневой каталог обозначается \, в Linux он обозначается как /. Сходным образом, вложенные каталоги разделяются символом \ в DOSWin, и / в Linux. Примеры путевых имен файлов:
DOS: C:\\PAPERS\\GEOLOGY\\MID_EOC.TEX Linux: /home/guido/papers/geology/middle_eocene.tex
Как обычно, .. является родительским каталогом, а .
текущим. Помните, что система может не позволить выполнять команды работы с каталогами везде, где вы захотите. Каждый пользователь имеет для работы каталог, называемый `домашним', который дан системным администратором; например, на моем компьютере моим домашним каталогом является /home/guido.
Многоплатформенной программирование
Было бы хорошо, если бы вы могли писать код, который одинаково компилируется и под и под Windows с помощью gcc? Во время написания данного документа, существовало несколько наборов элементов, которые позволяли (более или менее) программирование под разные платформы. Из соображений достаточности и стабильности, может использоваться только один: FLTK, Fast Light Tool Kit . Он достаточно небольшой, быстрый и стабильный. В его составе также имеется полу-визуальный построитель интерфейса под названием Fluid.
Некоторые вещи, которые вы не могли делать
Linux может выполнять ужасно много вещей, которые были громоздкими, трудными или невозможными в DOS/Windows. Вот короткий список вещей, которые могут возбудит ваш аппетит:
at позволяет вам запускать программы в указанное время;
awk-- это простой, но мощный язык для манипулирования файлами данных (и не только). Например, допустим, что data.dat -- это ваш файл с множеством полей данных,
$ awk '$2 ~ "abc" \{print $1, "\\t", $4\}' data.dat
напечатает поля 1 и 4 из каждой строки файла data.dat, второе поле которой содержит ``abc''.
cron полезен для выполнения периодических задач, в указанное время и дату. Наберите man 5 crontab.
file <filename> скажет вам, чем является filename (ASCII текст, исполнимый файл, архив и т.п.);
find (смотрите также раздел )---это одна из наиболее мощных и полезных команд. Она используется для поиска файлов, которые отвечают нескольким заданным критериям и для выполнения действий над этими файлами. В общем виде командная строка find выглядит так:
$ find <каталог> <выражение>
где <выражение> включает в себя критерии поиска и действия над найденными файлами. Примеры:
$ find . -type l -exec ls -l \{\} \\;
находит все файлы, которые является символьными ссылками, и показывает, на какие файлы они указывают.
$ find / -name "*.old" -ok rm \{\} \\;
находит все файлы, соответствующие заданному образцу, и удаляет их, сначала спрашивая у вас разрешение.
$ find . -perm +111
находит все файлы, чьи права доступа соответствуют 111 (исполнимые).
$ find . -user root
находит все файлы, принадлежащие пользователю root. Здесь есть много возможностей---RMP.
grep находит заданный текст в файлах. Например,
$ grep -l "geology" *.tex
перечислит все файлы *.tex, в которых содержится слово ``geology''. Вариант этой программы под названием zgrep работает со сжатыми файлами. RMP;
регулярные выражения---являются сложным, но мощным способом выполнения операций поиска в тексте. Например, ^a[^a-m]X\{4,\}txt$
соответствует строке, которая начинается на `a', за которым следует любой символ, за исключением входящих в интервал a-m, за которым следует 4 или больше символов `X', и заканчивается на `txt'. Вы можете использовать регулярные выражения в мощных редакторах, программе less, и многих других приложениях. Для введения в регулярные выражения прочитайте справочную страницу для grep.
команда script <script_file> выдаст вам на экран содержимое script_file, до тех пор пока вы не выполните команду exit. Полезно для отладки;
sudo позволяет пользователям выполнять некоторые обязанности администратора (например форматирование и монтирование дисков; RMP);
uname -a выдаст вам информацию о вашей системе;
zcat и zless полезны для просмотра и печати сжатых файл без их расжатия. Например:
$ zless textfile.gz $ zcat textfile.gz | lpr
Следующие команды часто бывают полезны: bc, cal, chsh, cmp, cut, fmt, head, hexdump, nl, passwd, printf, sort, split, strings, tac, tail, tee, touch, uniq, w, wall, wc, whereis, write, xargs, znew. RMP.
Нужен ли Вам Linux?
Давайте будем политически корректными. В этом документе я говорю ``Linux'', но я подразумеваю ``GNU/Linux''. Пожалуйста прочитайте об этом информацию на .
Вы хотите перейти из мира DOS/Windows в мир Linux? Это хорошая идея: Linux в техническом отношении превосходит DOS, Windows 9x и даже Windows NT. Но будьте осторожны: это может быть не совсем полезным для вас. Вот основные отличия между DOS/Windows и Linux:
Под управлением Windows работают Microsoft Office и большое количество игр; Windows воспринимается как легкий в установке и настройке; он, как всем известно, нестабилен; реализован плохо; часто падает (crash).
Под управлением Linux работает StarOffice, десятки технических программ и некоторое количество игр; он может быть труден в установке и настройке; он устойчив; реализован великолепно; падения очень редки.
Вы должны решить, что вам необходимо. Более того, Linux дает вам мощь, но он требует некоторого времени для того, чтобы научиться, как обуздывать его. Таким образом, если вам в основном нужно коммерческое программное обеспечение, или вы не чувствуете в себе силы для обучения новым командам и концепциям, то вам лучше поискать что-нибудь другое. Сознавайте, что много новичков сдались под действием начальных трудностей.
Ведется работа для того, чтобы сделать Linux более простым для использования, но не ожидайте, что вы станете умелым пользователем до тех пор, пока не прочитаете достаточное количество документации и не будете использовать его по крайней мере несколько месяцев. Linux не даст вам мгновенных результатов, Я на 100% уверен, что если вы являетесь нормальным пользователем,то Linux станет вашей компьютерной нирваной. Между прочим, Linux + DOS/Win могут счастливо сосуществовать на одной и той же машине.
Начальные требования для данного документа: я предполагаю, что:
вы знаете основные команды и концепции DOS;
Linux, возможно с системой X Window System (для краткости X11), правильно установлен на вашем персональном компьютере;
вашим командным процессором (эквивалент COMMAND.COM) является bash.
До тех пор, пока явно не будет указано, вся информация в этом документе относится к старому, плохому DOS. И там и здесь существует информация о Windows, но помните, что Windows и Linux полностью отличны друг от друга, в отличии от DOS, который является чем-то вроде бедного родственника UNIX.
Также пожалуйста отметьте, что эта работа не является ни полным учебником, ни руководством по настройке!
Последние версии этого документа доступны в различных форматах по адресу .
Общие расширения файлов и соответствующие программы
Вы можете обнаружить множество расширений файлов. За исключением экзотических расширений (например, шрифты и т.п.), вот список того, для чего какие расширения файлов используются:
1 ... 8: справочные страницы. Читайте их с помощью команды groff -Tascii -man <file.1>.
arj: архивы, созданные программой arj.
dvi: выходной файл, созданный программой TeX (смотрите ниже). xdvi используется для его показа; а dvips-- для преобразования его в файл PostScript .ps.
gz: архивы, созданные gzip.
info: файл для программы info file (альтернатива справочным страницам). Возьмите пакет texinfo.
lsm: Файл Linux Software Map (Карты программного обеспечения Linux). Это обычный ASCII-файл, содержащий описание пакета программ.
ps: Файл PostScript. Для его просмотра или печати возьмите программу gs и, при необходимости, программу ghostview
или gv.
rpm: Пакет Red Hat. Вы можете установить его на любой системе, используя менеджер пакетов rpm.
taz, tar.Z: архив, созданный tar и сжатый программой compress.
tgz, tar.gz: архив, созданный tar и сжатый gzip.
tex: текстовый файл с информацией для TeX, мощной системы форматирования теста. Возьмите пакет tex, доступный в многих дистрибутивах.
texi: файл texinfo, вы можете сделать из него и файлы TeX и файлы info (info). возьмите пакет texinfo.
xbm, xpm, xwd: графические файлы.
Z: архив, созданный программой compress.
Обслуживание устройств DOS-способом
Большинство дистрибутивов Linux включают в себя пакет Mtools---набор команд, которые эквивалентны своим копиям в DOS, но начинаются с буквы `m': т.е., mformat, mdir, mdel, mmd, и так далее. Они могут даже сохранять длинные имена, но не права доступа к файлам. Если вы настроите Mtools, редактируя файл /etc/mtools.conf (пример поставляется вместе с дистрибутивом пакета), то вы также сможете иметь доступ к разделам DOS/Win, к устройствам CD-ROM и Zip. Однако для форматирования нового диска команда mformat не будет работать. Как root, вам заранее необходимо выполнить команду: fdformat /dev/fd0H1440.
Вы не можете иметь доступ в файлам на гибком диске для команд, таких как, например, less a:file.txt! Это недостаток DOS-способа для доступа к дискам.
Обслуживание устройств UNIX-способом
В UNIX имеется другой подход к обслуживанию устройств. Не существует отдельных томов, таких как A: или C:; диск, будь он гибким или любым другим, становится частью локальной файловой системы через операцию, называемую ``монтирование''. Когда вы заканчиваете работать с диском, до его извлечения вы должны ``отмонтировать'' его.
Физически форматирование диска>-- это одно действие, а создание файловой системы на нем> -- это другое. Команда DOS FORMAT A:
выполняет оба действия, но в Linux существуют разные команды. Для форматирования гибкого диска> -- смотрите выше; для создания файловой системы используется команда:
# mkfs -t ext2 -c /dev/fd0H1440
Вы можете использовать dos, vfat (рекомендуется) или другие форматы вместо ext2. Приготовив диск, примонтируйте его с помощью команды
# mount -t ext2 /dev/fd0 /mnt
указывая правильную файловую систему, если вы не используете ext2. Теперь вы можете обращаться к файлам, используя /mnt вместо A: или B:. Примеры:
DOS Linux ---------------------------------------------------------------------
C:\\GUIDO>DIR A: $ ls /mnt C:\\GUIDO>COPY A:*.* $ cp /mnt/* . C:\\GUIDO>COPY *.ZIP A: $ cp *.zip /mnt C:\\GUIDO>EDIT A:FILE.TXT $ jstar /mnt/file.txt C:\\GUIDO>A: $ cd /mnt A:> _ /mnt/$ _
После того как вы закончите, до извлечения диска вы должны
отмонтировать его, используя команду
# umount /mnt
Очевидно, что вы должны применять fdformat и mkfs только для неформатированных дисков, никогда до этого не применявшихся. Если вы хотите использовать диск B:, то ссылайтесь на fd1H1440 и fd1 вместо fd0H1440 и fd0 в вышеприведенном примере.
Излишне говорить, что то, что применяется для гибких дисков, также применяется для других устройств; например вы захотите примонтировать другой жесткий диск или устройство CD-ROM. Вот как примонтировать CD-ROM:
# mount -t iso9660 /dev/cdrom /mnt
Это был ``официальный'' способ монтирования ваших дисков, но существует один прием. Поскольку немного досадно, что необходимо быть root для монтирования гибкого диска или CD-ROM, то каждому пользователю разрешается монтировать их вот таким способом:
как root, сделайте следующее:
# mkdir /mnt/floppy ; mkdir /mnt/cdrom # chmod 777 /mnt/floppy /mnt/cd* # # make sure that the CD-ROM device is right # chmod 666 /dev/hdb ; chmod 666 /dev/fd*
добавьте в файл /etc/fstab следующий строки:
/dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 0 0 /dev/fd0 /mnt/floppy vfat user,noauto 0 0
Теперь для монтирования гибкого диска в формате DOS и CD--ROM используются команды:
$ mount /mnt/floppy $ mount /mnt/cdrom
/mnt/floppy и /mnt/cdrom могут сейчас быть доступны любому пользователю. Помните, что разрешение всем монтировать диски таким способом -- это зияющая дыра в безопасности, если вас это беспокоит.
Двумя полезными командами являются df, которая дает информацию о примонтированых файловых системах, и du dirname, которая сообщает размер дискового пространства, занимаемого каталогом.
Получение помощи
Существует много способов получить помощь о Linux. Вот наиболее важные:
чтение документации---я это подразумеваю. Хотя документ, который вы читаете, может служить как введение в Linux, также существует несколько книг, которые вы обязательно должны прочитать: Matt Welsh's ``Linux Installation and Getting Started (Установка Linux и начало работы)'' ( ), Larry Greenfield ``Linux User Guide (Руководство пользователя Linux)'', и Linux FAQ ( ). Чувствуйте себя виноватым до тех пор, пока не прочитаете одну из этих книг;
документация на установленные на машины пакеты часто может быть найдена в подкаталогах каталога /usr/doc/;
Для получения некоторой помощи о ``внутренних командах '' командного процессора наберите help или, еще лучше, man bash или info bash;
для получения помощи о команде наберите man command, что выдаст справочную страницу(``man'') для заданной команды command. Также можно набрать info command, что выдаст, если доступна, страницу информации (info) для данной command; info является гипертекстовой системой документации, возможно не интуитивно понятной в начале. В конце вы можете попробовать команды apropos command или whatis command. Во всех этих командах для выхода используется символ `q'.
В Internet: правильным местом для получения помощи является Usenet, подобный . Пожалуйста, не пишите мне для получения помощи, потому что я слишком загружен работой.
Предварительные концепции
Лучший способ научиться чему-либо---это окунуться в это. Эксперименты и игры с Linux поощряются: до тех пор, пока вы не войдете в систему как ``root'' (администратор), вы не сможете причинить большого вреда системе. Несколько моментов:
В первую очередь, как безопасно завершать работу с Linux. Если вы видите перед собой экран в текстовом режиме, то нажмите <CTRL-ALT-DEL>, подождите, пока система не перезагрузится, а затем выключите компьютер. Если вы находитесь в системе X Window, то сначала нажмите <CTRL-ALT-BACKSPACE>, а затем <CTRL-ALT-DEL>. Никогда не выключайте питание и не нажимайте кнопку сброса сразу: это может разрушить вашу систему;
В отличии от DOS или Windows, Linux имеет встроенные механизмы безопасности. Файлы и каталоги имею права доступа, ассоциированные с ними; в результате некоторые из них не могут быть доступны обычному пользователю; (смотрите раздел ). DOS и Windows, по контрасту, могут позволить вам вычистить содержимое всего вашего жесткого диска;
существует специальный пользователь, которого зовут ``root'': это системный администратор с правом распоряжаться жизнью и смертью вашей машины. Если вы работаете на своем собственном компьютере, то вы станете таким администратором. Работа под именем администратора очень опасна: любая ошибка может серьезно нарушить работу или разрушить систему, почти точно так же как в DOS/Win. Не работайте с правами root, пока это не станет совершенно необходимо;
большая часть сложности Linux происходит из сильнейшей возможности настройки: почти каждое свойство и каждое приложение могут быть настроено, используя один или несколько файлов настройки. Сложность является ценой, которую надо платить за мощь;
Перенаправление и конвейеризация являются одним из свойств DOS, но под Linux они являются очень важными и намного более мощными. Простые команды могут быть скомбинированы для выполнения сложных задач. Я предполагаю, что вы научитесь, как использовать эти свойства.
Преобразование файлов
Если вам необходимо обмениваться текстовыми файлами между DOS/Win и Linux, то будьте осторожны с проблемой ``конца строки''. В DOS каждая строка оканчивается символами CR/LF (ASCII 13 + ASCII 10), а в Linux -- символом LF. Если вы редактируете текстовый файл из DOS в Linux, то каждая строка будет оканчиваться странно-выглядящим символом `M'; а текстовый файл из Linux в DOS появится как огромная одиночная строка без разбиения на параграфы. Существуют утилиты dos2unix и unix2dos для преобразования файлов.
Если ваш текстовый файл содержит символы с диактрическими знаками, то убедитесь, что они набраны в Windows (в Notepad), а не в чистом DOS; в ином случае символы будут потеряны.
Преобразование файлов Word или WordPerfect в текстовые файлы сложнее, но возможно. Вам необходима одна из утилит, которую можно найти на серверах CTAN; один из них . Возьмите программу word2x из каталога /pub/tex/tools/, или попробуйте программы, находящиеся в каталоге /pub/tex/support/. В частности word2x преобразует файлы Word 6, тогда как для файлов Word 97 вам необходима программа mswordview ( ), которая преобразует эти файлы в HTML.
соответствует всем файлам, за исключением
DOS Linux ---------------------------------------------------------------------
C:\\GUIDO>ATTRIB +R FILE.TXT $ chmod 400 file.txt C:\\GUIDO>COPY JOE.TXT JOE.DOC $ cp joe.txt joe.doc C:\\GUIDO>COPY *.* TOTAL $ cat * > total C:\\GUIDO>COPY FRACTALS.DOC PRN $ lpr fractals.doc C:\\GUIDO>DEL TEMP $ rm temp C:\\GUIDO>DEL *.BAK $ rm *~ C:\\GUIDO>MOVE PAPER.TXT TMP\\ $ mv paper.txt tmp/ C:\\GUIDO>REN PAPER.TXT PAPER.ASC $ mv paper.txt paper.asc C:\\GUIDO>PRINT LETTER.TXT $ lpr letter.txt C:\\GUIDO>TYPE LETTER.TXT $ more letter.txt C:\\GUIDO>TYPE LETTER.TXT $ less letter.txt C:\\GUIDO>TYPE LETTER.TXT > NUL $ cat letter.txt > /dev/null n/a $ more *.txt *.asc n/a $ cat section*.txt | less
Примечания:
* намного ``умнее '' в Linux: * соответствует всем файлам, за исключением скрытых; .* соответствует всем скрытым файлам (но также текущему каталогу `.' и каталогу уровнем выше `..': beware!); *.* соответствует только тем, которые имеют `.' в середине имени, или оканчиваются на точку; p*r соответствует и `peter' и `piper'; *c* соответствует и `picked' и `peck';
при использовании more, необходимо нажимать на клавишу <SPACE> для того, чтобы продвигаться по файлу, и `q' для выхода. less является более интуитивно понятной командой и позволяет вам использовать клавиши управления курсором;
нет команды UNDELETE (восстановления после удаления), так что дважды подумайте до удаления чего-либо;
в добавлении к используемым в DOS' < > >>, в Linux имеется 2> для перенаправления сообщений об ошибках (stderr); более того, 2>&1 перенаправляет stderr в stdout, в то время как 1>&2 перенаправляет stdout в stderr;
Linux имеет дополнительный шаблон (wildcard): []. Использование: [abc]* соответствует файлам, начинающимся с a, b, c; *[I-N1-3] соответствует файлам, оканчивающимся на I, J, K, L, M, N, 1, 2, 3;
команда lpr <file> печатает файл в фоновом режиме. Для проверки состояния очереди печати используйте команду lpq; для удаления файла из очереди печати используйте lprm;
нет команды, похожей на команду RENAME в DOS; так что команда mv *.xxx *.yyy не будет работать. команда, похожая на REN, доступна с ;
используйте команды cp -i и mv -i для того, чтобы вас предупредили, когда файл будет перезаписываться.
DOS Linux ---------------------------------------------------------------------
C:\\GUIDO>DIR $ ls C:\\GUIDO>DIR FILE.TXT $ ls file.txt C:\\GUIDO>DIR *.H *.C $ ls *.h *.c C:\\GUIDO>DIR/P $ ls | more C:\\GUIDO>DIR/A $ ls -l C:\\GUIDO>DIR *.TMP /S $ find / -name "*.tmp" C:\\GUIDO>CD $ pwd n/a - see note $ cd ditto $ cd ~ ditto $ cd ~/temp C:\\GUIDO>CD \\OTHER $ cd /other C:\\GUIDO>CD ..\\TEMP\\TRASH $ cd ../temp/trash C:\\GUIDO>MD NEWPROGS $ mkdir newprogs C:\\GUIDO>MOVE PROG .. $ mv prog .. C:\\GUIDO>MD \\PROGS\\TURBO $ mkdir /progs/turbo C:\\GUIDO>DELTREE TEMP\\TRASH $ rm -rf temp/trash C:\\GUIDO>RD NEWPROGS $ rmdir newprogs C:\\GUIDO>RD \\PROGS\\TURBO $ rmdir /progs/turbo
Замечания:
При использовании команды rmdir удаляемый каталог должен быть пуст. Для того, чтобы удалить каталог и все его содержимое, используйте команду rm -rf (на ваш собственный риск).
Символ `~' является сокращением для имени вашего домашнего каталога. Команды cd или cd ~ выполнят переход в ваш домашний каталог из любого места; команда cd ~/tmp выполнит переход в каталог /home/your_home/tmp.
cd - отменяет действие последней команды cd.
Если вы чувствуете себя достаточно
Если вы чувствуете себя достаточно образованным для программирования для X11 (это не так трудно), то существует несколько библиотек, которые сделают написание программ для X11 более легким. Основными серверами, которые вам необходимо посетить, являются сервера GTK+,
и Qt, . Gtk+ является набором элементов, написанных на языке С, в начале созданном для графического пакета The GIMP ( ), и используется средой Gnome. Kdeveloper основан на Qt, написанном на С++ и используемом средой KDE. Вероятнее всего, вы будете использовать один из этих пакетов.
Наилучшими пакетами для визуального программирования являются Kdevelop для Qt, , и Glade для GTK+, . Эта страница имеет большее количество информации: .
Расскажите мне больше
Вы установили Linux и необходимые вам программы на ваш персональный компьютер. Вы создали себе учетную запись (если вы это не сделали, наберите сейчас adduser ваше_имя) и Linux запущен. Вы просто ввели ваше имя и пароль и теперь вы смотрите в экран и думаете: ``Хорошо, но что теперь?''
Теперь не отчаивайтесь. Вы теперь готовы делать те же самые вещи, что вы делали, используя DOS/Win, а также многое другое. Если бы вы запустили DOS/Win вместо Linux, то вы могли бы выполнять некоторые из следующих задач:
запуск команд и создание, копирование, просмотр, удаление, печать, переименование файлов;
Перемещение, создание, удаление и просмотр содержимого ваших каталогов файлов;
Форматирование гибких дисков и копирование файлов на них или с них;
Настройка системы;
Работа с Internet;
написание командных .BAT файлов и программ на вашем любимом языке программирования;
Остальной 1% дел.
Вы будете рады узнать, что эти задачи могут быть выполнены в Linux в манере, сходной с DOS. В DOS средний пользователь использует очень небольшое количество из ста с лишним доступных команд: то же самое можно сказать и о Linux.
Сети: Основы
В Linux доступен не только ``Dialup Networking'', который более стабилен и быстр. Другая игра называется ``PPP''-- это протокол, разработанный для подключения к Internet с помощью модемов. Вам необходимо ядро с поддержкой PPP и утилиты для подключения и создания соединения.
Для получения почты с сервера вашего ISP вам необходима утилита, называемая ``вытягиватель почты (email fetcher)'', которая использует протокол POP; когда почта будет получена, она будет выглядеть, как будто она отправлена прямо на ваше машину с Linux. Затем вы можете использовать MUA (Почтовый агент пользователя), такой как pine, mutt, elm
или один из многих других для работы с почтой.
В то время как в Windows программа соединения запускается автоматически, когда вы запускаете приложение для Internet, в Linux это делается наоборот: вы сначала производите подключения, а затем запускаете приложение. Программа, называемая diald обеспечивает обычное поведение. Установка и настройка dialup networking считается одной из самых трудных вещей в Linux, но не больше: пожалуйста посмотрите в Configuration HOWTO.
В заключение несколько слов о ``Сетевом Окружении'': вы можете заставить свою рабочую станцию с Linux появиться как Windows NT/9x в локальной сети машин с Windows! Магическим словом является Samba: это не Бразильский танец, а реализация протокола SMB для Linux. Смотрите на и в SMB-HOWTO.
Символьные ссылки
В UNIX имеется тип файлов, которых нет в DOS: символьные ссылки. Он может быть описан как ссылка на файл или каталог и может быть использован вместо файла или каталога, на который она указывает; они сходны с ярлыками в Windows. Примером символьный ссылки может быть /usr/X11, которая указывает на каталог /usr/X11R6, или /dev/modem, который указывает либо на /dev/ttyS0 либо на /dev/ttyS1.
Для того, чтобы создать символьную ссылку, используется команда:
$ ln -s <file_or_dir> <linkname>
Пример:
$ ln -s /usr/doc/g77/DOC g77manual.txt
Теперь вы можете ссылаться на g77manual.txt вместо /usr/doc/g77/DOC. Ссылки показываются следующим образом в списке файлов каталога:
$ ls -F g77manual.txt@ $ ls -l (разные вещи...) g77manual.txt -> /usr/doc/g77/DOC
Соглашения
В течении этого документа примеры часто будут приводится в следующем формате: <...> является требуемым аргументом, тогда как [...] является необязательным аргументом. Пример:
$ tar -tf <file.tar> [> redir_file]
file.tar должен быть указан , а перенаправление в redir_file является необязательным.
``RMP'' означает ``пожалуйста Прочитайте Справочные страницы (Man Pages) для более детальной информации''. Я не знаю, как подчеркнуть как важно чтение документации. ``DOSWin'' означает ``DOS/Windows''.
Когда в приглашении командной строки примера имеется знак #, то эта команда может быть выполнена только администратором (root).
Советы, без которых вы не сможете жить
Прокрутка назад: нажимая <SHIFT + PAG UP> (серая клавиша) вы можете прокрутить назад несколько последних страниц экрана, в зависимости от того, сколько у вас видеопамяти.
Сброс экрана: если вы выполнили команду more или cat для двоичного файла, то ваш экран может быть заполнен мусором. Для того, чтобы исправить это вслепую, наберите reset или такую последовательность символов: echo CTRL-V ESC c RETURN.
Вставка текста: Как сделать это в консоли, описано ниже; в X нажмите левую кнопку мыши и держа ее выделите необходимый текст, затем щелкните средней кнопкой мыши (или обоими кнопками, если у вас 2-х кнопочная мышь) для вставки текста в позиции курсора. Также есть приложение xclipboard (только для текста); не пугайтесь ее медленной работы.
Используя мышь: если у вас установлена программа gpm---драйвер мыши для консоли, то вы можете нажать на левую кнопку мыши и выделить текст, а затем нажать на правую кнопку мыши для вставки выделенного текста. Программа может работать между разными виртуальными консолями.
Сообщения от ядра: войдя под правами администратора посмотрите файл /var/adm/messages или /var/log/messages для того чтобы увидеть, что ядро сообщает вам, включая сообщения на этапе загрузки. Также удобна команда dmesg.
Свободные офисные пакеты
Если преобразования файлов вам недостаточно, то вы можете вцепиться зубами в (свободный!) Microsoft Office--подобный пакет.
В настоящее время StarOffice ( ) является единственным выбором, хотя Koffice развивается ( ). Он большой, иногда медленен, но в любом случае хорош: Он предоставляет функциональные возможности, которых нет в Microsoft Office. Он также может читать и записывать файлы Word и Excel, хотя преобразования не всегда нормальны.
Другим хорошим пакетом является Corel WordPerfect, свободная версия которой доступна для загрузки. Должен я еще что-нибудь сказать? Скачать его можно с .
Встреча с bash
Хорошая новость: используя Linux, вы набираете немного меньше в командной строке, потому-что bash набирает за вас, где это возможно, имеет великолепные средства редактирования командной строки. Для начала, клавиша 'стрелка вверх ' вызывает предыдущую командную строку ; но это не все. Нажатие на клавишу <TAB> дополняет имена файлов и каталогов, так что набор строки
$ ls /uTABloTABbTAB
подобен набору
$ ls /usr/local/bin
Если существует двусмысленность, такая как при наборе
$ ls /uTABloTABiTAB
bash остановится, потому-что он не знает, что вы имеете ввиду: /usr/local/info или /usr/local/include. Задайте больше символов, а затем снова нажмите на <TAB>.
Другие полезные комбинации клавиш: <ESC-BACKSPACE> удаляет слово влево, тогда как <ESC-D> удаляет слово вправо; <ESC-F> перемещает курсор на одно слово вправо, а <ESC-B> на слово влево; <CTRL-A> перемещает курсор в начало строки, <CTRL-E> в конец строки. Клавиша <ALT> эквивалентна клавише <ESC>.
Достаточно на первый раз. После того, как вы раз используете эти сочетания клавиш, вы обнаружите, что командная строка DOS очень раздражает...
Запуск программ: Многозадачность и сеансы работы
Для запуска программы просто наберите ее имя, так как вы делали это в DOS. Если каталог (Раздел ), где находится программа, находится в переменной среды PATH (Раздел ), то программа будут запущена. Исключение: в отличии от DOS, в Linux программа, расположенная в текущем каталоге, не будет запускаться до тех пор, пока вы не включите этот каталог в PATH. Предупреждение: если prog это ваша программа, то наберите ./prog для ее запуска из текущего каталога.
Типичная командная строка выглядит примерно так:
$ command [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]
где -s1, ..., -sn являются ключами программы, а par1, ..., parn являются параметрами программы. Вы можете запустить несколько команд из одной командной строки:
$ command1 ; command2 ; ... ; commandn
Это все о запуске программ, но теперь легко сделать следующий шаг. Одна из основных причин использования Linux---это то, что она является многозадачной операционной системой---она может выполнять разные программы (с этого места мы будем называть их процессами) одновременно. Вы можете запускать процессы в фоновом режиме и продолжать работать. Более того, Linux позволяет вам иметь несколько сеансов работы: Это подобно наличию множества компьютеров на одном!
Для того,чтобы переключится в сеанс 1..6 на виртуальных консолях, нажмите <ALT-F1> ... <ALT-F6>
Для запуска нового сеанса в той же самой виртуальной консоли без выхода из нее, наберите su - <loginname>. Пример: su - root. Это полезно, например, когда вам надо выполнить задачу, которую может выполнить только root.
Для окончания сеанса работы наберите exit. Если у вас есть приостановленные задания (смотрите дальше), то вас предупредят.
Для запуска процесса в фоновом режиме, добавьте знак амперсанда '&' в конец командной строки:
$ progname [-switches] [parameters] [< input] [> output] & [1] 123
Командный процессор идентифицирует процессы по номеру задания (например [1]; смотрите ниже), и по PID (Идентификационный номер процесса; 123 в нашем примере).
Для того, чтобы увидеть, сколько процессов запущено, наберите ps ax. Эта команда выдаст список запущенных в настоящее время процессов.
Для того чтобы убить, (завершить) процесс, наберите команду kill <PID>. Вам может понадобиться убить процесс в том случае, если вы не знаете, как его правильно завершить... До тех пор, пока вы не станете root, вы не сможете завершать процессы других людей. Иногда процесс может быть завершен только используя команду kill -SIGKILL <PID>.
В дополнение командный процессор позволяет вам остановить или временно приостановить процесс, перевести процесс в фоновый режим, и перевести процесс из фонового режима в интерактивный режим. В этом контексте процессы называются ``заданиями''.
Для того чтобы узнать, сколько заданий существует наберите jobs. Здесь задания идентифицируются по номеру задания, а не по их PID.
Для того, чтобы остановить процесс, запущенный в интерактивном режиме, нажмите <CTRL-C> (это не всегда работает).
Для того, чтобы приостановить процесс, запущенный в интерактивном режиме , нажмите <CTRL-Z> (то же самое).
Для перевода приостановленного процесса в фоновый режим, наберите bg <%job> (он станет заданием).
Для перевода задания в интерактивный режим наберите fg <%job>. Для перевода в интерактивный режим последнего задания, запущенного в фоновом режиме, просто наберите fg.
Для завершения задания наберите kill <%job>, где <job> может быть 1, 2, 3,...
Используя эти команды вы можете форматировать диск, сжимать кучу файлов, компилировать программу и разжимать архив в одно и тоже время и все равно иметь командную строку для своих нужд. Попробуйте сделать это в Windows, просто чтобы посмотреть разницу в производительности (конечно, если он не рухнет).
Запуск программ на удаленных компьютерах
Для запуска программы на удаленной машине, чьим именем является remote.machine.edu:
$ telnet remote.machine.edu
После входа в систему , запустите вашу любимую программу. Излишне говорить, что вам необходимо быть зарегистрированным на удаленной машине и иметь доступ к командному процессору.
Если у вас есть X11, вы даже можете запустить приложение для X на удаленной машине, отображая его на вашем экране X Windows. Допустим, что remote.machine.edu>-- это удаленный компьютер с X и допустим, что local.linux.box -- это ваша машина с Linux. Для запуска с local.linux.box программы для X, которая расположена на remote.machine.edu, выполните следующее:
запустите X11, запустите xterm или подобный эмулятор терминала, затем наберите:
$ xhost +remote.machine.edu $ telnet remote.machine.edu
После входа в систему наберите:
remote:$ DISPLAY=local.linux.box:0.0 remote:$ progname &
(вместо DISPLAY..., вам может понадобиться написать: setenv DISPLAY local.linux.box:0.0. Это зависит от командного процессора на удаленной машине).
И все! Теперь progname будет запущена на remote.machine.edu и будет отображаться на вашей машине. Не пытайтесь делать это через модем, это слишком медленно, чтобы можно было пользоваться. Более того, это грубый и небезопасный метод: пожалуйста прочитайте ``Remote X Apps mini-HOWTO'' по адресу .