Введение в системное администрирование Unix

Какие Unix'ы бывают в природе?

Показывать лекцию целиком

Генеалогическое древо

Почти сразу после рождения Unix раскололся на две ветви - ветвь как бы "прародительская", которой владеет "официальный" хозяин торговой марки Unix - Unix System Laboratory - фактически ветвь коммерческая. И проект Исследовательского института Беркли - ветвь в основном свободных - бесплатных Unix'ов.

System III
System 6

USL <-- Раскол --> Berkeley

System 7 BSD 4.0

Unix V 3.1
Unix V 3.2 <------- BSD 4.2
 / BSD 4.3
System V Release 4 / Заимствования
 / BSD 4.4 Конец проекта Беркли
SVR4.0 < < ____________________________________
SVR4.1
SVR4.2

Не так давно USL таки окончательно "засудила" BSD за использование фрагментов кода с копирайтом ATT, что в немалой степени способствовало закрытию проекта BSD. Предпоследний из крупнейших поставщиков коммерческих BSD-подобных систем - Sun/SunOs перешли на линию SVR4. Торжественно и официально объявлено, что SVR4 является единственным наследником, объединившим лучшие решения, пришедшие из Unix V и BSD. Последним из могикан остается DEC: его OSF/1 для Alpha AXP - немного искалеченный, но все же достаточно близкий к корням BSD 4.3.

Unix'ы для IBM/PC

Некоммерческие или условно бесплатные

BSD/OS 2.0 BSDi/386 Недорогой коммерческий. Хорошо поддерживается. Поддерживает бинарную совместимость с SCO Unix

386bsd BSD 4.3 для "Интеловской" платформы

NetBSD производная от 386bsd

FreeBSD 4.10 Самая качественная сеть. Дабы не связываться с USL, в нем полностью заново переписаны куски ядра, на которых стоял копирайт ATT.

Linux 2.6.13 Самый популярный среди бесплатных Unix'ов. Число инсталляций оценочно - десятки миллионов. Непрерывное совершенствование силами сотен добровольцев довело его до уровня довольно надежной, быстрой, качественной и удобной системы, пригодной для работы как в качестве графической рабочей станции, так и интернет-сервера. Поддерживает больше всех приложений и hardware. Поддерживает спецификации iBCS, и потому может выполнять коммерческие приложения для SCO, в частности, Oracle и Informix. В Linux реализованы клиент и сервер Netware и Samba. Эмулятор MS Windows WABI - работоспособен.

Коммерческие Unix'ы

UnixWare 2.1 SVR4.2 от SCO. Совместима с сетями Windows и Netware. До сих пор не доведена до ума сеть. Поддерживает мультипроцессорные PC. После того как ее у Novell перекупило SCO, будущее этой системы туманно.

Solaris 2.10 SVR4.0 от SunSoft. Совсем как на Sun'е. В принципе, это должно говорить само за себя.

SCO Unix 4.0 SVR3.2 когда-то был лидером по количеству установок среди всех Unix'ов для PC. Старая надежная отлаженная система. Поддерживает достаточно много hardware. Поддерживает мультипроцессорные PC. Непомерно дорог. Морально устарел. Имеет проблемы с русификацией. Медленный.

ISC Unix 3.2 Надежен и компактен в работе. Морально устарел.

Unix'ы, поставляемые производителями компьютеров

Машина Операционная система "Оригинал"
HP 9000 HP-UX 11 BSD 4.2 SV 3.2 SVR4.0
Sun 1,2,10,... SunOS 4.1.2 BSD 4.3
Sun 10,20,1000 Solaris 2.10 SVR4.0
IBM RS/6000 AIX SV 3.2
DEC Alpha AXP OSF/1 BSD 4.3
DEC Alpha AXP Tru64 OSF/1
Sequent Dynix SV 4.0
Motorola 922 SVR4/88 SVR4.0
Беста-88 Bestix SV 3.1
DEC Ultrix BSD 4.2
SGCS Silicon Graphic IRIX 6.0

