страница №1

&dDВведение в системное администрирование Unix&d@

(Версия 1.17. июнь 1998)



(C) Copyright Максим Евгеньевич Мошков, 1993-1998

================ КООРДИНАТЫ ===============================

Максим Евгеньевич Мошков
НИИ Системных Исследований РАН,
Инф.сектор Отделения Математики Президиума РАН
956-2155, 274-6329, 938-1902
emailmoshkow@ipsun.ras.ru

.

&dDВВЕДЕНИЕ В СИСТЕМНОЕ АДМИНИСТРИРОВАНИЕ UNIX&d@

&dDОГЛАВЛЕНИЕ&d@

Оглавление ()

Включение Unix-компьютера ()
Регистрация нового пользователя ()
Начало работы в системе ()
Несколько простейших команд Unix ()

Редактор VI для начинающих ()
Какие бывают Unix ()
Команда find, grep ()
Команда cpio, tar и архивирование ()

Загрузка операционой системы, процесс init ()
Базовые принципы системы Unix ()
Специальные файлы ()

Диски, файловые системы ()
Выделение разделов под Swaping ()
Инсталляция системы ()
Пакеты: установка дополнительного софта ()
Несколько сетевых команд Unix (telnet, ftp, mailx...) ()

Hardware локальных сетей: Ethernet, Token ring, FDDI ()
Hardware глобальных сетей ()
Маршрутизация TCP/IP (картинка) ()
Сеть TCP/IP ()
TCP/IP для бедных ()
Сетевая файловая система NFS ()
NFS: конфигурирование авто-монтировщика ()
Конфигурирование DNS ()
Система телефонной пересылки файлов UUCP ()

Система печати LP ()

Графический интерфейс Unix - X Windows ()

&dDПриложения&d@

Редактор VI ()
Как подключить русские фонты к X Windows ()
Что где лежит в SVR4 ()
Конфигурирование DNS. Пример standalone конфигурации ()
Книжки про Unix ()
Несколько управляющих команд модема ()
Конфигурирование сервера HTTPD, формат HTML ()
Ремонт разрушенных файловых систем ()
Истории администратора Unix, или ГРАБЛИ ()
.
&dDВключение Unix-компьютера&d@

Включите системный дисплей или (при отсутствии такового)
консольный терминал, включите питание на системном блоке.
Загрузка операционной системы начнется автоматически. Осталось
немного подождать, пока загрузится операционная система и
отработают все положенные утилиты инициализации системы, и вот
на консоли появляется приглашение

Console login:

а на всех остальных терминалах - просто:

Login:

Введите свой входной login и пароль. Если таковых не
существует, войдите под login'ом root - "суперпользователь" -
изначально он не имеет пароля.

Console login: root

&dDSUN: Перехват загрузки в ручной режим&d@

Процесс нормальной работы Sun SPARCstation в любой момент
времени можно перехватить и передать управление на boot-prom.
Для этого на системной клавиатуре нажмите STOP+A. (STOP - левая
верхняя клавиша на левой дополнительной клавиатуре). Появится
boot-prom prompt Ok:

Ok _

Теперь можно вводить команды для boot-монитора. Пожалуй,
наиболее популярными командами являются:

go - выйти из монитора, вернуться в нормальный режим
help
boot [параметры] - загрузиться
eject - вытолкнуть "застрявший" флоппи-диск или CD-ROM
probe-scsi - опросить опознанные SCSI-устройства
(после этой команды возвращаться к нормальной
работе командой "GO" НЕЛЬЗЯ. Перезагрузитесь.)


Если у вас "безголовый" Sun - сервер, то к нему в качестве
консоля подключается алфавитно-цифровой терминал. Подключать
можно к любому последовательному порту - A или B. Sun, заметив
отсутствие системной клавиатуры, опрашивает все порты по
очереди и, обнаружив на одном из них терминал, делает его
консольным (со всеми вытекающими из этого последствиями).

Чтобы вызвать boot-монитор с алфавитного консоля, нажмите
на нем клавишу BREAK ( На терминале vt220 BREAK - это клавиша
F5).

Выключать алфавитно-цифровой консоль на Sun-сервере
нельзя - при этом терминал генерит сигнал BREAK, и Sun
переходит в останов в boot-мониторе. Как отключить эту
интересную особенность безголовых Sun-серверов, мне не
известно.
На самом деле у этой проблемы существует аж три решения: rs232c.txt#5
Одно из них - новый TTY-дравер "CONSULT-ZSBRK", который игнорирует BREAK.

&dDHP 9000: Перехват загрузки в ручной режим&d@

Процесс нормальной загрузки HP 9000 можно перехватить и
передать управление на boot-prom PDC (Processor Depended code).
Для этого посмотрите на консоль в первые секунды загрузки - там
пишется клавиша, которую нужно нажать для перехвата. На рабочих
станциях это ESCAPE, на серверах - Ctrl-K (или Break, или еще
какая-нибудь)
Появится PDC-prompt

BOOT-ADMIN>

Теперь можно вводить команды для boot-монитора. Пожалуй,
наиболее популярными командами являются:

help
search - найти загрузочные SCSI-устройства
boot [параметры] - загрузиться
secure on - запрет перехвата начальной загрузки
(чтобы потом сделать secure off, придется
вынуть из компьютера диск и перезагрузиться)

Если у вас "безголовый" сервер, то к нему в качестве
консоля подключается алфавитно-цифровой терминал. Подключают
его к консольному порту.
.
&dDРегистрация нового пользователя&d@

Если вам в руки попалась свежеустановленная машина, то на
ней еще не зарегистрировано никаких пользователей за
исключением суперпользователя "root" - системного
администратора. Пароля у него нет. Входите в него.
В суперпользователя можно превратиться. Для этого выполните
команду

su # Super User

Каждый пользователь в системе Unix предварительно должен
быть зарегистрирован. Пользователю полагается иметь: имя,
пароль, номер пользователя, номер группы, к которой он
принадлежит, домашний каталог, командный интерпретатор. У
пароля могут быть дополнительные параметры - как часто его
можно менять, время действия и прочие секретные штучки.

Comment Familiq Imya Otchestwo
logname входное имя пользователя
passwd пароль (пароль вводят дважды)
UID User Identification Descriptor
GID Group Identification Descriptor
$HOME Домашний каталог
shell Командный интерпретатор

&dDБывают такие командные интерпретаторы&d@:

/usr/local/bin/bash Самый удобный
/bin/ksh Чуть похуже, но тоже ничего
/usr/local/bin/tcsh Удобный, но "неправильный" и медленный
/bin/sh Самый "правильный" и самый неудобный
/bin/csh "Неправильный" и чуть более удобный

/etc/passwd - Вся информация о пользователе хранится здесь.
/etc/shadow - Здесь хранятся закодированные пароли.
Закодированные пароли могут лежать и в других местах.
Зависит от вида Unix.

В любом уважающем себя Unix имеется "головная" утилита
оператора (условно называемая sysadm) - диалоговая программа, с
менюшками и окошками для выполнения насущных задач по
системному администрированию. В том числе позволяет
регистрировать новых пользователей. Запускать ее может только
"суперпользователь" root. При запуске "sysadm" может спросить
тип терминала, на котором ему предстоит работать. Ответьте:
vt100

Примечание. В различных операционных системах эта утилита
может называться по-разному:

admintool Solaris 2
adminsuite Solaris 2.7
sysadmsh SCO UNIX 4
scoadmin SCO OpenServer 5
smit, msmit AIX
sam HP-UX
control-panel Linux RedHat
sysadm UnixWare, ISC, SVR4

&dDКоманда регистрации нового пользователя&d@.

adduser Linux
useradd SunOS 4.1
vipw BSD/OS, FreeBSD

&dDКак зарегистрировать нового пользователя "вручную"&d@.

1. Вставляем в /etc/passwd еще одну строчку:

moshkow:x:555:1:Maksim E. Moshkow:/home/moshkow:/bin/ksh

2. Приводим в соответствие файл /etc/shadow

pwconv

3. Создаем пользовательский каталог

mkdir /home/moshkow
chown moshkow /home/moshkow

4. Задаем пароль новому пользователю

passwd moshkow

5. Вот и все.
.
&dDНачало работы в системе&d@

&dDВход в себя&d@
На экране терминала появится строка

login:

Введите имя, под которым вы зарегистрированы в системе,
если нужно, пароль. Если Вы ошиблись при вводе имени, нажмите
CTRL+U, или DEL, или CTRL-D (для отмены), или несколько раз
нажмите на Return, потерпите немного и повторите ввод.
На экране появится приглашение командного интерпретатора.

sunsite:~/$ _

Чтобы выйти из системы, наберите команду exit или просто
нажмите Ctrl-D на пустой строчке.

&dDПеременные окружения&d@.
При входе в систему для пользователя автоматически
устанавливается несколько переменных окружения. Чтобы
посмотреть их значение, выполните команду env.

env # Распечатать проэкспортированные переменные окружения

LOGNAME=moshkow # имя пользователя
HOME=/home/moshkow # его домашний каталог
SHELL=/bin/ksh # его командный интерпретатор
MAIL=/usr/mail/moshkow # файл, в который складывается
# приходящая ему почта
PS1=host1:$PWD/$ # формат приглашения
PATH=:/usr/local/bin:/bin:/usr/bin:/usr/X11/bin:/usr/informix/bin:
# список поиска, по которому ищутся выполнимые файлы
TERM=vt100 # устанавливает тип терминала, на
# котором работает пользователь

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

Imya_Pereemennoj=znachenie export Imya_Pereemennoj

например

abc=Kalosha export abc

просмотреть значение переменной можно командой echo в такой
форме:

echo $abc

&dDПользовательский профайл&d@

Перед входом в систему сперва выполняется общесистемный
профайл /etc/profile

Затем выполняется пользовательский файл ".profile" (если
он есть) - в них можно устанавливать переменные окружения и
делать установки режимов терминала. Просмотреть установленные
переменные окружения можно командой env

##### Пример файла .profile ##################################

# Добавить к списку поиска каталоги с нужными программами
PATH=:$HOME/bin:$PATH:/usr/sbin:/usr/local/bin:/usr/informix/bin
# Разрешить редактирование командной строки в ksh
EDITOR=emacs
export PATH EDITOR
LC_CTYPE=iso_8859_1 export LC_CTYPE # русские буквы - "буквы"

# Характеристики терминала
# Забой=BackSpace СтеретьСтроку=Ctrl-U
# ПрерватьПрограмму=Ctrl-C "Жестокое_прерывание"=Ctrl-|
stty erase "^h" echoe kill "^u" quit "^|" intr "^c"
stty cs8 -parenb -istrip
# 8-битные символы, noparity, не усекать 8-й бит
# при вводе