Выбирая платформу, мы автоматически получаем с ней "ее собственный" Unix.

С точки зрения удобства и цельности администраторского управления самые приятные из них - HP-UX 11.11 и AIX.

А самые распространенные -

Linux 2.6 и FreeBSD 4.10 - среди некоммерческих

Solaris 2.10 и HP-UX/11 - среди коммерческих

Команды поиска GREP и FIND

Команда grep/egrep

"фильтрует" строки - оставляя только "подходящие" под шаблон

egrep шаблон [ file ... ]

В шаблон могут входить обыкновенные символы (представляющие сами себя), а также - спецсимволы, выполняющие служебные функции шаблона: . * ^ $ [ ]

  • . - любой произвольный символ
  • * - "множитель" (предыдущий символ любое число раз)
  • .* - любая последовательность символов
  • ^шаблон - привязываем шаблон к началу строки
  • шаблон$ - привязываем шаблон к концу строки
  • [символы] - любой один символ из тех, что стоят в скобках
  • Вывести всех привелегированных пользователей:

    egrep ':0:0:' /etc/passwd

    Вывести всех непривелегированных пользователей:

    egrep -v ':0:0:' /etc/passwd

    Вывести всех пользователей, имена которых начинаются с букв a,b,e,d

    cat /etc/passwd | grep "^[abed].*"

    Команда find

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

    find файл [ ... ] ключи/условия/действия

    Ключи-условия команды find:

  • -name "*.c" - простое имя подходит под шаблон *.c
  • -type f - брать только обыкновенные файлы
  • -type d - брать только каталоги
  • -size +500 - файлы размером БОЛЬШЕ 500*512 байт
  • -mtime -3 - дата модификации МЕНЬШЕ 3-х дней
  • -newer filename - дата модификации нашего файла МЕНЬШЕ, чем у заданного файла filename
  • ВНИМАНИЕ: Команда find использует стандартные SHELL'овские шаблоны. Команда grep использует шаблоны другого формата, называемые регулярными выражениями.

    Ключи-действия команды find

  • -print - просто распечатать маршрутное имя файла
  • -exec команда над файлом {} \;
  • Пример.

    Напечатать имена всех обыкновенных Си-шных файлов, изменившихся за последние 4 дня в текущем каталоге и его подкаталогах.

    find . -type f -mtime -4 -print

    Уничтожить все файлы с окончаниями *.bu, *%, которые не менялись больше месяца.

    find / \( -name "*.bu" -o -name "*%" \) -type f \
     -atime +30 -exec rm {} \;

    запись "rm {} \;" - обозначает команду Unix, которая будет выполняться для всех таких найденных файлов. Вместо значка "{}" будет подставляться каждый раз имя найденного файла. Естественно, что таким образом мы их все и уничтожим.

    Архивирование. Копирование файлов на стример

    В Unix для этого можно пользоваться двумя утилитами:

  • tar попроще в использовании, но не все умеет
  • cpio более гибкая, чем tar, и посложнее.
  • Команда tar (Tape Archiver).

    Предназначена для создания архивов на ленте и в файлах.

    Ключи: "-c" Create, "-x" eXtract, "-a" Append, "-t" оглавление

    tar -cvf arhiw.tar fajl1 fajl2 katalog3 ... - создать архив
    tar -tvf /dev/rmt/ctape вывести оглавление ленты
    tar -xvf arhiw.tar katalog3/fajl4 извлечь из архива файл
    tar -xvf /dev/rmt/ctape архив лежит на магнитной ленте
     извлечь с ленты все файлы
    tar -avf arhiw.tar fajl5 добавить файл к архиву

    Ключи:

    "v" Выводить список файлов в длинном формате (Verbose)
     "f" Указывает на имя файла

    Команда CPIO. (Copy In/Out)

    Команда cpio -o берет с системного ввода список имен и склеивает эти файлы вместе в один архив, выталкивая его на свой системный вывод.

    Сбросить на ленту файлы по списку:

    -o - (output) создавать архив.
     -H odc - Записывать в "совместимом формате" (чтобы архив 
              можно было считать на Besta или Sun)
     -c - Записывать в "престарелом" совместимом формате
    
     cat spisok | cpio -ovB -H odc > /dev/rmt/ctape1
     find katalog -print | cpio -ovc > arhiwnyj-fajl.cpio

    Команда cpio -i читает с системного ввода cpio-архив и извлекает из него файлы

    # Просмотреть содержание стримера.
     cpio -itB < /dev/rmt/ctape
    
    # Извлечь файлы со стримера.
     cpio -idmvB ["шаблон" ...] < /dev/rmt/ctape
    
     -B Размер блока 5120 байт - стримерный формат.
     -d Создавать каталоги в случае необходимости.
     -v Вывести список имен обработанных файлов.
     -m Сохранять прежнее время последней модификации.
     -f Брать все файлы, кроме указанного шаблоном.
     -u Безусловно заменять существующий файл архивным.
     -l Где можно, не копировать, а делать ссылки.

    Архивация со сжатием.

    Архиваторы tar и cpio, в отличие от DOS-овских архиваторов, не занимаются компрессией. Чтобы получить сжатый архив, нужно воспользоваться специализированной командой compress или gzip.

    Команда compress читает свой системный ввод, а на свой системный выход подает "прожатые" данные.

    Команда zcat ("сжатый cat":-) читает с системного входа "пожатый" файл, а на выход подает "разжатые" данные.

    Создать сжатый tar-архив:

    tar -cvf - emacs-19.28 | compress > emacs-19.28.tar.Z

    Прочитать оглавление сжатого tar-архива:

    zcat < emacs-19.28.tar.Z | tar -tvf -

    Обратите внимание на ключ минус "-" на том месте, где в tar нужно указывать имя файла с архивом. Он означает "брать данные со стандартного входа" (или выводить архив на стандартный выход).

    GNU Zip - достаточно известный упаковщик, имеет степень сжатия более высокую, чем у compress, почти как у arj или pkzip. Создать сжатый cpio архив, используя "компрессор" gzip.

    find . -print | cpio -ovcaB | gzip > arhiw.gz

    Извлечь файлы из сжатого cpio-архива

    gunzip < arhiw.gz | cpio -idmv

    mt - управление магнитной лентой

    Специализированная программа для работы с магнитными лентами. В частности, с ее помощью можно дописывать файлы на ленту один за другим.

    Чтобы узнать, что она может делать, наберите:

    man mt

    В SCO Unix программа управления лентой называется "tape"

    Другие утилиты архивации

    В зависимости от версии Unix могут существовать и другие программы для бэкапирования и создания архивов.

    backup/restore
     dump
     fbackup/frestore (HP/UX)
     pax
     ...

    Управление ленточными библиотеками - mc

    Для HP-UX/11. Перекомпилировать ядро с поддержкой schngr

    ioscan -funC autochange # покажет путь до авточенджера
    
    mc -p /dev/rac/c12t0d0 -r IMDS # посмотреть статус и состояние библиотеки
    
    # Обнуление ленточки в слоте 26
    
    mc -p /dev/rac/c12t0d0 -s S26 -d D2
    dd if=/dev/zero bs=48k count=10 of=/dev/rmt/1m
    mc -p /dev/rac/c12t0d0 -d S26 -s D2

    Графическая оболочка X-Window System

    Для начала немного истории и общих мест. Представим, что нам нужно написать программу, которая будет работать в графическом режиме. Нам потребуется: опрашивать клавиатуру, снимать события и координаты мыши, рисовать на экране, ... Как это делалось на MS-DOSе? Очень просто. Пишем одну большую программу, в ней - все: и логика, и обработка событий, и слежение за перемещениями мыши, ну, а когда требуется что-то нарисовать, мы даем команду на запись в порты EGA контроллера, рисуем пиксел... Через год появляется контроллер VGA, еще через год SVGA 800x600, 16 цветов, вслед за ним UVGA 1024x768, 256 цветов, затем XGA 1280x1024, 16Мб цветов...

    Основная идея X Window

    Имеем две независимых программы. Одна умеет рисовать на графическом мониторе, и вообще, обслуживать все это железо. Она называется X-сервер. Вторая программа (называем ее клиент X Window) рисовать физически не умеет. Зато она знает, что именно надо рисовать, и умеет командовать. Команды типа: "нарисовать прямоугольник", "провести линию", "открыть окно", "вывести символ в заданном шрифте", "опросить координаты мыши", и т.п. передаются X-серверу, а тот их исполняет - рисует. Формат и спецификации этих команд опубликованы, стандартизованы, и широко известны. Все вместе они называются "Протокол X Window".

    Итак, повторим.

    X-сервер. Программа, которая написана специально под конкретное физическое устройство (имеется в виду - монитор, графконтроллер, мышь и клавиатура), умеет на нем рисовать, и умеет понимать команды рисования по протоколу X Window System.

    X-клиент. Прикладная программа, обеспечивающая графический интерфейс с пользователем. Команды для рисования на экране передает X серверу по протоколу X Window System.

    X-терминал. Ящик (монитор, графконтроллер, мышь, клавиатура, ну и, естественно, процессор и оперативная память), на котором запущена программа X-сервер. X-терминалом может служить самая обыкновенная графическая Unix-рабочая станция, на которой X сервер выполняется, как одна из многих прикладных задач. Специализированный X-terminal - ящик, на котором запускается только X сервер, и ничего кроме. Можно использовать PC под MS-DOSом, на котором запущена DOSовская программа, реализующая X сервер.

    Xlib - библиотека C-ишных функций, реализующих протокол X Window System. С помощью этой библиотеки можно писать графические программы - X-клиенты.

    Что мы с этого имеем.

    Мы получаем универсальный GAPI - (Graphical Application Programming Interface) - средство программирования графических приложений. Пользовательские графические программы при этом полностью отвязаны от железа, от конкретного графконтроллера. О железе пусть беспокоится X-сервер.

    Протокол X Window умеет "ездить" по сети: например по TCP/IP, или по DEC-net. Поэтому Xсервер может крутиться на одной машине, а X-клиент - на другой. То есть, картинка рисуется на одной машине, а программа, которая ее обеспечивает - крутится на другой.

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

    Чего нам это стоит

    Понятно чего - ресурсов. X Window очень любит ресурсы - память, процессор, диск; он способен их есть в неограниченных количествах. А еще ведь надо программировать (к счастью, не всем). Кто видел, как выглядят программы для MS Windows или Mac, может представить себе внешний вид исходных текстов X-овой программы.

    Как это запускается

    Пусть в нашей сети есть машина с графической подсистемой и X сервером, и сетевой адрес этой машины pcat107.foms.msk.ru

    на pcat107 нужно выполнить команду:

    xhost + # разрешить X-овым программам с ЛЮБОЙ машины
     # рисовать на экране машины pcat107

    Запускаем на нашем компьютере X-овую программу, так, чтобы ее окошко рисовалось на мониторе pcat107. Для этого на нашем компьютере нужно выполнить команду:

    xterm -display pcat107:0.0 

    Библиотеки, Motif, и война круглых и квадратных кнопок

    Можно писать X-овые программы, используя библиотеку Xlib. Многие так и пишут, хотя это весьма тяжело - уж больно невысок уровень Xlib'а. В помощь программистам было создано несколько toolkit'ов - библиотек более высокого уровня, в которых реализованы различные widget'ы. Widget - непереводимый термин X Window. Склеен из двух слов - Window и Gadget (приспособление), является графическим объектом с привязанными к нему свойствами и реакциями на действия пользователя. Примеры widgetow: "кнопка", "менюшка", "окошко с текстом", "линейка прокрутки",...

    Известны следующие toolkit'ы:

    Xaw - Anthena Widgets. Очень черно-белый, очень плоский, весьма небогатый. Зато - бесплатный. Посмотрите, как выглядят программы xterm, xedit, xman. Они сделанны на Xaw.

    xview - Набор библиотек и объектов, использованных в реализации набора пользовательских утилит Sun-овской версии X Window - "Open Windows". Весьма симпатично. Круглые кнопки, "шприцы-иголки" (замечательная вещь!), очень хорошо продуманный интерфейс пользователя, в том числе активно используемая трех-кнопочная мышь. Исходные тексты библиотек xview открыты, предоставляются бесплатно. Однако набор DeskSet - 15 пользовательских утилит входящих в OpenWindows, сделанный на библиотеке xview, SunSoft готов предоставить только за плату. В бинарном виде - весьма дешево ($100). В исходных текстах - весьма дорого ($200K)

    Motif - Библиотека поставляются организацией OSF за не совсем маленькую плату. Исходные тексты библиотек недоступны, либо чрезмерно дороги. Кнопки - квадратные, да и вообще Motif'овские приложения до безобразия напоминают MS Windows (что, IMHO, является серьезным преступлением)

    В борьбе BSD и Unix V победил, как известно, System V, а в войне круглых и квадратных кнопок выиграл Motif.

    Конфигурирование X Window

    В Linux используется X11 в реализации XFree86. Чтобы его сконфигурировать, выполните команду xf86config

    Запуск X Window

    На некоторых машинах он сам запускается. А также иногда удается запустить его вручную командами: startx и/или openwin

    Solaris:

  • Установите переменные окружения:
    OPENWINHOME=/usr/openwin export OPENWINHOME
    LD_LIBRARY_PATH=/usr/openwin/lib export LD_LIBRARY_PATH
    PATH=/usr/openwin/bin:$PATH export PATH
    XAPPLERESDIR=/usr/openwin/lib/app-defaults export XAPPLERESDIR
  • Запустите X Window командой
    openwin
  • "Нормальные" Unix'ы:

  • Установите переменные окружения:
    PATH=/usr/bin/X11:$PATH
    XAPPLERESDIR=/usr/lib/X11/app-defaults
  • Запустите X Window командой
    startx
  • "Ненормальные" Unix'ы (Unixware).

    Когда регистрируете пользователя, ответьте Yes на вопрос "Хотите графический DeskTop". Тогда после login'а X Window будет запускаться автоматически. Если вы прозевали, и ответили No, то никаким осмысленным способом запустить X Window для себя вам не удастся.

    Настройки пользовательского окружения X Window

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

    Персональные и общественные пользовательские настройки хранятся в файлах:

    $HOME/.Xdefaults
     $HOME/.OWdefaults
     /usr/lib/X11/Xdefaults
     /usr/openwin/lib/Xdefaults
     /usr/openwin/lib/app-defaults/*

    После любых исправлений файл с ресурсами необходимо перезачитать:"

    xrdb -merge .Xdefaults

    Окружение (desktop) - т.е. программы, которые стартуют автоматически при запуске X Window находится в файлах:

    Solaris:

    $HOME/.openwin-init
     /usr/openwin/lib/openwin-init

    "Нормальнные" X windows:

    $HOME/.xinitrc
     /usr/lib/X11/xinit/xinitrc

    Настройки window-manager'a - т.е. - поведение окон, менюшки пользователя, раскладка команд на клавиши мышки, ...

    Solaris:

    $HOME/.openwin-menu
     $HOME/.openwin-menu-*
    
     /usr/openwin/lib/openwin-menu
     /usr/openwin/lib/openwin-menu-*

    Linux

    $HOME/.fvwmrc
     /usr/lib/X11/fvwm/system.fvwmrc
    Вернуться к учебному плану