case "$0" in # В зависимости от командного интерпретатора
*ksh) # В Korn Shellе
# Редактироваться стрелочками
alias __A=`echo "\020"` # ^P = восьмеричный 020
alias __B=`echo "\016"` # ^N
alias __C=`echo "\006"` # ^F
alias __D=`echo "\002"` # ^B
# В приглашение ставить текущий pwd
PS1=$LOGNAME@`uname -n`:'$PWD/$ ' export PS1
;;
*bash) # В bash'е в приглашение ставить host:pwd
PS1='\h:\w/\$ ' export PS1
ulimit -Sc 0 # чтоб программы core не роняла
;;
*sh) # для posix-shell и HP-UX
PATH=$PATH:/usr/sbin
PS1=$LOGNAME@`uname -n`:'$PWD/$ '
HISTFILE=$HOME/.sh_history
ENV=$HOME/.kshrc
export PATH ENV HISTFILE PS1
# и не забыть в файл .kshrc вписать set -o emacs
;;
esac
# обратите внимание: в некоторых местах ПРОСТАЯ кавычка _'_
# а в других - ОБРАТНАЯ _`_ - будьте внимательны, это важно.

&dDКлавиши для редактирования командной строки&d@
Если вы работаете в командном интерпретаторе Korn-Shell
/bin/ksh, и у вас установлена переменная EDITOR=emacs, то вы
сможете редактировать командную строку с помощью стрелок и
Ctrl-клавиш:

^P / ^N PREVIOUS / NEXT команда
^F / ^B FORWARD / BACK на позицию
^A / ^E в НАЧАЛО / КОНЕЦ строки
^D / ^K Удалить СИМВОЛ / Удалить КОНЕЦ СТРОКИ
^Y Вспомнить удаленное
^R Поиск предыдущей команды

ESC ESC Добить имя файла
ESC = Распечатать похожие имена файлов
а если командный интерпретатор bash, то обе эти команды
сидят на клавише TAB


&dDВыключение системы&d@

Чтобы начать процесс выключения системы, следует, будучи
пользователем root и находясь в корневом каталоге, выполнить
команду

cd /
shutdown -y -g0 -i0

Дождитесь полного окончания разгрузки системы и только
тогда выключайте питание.

Для перезагрузки системы выполните команду

shutdown -y -g0 -i6

Перезагрузить или разгрузить систему можно также и из меню
системного администратора команды sysadm.

В некоторых реализациях Unix (в частности, в BSD, SunOS,
Linux, HP-UX) команда shutdown использует другие ключи.
Попробуйте в этом случае:

shutdown -y -h now # для остановки
shutdown -y -r 60 # для перезагрузки через 60 секунд
.
&dDНесколько простейших команд Unix (курс молодого бойца)&d@

1.1. Система Unix различает БОЛЬШИЕ и малые буквы, и к этому
можно привыкнуть.

1.2. Если вы уничтожили какой-нибудь файл, то никаких проблем с
его восстановлением у вас не будет. Потому что восстановить
уничтоженный файл в системе Unix НЕВОЗМОЖНО. В Unix отсутствует
команда unerase, и к этому тоже нужно привыкнуть. Вирусы и
антивирусы в Unix тоже отсутствуют. Так что пока хоть этой
проблемы у администратора машины не будет.

1.3. В имени файла директории отделяются от последующей части
символом "/". (Билл Гейтс тоже хотел, чтоб у него в MSDOS все
как в Unix было, вот и взял символ "\" - перепутал - с кем не
бывает.)

Если имя начинается со слэша - значит, это полное
маршрутное имя.
Простое имя файла может состоять из ЛЮБЫХ символов. Длина
простого имени не более 256 символов. Длина полного маршрутного
имени файла не более 1024 символов.

1.4. Для задания шаблона имен используются символы "*"
(произвольная последовательность символов) и "?" (один
произвольный символ). Имя из одной точки "." обозначает текущую
директорию, имя из двух точек ".." - вышележащую (родительский
каталог).

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

команда -ключи -ключи ... прочие разные аргументы ...

1.6. Если командная строка кончается знаком &, то команда
запустится параллельно (фоном). На терминале печатается номер,
который получает запущенный процесс. После чего можно
продолжать работу, не дожидаясь завершения фоновой задачи.

команда -всякие разные аргументы ... &

1.7. Команда имеет три предопределенных направления
ввода-вывода - стандартный ввод, стандартный вывод и
стандартный протокол. Как правило, команда берет исходные
данные из стандартного ввода и печатает результаты в
стандартный вывод. В стандартный протокол печатаются сообщения
об ошибках и диагностика. Первоначально стандартные ввод, вывод
и протокол назначены на терминал, однако их можно
переназначить, используя следующие конструкции:

команда > имя_файла
(для стандартного вывода),

команда < имя_файла
(для переназначения стандартного ввода),

команда 2> имя_файла
(для стандартного протокола - системной диагностики).

Пример - записать в файл содержимое текущей директории:

ls > infdir

Если вывод назначен в файл, то перед началом выполнения
команды создается пустой файл с соответствующим именем (если
файл уже существовал, он опустошается), а затем в него
помещается информация. Если информацию нужно дописать в конец
существующего файла, следует воспользоваться конструкцией

команда >> имя файла
команда 2>> имя файла

1.8. Пользователи системы Unix объединяются в группы, и каждая
из групп обладает определенным набором прав доступа к файлам.

1.9. Программы могут распознавать значения переменных
окружения, значения которых были заданы перед их запуском.

TERM=vt220
HOME=/home/moshkow
PATH=:/bin/:dss/rk:/home/moshkow/bin

1.8. Выдачу одной команды можно перенаправлять на вход другой
команды. Для этого используется "|" - конвейер.

Пример: посчитать суммарный размер и число строк всех
файлов в каталоге /tmp, имена которых начинаются с символов
"text" ...

cat /tmp/text* | wc -c

# Команда cat сливает вместе все файлы вида /tmp/text*,
# wc -c -l считает количество символов и число строк во входном
# потоке.

Или просмотреть с листанием длинную выдачу команды:

ps -ef | more

Того же результата можно достичь и без конвейера таким образом:

ps -ef > temp-file
more temp-file
rm temp-file

&dD2. Некоторые наиболее употребительные команды&d@.

pwd - получить имя текущей директории
cd - изменить текущую директорию
ls - распечатать информацию о файлах или директориях
cat - слить или вывести файлы-аргументы на стандартный вывод
cp - копировать файлы
mv - переместить (переименовать) файлы
ln - создать ссылку на файл
rm - удалить файлы
rmdir - удалить директорию
mkdir - создать директорию
echo - вывести аргументы командной строки на стандартный вывод
ps - распечатать информацию и номера выполняемых процессов
kill - "убить" выполняемый процес по его номеру
man - выдать справку об использовании и ключах команды

&dD2.1 pwd Выдать имя текущей директории&d@.

pwd

&dD2.2 cd Сменить текущую директорию&d@.

cd [ директория]

cd /usr/spool/lp/adm

cd ..

Если директория не указана, вы попадаете в свой "домашний"
каталог $HOME

&dD2.3 ls Распечатать каталог&d@.

Формат команды: ls [ключи] [имена]

имена - имена файлов или директорий; для директорий
распечатывается список входящих в нее файлов, для файлов -
выводится его имя и дополнительная информация.
Имена файлов сортируются по алфавиту.
Без аргументов ls выдает содержимое текущей директории.

ls -al - вывод в длинном полном формате:

число владелец время модификации
линков группа имя файла
(имен) размер
-rwxr-xr-x 1 moshkow sys 17 Oct 18 16:13 ../jean
drwxr-xr-x 1 moshkow sys 12 Oct 18 16:11 ../jelly
-rwxr-xr-x 1 moshkow sys 0 Oct 13 14:14 ../j.bu.txt
^^ ^ ^
|| | |
|| | +----- права всех "прочих" по отношению к файлу
|| +-------- права одной с ним группы
|+----------- права "владельца" файла
+------------ "-" - значит файл, "d" - директория
Права:
r - файл доступен для чтения,
w - файл доступен для записи,
x - файл является выполнимым,
- - данное право доступа отсутствует.

-a - вывести все файлы (даже если имена начинаются с точки);
-x - вывод в 4 колонки;
-t - имена файлов сортируются не по алфавиту, а по
времени последнего изменения
-R - рекурсивно пройти по всем подкаталогам

ls -CF - оглавление каталога в несколько столбиков
ls -al - оглавление в полном формате

&dD2.4 cat Слить и вывести файлы на стандартный вывод&d@.

Формат команды: cat файл1 [файл2... ]

Cat выводит содержимое перечисленных на стандартный вывод.
Пример:

cat файл

распечатывает содержимое файла, а

cat файл1 файл2 > файл3

сливает первые два файла и помещает результат в третий. Чтобы
добавить содержимое файла1 к файлу2, надо выполнить команду

cat файл1 >> файл2

&dD2.5 more, pg Просмотреть файл постранично&d@.

more file_name ...
pg file_name ...
less file_name ...

Все эти команды позволяют просматривать файл, листая его
поэкранно. Просмотром можно управлять с помощью клавиш. Самое
удобное управление у команды "less", самое "дубовое" - у "pg"

q - завершить просмотр
ПРОБЕЛ - показать следующую страницу
ENTER - сдвинуться на одну строку
b - показать предыдущую страницу
/ - поиск
h - Help - посмотреть список всех возможных команд

more,less,pg используют, чтобы посмотреть "длинную" выдачу
команды, ставя его конвейером "ей на хвост"

ls -al | more - просмотреть оглавление
ps -e | pg - просмотреть список работающих процессов

&dD2.6 cp Копировать файлы&d@.

Формат команды: cp файл1 файл2
cp файл1 [файл2 ...] каталог

Эта команда копирует файл1, ... , в ФАЙЛ. Если ФАЙЛ - это
директория, то файл1 и др. копируются в нее под своими именами.
Если ФАЙЛ не существовал, то он создается, если существовал,
его старое содержимое теряется.

&dD2.7 mv Переместить (переименовать) файлы&d@.

Формат команды: mv файл1 файл2
mv файл1 [файл2 ...] каталог

Команда аналогична команде cp, но исходный файл уничтожается.
Ее основная роль - переименование файлов и перенос файлов из
одной директории в другую). Пример:

mv /dss/*/rk_*.help /dss/delo


&dD2.8 ln Связать файлы&d@.

Формат команды: ln файл1 файл2
# создается "жесткий" линк
ln -s файл1 файл2
# создается "символический" линк

Эта команда создает файлу файл1 еще одно имя. В итоге файл1 и
файл2 на самом деле физически являются одним и тем же файлом.
Если вы создаете так называемый "символический линк"
(используя ключ "-s"), то файл file1 при этом не обязан
существовать. Имя "файл2" при этом все равно будет создано.

&dD2.9 rm Удалить файл или директорию&d@.

Формат команды: rm [-fri] файл ...
-i - просить подтверждения на каждое удаление
-r - рекурсивно удалить вместе с подкаталогами
-f - не просить подтверждения, а сразу удалять

Для удаления пустой директории можно воспользоваться командой

rmdir директория ...

Чтоб удалить непустую директорию, нужно выполнить команду

rm -r директория

ВНИМАНИЕ: Ввиду того, что под шаблон ".*" подходит каталог ".."
НИКОГДА НЕ ДЕЛАЙТЕ КОМАНДЫ # rm -r .*
(Хотя большинство unix'ов прощают подобную ошибку, но НЕ ВСЕ -
в SCO рискуете напороться)

&dD2.10 mkdir Создать директорию&d@.

Для создания директории применяется команда mkdir.

Формат команды: mkdir имя_директории ...

&dD2.11 chmod Изменение прав доступа к файлам&d@.

Команда chmod меняет атрибуты (права доступа) файла.
Проставить файлам право на выполнение:

chmod u+x file1

Разрешить остальным пользователям исправлять файл

chmod a+w file1

&dD2.12 echo Эхо&d@.

echo Команда выводит на стандартный вывод свои аргументы

echo "\017"

Вывести на терминал символ Ctrl-O, он же 017 восьмеричное.
Восстанавливает латиницу на терминалах типа vt220 и at386

&dD2.13 Создать файл&d@.

Для создания файла можно воспользоваться следующими способами:

touch primer # создает пустой файл primer;
cat > primer # создает файл primer и пишет в него
# со стандартного ввода. Запись в файл закончится
# после нажатия CTRL+D.

&dD2.14 ps Какие программы выполняются&d@.

Сообщает номера процессов, которые выполняются в системе.

ps - запущенные только с этого терминала
ps -ef - все, в "полном" формате (в SYSV Unix)
ps -ax - все, в "полном" формате (в BSD* и Linux)

&dD2.15 kill Прервать процесс&d@.

Команда kill посылает указанному процессу сигнал немедленной
остановки.

Прервать процесс номер 1078 (номер можно узнать командой ps -e)

kill -9 1078

Прервать программу на вашем терминале, запущенную НЕ в фоновом
режиме, можно нажатием клавиши CTRL-C, или клавиши CTRL-\

&dD2.16 man Если вы забыли, как пользоваться командой&d@.

Как правило, при запуске команды без аргументов она выдает
формат своего вызова. Но для большинства команд достаточно
полную информацию вы можете получить так:

man имя_интересующей_вас_команды
man -k ключевое_слово # список команд, относящихся к ...

&dD2.17 who Кто работает в системе&d@.


who - этими командами можно узнать, кто вы такой
who am i и кто еще работает в системе
finger
last | more
id
man -k who - сообщит все возможные команды, которыми можно
узнать, кто и что делает в системе.
.
&dDОчень кратко о редакторе "VI"&d@

По не знаю какой уж там исторической традиции "честные"
(канонические) системы Unix не имеют в своем базовом комплекте
ни одного нормального (еще раз подчеркну это слово -
НОРМАЛЬНОГО) текстового редактора. Поэтому системный
администратор обязан уметь пользоваться тем, что ему дают. А
дают ему несравненный "Визуальный" экранный редактор файлов -
Редактор VI.

&dDРедактор VI имеет три режима:&d@

1. Командный - в этом режиме можно перемещаться по файлу и
выполнять редактирующие команды над текстом. Команды вызываются
ОБЫЧНЫМИ ЛАТИНСКИМИ БУКВАМИ.

2. Ввода текста - в этом режиме обычные латинские буквы будут
вставляться в текст.

3. Режим строчного редактора ED используется для управления
файлами (типа сохранить файл, зачитать файл и т.д.)

Прочитайте предыдущий абзац еще раз. Вы еще не испугались?
Хорошо. Поехали. Итак:

vi имя_файла

VI в КОМАНДНОМ РЕЖИМЕ.

ЧТОБЫ ВЫЙТИ ИЗ ФАЙЛА БЕЗ СОХРАНЕНИЯ, нажмите:
ESC : q ! Enter

чтобы выйти из файла, сохранив изменения, нажмите:
ESC : w ! Enter
ESC : q Enter
выйти из файла с сохранением, одной командой:
ESC : wq Enter

&dDдля перехода В РЕЖИМ ВВОДА нужно нажать команды типа:&d@
"i" вставлять здесь
"A" вставлять с конца строки
"cw" заменять текущее слово

ESC для ВОЗВРАТА В КОМАНДНЫЙ РЕЖИМ
CTRL-[ для возврата в командный режим

для перехода В РЕЖИМ УПРАВЛЕНИЯ ФАЙЛАМИ нужно нажать
":" (перейти в режим редактора ED)

&dDДвигаться по файлу можно командами:&d@
h,j,k,l влево, вниз, вверх, вправо
Ctrl-F На страницу вниз
Ctrl-B На страницу вверх
А если вам очень повезет, то можно будет двигаться стрелочками.
Чтобы перейти в режим везения, нужно описать для операционной
системы ваш терминал. Этим займемся в дальнейшем (см.

Подгоните курсор к нужному месту и нажмите
i перевод в режим ввода
вводите требуемый текст
ESC прекратить ввод, перейти в командный режим

Подгоните курсор к ненужному месту и нажмите
x удалить символ
dd удалить строчку

&dDЕще парочка полезных команд:&d@

o вставлять с новой строки (под текущей строкой)
a в режим ввода ЗА курсором
5yy запомнить 5 строчек
Подгоните курсор к нужному месту
p вставить запомненные строки под курсором
P вставить запомненные строки НАД курсором

J Склеить две строки
/Шаблон поиска Enter - поиск
n Повторить поиск

На этом ознакомление с редактором VI можно считать законченным.
Того, кто считает, что VI может предоставить больше удобств и
команд по редактированию, я отсылаю к прилагаемому здесь
справочнику-памятке "наиболее употребительные команды VI", ну,
и, естественно (как всегда), к документации. Остальных я отсылаю vibegin.txt
к не менее удивительному в своем роде редактору EMACS, которым,
не смотря на это, рекомендую пользоваться впредь.






.
&dDКакие Unix'ы бывают в природе?&d@

&dDГенеалогическое древо&d@

Почти сразу после рождения 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 за
использование фрагментов кода с копирайтом AT&T, что в немалой
степени способствовало закрытию проекта BSD. Предпоследний из
крупнейших поставщиков коммерческих BSD-подобных систем -
Sun/SunOs перешли на линию SVR4. Торжественно и официально
объявлено, что SVR4 является единственным наследником,
объединившим лучшие решения, пришедшие из Unix V и BSD.
Последним из могикан остается DEC: его OSF/1 для Alpha AXP -
немного искалеченный, но все же достаточно близкий к корням BSD
4.3.

&dDUnix'ы для IBM/PC&d@

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

BSD/OS 2.0 BSDi/386 Недорогой коммерческий. Хорошо поддерживается.
Поддерживает бинарную совместимость с SCO Unix
386bsd BSD 4.3 для Интелевской платформы
NetBSD производная от 386bsd
FreeBSD 2.1 Самая качественная сеть. Дабы не связываться с
USL, в нем полностью заново переписаны куски ядра,
на которых стоял копирайт AT&T.
Linux 2.0.30 Самый популярный среди бесплатных Unix'ов. Число
инсталляций оценочно между 100 тыс. и 1 млн.
Непрерывное совершенствование силами сотен
добровольцев довело его до уровня довольно надежной,
быстрой, качественной и удобной системы,
пригодной для работы как в качестве графической
рабочей станции, так и интернет-сервера.
Поддерживает больше всех приложений и hardware.
Поддерживает спецификации iBCS, и потому может
выполнять коммерческие приложения для SCO, в
частности, Oracle и Informix.
В Linux реализованы клиент и сервер Netware и Samba.
Эмулятором MS Windows WABI пользоваться очень даже можно.

&dDКоммерческие Unix'ы&d@

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

Solaris 2.5 SVR4.0 от SunSoft. Совсем как на Sun'е. В принципе,
это должно говорить само за себя. Начиная с
5-й версии в Solaris наконец пришел Motif.
SCO Unix 4.0 SVR3.2 Пока лидер по количеству установок среди
всех Unix'ов для PC. Старая надежная отлаженная
система. Поддерживает достаточно много hardware.
Поддерживает мультипроцессорные PC.
Непомерно дорог. Морально устарел.
Имеет проблемы с русификацией. Медленный.
ISC Unix 3.2 Надежен и компактен в работе. Морально устарел.

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

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

Выбирая платформу, мы автоматически получаем с ней "ее
собственный" Unix.
С точки зрения удобства и цельности администраторского
управления самые приятные из них - HP-UX 10.20 и AIX.
А самый распространенный - Solaris 2.5 (естественно).
.
&dDКоманды поиска GREP и FIND&d@.

Команда 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, которая будет вы-
полняться для всех таких найденных файлов. Вместо значка "{}"
будет подставляться каждый раз имя найденного файла. Естествен-
но, что таким образом мы их все и уничтожим.
.
&dDАрхивирование. Копирование файлов на стриммер&d@

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

tar попроще в использовании, но не все умеет
cpio более гибкая, чем tar, и посложнее.

&dDКоманда tar (Tape Archiver)&d@.

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

Ключи: "-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" Указывает на имя файла

&dDКоманда CPIO. (Copy In/Out)&d@.

Команда 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 Где можно, не копировать, а делать ссылки.

&dDАрхивация со сжатием&d@.

Архиваторы 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



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

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

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

man mt

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

&dDДругие утилиты архивации&d@

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

backup/restore
dump
fbackup/frestore (HP/UX)
pax
. . .
.
&dDНачальная загрузка операционной системы&d@

&dD * Boot-процедура * &d@

Boot, bootstrapping - слова, обозначающие сейчас
"Загрузить/пнуть, процесс начальной загрузки", на самом деле
произошли из английской фразы "Pull itself up by its own boot
straps" (Поднять себя за шнурки собственных ботинок)

Начинается все с Boot-prom'a - небольшой программы, которая
хранится в нестираемой памяти компьютера и начинает
выполняться сразу после включения.

Естественно, boot-prom умеет делать многое: форматировать
диски, инсталлировать операционную систему, запускать тесты
hardware. Однако главное его предназначение - найти на диске и
запустить на выполнение файл /unix - ядро операционной системы.
И своего собственного разума на это ему обычно не хватает,
поэтому он в первую очередь загружает с жесткого диска
"загрузчика операционной системы", а уж тот делает все
остальное.

&dDSUN&d@

Boot-prom загружает "BOOT BLOKS" - 1-ю ПРОГРАММУ НАЧАЛЬНОЙ
ЗАГРУЗКИ. "boot-bloks" расположены в 1-15 секторах раздела,
содержащего корневую файловую систему "/". Обычно корневая
файловая система располагается на разделе номер 0.
"Boot- blocks" можно записать на корневой раздел
загрузочного диска (обычно это внутренний диск со SCSI-номером
3) командой installboot. Для этого выполняется что-нибудь
такое:

installboot /dev/rdsk/c0t3d0s0

Boot-blocks "умеет читать" формат файловой системы unix -
ufs . Он находит на корневой файловой системе файл "/ufsboot"
- 2-Ю ПРОГРАММУ НАЧАЛЬНОЙ ЗАГРУЗКИ - и загружает ее.

/ufsboot находит ядро /kernel/unix и загружает его.

Ядро Unix загружается в оперативную память. Затем подключает
дополнительные загружаемые модули с драверами устройств. Как только ядро
"набирает" достаточное количество драверов, чтобы самостоятельно
смонтировать корневую файловую систему, оно тут же это и делает, после чего
начинает действовать самостоятельно, не используя кода начальных
загрузчиков.

Перехват в boot-prompt:

STOP+A

Загрузка в single user:

bo: boot -s

&dDMotorola 922&d@.

Boot-prom загружает с диска ЗАГРУЗЧИК - файл /stand/boot,
Загрузчик загружает ядро /stand/unix

Поскольку boot-prom не в состоянии вместить кода для
работы со стандартной unix'овской файловой системой, файлы unix
и boot лежат в отдельном разделе жесткого диска - разделе
/stand. На нем создана "ОЧЕНЬ ПРОСТАЯ ФАЙЛОВАЯ СИСТЕМА" bfs
(Boot File System), чтобы boot-prom'у было полегче найти и
считать с диска загрузочные файлы.

Перехват в boot-prompt:

После того как на консоли появится сообщение: "Idle MPU: none"
нажать клавишу ПРОБЕЛ

Загрузка в single user:

Во время начальной загрузки на несколько секунд
появляется приглашение: "Press _что-то_to enter system_maintence.
Нажать требуемую клавишу

&dDLinux&d@.

BIOS загружает блок начальной загрузки активного раздела.

Он грузит загрузчик LILO (LInux LOader). Lilo загружает
файл /vmlinuz

Параметры начальной загрузки записываются в файле
/etc/lilo.conf После любых изменений в этом файле необходимо
выполнить команду

lilo

Перехват в Lilo-prompt:

Left_ALT сразу после появления сообщения "Lilo ..."

Загрузка в single user:

Lilo: linux root=/dev/hda2 single

Загрузка в еще более single user:

Lilo: linux init=/bin/sh
mount -n -o remount /dev/hda2 /
insmod de4x5
ifconfig eth0 195.232.171.30
route add -net 195.232.171.0 gw 195.232.171.30
insmod nfs

&dDHP-UX&d@

В ПЗУ HP 9000 проживает "PDC" - "Processor Dependent Code"
- чтоб поговорить с ним, надо нажать клавишу ESC в первые
секунды загрузки.

На загрузочном диске есть Boot-раздел формата LIF
(линейная файловая система) В LIF-томе 4 "файла"

ISL - "операционная" программа
HPUX - собственно загрузчик ядра
AUTOBOOT - текстовый файл, в котором написано имя ядра по
умолчанию

Итак: PDS вызывает ISL командой

bo scsi.6.0 isl

ISL загружает ядро командой

hpux /stand/vmunix

Перехват в PDC-prompt:

Нажать ESC в первые 10 секунд

Загрузка в single user:

PDC> bo pri isl
ISL> hpux -is /stand/vmunix

&dD * Процесс init * &d@

Ядро инициализирует себя и после этого запускает процесс init.
А init - все остальные процессы, программы, которые необходимы
для нормального функционирования операционной системы.

Все дальнейшие действия в системе определяются этим процессом.
Все, что нужно делать init-у, определяет специальная таблица.

Процесс init всегда находится на каком-либо "УРОВНЕ ВЫПОЛНЕНИЯ".
Уровень выполнения определяет состояние и поведение всей систе-
мы. Уровень обозначается цифрой (или буквой) 0,1,2,3,4,5,6,s,S

0 - prom монитор - Полный останов системы;
1, s, S - single user mode. Однопользовательский режим;
2 - многопользовательский режим без NFS-сервера;
3 - многопользовательский режим с NFS-сервером;
6 - перезагрузка;


&dD * Примерный фрагмент управляющей таблицы /etc/inittab * &d@

bchk::sysinit:/etc/bcheckrc/dev/console 2>&1
brc::sysinit:/etc/brc > /dev/console 2>&1
is:3:initdefault:
rc:12345:wait:/etc/rc > /dev/console 2>&1
r0:0:wait:/etc/rc0 > /dev/console 2>&1
r2:23:wait:/etc/rc2 > /dev/console 2>&1
r3:3:wait:/etc/rc3 > /dev/console 2>&1
pf:12345:powerfail:/etc/powerfail > /dev/console 2>&1
co:12345:respawn:/etc/sysmonitor console console
t1:23:respawn:/etc/sysmonitor tty01 9600
t2:23:off:/etc/sysmonitor tty02 9600

Формат таблицы:

ИМЯ:Уровни_выполнения:вид_действия:запускаемая команда

ИМЯ: - просто имя строчки - они все должны быть разными
вид_действия:

sysinit запустить один раз после начальной загрузки;

на соответствующем уровне выполнения:
wait - запустить один раз и дожидаться, пока не окончится;
respawn - запустить параллельно, а если окончится, перезапус-
кать снова;
off - ничего не делать (просто игнорировать эту строку).


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


Сперва init запускает процессы, которые "sysinit"

Отработав все строки "sysinit" уровня, init идет все
дальше по /etc/inittab и обнаруживает строку initdefault 3 -
она заставляет его "перейти" на уровень 3.

&dD * Run Command - стандартные RC-каталоги запуска * &d@

Перейдя на уровень выполнения 3, init и отрабатывает
первую встретившуюся строчку с уровнем "3" - запускается
командный файл /etc/rc2 - загляните в него. Там все просто:
/etc/rc2 берет и выполняет командные файлы /etc/rc2.d/S*,
лежащие в каталоге /etc/rc2.d. Каждый файл выполняется с
параметром "start"

Отработав /etc/rc2, init точно таким же образом запускает
файл /etc/rc3. Вслед за этим он запускает несколько процессов
sysmonitor - по одному на каждый имеющийся терминал. Это те
самые процессы, которые говорят на терминал: "Login: "
Пользователь, войдя на терминал, некоторое время работает, но
как только он "уходит" из системы, на указанном терминале
ничего не остается. init тут же выполняет действие "respawn" -
перезапускает на терминал sysmonitor - и опять жизнерадостное
"Login: " появляется на терминале.

&dDLinux Slackware&d@

По умолчанию init устанавливает уровень выполнения 5.
При начальной загрузке отрабатывается файл
/etc/rc.d/rc.S

Затем для перехода в многопользовательский режим
/etc/rc.d/rc.M
из которого запускаются файлы
/etc/rc.d/rc.inet1 устанавливающий сетевые интерфейсы
/etc/rc.d/rc.inet2 запускающий сетевые сервисы
/etc/rc.d/rc.local запускающий несколько полезных программ и
демонов - например, поддержка мыши, httpd,
русификация консоля и т.п.

&dDLinux RedHat&d@

Используется стандартная технология rc-файлов System V

RC-каталоги:
/etc/rc.d/rc[0123456].d/
/etc/rc.d/init.d/

Конфигурационные параметры для RC-команд:
/etc/sysconfig/

&dDHP-UX 10.20&d@

Не смотря на BSD-евое происхождение, используется стандартная
технология rc-файлов System V

RC-каталоги:
/sbin/rc[0123].d/
/sbin/init.d/

Конфигурационные параметры для RC-команд:
/etc/rc.defaults.d/

&dDSVR4: SUN, Motorola&d@

Используется стандартная технология rc-файлов System V

RC-каталоги:
/etc/rc[0123456].d/
/etc/init.d/
.
&dDUnix, базовые принципы и особенности&d@.

Все системные действия выполняет ядро операционной системы
Unix. Ядро - обычный выполняемый файл, расположен в файле /unix
или /stand/unix или /vmunix или /vmlinuz (в зависимости от кон-
кретной реализации). Можете посмотреть размер этого файла - не
маленький. При начальной загрузке системы ядро целиком загружа-
ется в оперативнную память и в дальнейшем резидентно находится
в ней, выполняя все необходимые работы.

Что входит в ядро.

ДРАЙВЕРЫ УСТРОЙСТВ. И тех, которые есть, и тех, которых нет, но
могут быть, а также и такие, которые никогда вам не
понадобятся.

УПРАВЛЯЮЩИЕ ПОДПРОГРАММЫ: части кода, ответственные за
обеспечение работы пользовательских программ - разделение
времени и прочих ресурсов системы.

СЛУЖЕБНЫЕ ТАБЛИЦЫ И ДАННЫЕ ЯДРА: таблицы текущих процессов, от-
крытых файлов, управляющие структуры...

СИСТЕМНЫЕ ВЫЗОВЫ. (То, что MS-DOS называется "21 прерывание",
можно считать некоторой аналогией/пародией на системные
вызовы.) С точки зрения программиста это обычная си-шная
функция, только выполняет она системно-зависимые действия,
например: прочитать данные из файла, установить сетевое
соединение, создать каталог, и т.д. и т.п. Все системные вызовы
( а всего их более 1500 штук ) вкомпилированы в тело ядра Unix.
Пользовательские программы, вызывающие функции, являющиеся
системными вызовами, на самом деле содержат только jump'ы на
соответствующие адреса памяти в ядре. В пользовательскую
программу системные вызовы не влинковываются.

Что находится в оперативной памяти.

ЯДРО ОПЕРАЦИОННОЙ СИСТЕМЫ.

БУФЕРНЫЙ КЭШ. Часть оперативной памяти резервируется под кэши-
рование чтения и записи на диск. Любая операция чтения с диска
приводит к тому, что прочитанные блоки помещаются в буферный
кэш, а из него уже передаются запросившим данные программам.
Если блок попал в кэш, то все последующие обращения к нему бу-
дут получать образ блока из кэша, причем независимо от того -
та же самая программа обращается к блоку или какая-либо дру-
гая. Кэшируется также и запись на диск, опять же, разделяемая
между всеми выполняемыми программами.

ПРОЦЕССЫ. Процессом в Unix называется в

Страницы

Подякувати Помилка?

Дочати пiзнiше / подiлитися