Настройка Linux
Еще раз о настройке.
Постинсталляционная доработка Linux Mandrake 7.2 Odyssey.
Постинсталляционная настройка Linux.
Построение быстрого Linux-десктопа. (Linux на старых компьютерах).
Оптимизация Linux.
Продвинутая оптимизация Linux.
Советы по оптимизации Linux - 1.
Советы по оптимизации Linux - 2.
Эффекты тонкой настройки. (Оптимизация FreeBSD).
Автоматизация регистрации виртуальных консолей.
Еще раз про автоматический вход в систему.
Курс молодого сисадмина-1.
Курс молодого сисадмина-2: Advanced Settings.
Курс молодого сисадмина-3.
Советы администраторам Linux-систем или людям, желающими ими стать.
Идеальный сисадмин: RPM.
Как обойтись без прав root. Часть 1.
Как обойтись без прав root. Часть 2.
Как обойтись без прав root. Часть 3.
Consortium Deamonicum.
Linux с точки зрения системного администратора.
Администрирование пользователей и групп .
Администрирование Linux на лету.
Настройка международной клавиатуры X Windows с помощью Xmodmap
В общем и целом так:
1. Стандартный способ, в котором используются стандартные названия символов (scaron для буквы 'S' с "короной" наверху, uacute для ú - u со знаком "острого" ударения).
2. Экспериментальный способ, в котором имена некоторых символов из набора ISO8859-1 используются, например, для получения scaron.
Введите в свой Bash_profile: export LC_ALL=language export LANG=language
Или: export LC_CTYPE=SK_SK export LC_ALL=SK_SK OR for csh shell setenv LC_ALL=language setenv LANG=language
и поместите неизмененный стандартный файл .Xmodmap в свою личную папку. На вопрос, где можно получить этот самый "стандартный" файл, я отвечу так -- загляните в GNOME'овскую директорию ../share. Файл /usr/X11R6/lib/X11/locale/locale.alias содержит алиасы для языков, так что можете посмотреть там, что означает ca_ES или br_FR и каков точный синтаксис для Вашего языка (нельзя просто написать "croatia", а надо написать "croatian", но ни в коем случае не "Croatian" -- очень важный момент, т.к. система Unix чувствительна к регистру символов).
Теперь нужно установить подходящий для выбранного языка шрифт и записать путь к нему в файле XF86Config. Если Вы хотите "интернационализировать" вашу клавиатуру, установите в первую очередь стандартные определения из Xmodmap и пользуйтесь правой клавишей Alt для переключения раскладок (если Вы используете Xmodmap из GNOME). Если не заработает, попробуйте следующее:
Если в KDE или GNOME установленный файл .Xmodmap не работает, надо заставить систему заново прочесть указанные в нем установки с помощью команды "xmodmap ~/.Xmodmap", так, как описано в предыдущем разделе. В качестве альтернативы, можно создать 60 Xmodmap-файлов с именами наподобие .Xmo1, .Xmo2, .Xmo3, .Xmo4 и т.д., и вынудить систему перечитать их (xmodmap /.Xmo1). Точка перед именем файла озночает, что это скрытый файл и не является обезательной. Вполне допустимо пользоваться файлами Xmodmap с именами xmo1, xmo2 или xmo3.
Печатать с национальной раскладкой можно только в приложениях, которые имеют доступ к шрифтам в кодировке ISO8859-2 (или другим необходимым шрифтам), но этого может оказаться недостаточным для StarOffice или друх приложений, использующих собственные встроеные шрифты. StarOffice использует собственную директорию для шрифтов -- StarOffice/share/xp3/fontmedtrcs/afm для шрифтов afm и StarOffice/share/xp3/pssoftfonts для шрифтов ps. Так что придется добавить шрифты ISO8859-2 в эти директории (чтобы StarOffice понял, что их надо использовать) и добавить символические ссылки в файл fonts.dir. Попробуйте скрипт, который я приготовил. Переименуйте его в "so52", сделайте его выполнимым (chmod +x so52), скопируйте в каталог StarOffice/share/xp3 и запустите оттуда.
StarOffice 5.2 полноценно распознает документы Word 97, даже написанные на разных языках, но для более старых версий или других текстовых редакторов необходима предварительная конвертация из iso8859-2 в win1250.
Таким образом, профессиональные переводчики могут с помощью StarOffice 5.2 работать с несколькими языками и экспортировать результаты работы в формат MS Word 97 или rtf.
Настройка печати
Печать, особенно текстов в кодировках, отличных от Latin-1 (Америка, Западная и Северная Европа) никогда не была сильной стороной Un*x. Попытки интегрировать ее в X (Xprint) зачахли, не получив серьезного развития, а
универсальной интернационализированной библиотеки печати нет до сих пор. Лучше в этом плане обстоит дело в qt/KDE, хуже - в Gnome (gnome-print). Мы надеемся, что в Mandrake RE разрешены ряд проблем, но в отдельных случаях
Вам придется повозиться и почитать документацию, а иногда, особенно в случае Windows-принтеров - подождать до лучших времен.
Настройка сети
"Барышня, дайте срочно Смольный!"
Для начала настроим простую рабочую станцию. Имеется локальная сеть Ethernet с протоколом TCP/IP. Первоначально требуется скомпилировать ядро с соответствующими драйверами. Первоначально требуется поставить в соответствии IP?адресу имя компьютера (если у вашего компьютера оно есть), для в файле /etc/hosts требуется добавить строку
#IP полное имя псевдоним 127.0.0.1 localhost.localdomain localhost 195.14.21.11 blade.hell.com blade
Первая строка это комментарий, вторая это описание loopback и третья это добавленная нами строка для сети. Дальнейшее конфигурирование происходит при помощи команды ifconfig, она предназначена для сопоставления сетевого интерфейса и IP?адреса. Она имеет следующий синтаксис ifconfig <interface> [[-net -host] <address> [parameters]]
Интерфейсы для Ethernet устройств называются как eth0, eth1, и т.д. Адрес сопоставляемый интерфейсу берется либо из файла /etc/hosts (ключ -host) или из /etc/network (ключ -network). Файл /etc/network является аналогом файла /etc/hosts и предназначен для сопоставления адреса и имени для сегмента сети. parameters может принимать следующие значения
up | Включение интерфейса (ставится по умолчанию). |
down | Выключение, обратно параметру up. |
netmask <mask> | Присваивает маску подсети, по умолчанию ставится равной классу подсети, в данном случае 255.255.255.0. |
pointopoint <address> | Используется только для интерфейсов "точка-точка", например PLIP или SLIP. |
broadcast <address> | Для установки широковещательного адреса, отличного от стандартного. |
metric <address> | Предназначен для установлении ненулевой метрики, имеет смысл ставить только для роутера. |
mtu <bytes> | Максимальная единица передачи данных. Для Ethernet по умолчанию равна 1500, хотя при плохой или загруженной линии ее можно уменьшить. |
arp | Включает ARP (Address Resolution Protocol) для обратного сопоставления имени по IP, обычно не нужен. |
-arp | Выключает ARP. |
promisc | Режим захвата ВСЕХ пакетов, мечта всякого хакера. |
-promisc | Выключает режим захвата. |
После этого следует добавить маршрут в таблицу маршрутизации, для этого предназначена команда route. Ее синтаксис имеет вид route [add del] [-net -host] <target> [parameters]
Параметр <target> обозначает сеть (при ключе -net) и может браться из файла /etc/network. Если настраивать маршрутизацию на отдельный компьютер, то следует использовать ключ -host. А parameters может принимать значения аналогичные параметрам ifconfig, с дополнением параметра gw (gateway).
Следующим этапом настройки, является установка шлюза. Шлюз предназначен для соединения различных сетей. Если в вашей сети этим компьютером является компьютер с именем shield и адресом 195.14.21.13, то следует добавить в список hosts его характеристики, а затем использовать команду route с параметром gw. Например route add -net 199.221.14.0 gw shield
После всего написанного стало простым настроить шлюз, для этого нужно только настроить два интерфейса по отдельности и присвоить им уникальные IP-адреса. Полезно так же добавить оба в /etc/hosts.
Если вы все это настроили один раз, то после перезагрузки все настройки потеряются. Для это чтобы избежать этого следует включать команды ifconfig и route в сценарий загрузки сети rc.inet1 точно также как вы только что их набирали. Однако способ, когда в каждом компьютере приходится создавать один и тот же файл, не является изящным. Более удобные средства предоставляют демон gated (это аналог демона Максвелла) и метод proxy ARP (Address Resolution Protocol). Демон gated занимается тем, что динамически создает таблицу маршрутов в системе. Он необходим для больших сетей и работы с линиями "точка-точка", которые меняются динамически.
Самым мощным по сей день средством обеспечения безопасности служит так называемый firewall. Это компьютер или просто программа, которая закрывает доступ к сетевым службам и протоколам тем кому не положено. Для этого имеется минимум 2 управляющих файла: /etc/hosts.deny и /etc/hosts.allow. Структура этих файлов очень проста, в каждом только 2 столбца: сервис и хост (если вы умеете программировать консоль, то можно добавить третий столбец, но ТОЛЬКО ЕСЛИ УМЕЕТЕ). Для любого компьютера, который не служит сервером в Интернете, файл /etc/hosts.deny имеет очень простой вид ALL:ALL
После этого можно добавить нужные адреса в файл /etc/hosts.allow.
Для проверки служит команда netstat. Она имеет следующие ключи
-r | таблица маршрутизации ядра |
-n | при отображении заменяются имена IP-адресами |
-i | статистические данные используемых интерфейсов |
-a | полные данные всех известных интерфейсов, включая ненастроенные |
-t, -u, -w, -x | активные сокеты TCP, UDP, RAW или UNIX |
Однако простой установкой сокета мало кто ограничивается. Нужно еще настроить сетевых демонов. Для помощи в продвижении демонологии служит файл /etc/inetd.conf, это управляющий файл суперсервера демонов Интернета. С точки зрения демонологии словом "Интернет" называют самое большое из известных скопление демонов, как диких, так и домашних. Все записи в этом файле имеют вид
#service | type | protocol | wait | user | server | cmdline |
#Внеш | ||||||
login | stream | tcp | nowait | root | /usr/sbin/rlogin | in.rlogin |
telnet | stream | tcp | nowait | root | /usr/sbin/telnetd | in.telnetd |
ftp | stream | tcp | nowait | root | /usr/sbin/ftpd | in.ftpd |
#tftp | dgram | udp | wait | nobody | /usr/sbin/tftpd | in.tfpd |
#И т.д. | ||||||
#Внут | ||||||
daytime | stream | tcp | nowait | root | internal | |
time | stream | tcp | nowait | root | internal | #И т.п. |
service | Название службы, все названия содержатся в файле /etc/services |
type | Тип сокета, однозначно связан с протоколом, stream для tcp, dgram для udp (User Datagram Protocol, для некоторых служб гораздо удобнее TCP). |
protocols | Название протокола, требуется установленный драйвер в ядре и запись в файле /etc/protocols |
wait | Режим приема-передачи. Обычно ставится nowait для дуплексного режима приема-передачи дейтаграмм, но для некоторых сервисов требуется wait. Для сокетов типа stream следует всегда указывать nowait. |
user | Под этим именем будет запущен соответствующий сервис. Не следует запускать сетевую службу под более высокой, чем требуемая, привилегией. Например, службу tftp ВСЕГДА следует запускать как nobody. |
server | Полное имя программы. Если сервис внутренний, то следует указать intelrnal. Внутренние сервисы служат для взаимодействия программ внутри компьютера. Кроме того, ОЧЕНЬ ПОЛЕЗНО для всех сервисов на протоколе TCP/IP использовать единый демон /usr/sbin/tcpd. Это несколько увеличит нагрузку на процессор, но значительно улучшит безопасность. (в примере не так) |
cmdline | Командная строка запуска, обычно просто ссылка на файл с этой строкой. Для внутренних сервисов строка не требуется. |
Файл этот достаточно большой, и я не написал и четверти его строк. Но если вы откроете его, то увидите, что большинство строк закомментированы. Это связано с соображениями безопасности. Ни для кого (кроме разработчиков очередного "безопасного" продукта из Micro$oft) не секрет, что есть сетевые сервисы, которые содержат дыры и есть сервисы, которые даже без дыр не способны хоть что-то засекретить. Среди программистов и root'ов существует поверье, что известных дыр не содержит только самая последняя версия сервиса. Однако бывает что это не верно. Например, я специально привел строку с сервисом tftp (Trivial FTP), он предназначен для загрузки бездисковых рабочих станций, а на деле являет собой незатыкаемую дыру. Обычно, для того чтобы он корректно и относительно безопасно работал, сеть, в которой он устанавливается, делают полностью закрытой от внешнего мира файерволом. На самом загрузочном компьютере создают специальный дисковый раздел, в который только tftp и сможет адресоваться. Затем присваивают ему категорию nobody, а номера ethernet карточек фиксируют. Также опасным является сервис finger, поскольку он предоставляет информацию о работе компьютера всему миру. Нешифрованные авторизуемые службы ftp и telnet это вообще целая песнь хакера, их не ловит только ленивый.
Работа сетевого демона несколько отличается от работы обычного демона. Обычный домашний демон большую часть своей жизни спит и просыпается только для совершения необходимой работы при получении сигнала от ядра. Демон же сетевой спит редко и мониторит подотчетный ему сетевой интерфейс. При поступлении на этот интерфейс требования о соединении, демон немедленно раздваивается. Одна его локальная копия продолжает мониторить интерфейс, а другая обрабатывает соединение. После закрытия соединения локальная копия уничтожается. Исходя из этого следует строить политику запуска сетевых демонов. Службы, запуск которых обрабатывается редко, следует поручить демону tcpd, а специфическим демонам - часто используемые службы. Например, служба telnet даже в самом активно посещаемом MUD'е запускается не чаще одного - двух раз в минуту, а служба http на www-сервере средней нагрузке обрабатывает несколько десятков, а то и сотен, запросов в минуту.
Записывать все известные компьютеры в файл /etc/hosts занятие неблагодарное, а потому его полезно перепоручить компьютеру. Обычно этим занимается демон named. На самом деле это не самостоятельный демон, а часть большой библиотеки, называемой библиотекой резолвера. Задачей этой библиотеки является выполнение двух функций языка C - gethostbyname() и getnamebyhost(). Очень полезно иметь этого демона не только на сервере имен всей сети, но и на каждом компьютере, поскольку локальный демон named позволяет кешировать работу общего и разгружает сеть. Местный резолвер управляется несколькими файла, самый простой и самый важный из них - /etc/host.conf. Число его параметров очень ограничено
order | Порядок опроса служб разрешения имен. Может иметь только 3 значения bind (запросить сервер DNS), hosts (искать в файле /etc/hosts) и nis (поиск в базе NIS). Может принимать все три значения одновременно. |
multi | Имеет значения on или off. Если стоит on, то хосты из списка /etc/hosts могут иметь несколько IP-адресов. |
nospoof | Тоже имеет два значения on и off, позволяет бороться с подложными именами хостов. |
alert | Употребляется после включения антиспуфинга в предыдущем пункте. |
trim | Необязательный параметр, значение которого имя домена. Полезен, если хост является членом нескольких доменов. |
Локальный демон named управляется несколько нестандартным файлом /etc/named.boot (в нем коментарии обозначаются ;). Для примера
;/etc/named.boot для blade.hell.net directory /tmp/named ;порядок домен файл cache . named.ca primary hell.net. named.hosts primary 0.0.127.in-addr.arpa. named.local primary 14.195.in-addr.arpa. named.rev ;и т.д.
Перед описанием параметров обратите внимание как здесь пишутся имена, задом наперед, вместо неизвестной части ставится .in-addr.arpa., причем ОБЯЗАТЕЛЬНО заканчивается на точку. В этом файле ВСЕГДА должна присутствовать строка о loopback интерфейсе 127.0.0.1, как о primary, иначе многие ваши внутренние программы полезут наружу и никогда не вернутся. Теперь остальные параметры
directory | Определяет каталог в который будут складываться данные, можно указать несколько. |
primary | Информация о зоне этого домена загружается из указанного файла. |
secondary | Параметров всегда три, имя домена, имя файла и имя первичного (primary) сервера. Сначала просматривается файл, затем идет обращение к первичному серверу. После получения информации, она заносится в указанный файл. Первичных серверов можно указать несколько, порядок их опроса определяется порядком записи. |
cache | Обязательно должен присутствовать, в качестве параметров идут имя домена и имя файла. Причем в качестве одного из доменов всегда должна быть указана точка (.). |
forwarders | Список серверов, к которым можно перенаправить запрос. |
slave | Если указан этот параметр, то named только перенаправляет запросы. |
Получить информацию с другого компьютера в сети можно только с помощью обычных сетевых протоколов. Для этого служит еще и RPC (Remote Procedure Call). Основных применения для RPC два - это NIS (Network Information Service) и NFS (Network File System). Есть еще два побочных, понятно последствия творчества Microsoft, IIS (Internet Information Service) и SMB (сервер NetBIOS для сетей UNIX). NIS (и IIS) служит для получения информации по сети, например, с его помощью можно организовать общие пароли для всех компьютеров в локальной сети. А NFS (и SMB) служит для получения доступа к удаленным каталогам, как к локальным. Локальная сеть, организованная на NIS и NFS, очень легка для администрирования и работы, пользователь даже не должен знать, где расположен компьютер с его личным каталогом, а где с необходимой программой, он просто садится за ближайший. К сожалению, та версия NIS, с которой имел дело я, была сильно устаревшей, не обеспечивала режима теневых паролей, шифрованных соединений и надежной авторизации. Потому я напишу только об NFS.
Для того чтобы можно было начинать работу с томами (здесь это слово аналогично "удаленная файловая система") NFS, следует запустить демона NFS и установить поддержку NFS в ядре. Демоны NFS запускаются не через суперсервер демонов Интернета, а самостоятельно, через сценарий загрузки. Для этого в файле /etc/rc.d/rc.inet2 должна быть запись
if [ -x /usr/sbin/rpc.mountd ]; then /usr/sbin/rpc.mountd; echo -n " mountd" fi if [ -x /usr/sbin/rpc.nfs ]; then /usr/sbin/rpc.nfsd; echo -n " nfsd" fi if[ -x /usr/sbin/rpc.ugidd ]; then /usr/sbin/rpc.mountd; echo -n " ugidd" fi
Первый блок запускает монтировщика (он обычно включен по умолчанию), второй - NFS (он обычно закомментирован), третий - демона имен и групп ugidd.
Для управления подключением клиентов, на сервере создается управляющий файл /etc/exports. Только прописанные в этом файле клиенты имеют доступ к тому NFS на сервере. Обычно он имеет следующий вид
#/etc/exports на сервере blade /home/users bow(rw, kerberos), arrow(rw, kerberos), riposte(rw, kerberos) /usr/games bow(ro), arrow(ro), riposte(ro), blaze(ro)
Структура этого файла понятна (не путать с понятием "интуитивно понятно"), первый столбец - каталог на сервере, второй - список клиентов с параметрами. В названиях можно употреблять символы * и ? если строка клиентов пуста, то доступ открыт всем. Параметры могут иметь следующие значения
rw | Доступ для чтения и записи. |
ro | Доступ только для чтения. По умолчанию установлен. |
kerberos | Требования авторизации протоколом kerberos. |
insecure | Не требуется авторизации. |
rpc-secure | Использование стандарта закрытого RPC. |
root_squash | Отменяет права root'а, очень полезный флажок. |
no_root_squash | Обратный к предыдущему. Обратите внимание, что на большинстве систем стоит по умолчанию, представляя собой колоссальную дыру в безопасности. |
unix-rpc | Требование авторизации в рамках домена. |
map_identify | Этот режим оставляет без изменения цифровые gid и uid. Обычно включен по умолчанию. |
map_deamon | Обратный к предыдущему. Позволяет иметь различные gid и uid на клиенте и сервере, требует запущенного демона ugidd. |
Следующие 2 параметра управляют линками на смонтированном удаленном томе. Какой из них у вас включен по умолчанию, обычно заранее сказать нельзя, просто проверьте. | |
link_relative | Конвертирует линки из абсолютных в относительные, например линк /usr/games/q3a/quake.x86, находящийся в каталоге /usr/games/links/, превратится в ../q3a/quake.x86, если монтируется /usr/games/. После этого измененный линк будет работать в подмонтированном каталоге. |
link_absolute | Линки остаются без изменений, на деле требуется достаточно редко. |
#том | точка монтирования | тип | параметры |
blade:/home/users | /home/users | nfs | hard, timeo=20 |
blade:/usr/games | /games | nfs | intr, timeo=12 |
Где параметры могут быть следующими
rsize=n, wsize=n | Размер пакетов клиента NFS, по умолчанию равен 1024. Менять не рекомендуется. |
timeo=n | Время ожидания запроса клиентом в долях секунды. По умолчанию равно 7. |
hard | Том монтируется жестко. Если на таком томе превышено время ожидания, то на консоль выдается предупреждение, а монтировщик будет по-прежнему пытаться установить связь. |
soft | Противоположен предыдущему, после достижения предельного времени том размонтируется. |
intr | Прерывает вызовы клиента, если сервер долгое время не доступен. Используется с параметром hard. |
Я описал лишь малую часть работы демонов Интернета и демонов RPC. Например, в последнее время стали повсеместно использоваться алгоритмы шифрования и надежной авторизации, устойчивые к перехвату пакетов хакером. Это демоны sshd (Secured SHell), slogind (Secured LOGIN) и другие. Так же я не коснулся такого вопроса как организация Интернет-сервера с демоном httpd, сервером Apache и других Интернет-служб. Не ограничиваются описанными и применения RPC, это очень мощная система, которая позволяет легко (например, одной командой export DISPLAY=blade) устанавливать достаточно сложные соединения, вроде Remote Desktop Connection из арсенала Windows2000. При этом не требуется передавать все содержимое рабочего стола, если вам требуется лишь запустить одну программу. В общем, это самостоятельное творчество, которому могут помочь только собственные усилия.
Однако еще сохранились люди, которые для соединения с Интернетом используют модем. Вы уже установили драйвера, перекомпилировали ядро и теперь хотите дозвониться провайдеру. Если вы простой пользователь, то для этого достаточно просто создать соответствующее PPP-соединение в одной из программок, и дальше не ваша забота. Если же вы root, то для того чтобы юзеры смогли так просто существовать придется потрудиться именно вам (особенно если единственный юзер - это вы).
Если соединение осуществляется с помощью протокола PPP (а сегодня это почти всегда так), то этим соединением управляет демон pppd. Это необычный демон, он отличается от всех предыдущих тем, что ЛЮБОЙ пользователь может им управлять (даже guest). Осуществляется управление с помощью аргументов командной строки и управляющих файлов. Этих файлов может быть много, один основной, и по одному на каждого юзера. Основной файл называется /etc/ppp/options, а пользовательские файлы .rcppp, и содержатся они в домашних каталогах. Правило здесь следующее: параметры для всех файлов одинаковые, но в первую очередь просматриваются параметры из основного файла, затем из пользовательских. Параметры основного файла общедоступны и общеприняты, т.е. каждый пользователь их употребляет, но не может изменить. Параметры же пользовательских файлов личные, т.е. только владелец их знает и может изменять. Таким образом, пароли следует хранить в пользовательских файлах, а настройки модема - в общем.
/dev/ttyS0 | Имя модема, если модем единственный, то следует писать в основной файл, если модемов несколько, то можно оставить на усмотрение пользователей. |
crtscts | Включает аппаратное разрешение передачи, без этого режима скорость будет ограничена до 9600. Пишите в основной. |
defaultroute | Включает маршрут PPP в качестве маршрута по умолчанию. Можно оставить на произвол пользователей, только если вы уверены в их знаниях. |
auth | Требует авторизации при подключении к вашему компьютеру. Обязательно следует указывать в основном файле. |
lock | Блокирует используемый канал. Тоже обязательно следует указывать в основном файле. |
domain | Имя домена. Необходим для авторизации по протоколу CHAP, который для простого соединения с Интернетом через провайдера не используется. |
modem | Указывает демону на работу именно с модемом, пользователи ВСЕГДА забывают это слово. |
-detach | Демон после соединения переходит в фоновый режим, указывайте в основном файле. |
noipdefault | Демон pppd в присутствии этого параметра обязан назначить для соединения тот IP, который ему предложит удаленный компьютер. Оставьте на усмотрение пользователям, только если уверены, что они не забудут его указать. |
silent | После указания этого параметра демон pppd будет работать в режиме сервера, т.е. после установления физического соединения будет ждать, когда с клиента поступит первый пакет. connect "сценарий" Параметр, который обязан принимать какое-либо значение. Каждый сценарий содержит номер телефона, имя и пароль пользователя. Эту строку ОБЯЗАН задавать пользователь. |
mesg n stty -echo
Таким образом для дозвона до провайдера можно использовать следующий сценарий (если все необходимые параметры находятся в /etc/ppp/options)
pppd connect "my_scenario"
Однако не на всех компьютерах удобно использовать такой механизм. Дополнительные параметры вызова демона pppd позволяют использовать его постоянно, таким образом, чтобы он сам устанавливал соединение в случае необходимости. Куда их помещать, зависит от конкретных требований.
demand | Параметр "дозвона по требованию", соединение ppp0 будет создано, но connect запустится лишь после того как он потребуется. |
active_filter | Значение этого параметра управляет настройками трафика, без него демон будет реагировать на каждый исходящий бит. |
holdoff <t> | Время в секундах между дозвонами. |
idle <t> | Время через которое демон повесит трубку при отсутствии трафика. |
Тогда для пользователя основным станет создание и запуск сценария его соединения. Этот процесс давно автоматизирован с помощью специальных программ, которые разные в разных дистрибутивах Linux. Но иногда может возникнуть необходимость создания или запуска сценария вручную. Для следует создать файл с названием вроде my_scenario. А для параметра connect указать значение "chat -f my_scenario". chat это программа общения с модемом по принципу диалога, ключ -f означает, что этот диалог берется из файла. Пример части такого файла
ATZ OK ATDT3208080 CONNECT ' ' ogin: ghoort word: forget
При его запуске на модем посылается команда ATZ (инициализация), затем он ожидает ответа OK. После его получения, программа chat высылает телефонный номер ATDT3208080 в импульсном наборе, и ждет ответа CONNECT. После получения ответа, она не делает ничего, на что указывает пустая строка. Получение приглашения ogin: приводит к ответу ghoort, причем такой вид не ошибка, это требуется, поскольку буквы L и l здесь различаются. Затем вводится пароль.
Зная команды, используемые вашим модемом, можно написать значительно более сложные сценарии, с ветвлением и использованием нестандартных команд.
Настройка системы
Если у вас клавиатура уже руссифицирована каким-нибудь "старым" способом (с помощью xmodmap или программ-руссификаторов xruskb, xes и т.п.), то уберите их. Они будут только мешать. Во всяком случае, если будет "очень надо", вернете их потом.
Короче, позаботьтесь о том, чтобы у вас не было русского .Xmodmap
в домашней директории (и/или в {XROOT}/lib/X11/xinit/) и никакие xruskb не стартовали бы автоматически при запуске "иксов".
Итак. Прежде всего убедитесь, что у вас правильно установлены "русские фонты". Для этого нужно взять текст, "набитый" в koi8 (например, в какой-нибудь "консольной" программе). Если он нормально читается в xterm, то шрифты установлены "правильные". (Как установить "кириллические" шрифты я здесь описывать не буду. В Интернете достаточно инструкций на эту тему.)
Дальше. Проверьте, что у вас правильно установлена locale. Обычно она устанавливается переменной окружения LANG. Убедитесь, что значение этой переменной указывает на существующие файлы для "libc'ишной" locale (в /usr/share/locale) и "иксовой" locale (через locale.dir и, если нужно, locale.alias).
Не полагайтесть на результаты выдачи команды locale. В некоторых случаях она может показывать не совсем то, что и процедура setlocale()
вызываемая внутри прикладных программ.
Если будут проблемы, можете воспользоваться моей тестовой программкой testXlc.
Она определяет
"системную" locale, locale для Xlib, полный путь до файла XLC_LOCALE, значения некоторых классов "иксовой" locale, в том числе - "encodingName" (которое влияет на работу *LookupString).
Для "сборки" этой программы надо последовательно набрать команды
xmkmf make
Надо также заметить, что эта программа использует внутренние процедуры Xlib (не предназначенные для вызова в прикладных программах). Поэтому, нет гарантии, что она будет "собираться" и правильно работать во всех версиях XFree. Во всяком случае, она должна давать требуемый результат в версиях 3.3.2, 3.3.3, 3.3.3.1.
Далее. Можно проверить, что XKB действительно переключается на "русскую" раскладку и выдает коды Cyrillic.
Для этого можно воспользоваться программой xev (если ее нет в вашей системе, то можно найти ее в XFree86-contrib).
Вообще-то, это "универсальный тестер" "событий" (X events). Ее надо запустить из под xterm. При нажатии кнопок она должна писать что-то вроде этого
KeyPress event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190622, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 0 characters: ""
KeyRelease event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190755, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 0 characters: ""
Обратите внимание, что если у вас клавиатура перключена в "русский режим", то в третей строчке сообщения должно быть название Cyrillic кода клавиши
Кстати, xev - "неправильная" программа. Если сделать ее "правильной", добавив в начале вызов (и "пересобрав" ее)
setlocale(LC_CTYPE, "");
то она будет показывать и результат трансляции Cyrillic кодов в koi8-r
(ну, или iso8859-5), например -
KeyPress event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190622, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 1 characters: "ф"
KeyRelease event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190755, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 1 characters: "ф"
Ну и, наконец, надо убедится, что у вас не XFree86 3.3.3 (хотя с этого надо было начинать :-).
(Надо бы написать простенький "тестер", который проверяет правильность работы *LookupString при заведомо правильной encoding_name. Но пока сойдет "подправленная" xev. Она, кстати, использует только XLookupString.)
Итак, если
у вас стоят "кириллические" шрифты; программа testXlc показала, что название "системной" и "иксовой" locale совпадают, и значение "encodingName" - KOI8-R; xev показывает Cyrillic коды; "поправленный" xev транслирует их в нормальные koi8-r коды;
то система у вас настроена. И "правильные" программы должны работать нормально.
А вот что делать с "неправильными" программами - разговор отдельный...
Настройка видеопараметров и установка vmware-tools
Настройка видео— ответственный участок в настройке виртуальной машины. По крайней мере, при настройке X-Windows — поскольку тут придется сделать кое-что своими руками. VMWare и VirtualPC решают проблему видео разными путями, а именно: VirtualPC эмулирует видеокарточку S3 Trio 32/64 PCI, и поскольку любая существующая операционная система поддерживает эту карточку с вероятностью 99,99%, то таким образом проблема видео решается удовлетворительно.
Совершенно другим путем пошла VMWare. Вместо эмуляции какой-то существующей карточки она предлагает собственный драйвер, входящий в пакет vmware-tools, устанавливаемый на виртуальной системе. Поскольку процесс в некотором смысле «магический», то я его опишу здесь детально на примере установки под Red Hat Linux. С небольшими отличиями это применимо и для других версий Linux и BSD.
Итак, поехали.
При инсталляции системы настройте видеопараметры X-Windows любым произвольным образом — инсталляция vmware-tools все равно все сделает по-своему.
Завершите инсталляцию и войдите в систему в консольном режиме с правами root.
Выйдите из виртуальной машины в хост-систему по <Alt + Ctrl> и выберите в меню Settings > VMWare tools install. В появившемся диалоговом окне (смысл вопроса в этом окне — «убедитесь, что вы запустили виртуальную машину») ответить Install. По этой команде виртуальная машине «вставит» в устройство лазерного диска /dev/cdrom (или как бы он там не назывался) образ диска со своими утилитами.
Войдите в виртуальную машину и скопируйте инсталляцию на диск, а потом запустите ее:
cd / mount —t 9660 /dev/cdrom /mnt cp /mnt/* /tmp umount /dev/cdrom cd /tmp tar zxf vmware-linux-tools.tar.gz (я делаю tar zxf vm*) cd vmware-linux-tools ./install.pl |
При инсталляции следуйте поставленным вопросам — точнее, в нужных местах вставляйте <Enter>.
После инсталляции vmware-tools автоматически настроит разрешение и глубину экрана виртуальной машины аналогично параметрам хост-системы. Это не всегда удобно, а точнее — всегда неудобно, потому что окно виртуальной машины полностью покрывает все рабочее поле. Чтобы исправить такое положение, просто исправьте файл настроек X-сервера — для Red Hat и четвертых иксов это /etc/X11/XF86Config-4. Проигнорировав секцию Monitor (она больше ничего не делает) исправьте в секции Screen подсекции Display, указав вместо разрешения по умолчанию желаемое.
Если у вас все время слетает настройка, то просто автоматизируйте все перечисленные процессы, начиная с пункта 4 (конечно, копировать и разархивировать каждый раз не нужно). То есть инсталлируйте tools, исправляйте XF86Config и запускайте startx в одном стартовом скрипте уровня системы и/или пользователя. Для исправления XF86Config проще всего сохранить правильный вариант и потом просто делать cp.
Хочу обратить ваше внимание на то, что без установленных vmware-tools система тоже понимает какие-то режимы видео, в частности текстовые и графический VGA, так что даже если vmware-tools не устанавливаются на вашей виртуальной системе — это не значит, что она не будет работать. Яркий пример — Plan9, которая прекрасно работает без всяких vmware-tools, чем еще раз подтверждает, что в лаборатории Bell не разучились писать оси.
Настройка Wine
Теперь нам нужен конфигурационный файл с именем "config" в каталоге "~/.wine/". Вы можете просто скопировать его пример из каталога с исходниками:
cp documentation/samples/config ~/.wine/config
Конечно, от количества параметров в конфигурационном файле "config" можно слегка приуныть, но это только на первый взгляд. На самом деле достаточно настроить лишь самые основные пути для вашей системы. Например, вам нужно проверить следующие секции:
[Drive A] "Path" = "/mnt/fd0" "Type" = "floppy" "Label" = "Floppy" "Serial" = "87654321" "Device" = "/dev/fd0"
[Drive C] "Path" = "/c" "Type" = "hd" "Label" = "MS-DOS" "Filesystem" = "win95"
[Drive D] "Path" = "/cdrom" "Type" = "cdrom" "Label" = "CD-Rom" "Filesystem" = "win95" ; убедитесь что устройство указано правильно и имеет корректно ; установленные атрибуты доступа! "Device" = "/dev/cdrom"
Wine пытается эмулировать DOS-раздел и структуру каталогов, поэтому, например, секция которая начинается с "[Drive C]" обозначает соответствие гипотетическому диску С: с вашим Линукс-каталогом, в данном случае "/c".
Далее, таким же образом в секции "[wine]" настраиваются системные папки "windows" и "system":
"Windows" = "c:\\windows" "System" = "c:\\windows\\system" "Temp" = "e:\\" "Path" = "c:\\windows;c:\\windows\\system;e:\\;e:\\test;f:\\" "Profile" = "c:\\windows\\Profiles\\Administrator" "GraphicsDriver" = "x11drv" ; Wine по умолчанию не "понимает" символьные ссылки каталогов для ; Windows-программ. ; Включение этой опции может вызвать сбой в программе, пытающейся ; сделать рекурсивный просмотр всего дерева ; подкаталогов, в случае если символьная ссылка указывает на саму ; себя. ; "ShowDirSymlinks" = "1" "ShellLinker" = "wineshelllink" Обратите внимание на ошибку -- переменная "Temp" указывает на диск [E], но диски определены только до [D]. Тоже самое относится к переменной "Path". Прим.ред.
Сейчас мы создадим основную структуру каталогов Windows (папки "windows", "system") которые указаны в файле "config" в секции "[wine]":
cd /c
mkdir -p windows/system
mkdir -p windows/Start\ Menu/Programs
Секция "[DllOverrides]" в конфигурационном файле управляет библиотеками DLL, которые в Wine являются аналогами библиотек Windows, а также некоторыми родными Windows библиотеками, которые вам могут быть необходимы:
; Будьте предельно осторожны здесь, неверная ; настройка DllOverrides потенциально может ; повредить настройку вашего эмулятора [DllOverrides] "commdlg" = "builtin, native" "comdlg32" = "builtin, native" "ver" = "builtin, native" "version" = "builtin, native" "shell" = "builtin, native" "shell32" = "builtin, native" "shfolder" = "builtin, native" "shlwapi" = "builtin, native" "shdocvw" = "builtin, native" "lzexpand" = "builtin, native" "lz32" = "builtin, native" "comctl32" = "builtin, native" "commctrl" = "builtin, native" "advapi32" = "builtin, native" "crtdll" = "builtin, native" "mpr" = "builtin, native"........ Ну, не всё так страшно. Можно воспользоваться и "родными" для Windows динамическими библиотеками. Например: commdlg, comdlg32, commctrl, comctl32, shell, shell32. Только нужно, чтобы они присутствовали в каталоге, определённом переменной "System" секции [wine]. Общий список, что можно использовать в Wine из библиотек Windows, а что нельзя, вы найдёте в файле документации x1273.html. Прим.ред.
Секция [serialports] отвечает за настройку разных портов и устройств:
Com1=/dev/ttyS0
Com2=/dev/ttyS1
Com3=/dev/modem,38400
Com4=/dev/modem
Внешний вид окон можно поменять в секции [Tweak.Layout].
;; поддерживаются стили 'Win31'(default), 'Win95', 'Win98' ;; но не путайте это с номерной версией Windows, которую выдает Wine: ;; для этого используйте опцию командной строки --winver .
"WineLook" = "Win98" (Не обязательно запускать Wine с ключом --winver, вы можете прописать в ~/.wine/config следующие строки: [Version] ; Имитация версии Windows (win95,win98,winme,nt351,nt40,win2k,winxp,win20,win30,win31) "Windows" = "win98" ; Имитация версии DOS "DOS" = "6.22" Прим.ред.)
Настройка XKB
База данных, необходимых XKB,
Три способа задания полной конфигурации XKB.
Первый способ.
Второй способ.
Третий способ.
Несколько практических рекомендаций.
При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют "базу данных" настроек XKB.
Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp, которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB.
Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.
База данных, необходимых XKB, состоит из 5 компонентов
keycodes
таблицы, которые просто задают символические имена для скан-кодов.
Например
<TLDE>= 49;
<AE01> = 10;
types
описывает типы клавиш. Тип клавиши определяет - как должно меняться значение, выдаваемое клавишей в зависимости от модификаторов (Control, Shift и т.п.). Так, например, "буквенные" клавиши относятся к типу ALPHABETIC, что означает, что они имеют разное значение в зависимости от состояния Shift и CapsLock. А клавиша [Enter] имеет тип - ONE_LEVEL, что означает, что ее значение всегда одно и то же, независимо от состояния модификаторов.
compat (сокращенное от compability)
описывает "поведение" модификаторов. В XKB имеется несколько внутренних переменных, которые, в конечном счете, и определяют - какой символ будет генерироваться при нажатии клавиши в конкретной ситуации. Так вот, в compat как-раз описывается - как должны меняться эти переменные при нажатии различных клавиш-модификаторов. В этом же разделе обычно описывается и поведение "лампочек"-индикаторов на клавиатуре.
symbols
таблицы, в которых для каждого скан-кода (имени скан-кода, определенного в keycodes) перечисляются все значения (symbols), которые должна выдавать клавиша. Естественно, количество различных значений зависит от типа клавиши (котрые описываются в types), а какое именно значение будет выдано в конкретной ситуации, определяется состоянием модификаторов и их "поведением" (которое описывается в compat)
geometry
описывает "геометрию" клавиатуры - то есть расположение клавиш на клавиатуре. Эти описания нужны не столько самому X-серверу, сколько прикладным программам, которые рисуют изображение клавиатуры.
Все эти компоненты разложены по одноименным директориям в директории {XROOT}/lib/X11/xkb (в дальнейшем, я буду обозначать ее {XKBROOT}).
Надо сказать, что в каждой такой директории имеется несколько файлов (иногда, довольно много) с разными настройками. Более того, каждый файл внутри себя может содержать несколько блоков (секций, разделов) типа
тип_компонента "имя_блока" {........};
Поэтому, для того, чтобы выбрать конкретную настройку, ее обычно указывают в виде
имя_файла(имя_блока)
например,
us(pc104)
В тоже время, обычно один из блоков в файле (не обязательно самый первый) помечается флагом default, например
xkb_symbols "pc101" {...}; default xkb_symbols "pc101euro" {...}; xkb_symbols "pc102" {...}; xkb_symbols "pc102euro" {...};
Это означает, что если указать только имя файла, то будет выбран именно этот блок.
Настройки
Настройки устанавливаются с помощью встроенной команды setopt, а удаляются с помощью команды unsetopt.
Назначение
Этот стандарт необходим для того, чтобы:
программное обеспечение легко находило нужные файлы и каталоги, и пользователи легко находили установленные в системе файлы и каталоги.
Мы достигаем этих целей тем, что
формулируем основополагающие принципы, в соответствии с которыми формируется каждая составная часть файловой системы, указываем минимально необходимый список файлов и подкаталогов, перечисляем исключения из основных принципов, и перечисляем особые случаи, возникающие в силу исторических причин.
Настоящий стандарт используется для того, чтобы
независимые поставщики программного обеспечения могли создавать приложения, совместимые со стандартом FHS, и работать с FHS-совместимыми дистрибутивами, создатели операционных систем разрабатывали системы, совместимые с FHS, и пользователи понимали и поддерживали FHS-совместимость систем.
Корневая файловая система должна содержать все, что необходимо для того, чтобы загрузить операционную систему, а также восстановить ее после сбоев и аварийных ситуаций или переустановить систему из резервной копии.
Для загрузки системы необходимо, чтобы в корневом разделе диска было все необходимое для монтирования других файловых систем. Здесь же должны быть необходимые утилиты, файлы конфигурации, информация, необходимая загрузчику, и другие данные, используемые на этапе старта системы. Содержимое каталогов /usr, /opt и /var формируется таким образом, чтобы они могли размещаться в других разделах или даже в файловых системах других типов. Для того, чтобы обеспечить возможность восстановления системы после сбоев, в корневой файловой системе должны присутствовать все утилиты, необходимые опытному администратору для диагностирования проблем и реконструкции системы после любой аварийной ситуации. Для восстановления системы с резервной копии в корневой файловой системе должны иметься все утилиты, необходимые для работы с резервными носителями (дискетами, магнитными лентами и так далее).
Эта директория предназначена для того, чтобы системный администратор мог временно монтировать файловые системы по мере необходимости. Содержимое этого каталога индивидуально для каждой системы и не должно никаким образом влиять на работу запускаемых программ.
Этот каталог не должен использоваться программами инсталляции: для создания и хранения временных файлов на этапе инсталляции ПО должны использоваться временные каталоги, не используемые системой.
Previous: /lib<qual> : Основные разделяемые библиотеки альтернативных форматов (optional)
Next: /opt : Дополнительные пакеты программного обеспечения
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Каталог /opt зарезервирован для установки дополнительных пакетов программного обеспечения.
Пакет, который устанавливается в каталог /opt, должен размещать свои статические файлы в отдельной каталоговой структуре /opt/<package>, где <package> - название соответствующего пакета программного обеспечения.
Домашний каталог пользователя root может быть задан разработчиком или определен при инсталляции системы, но рекомендуемое место его расположения по умолчанию - каталог /root.[примечание 14]
[14]
Если домашний каталог суперпользователя расположен не в корневом разделе диска, необходимо убедиться, что если он не будет найден, то по умолчанию таковым будет назначен каталог /. (Примечание переводчика.
Я не совсем уверен, что вышеприведенное предложение является правильным переводом следующего текста: "If the home directory of the root account is not stored on the root partition it will be necessary to make certain it will default to / if it can not be located.")
Мы не рекомендуем использовать бюджет пользователя root для выполнения задач, которые могут быть выполнены непривилегированным пользователем. Бюджет суперпользователя должен использоваться исключительно для системного администрирования. По этой причине мы не рекомендуем размещать подкаталоги для почты и других приложений в домашнем каталоге пользователя root. Почта для таких администраторских ролей как root, postmaster и webmaster должна пересылаться соответствующему пользователю.
Previous: /opt : Дополнительные пакеты программного обеспечения
Next: /sbin : Системные утилиты
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Утилиты для выполнения задач системного администрирования (и другие команды, используемые только пользователем root) размещаются в /sbin, /usr/sbin и /usr/local/sbin. Каталог /sbin содержит исполняемые файлы, необходимые для загрузки системы и ее восстановления в различных ситуациях (restoring, recovering, and/or repairing the system) и не попавшие в каталог /bin.[примечание 15]
Каталог /tmp должен быть доступен для программ, которым необходимы временные файлы.
Программы не должны предполагать, что какой-либо файл в каталоге /tmp
сохранится при следующем запуске программы.
Этот каталог содержит любые не обязательные системные команды, используемые исключительно системным администратором. Программы для выполнения задач системного администрирования, которые необходимы для восстановления системы, монтирования /usr, или для других самых важных системных задач, должны размещаться в /sbin.[примечание 24]
[24] Локально устанавливаемые программы для системного администрирования должны размещаться в /usr/local/sbin.
Previous: /usr/local : Каталог для локального ПО
Next: /usr/share : Архитектурно-независимые данные
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Каталог /bin содержит команды, которые могут использоваться как системным администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система еще не смонтирована (например, в одно-пользовательском режиме). В этом каталоге могут также содержаться команды, которые используются не напрямую пользователем, а через скрипты.[примечание 1]
Этот каталог содержит все, что необходимо в процессе загрузки, исключая конфигурационные файлы и the map installer. Таким образом, в /boot хранятся данные, которые используются до того, как ядро начинает исполнять программы пользователя. Здесь же находятся резервные сохраненные копии главной загрузочной записи (master boot sectors), sector map files, и другие данные, которые не подлежат прямому редактированию. [примечание 2]
Каталог /dev - это место расположения специальных файлов устройств.
Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы.[прим. 4]
Специфичные для данного хоста конфигурационные файлы для дополнительных пакетов прикладного программного обеспечения должны устанавливаться в каталоги /etc/opt/<package>, где <package> - имя поддерева в /opt, в котором хранятся статические данные для этого пакета.
/etc/X11 - это место размещения всех конфигурационных данных для X11, специфичных для данного хоста. Эта директория необходима для того, чтобы обеспечить локальное управление системой X Window в том случае, когда файловая система /usr монтируется только на чтение.
Здесь устанавливаются исходные конфигурационные файлы, определяющие параметры верхнего уровня SGML- или XML-систем. Файлы с именами *.conf
- это исходные (generic) конфигурационные файлы. Файлы с именами *.cat - это DTD-специфичные централизованные (centralized) каталоги, содержащие ссылки ко всем другим каталогам, необходимым для использования какого-то конкретного DTD. Файл супер-каталога catalog содержит ссылки на все централизованные каталоги.
[4] Размещение командных скриптов запуска может осуществляться в соответствии с моделями, принятыми в System V, BSD, или какими-то другими моделями. Более точные спецификации в этой области могут быть установлены будущими версиями настоящего стандарта.
[5] Системы, в которых используются теневые пароли, создают дополнительные конфигурационные каталоги и файлы в /etc (/etc/shadow и другие), а также размещают программы в каталоге /usr/sbin (useradd, usermod и другие).
[6] В некоторых Linux-системах это может быть символическая ссылка на /proc/mounts; в этом случае исключение не требуется.
[7] /etc/X11/xdm содержит конфигурационные файлы для xdm. В большинстве случаев это файлы, которые раньше размещались в /usr/lib/X11/xdm. Некоторые локальные переменные данные для xdm хранятся в /var/lib/xdm. Мы рекомендуем, чтобы оконные менеджеры с одним единственным конфигурационным файлом, который обычно по умолчанию имеет имя .*wmrc, переименовали его в system.*wmrc (если только нет общепринятого альтернативного названия) и не использовать подкаталог. Любой подкаталог для оконного менеджера должен называться так же, как называется исполняемый файл оконного менеджера.
Previous: /dev : Файлы устройств
Next: /home : Домашние каталоги пользователей (optional)
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Наличие каталога /home - это достаточно стандартное решение, очевидно только, что этот каталог является специфичным для каждого отдельного компьютера.[примечание 8]
[8] Разные люди предпочитают размещать пользовательские каталоги в разных местах. Данная секция описывает только предлагаемые варианты размещения домашних каталогов пользователей; тем не менее мы рекомендуем, чтобы все FHS-совместимые дистрибутивы использовали именно каталог /home как место размещения домашних каталогов.
В маленьких системах каждый пользовательский каталог является одним из многих подкаталогов каталога /home, таких как /home/smith, /home/torvalds, /home/operator и так далее. В больших системах (особенно когда каталоги /home являются разделяемыми между многими хостами посредством NFS) полезно объединить домашние каталоги в группы, введя подкаталоги групп такие как /home/staff, /home/guests, /home/students и так далее. Но как бы то ни было структура домашних каталогов различается от хоста к хосту. Следовательно, никакая программа не должна полагаться на какие-то предположения о структуре домашних каталогов.[примечание 9]
[9] Если вы хотите разыскать домашний каталог пользователя, вы должны использовать библиотечную функцию getpwent(3), а не полагаться на запись в /etc/passwd, потому что информация о пользователях может храниться на удаленных хостах, используя такие системы, как NIS.
Previous: /etc : Специфичная для данного хоста конфигурационная информация
Next: /lib : Основные разделяемые библиотеки и модули ядра
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Каталог /lib содержит те разделяемые библиотеки, которые необходимы для загрузки системы и запуска команд, расположенных в корневой файловой системе, то есть в каталогах /bin и /sbin. [примечание 10]
Каталог /usr - это второй по важности раздел файловой системы. /usr содержит разделяемые данные, предназначенные только для чтения. Это означает, что /usr может быть доступен с различных FHS-совместимых хостов и права записи в него не должно быть. Любая информация, которая является специфичной для конкретного хоста или может изменяться со временем, должна записываться в другое место.
Большие программные пакеты не должны использовать непосредственно подкаталоги каталога /usr в этой иерархии. (Large software packages must not use a direct subdirectory under the /usr hierarchy.)
Previous: /tmp : Временные файлы
Next: Требования
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Эта директория содержит списки слов (словари), используемые в системе; обычно в ней находится только файл words для английского языка, который используется утилитой look(1) и различными программами проверки правописания. Файл words может быть ориентирован либо на американский, либо на британский вариант языка (may use either American or British spelling).
Настоящий раздел детализирует организацию страниц интерактивного руководства man в системе, включая описание каталогов /usr/share/man и /var/cache/man.
Исходной директорией (<mandir>) для интерактивного руководства man в системе является каталог /usr/share/man. Этот каталог содержит информацию о командах и других данных, размещаемых в файловых системах / и /usr.[примечание 26]
Страницы интерактивного руководства хранятся в каталогах <mandir>/<locale>/man<section>/<arch>. Разъяснения того, что имеется в виду под <mandir>, <locale>, <section>
и <arch> даются ниже.
Страницы интерактивного руководства man разбиты на следующие секции:
man1: Пользовательские программы
В этой секции содержатся описания общедоступных команд. Здесь расположена большая часть необходимой пользователям документации к программам.
man2: Системные вызовы
Эта секция описывает все системные вызовы (запросы к ядру на выполнение каких-то операций).
man3: Библиотеки функций и подпрограмм
В секции 3 описываются библиотеки программных процедур, которые не являются прямыми вызовами сервисов ядра. Эта секция, как и секция 2, представляет интерес только для программистов.
man4: Специальные файлы
Секция 4 описывает специальные файлы устройств, функции соответствующих драйверов и средства сетевой поддержки, предоставляемые системой. Обычно в эту секцию включается описание файлов устройств, находящихся в каталоге /dev, и интерфейса ядра для средств поддержки сетевых протоколов.
man5: Форматы файлов
Форматы многих файлов данных документированы в секции 5. Речь идет о различных подключаемых файлах, файлах вывода программ, системных файлах и так далее.
man6: Игры
В эту секцию включена документация к играм, демо и другим тривиальным программам. Разные люди могут иметь разные мнения о том, насколько важно то, что размещено здесь.
man7: Разное
Страницы руководства, которые трудно отнести к какому-то иному разделу, размещаются в секции 7. Здесь вы найдете, к примеру, описание troff и других средств для обработки текста.
man8: Системное администрирование
Программы, используемые системным администратором для выполнения системных операций и поддержки работоспособности системы документированы в этой секции. Некоторые из этих программ бывают полезны иногда и обычным пользователям.
Каталоговая структура /usr/share предназначена для всех файлов, которые предназначены только для чтения и не зависят от архитектуры. [примечание 25]
Эта каталоговая структура предназначена для того, чтобы хранить файлы, используемые всеми архитектурными платформами данной ОС. Так, например, компьютеры на платформах i386, Alpha и PPC могут поддерживать один общий каталог /usr/share, который монтируется на отдельных компьютерах. Заметим, однако, что /usr/share обычно не предназначен для того, чтобы быть разделяемым различными операционными системами или различными версиями одной и той же ОС (or by different releases of the same OS).
Любая программа или пакет, который содержит или требует данных, не подлежащих модификации, должны хранить эти данные в каталоге /usr/share (или /usr/local/share, если пакет установлен локально). Рекомендуется использовать для этих целей подкаталоги каталога /usr/share.
Данные игровых программ, сохраняемые в /usr/share/games, должны быть чисто статическими данными. Любые модифицируемые файлы, такие как файлы результатов игр (score files), протоколы игр и так далее, должны размещаться в каталоге /var/games.
НЕКОТОРЫЕ ЗАМЕЧАНИЯ О ВИРТУАЛЬНОМ ХОСТИНГЕ
Как показано в данной статье, доступ к каталогам при виртуальном хостинге осуществляется на основе параметров «имя пользователя/пароль». Все пользователи оповещаются о том, с каким хостом они будут работать. Кроме того, для упрощения доступа мы добавляем в DNS запись ftpadmin.their-domain.com, поскольку размещаем у себя и пользовательские DNS.
В каждом домене было бы хорошо использовать отдельные базы данных аутентификации. В большинстве случаев не получается выделить каждому сайту Web отдельный IP-адрес, более подходящим кажется применение основанного на имени (Named-Based) виртуального хостинга Apache, что дает возможность пользователям иметь свои, отдельные анонимные ftp-сайты, служащие для загрузки информации (но работающие физически на том же сервере).
К сожалению, такая возможность не поддерживается протоколом ftp, в котором отсутствует эквивалент системы Host-Header протокола HTTP. Таким образом, сервер не способен определить, в какой конкретный домен пользователь хочет получить доступ, если домены используют один и тот же IP-адрес.
Тристан Гривс работает системным инженером в Argogroup и консультирует клиентов в области совместимости устройств беспроводного Internet. С ним можно связаться по адресу: tristan@extricate.org.
Немного о "внутренностях" XKB
Основные термины - коды и символы.
Две части XKB и "проблема совместимости".
Таблица символов
Таблица действий.
Состояние XKB: номер группы.
Метод выравнивания номера группы.
Модификаторы.
Состояние XKB: модификаторы.
Вычисление "уровня" (shift level). Типы клавиш.
Какая еще информация хранится для каждого скан-кода.
Метод "выравнивания" номера группы.
"Поведение" клавиши.
Набор "исключений".
Реальный и виртуальный модификаторы.
Состояние XKB: Набор управляющих флагов (XKB Controls).
Индикаторы.
Таблица "совместимости".
Радио-группы. (Radio Groups)
Перекрытия (Overlay).
AccessX.Дополнительные услуги для людей с ограниченными физическими возможностями.
Эмуляция "мыши".
Расширенные возможности "пищалки" (Bell).
Немного теории
То, что относится к общим принципам загрузки, описано в статье "Пишем игрушечную ОС" (раздел 1.2 "Наша роль."), поэтому повторяться не имеет смысла. На чём следует остановить своё внимание, так это на списке доступных в этот момент прерываний[6] . Прерывания (interrupts) являются одним из краеугольных камней функционирования ПК. Это набор подпрограмм, "прошитых" в BIOS'е и отвечающих за работу переферии. Например, прерывание 0x13 реализует дисковые операции, 0x10 работу с видеоадаптером, 0x16 работу с клавиатурой (пользовательский уровень, т.к. существует ещё прерывание 0x9), 0x8 -- обработка таймера (автоматически вызывается каждые 1/18.2 секунды) и т.д. При этом физически эти подпрограммы расположены не только на материнской плате: например, та часть BIOS'а, что отвечает за работу с видео находится на видеокарте. Вызов нужной функции прерывания осуществляется при помощи указания определённых значений в регистрах процессора. Например, поместив в регистр AH значение 0x0 и вызвав прерывание работы с клавиатурой (int 0x16), мы заставим компьютер ожидать нажатия любой клавиши. За исключением Shift, Ctrl и подобных им -- эти обрабатываются иначе.
Итак, прерывания. В отличие от примера в статье "Пишем игрушечную ОС", мы не будем писать напрямую в видеопамять, -- этим займётся соответствующая функция прерывания 0x10. Кроме этого, мы воспользуемся ещё двумя прерываниями: одно будет обрабатывать ввод с клавиатуры (0x16), другое -- выполнять дисковые операции (0x13).
Несколько мелких полезных программок
Здесь собраны программки которые я написал, не найдя ничего подходящего из имеющихся в системе.
Я не ставил себе задачу написать полноценные утилиты, поэтому программы очень простые и служат скорее примерами использования "хитрых" функций syscons, чем готовыми инструментами.
Несколько общих замечаний
Установки шрифтов, таблицы перекодировки, типа курсора и "время простоя" действуют на все "виртуальные терминалы". Поэтому, совершенно не важно - с какого из этих терминалов вы их будете менять.
А "режим отображения" и цвета могут быть разными на разных терминалах. Поэтому, изменение этих режимов действуют только на текущий "виртуальный терминал".
( В старых версиях syscons есть "глюк" с цветом "бордюра". Он устанавливается индивидуально для каждого виртуального терминала, но syscons "забывает" его менять при переключении между терминалами. Выглядит это так, как будто эта установка действует на все виртуальные терминалы.)
Однако, если вы хотите поменять эти параметры для другого терминала или, например, написать "скрипт" который выполнит нужные установки для всех доступных "виртуальных терминалов", могу дать небольшую подсказку.
Установку "режима отображения" vidcontrol выполняет для того терминала, который является для него stdin ("входной поток"). А вот цвета меняются с помощью вывода соответствующих команд в stderr ("выходной поток для сообщений об ошибках").
В обычном случае и stdin'ом, и stderr'ом является текущий терминал. Но и тот и другой "поток" можно перенаправить.
Например, для изменения "режима отображения" на терминале /dev/ttyv0
(если вы находитесь в другом терминале), можно выполнить команду
vidcontrol VGA_80x30 < /dev/ttyv0
а для изменения цветов на том же терминале
vidcontrol green red > /dev/ttyv0 2>&1
Естественно, если вам надо поменять свойства для нескольких терминалов, придется выполнить соответствующую команду несколько раз, меняя номер терминала.
Иван Паскаль pascal@tsu.ru
Несколько практических рекомендаций
Небольшое отступление - "о клавише - переключателе рус/лат".
Когда был написан первый вариант этих рекомендаций, сама раскладка "русской" клавиатуры (symbols/ru) включала в себя и "переключатель групп" - рус/лат, "подвешенный" на клавишу CapsLock. С одной стороны это было удобно - в простейшем случае достаточно было выбрать "русскую раскладку" и вы автоматически получали и клавишу для переключения "на русский". Но, с другой стороны, это было неудобно для тех, кто предпочитает в качестве переключателя рус/лат другую клавишу (или комбинацию клавиш). Конечно, выбрать другой переключатель не составляло труда, но при этом оставался и переключатель на CapsLock, что многим не нравилось. Для того, чтобы убрать его, надо было "залезть" в соответствующий файл и вручную подправлять соответствующую раскладку.
В конце концов (начиная с версии 3.3.4) сами разработчики XFree убрали этот "переключатель" из "русской раскладки". Но, в связи с этим появились и некторые проблемы - теперь клавишу-переключатель надо явно "заказывать" при конфигурировании XKB. Что я и попытся отразить в своих рекомендациях.
Итак...
Несколько примеров изменения назначения клавиш
Переключатель "альтернативной клавиатуры" (Рус/Лат).
Клавиша Meta.
"Комбинация из трех пальцев" - Ctrl+Alt+Del.
Network
Документация по конфигурации сети (NET-4)
NET-3-HOWTO (может есть NET-4?), август 1998 Network Adiministrators Guide - NAG (1996) Управление параметрами стека через /proc/sys/net/ipv4 (посмотреть - cat имя, изменить echo параметр... > имя). Смысл имен описан в ip-sysctl.txt. В частности необходимо (для установки во время загрузки надо поменять /etc/rc.d/init.d/network)
изменить ip_local_port_range с "1024 4999" на "32768 61000" (echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range). Из этого интервала берутся номера локальных портов для соединения с удаленными серверами. Так как мой firewall глушит все соединения идущие снаружи на внутреннюю сеть и направленные на порты до 32768, считая их привилегированными, то надо вывести их выше. включить ip forwarding (необходим для transparent proxy, сбрасывает остальные параметры стека в соответствии с RFC 1122 для хостов и RFC 1812 для маршрутизаторов): echo 1 > /proc/sys/net/ipv4/ip_forward (во время загрузки устанавливается в зависимости от значения переменной FORWARD_IPV4 в /etc/sysconfig/network). включить незбежную дефрагментацию:
echo 1 > /proc/sys/net/ipv4/ip_always_defrag # в ядре 2.2.12 указывается во время конфигурацииВ RH 6.2 для управления параметрами стека (и любыми другими переменными из /proc/sys) используется
sysctl -p /etc/sysctl.conf
в котором записаны операторы присваивания соответствующим переменным (имена переменных совпадают с именами файлов из /proc/sys с заменой слешей на точки):
net.ipv4.ip_local_port_range = "32768 61000" net.ipv4.ip_forward = 1 net.ipv4.ip_always_defrag = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.all.log_martians = 1 (сбрасывать пакеты с невозможными адресами в журнал) net.ipv4.conf.all.accept_source_route = 0 (запретить source route)
Однако похоже, что sysctl не работает с двумя параметрами (ip_local_port_range), так что этот параметр приходится устанавливать руками
Несколько IP-адресов на одном интерфейсе (aliasing):
ядро должно быть собрано с поддержкой alias (CONFIG_IP_ALIAS=y) после конфигурации основного адреса на интерфейсе в /etc/rc.d/init.d/network (пусть eth0):
ifconfig eth0:0 дополнительный-адрес netmask маска-дополнительной-сетки up в документации предлагается определить маршрут для этой сетки
route add -net дополнительная-сетка netmask маска-дополнительной-сетки eth0:0
но он устанавливается сам собой
Неудачная попытка
Утилита Recover предназначена для восстановления единичных файлов. Поскольку мы внезапно потеряли сотни файлов, мы думаем, что эта не та утилита, с которой стоит начинать попытки восстановления. Наиболее подходящее решение -- это использование патча Вернера для debugfs; у нас уже есть копия поврежденной файловой системы на машине с архитектурой i386, а программу можно загрузить с twerner.debian.org:
artime@bell$ ./debugfs fishback.raw
debugfs> restore
debugfs> quit
artime@bell$ mkdir mnt
artime@bell$ mount -t ext2 -o loop fishback.raw mnt
artime@bell$ ls -l mnt
Файлов нет! Похоже, что мы размонтировали /dev/sda8 слишком поздно. А как указано на странице Вернера, его утилита позволяет восстанавливать файлы, которые все еще имеют имя.
News (USENET) и списки рассылки
news:fido.ru.linux news:fido.ru.unix.linux news://news.redhat.com/redhat.* http://www.redhat.com/mailing-lists/
news:comp.os.linux news:comp.os.linux.* архивы списков рассылки Copyright © 1996-2001 Sergey E. Bogomolov
Newsys
В один прекрасный момент вы вдруг обнаруживаете, что ваша операционная система несколько устарела. Тогда вы отрываете от сердца десять тысяч и бежите покупать новый дистрибутив. Прижав к сердцу дорогие коробочки с дисками, вы несетесь домой в предвкушении тех красивостей и полезностей, которые вам предстоит увидеть. На всех парах вы подбегаете к компьютеру и... тут вы начинаете понимать, что вам предстоит сносить вашу гиперудобно настроенную под вас систему и снова настраивать свежепоставленную. Но зачем? Ведь можно же как-то сохранить то, чего вы достигали путем упорного чтения manual'ов, HOW-TO. Но как? В этой статье я попробую описать, как наилучшим образом полностью (подчеркиваю это слово) обновить систему, но сохранить при этом все настройки. Т.е. в статье не пойдет речь, как поставить пару новых пакетов и просто обновить один какой-то продукт. |
Нить и задача
Нити, т. е. параллельно выполняемые части одной программы, в стандартной библиотеке поддержки многонитевых программ Linux реализованы просто как процессы, порожденные с указанием флага CLONE_VM, и с точки зрения ядра системы ничем не отличаются от любых других процессов. Однако в некоторых альтернативных реализациях многонитевых библиотек дело обстоит иначе.
Помимо процессов описанного выше вида бывают еще "ущербные", порождаемые с помощью функции kernel_thread для внутренних системных нужд. У них нет параметров командной строки, как правило, они не имеют открытых файлов и т. д. Поскольку, несмотря на свою ущербность, эти процессы все равно фигурируют в списке задач, в литературе иногда различают полноценные процессы, порожденные из "пространства пользователя" (userspace), и задачи, т. е. все процессы, включая внутренние процессы ядра.
-> (November )
Incorporated some information from Matthieu Peeters and John Fremlin on kernel deamons and the /proc filesystem.
Новые возможности NTFS позволяют
NTFS, собственная файловая система Windows 2000, непрерывно совершенствовалась со времени выпуска Windows NT 3.1. Она изначально обладала возможностями высокоуровневой файловой системы, но в Windows 2000 появились важные изменения, которые были сделаны в связи с необходимостью решать проблемы, возникающие на корпоративном уровне при переходе организаций на NT. Например, благодаря консолидации информации о безопасности повышается эффективность повседневной работы с NTFS; другие функции, такие, как управление квотами, должны использоваться в прикладных программах или активизироваться и применяться администратором.
На этот раз я расскажу о возможностях версии NTFS 5.0 (NTFS5), вошедшей в состав Windows 2000, и о влиянии новых функций на поведение и формат диска NTFS. Приступая к чтению статьи, важно четко понимать основные принципы построения дисковой структуры NTFS, а также иметь представление о главной таблице файлов (Master File Table, MFT), типах атрибутов и резидентных и нерезидентных атрибутах. Подробно основы NTFS описаны в статье Шона Дейли (Windows 2000 Magazine/RE ?4, 2000). Во врезке рассказано о некоторых инструментах просмотра и источниках информации об элементах внутренней структуры данных NTFS.
Новый тип для клавиши Enter
Рассмотрим пример - для чего может понадобится новый тип. И что нужно сделать.
Итак. Проблема...
"По умолчанию" клавиша Enter относится к типу ONE_LEVEL, то есть выдает всегда один и тот же код (CR) при любых модификаторах.
Я же привык, что в "консольном режиме" эта же клавиша, нажатая вместе с Control меняет свое значение на LF (во всяком случае, так во FreeBSD).
Для того, чтобы и в XKB она вела себя так же, можно описать новый тип (сделаем для этого файл my.types и не забудем "приплюсовать" его в строчку, указывающую на файлы для xkb_types).
type "CTRL_DEPEND" { modifiers = Control; map[None] = Level1; map[Control] = Level2; level_name[level1] = "Base"; level_name[level2] = "Control"; };
(В общем-то, имена уровней - level_name для работы XKB не нужны, но X-сервер очень не любит "неполные" определения.)
Cоответственно, в описании xkb_symbols надо изменить определение для клавиши Enter (это скан-код <RTRN>).
Сделаем файлик my.symbols (не забудьте "приплюсовать" его куда надо) и поместим туда наше новое определение.
"Классическое" определение для <RTRN> (его можно найти найти, например, в файле symbols/us) выглядит как
key <RTRN> { [Return] };
Нам надо указать, что эта клавиша имеет тип "CTRL_DEPEND", и добавить значение для появившегося второго "уровня" - Linefeed .
key <RTRN> { type="CTRL_DEPEND", [ Return, Linefeed ] };
Осталось перегрузить конфигурацию командой xkbcomp. И убедиться, что все работает.
Надо заметить, что уже запущенные приложения (например - xterm) этих изменений не почувствуют, поскольку все описания типов используются библиотекой Xlib и загружаются при старте приложения. Поэтому запущенные приложения не заметят, что появился новый тип.
Но все, что запущено после пререзагрузки конфигурации, должно почувствовать изменения.
А теперь настало время сказать, что для данной задачи, новый тип не требуется.
( Я же предупреждал, что мои примеры не являются "хорошим" или "правильным" решением :-).
Обычно в загружаемых "конфигах" уже есть подходящий тип - "PC_BREAK". Он используется только для клавиши Break, но ничто не мешает "приписать" его и клавише Enter.
Поэтому достаточно составить только новое определение для скан-кода <RTRN>.
key <RTRN> { type="PC_BREAK", [ Return, Linefeed ] };
Иван Паскаль pascal@tsu.ru
NT и Linux: загрузчик NT Loader
Теперь обратимся непосредственно к процессу установки Linux. Будем предполагать, что Windows NT/Windows 2000 установлена в разделе /dev/hda2.
Изготовим загрузочные дискеты для загрузки и восстановления NT. Для создания загрузочной дискеты достаточно скопировать на отформатированную дискету файлы ntldr, ntdetect.com и boot.ini из корневого каталога загрузочного диска. Программу создания дискеты аварийного восстановления для Windows 2000 можно запустить из панели управления (пункт ), а в Windows NT 4.0 найдите ее с помощью поиска в справочной системе (). С помощью программы PartitionMagic освободим часть дискового пространства и создадим на свободном месте раздел типа ext2 (файловая система Linux) и раздел подкачки. Проведем процедуру инсталляции Linux. В процессе установки необходимо изготовить загрузочную дискету. Этот диск понадобится нам на одном из следующих этапов. Кроме того, в последующем можно будет просто каждый раз, когда надо загрузить Linux, использовать эту дискету. Это тоже вариант загрузки, тем более что, в отличие от DOS, после загрузки система о дискете уже не вспоминает. Установим LILO не в главный загрузочный сектор диска, а в первый сектор того раздела, который отведен для Linux. Для определенности предположим, что Linux устанавливается в первый сектор раздела hda3. В принципе, если установить LILO в MBR, то и это не смертельно. Конечный результат (загрузка через NT Loader) может быть получен и в этом случае, но усилий потребуется больше, так как формат главного загрузочного сектора, создаваемого LILO и Windows, различен. Поэтому, если поставить LILO в MBR, придется потом восстанавливать MBR от Windows. После завершения инсталляции загрузим Linux с помощью загрузочной дискеты. Скопируем загрузочный сектор Linux в файл; он понадобится для того, чтобы загрузчик Windows NT мог запускать Linux. Для этого надо смонтировать чистую дискету, например:
[root]# mount -t vfat /dev/fda1 /mnt/floppy
перейти в каталог /mnt/floppy
[root]# cd /mnt/floppy
и выполнить команду:
[root]# dd if=/dev/hda3 of= /mnt/floppy/bootsect .lnx bs=512 count=1,
которая позволяет записать содержимое загрузочного сектора диска /dev/hda3 в файл /mnt/floppy/bootsect.lnx.
Если раздел hda1 сформатирован в системе FAT, можно сразу создать файл bootsect.lnx в корневом каталоге диска C:.
Далее необходимо перезагрузиться, чтобы запустить Windows NT, для чего в Linux следует выполнить команду:
[root]# shutdown -h now
Поскольку главная загрузочная запись не была изменена, должна загрузиться NT. После завершения загрузки необходимо перенести файл /mnt/floppy/bootsect.lnx в корневой каталог диска C:, точнее, в корневой каталог того раздела, с которого загружается NT. В зависимости от того, как устанавливалась NT, это может быть как раздел FAT16, так и раздел NTFS. Признаком нужного раздела является наличие в нем файлов ntldr и boot.ini (эти файлы могут быть скрытыми). Файлу bootsect.lnx можно присвоить атрибут read-only.
После завершения загрузки NT найдем файл boot.ini в корневом каталоге и добавим в него строчку:
C:\bootsect.lnx=
Осталось перезапустить компьютер еще раз, причем при загрузке уже будет возможность выбора. Если выбрать пункт Linux, будет запущен LILO, который и загрузит Linux.
Отдельно рассмотрим случай, когда по ошибке или намеренно LILO был установлен в MBR. В этом случае загрузочная запись Windows NT будет затерта, сделав невозможной загрузку NT. Если есть намерение пользоваться загрузчиком OS Loader от NT, а не LILO, последовательность действий несколько изменяется: вместо шага 6 необходимо проделать приведенную ниже последовательность действий.
Загрузить Windows NT/2000 с загрузочных дискет. При этом необходимо выбрать в меню загрузчика пункт Recover, а затем - режим Command mode. При запросе следует зарегистрироваться с учетной записью администратора системы. Восстановить главную загрузочную запись диска, например, при помощи команды fdisk /mbr. (У меня это получалось, хотя в некоторых статьях и утверждается, что восстановить таким образом MBR удается не всегда.) В Windows 2000 имеются специальные команды fixboot и fixmbr; они запускаются из консоли восстановления. Если выполнить их обе в указанном порядке, Windows 2000 вновь будет загружаться нормально. Перезапустить компьютер с загрузочной дискеты Linux и зарегистрироваться в системе с полномочиями root. Ввести команду cd /etc и открыть файл lilo.conf. В начале файла есть ссылка на загрузочный раздел по умолчанию, например, /dev/hda. С помощью любого редактора следует изменить это значение на те диск и раздел, куда была установлена Linux. Если она установлена в раздел /dev/hdc1, именно это и следует записать, т.е. поменять /dev/hda на /dev/hdc1. Если вы не помните, куда именно установлена Linux, найдите переменную image файла /etc/lilo.conf: в ней хранится нужное значение. Выполнить команду /etc/lilo (без аргументов) для записи загрузчика в раздел /dev/hdc1. В ответ будет выдано предупреждение о том, что раздел не является первым на диске; именно это и нужно, чтобы загрузочная запись Windows 2000 осталась в целости и сохранности.
После этого следует выполнить шаги 6-8 приведенного ранее алгоритма.
Заметим, что эта сложная последовательность операций с двумя лишними перезагрузками потребовалась только для того, чтобы перенести загрузочный сектор Linux из MBR в первый сектор раздела, отведенного для Linux, и восстановить MBR от Windows.
Numberpl
number.pl
от Landon Curt Noll. Email: "number-mail at asthe dot com"
Приготовьтесь к унижению : Этот человек имеет больше достоинств (игра слов: degree - градус или достоинство) чем термометр :-). Резюме любого человека будет выглядеть просто убого в сравнении с резюме Mr. Noll.
number.pl это наиболее полное скриптовое решение проблемы "цифры в слова", которое я когда либо видел. Конечно, вы не будете использовать его каждый день (если не прицепите его в вашему списку чеков), но это настолько красивый кусочек perl, что я просто обязан включить его. Я обычно бросаю написание на самом большом чеке, который может написать покупатель в моем представлении. Но не Mr. Noll:
[paul@oremus paul]$ number.pl 123456789123456789.12 one hundred twenty three quadrillion, four hundred fifty six trillion, seven hundred eighty nine billion, one hundred twenty three million, four hundred fifty six thousand, seven hundred eighty nine point one two
Надо будет её взломать :)
О qlogin
qlogin в вашей системе нет, поэтому вам потребуется ее установить. Скачайте ее с ibiblio.org и выполните простые инструкции по установке. Как вы обнаружите, дополнительным условием будет расширение Perl под названием User::Utmp, которого, возможно, также нет в вашей системе, поэтому вам потребуется выполнить инструкциям по его получению и установке.
qlogin написан на Perl и достаточно прост. Поэтому вы сами сможете увидеть шаги, выполняемые при регистрации пользователя. И вы также можете изменять программу для подгонки к своим собственным потребностям.
Одна хорошая вещь в qlogin в том, что она настолько самостоятельная, что даже не требует конфигурационных файлов. Вы можете сообщить все, что ей необходимо знать для вашей регистрации, параметрами командной строки. Например, вы можете обойти свой файл /etc/passwd или зарегистрировать пользователя, которого нет даже в /etc/passwd. Вы контролируете все.
Давайте взгянем на опции qlogin: --command команда (один из распространненых способов назвать программу плюс ее аргументы) для запуска после выхода qlogin. Обычно /bin/bash. --arg0 Аргумент нулевого значения для программы, которая выполняется после выхода qlogin'а; то что выводится командой ps. --uid цифровой id пользователя процесса. --gid цифровой id группы процесса --homedir домашний каталог и начальный текущий рабочий каталог процесса. --utmp/--noutmp определяет, будет ли qlogin регистрировать сессию в базе данных пользовательских счетов (файл utmp).
А аргументы qlogin задают терминальное устройство, используемое процессом.
Все детали про применению qlogin -- в документации, которая с ним поставляется.
О сигналах
Постойте, но ведь приглашение командного интерпретатора появилось и тогда, когда мы нажали <Ctrl>+Z, хотя программы не заканчивали работу, и, следовательно, вызов wait* не мог вернуть управление! Выдача сообщения Stopped (процесс остановлен) и затем приглашения к вводу была реакцией на сигнал CHLD, который ядро посылает при нажатии <Ctrl>+Z предкам - в данном случае одному предку - процессов, работающих с терминалом (сами процессы получают свой сигнал).
Сигналы посылаются одними процессами другим с помощью команды, которая носит устрашающее название kill, хотя в общем случае никого не убивает. Все зависит от конкретного сигнала, и практически любой сигнал при необходимости может быть процессом проигнорирован. Исключение составляют KILL, который "без разговоров" уничтожает процесс, и STOP, который его аналогичным образом останавливает.
Правила о том, какой процесс какому имеет право послать сигнал, достаточно сложны. Суперпользователь, очевидно, может посылать сигналы любым процессам, а обычный пользователь - только своим, но здесь есть масса тонкостей: например, нельзя послать сигнал CONT (продолжить выполнение остановленного процесса) своему же процессу, запущенному в другой сессии.
Работа с нитями требует особой техники, поскольку одни сигналы должны "доводиться до сведения" всех нитей, а другие - посылаться индивидуально. В Linux 2.2 это делалось путем довольно хитрых манипуляций со специальной нитью, единственным назначением которой было управление другими нитями. В версии 2.4 ядро может следить за нитями за счет нового флага CLONE_PARENT (таким образом, если одна нить породит другую и закончит работу, то порожденная нить не останется "сиротой") и нескольких специальных правил доставки сигналов, так что надобность в специальной нити отпала.
О взаимодействии Linux и Windows
Взаимодействие это имеет два аспекта - на уровне данных и на уровне программ.
Взаимодействие на уровне данных = это просто возможность прочитать из Linux диск (или дисковый раздел) с Windows (любой версии). Что труда не составляет. Для этого нужно только при его (Linux) инсталляции установить поддержку соответствующих файловых систем - FAT, VFAT, FAT32 или NTFS (правда, поддержка последней - ограничена). Ну а далее - возможны варианты.
Можно при необходимости явным образом монтировать дисковый раздел с Windows командой mount dev/had# /точка монтирования
где # - номер раздела (который будет обязательно первым при любом Windows, кроме NT и 2000).
Еще Windows-раздел может монтироваться автоматически при загрузке. Проще всего сделать это на этапе разбиения диска на разделы, предшествующем инсталляции. Для этого достаточно (после создания Linux-разделов) указать точку монтирования для существовавшего ранее Windows-раздела (hda1), например, /mnt/win.
Поступив таким образом, можно в дальнейшем без проблем считывать и записывать данные в Windows-разделе, не выходя за пределы Linux. Правда, столь же легко их и уничтожить знаменитой командой rm с параметром -R. Причем безвозвратно: утилиты DOS-Windows типа UNDELETE или UNERASE в этом случае не помогут.
А потому лучше все же для обмена данными использовать специальный раздел диска под FAT16 или FAT32. Если такого раздела не было предусмотрено перед установкой Windows, его можно создать при инсталляции Linux, воспользовавшись ее программой fdisk - она позволяет создавать разделы для любых поддерживаемых Linux файловых систем. И затем определить для нее точку монтирования.
Правда, ни DOS, ни Windows не поймут, что раздел, созданный fdisk для Linux - их родной FAT16 или FAT32. Но теперь ничего не мешает запустить уже FDISK для DOS/Windows - и превратить этот раздел в окончательный FATхх. Правда, путем уничтожения (FDISK для DOS-Windows определит его как non-DOS partition) и создания на его месте нового. Главное, точка монтирования для него в дереве каталогов Linux уже будет существовать.
Впрочем, если автоматическое монтирование FATxx-раздела при инсталляции Linux определено не было, ничего страшного - эту процедуру можно проделать в любой момент. Путем редактирования файла /etc/fstab, отвечающего за монтирование файловых систем. Для доступа к Windows-разделу достаточно вписать в него строчку вроде /dev/hda1 /mnt/win auto defaults 0 0
Теперь можно не только считывать данные Windows-программ, но и записывать результаты работы в Linux для доступа к ним из Windows. Правда, это верно только в отношении Windows 3.1/95/98. Для Windows NT или 2000, если пользоваться их родной NTFS, возможен только режим чтения. И тип файловой системы в файле fstab следует указывать явно - ntfs (вместо auto).
Кроме того, при копировании из Linux-раздела в FATxx раздел существует еще несколько особенностей. Так, если данные копируются в раздел с FAT16, все имена файлов будут приведены к DOS-стандарту 8.3. И принудительно переведены в верхний регистр. А в случае раздела FAT32 происходит еще забавнее: имена Linux-файлов, случайно совпадающие с форматом DOS (8.3), будут преобразованы в верхний регистр, вне зависимости от того, в каком регистре они были набраны в оригинале. Тогда как имена файлов, содержащие более восьми знаков в имени - сохранят изначальное различие регистров. О причинах этого явления можно прочитать в цитировавшейся ранее статье Виктора Хименко.
Кроме этого, существует пакет mtools, специально предназначенный для работы с файловой системой DOS. Он был создан для работы с дискетами, отформатированными в этой операционной системе. Конечно, из Linux можно смонтировать дискету в DOS-формате и командой cp (или через любой файловый менеджер) записать на нее файлы. Однако в ряде случаев это приводит к ошибкам. Правда, я с проблемами считывания записанных таким образом дискет в DOS/Windows не сталкивался. Но вот записать на нее подчас уже ничего не удается, и всякого рода DiskDoctor'ами она не лечится.
Основу пакета mtools составляет серия команд гибридного вида и синтаксиса. Так, команды cp и copy (Linux и DOS, соответственно) подменяются командой mcopy, используемой, для примера, таким образом - mcopy $HOME/file a:file
где file - имя копируемого файла, причем обязательно в стандарте DOS (то есть 8.3). Работает эта команда с одиночными файлами. Кроме того, существуют команды mread (для копирования файлов DOS в Linux) и mwrite (для копирования файлов Linux в DOS). Они позволяют оперировать группами файлов (но, насколько я понял, не подкаталогами).
В пакете mtools имеются и другие средства работы с файлами, аналогичные таком DOS. Но подробно я на них останавливаться не буду: все же применение этого пакета, при засилии Windows 9x с ее длинными именами, достаточно ограничено.
Зададимся другим вопросом - а решается ли обратная задача, считывание данных из Linux-разделов под Windows? До недавнего времени ответ на него был отрицательным. Поскольку Windows никаких файловых систем, кроме своих собственных (да и то не всех, и не всегда), признавать не желает. Но ныне, как говорится в народе, наметились положительные тенденции в этом направлении. Впрочем, отнюдь не благодаря Windows и ее создателям, а, скорее, вопреки их усилиям.
Перво-наперво, появилась появилась программа Explore2fs Джона Ньюбайджина (John Newbigin, http://uranus.it.swin.edu.au/~jn/linux). Это zip-архив размером чуть больше 300 килобайт, доступный, в частности, на Linux.Freeware.ru (http://linux.freeware.ru). Программа бесплатная (на условиях GPL), позиционируется как экспериментальная версия, однако - почти работоспособна.
Программа Explore2fs не требует инсталляции. После распаковки архива в ней обнаруживается исполнимый модуль, dll-файл, ReadMe, условия копирования и список изменений. Запуск программы приводит к появлению окна, подобного Windows Explorer. В левой его части - обнаруженный Linux-раздел (с префиксом по умолчанию - hd, но, вероятно, можно установить и sd - за отсутствием SCSI-диска проверить не смог), разворачиваемый в дерево каталогов; в правой части - список файлов текущего каталога, настраиваемый так же, как в Windows Explorer (в виде иконок, короткого или длинного списка).
А дальше - все просто. Выбирается требуемый файл или каталог, щелчок правой клавиши мыши - и можно просмотреть его свойства, либо сразу экспортировать в Windows-раздел. Для чего указывается путь. Все. Файл или каталог (включая подкаталоги любой степени вложенности) скопирован и доступен под Windows. Разумеется, те же действия можно проделать и через меню.
Программа не может похвастаться ни рекордным быстродействием, ни чрезмерной стабильностью. Кроме того, если у вас имеется несколько разделов ext2fs, можно только просматривать их содержимое, но скопировать что-либо в Windows-раздел не удается.
С ext2fs разделом можно работать только в режиме чтения. Правда, в меню File присутствуют такие пункты, как New Folder, Rename, Delete, Save as, но работают они только в пределах Windows-раздела. Правда, их присутствие (в неактивизированном виде) и в контекстном меню показывает, что автор предполагает в будущих версиях ввести и режим записи в Linux-разделы из Windows. Поживем - увидим.
В существующей версии настройки (пункт меню View - Options) минимальны. Можно, как говорилось, изменить префикс дискового раздела, задать программу для просмотра текстовых файлов, определить доступ к файлам по паролю (для пользователя и группы), и еще несколько мелочей. Однако и это лучше, чем ничего.
Кроме того, недавно появился пакет ltools, предназначенный для работы с файлами Linux из DOS/Windows. Как можно понять из названия, он задуман как инструмент, параллельный mtools, и обеспечивающий выполнение тех же функций. Это серия утилит командной строки, с помощью которых можно, например, копировать файлы из раздела ext2fs в раздел FATxx, причем и в том случае, если первый - не единственный в системе, в отличие от Explore2fs.
Второй аспект рассматриваемого вопроса - взаимодействие на уровне программ. Необходимость в этом может возникнуть даже в том случае, если вы не используете ни одной программы под DOS/Windows. Например, при обновлении BIOS системной платы: все известные мне производители выпускают утилиты такого назначения только под чистый DOS (хотя, говорят, на современных "мамах" есть средства перепрошивки BIOS без загрузки какой-либо операционки вообще, но мне таких пока видеть не посчастливилось).
Так что если появилась настоятельная потребность сменить BIOS (например, при установке нового большого винчестера в систему, BIOS которой таковых не поддерживает), DOS или Windows истреблены как класс при установке (не зря же сжигали корабли, мосты и прочие транспортные средства!), и под рукой случайно не завалялось хоть какой DOS-машины... Вот тогда-то без запуска DOS-программы (хотя бы одной-единственной) из под Linux не обойтись.
Для этого существует программа dosemu. Запускается она простой и понятной командой - dos. Правда, для этого необходимо иметь права суперпользователя. Этой командой создается нечто вроде виртуальной машины, эмулирующей реальный режим процессоров ix86. Чем-то напоминающий DOS-сессию в Windows или, скорее, OS/2. После запуска программы (это можно сделать и из окна терминала) вы видите черный экран с серией сообщений, завершающихся чем-нибудь вроде: Welcome to FreeDOS (http://www.freedos.org)!
При этом пропадает возможность пролистывания экрана с помощью Shift+PageUp, PageDown, а в окне терминала - также и возможность скроллинга. Зато появляется знакомое до боли приглашение командной строки DOS C:\>
в которой естественном поползновением будет ввести dir /p. Ответом на что будет список проде этого: BOOT BIN 512 12-07-99 10:59a COMMAND COM 41568 12-07-99 10:59a COPYING 18316 5-04-99 11:43a INSTALL BAT 743 5-04-99 11:43a IPL SYS 54928 12-07-99 10:59a KERNEL EXE 68112 12-07-99 10:59a KERNEL SYS 72169 5-04-99 11:43a SYS COM 12344 5-04-99 11:43a VIM-5 3 DIR 12-07-99 11:02a BIN DIR 12-07-99 11:02a DOC DIR 12-07-99 11:02a HELP DIR 12-07-99 11:02a EMACS DIR 12-07-99 11:02a DOSEMU DIR 12-07-99 11:02a AUTOEXEC BAT 99 12-07-99 11:02a CONFIG SYS 94 12-07-99 11:02a EXITEMU COM 292 12-07-99 11:02a 17 file(s) 269177 bytes 7122944 bytes free
в котором можно видеть родные и близкие AUTOEXEC.BAT, CONFIG.SYS и прочие прелести. А перейдя в каталог BIN (командой C:\> cd c:\bin) можно обнаружить основные исполнимые файлы DOS: . DIR 12-07-99 11:02a .. DIR 12-07-99 11:02a ASSIGN COM 13867 12-07-99 11:02a ATTRIB EXE 8609 12-07-99 11:02a BWBASIC EXE 169774 12-07-99 11:02a C_LOCK COM 3834 12-07-99 11:02a CAL COM 900 12-07-99 11:02a CHKDSK EXE 23510 12-07-99 11:02a CHOICE EXE 12510 12-07-99 11:02a CLS EXE 9026 12-07-99 11:02a COMMAND COM 72192 12-07-99 11:02a COMP COM 1285 12-07-99 11:02a COMPINFO EXE 113520 12-07-99 11:02a MCA DAT 24080 12-07-99 11:02a PCI DAT 47824 12-07-99 11:02a COPY EXE 14219 12-07-99 11:02a CTMOUSE COM 8836 12-07-99 11:02a CTMOUSEP COM 7443 12-07-99 11:02a PROTOCOL COM 365 12-07-99 11:02a Strike a key when ready . . .
и так далее. Каковыми и можно воспользоваться обычным для DOS образом.
Разумеется, возможности dosemu не исчерпываются запуском штатных команд DOS. В частности, не составит труда запустить самораспаковывающийся архив, в виде которого обычно распространяются обновления BIOS. Неплохо, конечно, озаботиться загрузочной дискетой DOS. Однако если ее не окажется под рукой - не беда: командой SYS.COM можно создать некое ее подобие. Не знаю, насколько функциональна загруженная с нее система - не проверял, - но запустить перепрограмматор BIOS и успешно провести процедуру его обновления она вполне способна.
А вообще, говорят, dosemu справляется запуском и мощных прикладных программ, вроде WordPerfect, правда, не знаю каких версий: интересно было бы посмотреть, как она поведет себя при запуске графической оболочки старших его версий, или, скажем, Quattro Pro для DOS, которая тоже имела свою оригинальную (и весьма приятную) графическую оболочку. Но всего этого я не проверял, за ненадобностью, и потому с темой эмуляции DOS заканчиваю. Скажу только, что, удовлетворив чувство ностальгии по DOS (а я, глядя на современные программы для Windows, его частенько испытываю, честное слово), из программы можно выйти командой EXITEMU.
Переходя к теме запуска под Linux приложений Windows. Тут я тоже не могу похвастаться богатым опытом: ни с одним из эмуляторов Windows (а их развелось довольно много - wine, bosch и другие) я до сих пор дела не имел. Скажу только несколько слов о виртуальных машинах.
В настоящее время таковые представлены одним функциональным экземпляром - коммерческой программой vmware, хотя разрабатывается и ее свободный аналог, названный, как и следовало бы ожидать, freemware.
Программа vmware (текущая версия - 2.01) разработана не только для Linux, но и для Windows NT/2000. Будучи установлена должным образом (а под Linux она распространяется в виде бинарного rpm-пакета, но без исходных текстов). система эта позволяет запускать из под родительской операционной системы (например, Linux) почти любую другую из широко распространенных.
Официально в качестве гостевых систем поддерживаются Windows 95 и 98, Windows NT и 2000. Однако, по имеющимся сведениям (частично проверенным личным опытом) можно запустить и любой другой вариант Linux, и FreeBSD с ее производными, и BeOS, и некоторые коммерческие Unix-системы. Во всяком случае, под Linux это единственная возможность получить доступ кор всему спектру Windows-приложений, хотя - и с очень ощутимой потерей производительности.
Установка и настройка vmware, а также организация обмена данными между виртуальной гостевой системой (скажем, Windows 9x) и реальной родительской (тем же Linux) - занятие не то чтобы чрезвычайно сложное, но требующее внимания и не всегда тривиальное. Особенно, как ни странно, с точки зрения Windows-мигранта. Детальные описания этого процесса можно найти в статьях А.Ерижокова (на http://www.linuxrsp.ru/) и В.Костромина (http://linux-ve.chat.ru/). Поэтому я на нем останавливаться не буду.
Скажу только, что в ряде случаев, конечно, vmware может оказаться незаменимым. Например, при тестировании web-узла, разрабатываемого и управляемого под Linux, с точки зрения его функционирования под Windows на клиентской стороне. Или, напротив, если вся потребность в Windows-программах сводится к раскладыванию пасьянсов для успокоения нервов, как это имеет место у меня.
В противном случае - то есть если необходимость просто в использовании некоторых (и, тем более, многих) Windows-приложений, некоторое удобство от их использования под виртуальной машиной (нет необходимости в перезагрузке системы при переходе от Linux- к Windows-приложениям) не окупают потери производительности (по крайней мере на конфигурациях вплоть до P-III/733 и 128 Мбайт оперативной памяти). В этом случае проще завести отдельный раздел для Windows и его приложений.
Напомню, что первый вариант, как и второй, не избавляет от необходимости приобретения легальной копии Windows (или мук совести от использования ворованной). Если же учесть стоимость самой vmware (под три сотни уев, хотя можно пользоваться и пробной версией, перерегистрируемой раз в месяц - это, как будто, вполне легально)... Поневоле задумаешься, а не проще ли завести вторую машину, реальную, и соединить ее с первой сетью - чтобы обойтись одной консолью?
Заговорив о эмуляторах и виртуальных машинах, я несколько удалился от основной темы повествования - файлах и операциях с ними. А ведь оно еще не закончено. Потому что файлы создаются, копируются, архивируются и т.д., с главной целью - сохранения результатов работы как непреходящей ценности. Для чего нужно располагать средствами их записи на резервные носители, из которых важнейшими для нас, простых индивидуальных пользователей, являются
ОБ АВТОРЕ
Виктор Хименко, e-mail: khim@mccme.ru
"Обзорное исследование
CRM-решений в России"
Citforum.ru приглашает вас посетить учебные курсы:
"Основы передачи данных" |
"Системное администрирование ОС UNIX" |
26-30 ноября
29 октября-2 ноября
26-30 ноября
"Основы SQL и PL/SQL"
19-23 ноября
"Разработка профессиональных приложений для Oracle 8i c использованием PL/SQL и Java"
26 ноября-1 декабря
"Разработка WEB приложений с помощью Java и PL/SQL."
3-7 декабря
"Современные технологии анализа и проектирования информационных систем"
3-6 декабря
Поиск | Рубрикатор | Форумы | Новости сервера | Учебный центр | Книжный магазин | Реклама на сервере |
<<< В начало | Наверх | Быстрый переход >>> | Internet-технологии Сетевые технологии Базы данных Операционные системы Программирование Аппаратные платформы Материалы конференций Пользователям и преподавателям Корпоративные ресурсы Книги, которые мы выбираем |
Комментарии: mailto:info@citforum.ru?Subject='From bottom of CIT FORUM' | pl="";sl="1.1"; if((n==1) && (bv >= 300)) { for(var i = 0; i < nv.plugins.length; i++) pl += nv.plugins[i].name+":"; } j = (navigator.javaEnabled() ? "Y" : "N");
sl="1.2";s=screen;wh=s.width+'x'+s.height; px=(n==0)?screen.colorDepth:screen.pixelDepth;z+="&wh="+wh+"&px="+px; sl="1.3" y=""; y+=""; y+=" "; y+=""; d.write(y); | Copyright © |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
Объединение дисков с помощью CCD
Команды предоставил: Stan Brown (stanb@awod.com>)
Драйвер CCD (Concatenated Disk Driver) позволяет вам использовать несколько идентичных дисков как один диск. Объединение дисков может повысить производительность через распределение операций чтения и записи между дисками. Обратитесь к страницам справочной системы ccd(4) и ccdconfig(8) или к домашней странице CCD для получения подробной информации.
Вам больше не нужно компилировать специальное ядро для использования ccd. Когда вы запускаете команду ccdconfig, она загрузит соответствующий KLD, если в ядре нет поддержки CCD.
Вы можете строить объединенные диски в разделах типа 4.2BSD. Если вы хотите использовать весь диск, то вам все равно нужно создать новый раздел. Например, disklabel -e
может выдавать:
# size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
Вы не сможете использовать раздел c для CCD, так как он имеет тип unused. Вместо этого создайте новый раздел точно такого же размера, но типа 4.2BSD:
# size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)
Для создания нового CCD выполните следующие команды. Здесь описано, как объединить три диска; просто добавляйте или убирайте устройства по мере необходимости. Помните, что объединяемые диски должны быть идентичными.
# cd /dev ; sh MAKDEV ccd0
# disklabel -r -w da0 auto
# disklabel -r -w da1 auto
# disklabel -r -w da2 auto
# disklabel -e da0
Add partition e with type 4.2BSD # disklabel -e da1
Add partition e with type 4.2BSD # disklabel -e da2
Add partition e with type 4.2BSD
# ccdconfig ccd0 273 0 /dev/da0e /dev/da1e /dev/da2e
# newfs /dev/ccd0c
Значение 273 задает размер блока данных. Это число секторов диска, (каждый по 512 байт) в каждом блоке данных в CCD. Он должен быть равен по крайней мере 128 kB, и должен быть степенью числа 2.
Теперь вы можете смонтировать и использовать ваш CCD через устройство /dev/ccd0c.
Более мощной и гибкой альтернативой для CCD является Vinum. Обратитесь к домашней странице проекта Vinum Project
для получения подробной информации.
Объекты VM
Лучше всего начать описание VM-системы FreeBSD с попытки взглянуть на нее с точки зрения пользовательского процесса. Каждый пользовательский процесс имеет единое, принадлежащее только ему и неразрывное адресное пространство VM, содержащее несколько типов объектов памяти. Эти объекты имеют различные характеристики. Код программы и ее данные являются единым файлом, отображаемым в память (это выполняющийся двоичный файл), однако код программы доступен только для чтения, когда как данные программы размещаются в режиме копирования-при-записи. BSS программы представляет собой всего лишь выделенную область памяти, заполненную, если это требовалось, нулями, что называется обнулением страниц памяти по требованию. Отдельные файлы могут также отображаться в адресное пространство, именно так работают динамические библиотеки. Такие отображения требуют изменений, чтобы оставаться принадлежащими процессу, который их выполнил. Системный вызов fork добавляет переводит проблему управления VM полностью в новую плоскость, вдобавок к уже имеющимся сложностям.
Иллюстрирует сложность страница данных двоичной программы (которая является страницей копируемой-при-записи). Двоичная программа содержит секцию предварительно инициализированных данных, которая первоначально отображается непосредственно из файла программы. Когда программа загружается в Vm-пространство процесса, эта область сначала отображается в память и поддерживается бинарным файлом программы, позволяя VM-системе освобождать/повторно использовать страницу, а потом загружать ее снова из бинарного файла. Однако в момент, когда процесс изменяет эти данные, VM-система должна сделать копию страницы, принадлежащую только этому процессу. Так как эта копия была изменена, то VM-система не может больше освобождать эту страницу, так как впоследствии ее невозможно будет восстановить.
Вы тут же заметите, что то, что сначало было простым отображением файла в память, становится гораздо более сложным предметом. Данные могут модифицироваться постранично, когда как отображение файла выполняется для многих страниц за раз. Сложность еще более увеличивается, когда процесс выполняет вызов fork. При этом порождаются два процесса--каждый со с собственным адресным пространством, включающим все изменения, выполненные исходным процессом до вызова функции fork(). Было бы глупо для VM-системы делать полную копию данных во время вызова fork(), так как весьма вероятно, что один из двух процессов будет нужен только для чтения из той страницы, что позволяет использование исходной страницы. То, что было страницей, принадлежащей только процессу, сделается снова страницей, копируемой при записи, так как каждый из процессов (и родитель, и потомок) полагают, что их собственные изменения после разветвления будут принадлежать только им, и не затронут родственный процесс.
FreeBSD управляет всем этим при помощи многоуровневой модели VM-объектов. Исходный файл с двоичной программой переносится на самый нижний уровень объектов VM. Уровень страниц, копируемых при записи, находится выше него, и хранит те страницы, которые были скопированы из исходного файла. Если программа модифицирует страницы данных, относящиеся к исходному файлу, то система VM обнаруживает это и переносит копию этой страницы на более высокий уровень. Когда процесс разветвляется, добавляются новые уровни VM-объектов. Это можно показать на простом примере. Функция fork() является общей операцией для всех систем *BSD, так что в этом примере будет рассматриваться программа, которая запускается, а затем разветвляется. Когда процесс запускается, VM-система создает некоторый уровень объектов, обозначим его A:
A соответствует файлу--по необходимости страницы памяти могут высвобождаться и подгружаться с носителя файла. Подгрузка с диска может потребоваться программе, однако на самом деле мы не хотим, чтобы она записывалась обратно в файл. Поэтому VM-система создает второй уровень, B, который физически поддерживается дисковым пространством подкачки:
При первой записи в страницу после выполнения этой операции, в B создается новая страница, содержимое которой берется из A. Все страницы в B могут сбрасываться и считываться из устройства подкачки. Когда программа ветвится, VM-система создает два новых уровня объектов--C1 для порождающего процесса и C2 для порожденного--они располагаются поверх B:
В этом случае, допустим, что страница в B была изменена начальным родительским процессом. В процессе возникнет ситуация копирования при записи и страница скопируется в C1, при этом исходная страница останется в B нетронутой. Теперь допустим, что та же самая страница в B изменяется порожденным процессом. В процессе возникнет ситуация копирования при записи и страница скопируется в C2. Исходная страница в B теперь полностью скрыта, так как и C1, и C2 имеют копии, а B теоретически может быть уничтожена, если она не представляет собой 'реального' файла). Однако такую оптимизацию не так уж просто осуществить, потому что она делается на уровне мелких единиц. Во FreeBSD такая оптимизация не выполняется. Теперь положим (а это часто случается), что порожденный процесс выполняет вызов exec(). Его текущее адресное пространство обычно заменяется новым адресным пространством, представляющим новый файл. В этом случае уровень C2 уничтожается:
В этом случае количество потомков B становится равным одному и все обращения к B теперь выполняются через C1. Это означает, что B и C1 могут быть объединены. Все страницы в B, которые также существуют и в C1, во время объединения из B удаляются. Таким образом, хотя оптимизация на предыдущем шаге может не делаться, мы можем восстановить мертвые страницы при окончании работы процессов или при вызове exec().
Такая модель создает некоторое количество потенциальных проблем. Первая, с которой вы можете столкнуться, заключается в сравнительно большой последовательности уровней объектов VM, на сканирование которых тратится время и память. Большое количество уровней может возникнуть, когда процессы разветвляются, а затем разветвляются еще раз (как порожденные, так и порождающие). Вторая проблема заключается в том, что вы можете столкнуться с мертвыми, недоступными страницами глубоко в иерархии объектов VM. В нашем последнем примере если как родитель, так и потомок изменяют одну и ту же страницу, они оба получают собственные копии страницы, а исходная страница в B становится никому не доступной. такая страница в B может быть высвобождена.
FreeBSD решает проблему с глубиной вложенности с помощью приема оптимизации, который называется ``All Shadowed Case''. Этот случай возникает, если в C1 либо C2 возникает столько случаев копирования страниц при записи, что они полностью закрывают все страницы в B. Допустим, что такое произошло в C1. C1 может теперь полностью заменить B, так что вместо цепочек C1->B->A и C2->B->A мы теперь имеем цепочки C1->A и C2->B->A. Но посмотрите, что получается--теперь B имеет только одну ссылку (C2), так что мы можем объединить B и C2. В конечном итоге B будет полностью удален и мы имеем цепочки C1->A и C2->A. Часто B будет содержать большое количество страниц, и ни C1, ни C2 не смогут полностью их заменить. Если мы снова породим процесс и создадим набор уровней D, при этом, однако, более вероятно, что один из уровней D постепенно сможет полностью заместить гораздо меньший набор данных, представленный C1 и C2. Та же самая оптимизация будет работать в любой точке графа и главным результатом этого является то, что даже на сильно загруженной машине с множеством порождаемых процессов стеки объектов VM не часто бывают глубже четырех уровней. Это так как для порождающего, так и для порожденного процессов, и остается в силе как в случае, когда ветвление делает родитель, так и в случае, когда ветвление выполняет потомок.
Проблема с мертвой страницей все еще имеет место, когда C1 или C2 не полностью перекрывают B. Из-за других применяемых нами методов оптимизации этот случай не представляет большой проблемы и мы просто позволяем таким страницам существовать. Если система испытывает нехватку оперативной памяти, она выполняет их выгрузку в область подкачки, что занимает некоторое пространство в области подкачки, но это все.
Преимущество модели VM-объектов заключается в очень быстром выполнении функции fork(), так как при этом не выполняется реального копирования данных. Минусом этого подхода является то, что вы можете построить сравнительно сложную иерархию объектов VM, которая несколько замедляет обработку ситуаций отсутствия страниц памяти, и к тому же тратится память на управление структурами объектов VM. Приемы оптимизации, применяемые во FreeBSD, позволяют снизить значимость этих проблем до степени, когда их можно без особых потерь игнорировать.
Объявление Алиаса Клавиши
Эти объявления имеют вид
'alias' KEYNAME '=' KEYNAME ';'
Они служат просто для того, чтобы одному скан-коду дать несколько разных имен.
Объявление имени группы
Задает символическое имя для группы. Это имя может потом использоваться прикладными программами, которые рисуют изображение клавиатуры или показывают "состояние клавиатуры". Для самого XKB эти имена значаения не имеют.
Это объявление имеет вид
'name[' название_группы ']=' имя_группы ';'
Например,
name[Group1] = "English" ; name[Group2] = "Russian" ;
Объявление Имени Индикатора
Вообще-то, эти объявления не имеют никакого отношения к скан-кодам, но, поскольку они тоже имеют непосредственное отношение к "железу", то самое подходящее место для них в файлах этого типа.
Заметим, что в в модуле XKB, существует 32 индикатора. Часть из них отображается на светодиодах (LED) клавиатуры (обычно - первые три) и являются "физическими" индикаторами. Остальные никак не отображаются на "физической" клавиатуре, но могут изображаться специальными программами (xkbvleds, mxkbledpanel). Поэтому, они называются "виртуальными индикаторами".
Поведение этих индикаторов ("физических" и "виртуальных"), то есть - в каком случае их включать/выключать, описываются в других файлах - xkb_compat.
В файлах типа xkb_keycodes им только даются символические имена, которые потом используются в файлах типа xkb_compat и xkb_geometry для указания индикатора.
Объявление имени индикатора имеет вид
'indicator' INTEGER '=' STRING ';'
или
'virtual indicator' INTEGER '=' STRING ';'
Здесь, INTEGER - числовая константы типа INTEGER. Она просто определяет номер индикатора. Обычно, первые три индикатора являются "физическими" (светодиоды NumLock, CapsLock и ScrollLock на клавиатуре), остальные - с 4 по 32, являются "виртуальными" (то есть, никак не отображаются на "физической" клавиатуре).
STRING - произвольная строка символов в "двойных кавычках".
Замечу также, что это имя не только служит для указания конкретного индикатора в других файлах конфигурации XKB, но и запоминается во внутренних структурах модуля XKB и может быть потом считано оттуда соответствующими программами (которые изображают "панель индикаторов" или рисуют "геометрию" клавиатуры).
Объявление Имени Клавиши
Основное объявление, которое используется в файлах этого типа.
Имеет вид
KEYNAME '=' Выражение ';'
KEYNAME, вообще говоря, просто некоторая строка символов (string), допустимая в языке C. Отличается только тем, что она ограничивается "угловыми скобками" - знаками '<' и '>' и должна быть не длиннее 4 символов.
Например,
<AE01> = ... ;
"Выражение" в правой части объявления может быть любым арифметическим выражением, допустимым в языке C. То есть, содержать операции '+ - / *' и "круглые" скобки, при этом операндами могут быть числовые константы десятичного, шестнадцатеричного и восьмеричного типов (в терминах языка C).
Естественно, это выражение должно быть "вычисляемым" на этапе "разборки" файла. (? наверное, в этом выражение могут использоваться ранее определенные переменные - maximum и minimum).
Объявление "отображения номера группы в модификатор"
Напомню, что в "состоянии XKB" (которое может быть "считано" прикладной программой) есть специальное двухбитное поле, в котором указан текущий номер группы. В "традиционном" "состоянии клавиатуры" такого поля нет, а смена группы индицируется одним из модификаторов.
Поэтому, для программ, понимающих только "традиционное состояние клавиатуры", XKB преобразует номер группы в активное состояние какого-нибудь модификатора.
Для каждого из четырех номеров групп может быть объявлен отдельный модификатор (хотя обычно, используется один для всех групп, отличных от первой).
Это объявление имеет очень простой вид.
'group' номер группы '=' модификатор ';'
Например,
group 2 = AltGr;
Объявление Переменной
В файле xkb_keycodes могут быть определены две переменные - minimum и maximum.
Они задают минимальное и максимальное значение для скан-кодов. Естественно, что все скан-коды, которые будут использоваться для задания символических имен должны "вписатся" в диапазон между minimum и maximum. Вообще говоря, "объявление переменной" имеет вид
имя_переменной '=' Выражение ';'
Поэтому, слева от знака '=' должно быть либо слово 'minimum', либо - 'maximum'. А справа может быть любое арифметическое выражение (только вот - зачем ?), которое может быть вычислено на этапе "разборки" файла и дать в результате константу типа INTEGER.
Объявление "привязки" реальных модификаторов
Это объявление заполняет внутреннюю табицу XKB - modmap, которая "привязывает" реальные модификаторы к клавишам (скан-кодам). Напомню, что эти модификаторы будут автоматически устанавливаться/сбрасываться, при нажатии/отпускании клавиши, в "эмулируемом наборе модификаторов".
Объявление имеет вид
'modifier_map' имя_модификатора '{' список_клавиш '};'
Вместо слова "modifier_map" могут использоваться синонимы - modmap или mod_map.
"Имя_модификатора" должно быть названием одного из реальных модификаторов - Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, Mod5.
А вот "список_клавиш" может состоять из названий скан-кодов (через запятую), например,
modifier_map Control { <LCTL>, <RCTL> };
или из названий символов, например,
modifier_map Mod1 { Alt_L, Alt_R };
Во втором случае, XKB (точнее - xkbcomp) должен найти скан-коды, к которым "привязаны" эти символы и занести в modmap эти скан-коды.
Обратите внимание, один и тот же модификатор может быть "привязан" ко многим скан-кодам, но не наоборот - разные модификаторы к одному скан-коду. Это означает, что название скан-кода может появиться в определениях modmap
только один раз. Это же ограниичение действует, если клавиши предствлены не скан-кодами, а символами.
Однако, как ни странно, xkbcomp не проверяет ситуацию, когда одна и та же клавиша представлена один раз скан-кодом, а другой - символом, или разными символами "привязанными" к одному скан-коду. В этом случае может получиться ситуация, когда к одному скан-коду "привязаны" несколько реальных модификаторов.
Объявление типа
Эти объявления выглядят как
'type' ИмяТипа '{' Инструкции '};'
"ИмяТипа" - это призвольная константа типа STRING (то есть строка символов в "двойных кавычках"). Это имя потом может использоваться в xkb_symbols для явного указания типа клавиши.
А "Инструкции" это несколько объявлений (они выглядят как "присваивание" переменной некоторого значения), кадое заканчивается "точкой с запятой".
В описании типа могут всречаться инструкции
modifiers = ...;
map[...] = ...;
level_name[...] = ...;
preserve[...] = ...;
Объявление "умолчаний"
Это объявление задает значение "по умолчанию" для некоторых аттрибутов клавиш и выглядит как присвоение значения "полю структуры" в языке C.
Например,
key.repeat = no;
При этом, в левой части присваивания первое слово (до точки) должно быть слово "key", а второе - любое из допустимых в описании клавиши (type, locks, radiogroup и т.п.).
Естественно, это "умолчание" будет действовать, пока в тексте не встретится другое объявление для того же аттрибута.
Кроме того, объявление "умолчаний" может спользоваться для "умолчаний" в описании "действий" (подробнее см. "Описание действий"). В этом случае первое слово будет названием "действия", например,
SetMods.clearLocks = True;
И, наконец, к объявлениям "умолчания" можно отнести инструкцию, которая устанавливает флаг "допускается отжатие всех" (allownone) для радио-групп.
Напомню, что этот флаг можно указать непосредственно в описании клавиши, относящейся к радио-группе. Но, поскольку радио-группа "размазана" по нескольким клавишам, а флаг allownone является аттрибутом радио-группы, а не конкретной клавиши, можно указать флаг для нее отдельной инструкцией (не внутри описании какой-либо клавиши). Например,
allownone = 10;
означает, что для радио-группы 10 устанавливается соответствующий флаг.
Иван Паскаль pascal@tsu.ru
Объявление "умолчания"
Это объявление является воспомогательным и позволяет определить какое-нибудь поле (инструкцию) для всех записей типа interpret или indicator. Естественно, обычно эти объявления помещаются в начале файла (или блока в файле).
Они меют вид оператора присваивания, где в левой части указывается конструкция типа "поля структуры" в языке C.
Например,
indicator.allowExplicit = False;
что означает - во всех дальнейших описаниях индикаторов (indicator) подразумевается "allowExplicit = False;", если конечно, эта инструкция не указана явно.
Первым словом в левой части (то, что до точки) должно быть
interpret - "умолчания" для описания "интерпретаций"; indicator - "умолчания" для описания индикаторов; название "действия", встречающегося в описаниях interpret - задает "умолчание" для соответствующих полей "действия", которое может встретиться в дальнейших описаниях "интерпретаций".
Иван Паскаль pascal@tsu.ru
Объявление виртуальных модификаторов
Как и в файле типа xkb_types, прежде всего должны быть объявлены виртуальные модификаторы, которые могут встречаться в дальнейших описаниях. Реальные модификаторы (если они также используются) описывать не надо, поскольку, они имеют стандартные названия. А вот виртуальные модификаторы могут иметь произвольные названия, поэтому, для правильной интерпретации остальных записей необходимо сообщить программе, которая будет "разбирать" этот файл, что соответствующие слова являются названиями виртуальных модификаторов.
Объявление виртуальных модификаторов имеет вид
'virtual_modifiers' список модификаторов ';'
Например,
virtual_modifiers NumLock, AltGr ;
Просто перечисляет названия виртуальных модификаторов, которые могут встретиться в описаниях "действий" и в качестве модификатора "привязанного" к клавише.
Имеет вид
'virtual_vodifiers' список_модификаторов ';'
Надо заметить, что обычно ни действия, ни связанные с клавишей виртуальные модификаторы, не "привязываются" непосредственно к скан-кодам. Как правило, они описываются в файле xkb_compat, как часть "интерпретаций". Поэтому, это обявление, обычно, в файлах xkb_symbols не встречается.
Это объявление просто перечисляет - какие виртуальные модификаторы далее могут использоватся в объявлениях типов.
Напомню, что в самом X-сервере (не в модуле XKB) определенны восемь модификаторов - Shift, Lock, Control, Mod1-Mod5, которые в терминах XKB называются "реальными" (real). В дополнение к ним XKB может иметь еще своих 16 модификаторов, которые, соответственно в нем именуются "виртуальными" (virtual). Обычно, в XKB вводятся виртуальные модификаторы NumLock, ScrollLock, Alt, AltGr и т.п.
Назначение модификаторов на конкретные клавиши делается в файле xkb_symbols.
Так вот. В описаниях типа могут фигурировать как реальные, так и виртуальные модификаторы. Поскольку, "реальные" определены "по умолчанию", никаких специальных объявлений для них не требуется. А вот названия "виртуальных" желательно объявить, прежде чем описывать типы.
Объявление виртуальных модификаторов имеет очень простой вид
'virtual_modifiers' список_модификаторов ';'
где "список_модификаторов" - просто перечисление используемых модификаторов через запятую. Например, строчка
virtual_modifiers NumLock, Alt;
говорит о том, что в описаниях типов могут встречаться кроме реальных модификаторов (Shift, Lock и т.д.), также модификаторы NumLock и Alt.
Объявления в файлах конфигурации, общие для всех типов файлов
Каждый файл или блок конфигурации состоит из группы объявлений (деклараций, инструкций, определений ?).
Какие именно объявления допустимы в конкретном файле (и как они выглядят) зависит от "Типа Файла".
Однако, есть некоторые слова, которые могут встречаться в файлах (блоках) любых типов.
Объявления в файле xkb_symbols
В файлах этого типа могут встретиться
Объявление виртуальных модификаторов.
Объявление имени группы.
Описание клавиши.
Объявление "привязки" реальных модификаторов.
Объявление "умолчаний".
Обновление ядра
подготовить все необходимые пакеты (скачать и положить в локальную директорию) на всякий случай сделать загрузочный диск rpm -Uvh kernel-utils-xyz kernel-headers-xyz kernel-source-xyz rpm -ivh kernel-xyz [kernel-ibcs-xyz] [kernel-pcmcia-cs-xyz] сделать новый initrd (только если при загрузке потребуется драйвер, сделанный в виде модуля) дополнить /etc/conf.modules (/etc/modules.conf) lilo -v перезагрузиться (shutdown -r now) настроить ядро
Обновление жесткого диска
Автор Georg I.Andreev (georg@sitc.ru)
Опубликовано 17 Апреля 2000, 13:19
Оригинал этой статьи находится на сервере "LinuxNews.Ru".
Обновление жесткого диска
Авторы Yves Bellefeuille <yan@storm.ca>,
и Konrad Hinsen <hinsen@cnrs-orleans.fr>
Перевод на русский язык Georg I.Andreev, март 2000 г.
Версия 2.1, 20 октября 1999 г.
Как скопировать Linux на другой жесткий диск
1. Установка обеих дисков в Вашу систему
2. Размонтирование не-Linux разделов и сетевых дисков
3. Разбиение нового диска на разделы
4. Форматирование нового диска
5. Монтирование нового диска
6. Копирование файлов со старого диска на новый
7. Mодификация /new-disk/etc/fstab как требуется
8. Подготовка LILO для загрузки с нового диска
9. Подготовка загрузочной дискеты (необязательно)
10. Удаление старого диска
11. Перезагрузка системы, модификация файла конфигурации LILO
Этот документ описывает как переместить, или мигрировать, всю Linux-систему, включая
LILO, с одного жесткого диска на другой.
В последующем описании, "/dev/hda" (первый IDE-диск) подразумевает "старый" диск, и
"/dev/hdb" (второй IDE-диск) подразумаевает "новый" диск.
Соответствующие разделы "старого" диска описываются как "/dev/hda1", "/dev/hda2",
итд. Соответствующие разделы "нового" диска описываются как "/dev/hdb1",
"/dev/hdb2", итд.
Описания в этом документе основаны на Red Hat 6.0. Они также были протестированы на
Debian 2.1, Slackware 3.5 и SuSE 6.2; мы указываем на некоторые различия на случай если
Вы используете эти дистрибутивы.
Если команды не работают должным образом в Вашей системе, пожалуйста дайте нам
знать, с указанием какой дистрибутив Вы используете.
1. Установка обеих дисков в Вашу систему
Современные системы поддерживают 4 "EIDE" устройства на контроллере жестких
дисков, таким образом не должно быть никаких проблем установить оба диска
одновременно в Вашу систему, даже если вы используете другие EIDE устройства.
Жесткие диски и CD-ROM-драйвы является типичными EIDE устройствами. Флоппи-
дисководы и ленточные накопители обычно подключаются к контроллеру дисководов,
отличному от контроллера жестких дисков.
SCSI адаптеры являются более гибкими и могут поддерживать до 7 дисков. Если Вы
достаточно удачливы (и богаты) чтобы иметь SCSI адаптер, Вы скорее всего уже знаете
это, и скорее всего Вы знаете какие из Ваших устройств являются SCSI-устройствами!
Для получения дополнительной информации, смотрите SCSI How-To.
Даже самые старые системы могут поддерживать два устройства на контроллере жестких
дисков, таким образом Вы можете установить оба диска одновременно. Однако, если вы
уже имеете другое устройство, подключенное в дополнение к Вашему жесткому диску
(например, если Вы имеете жесткий диск и CD-ROM драйв), Вы должны удалить другое
устройство, чтобы иметь возможность установить одновременно старый и новый жесткие
диски.
Вы должны сконфигурировать диски как "master" или "slave" путем соответствующей
установки перемычек на дисках. Часто Вы можете найти конфигурационную информацию
на самх дисках; если нет, обратитесь к документации или к прроизводителю дисков.
Вы также должны проинформировать BIOS о существовании дисков и об их "геометрии".
Как правило, Вы входите в программу настройки BIOS путем нажатия на клавишу во
время старта системы. Здесь приводится информация о том что нужно делать в некоторых
системах:
Ноутбуки Acer: нажать клавишу F2 во время Power-On Self-Test (POST)
American Megatrends (AMI): клавиша Del во время Power-On Self-Test
Award: Del, или Ctrl-Alt-Esc
Compaq: клавиша F10 после того как в правом верхнем углу экрана
появится квадрат во время старта
Dell: Ctrl-Alt-Enter
DTK: клавиша Esc во время Power-On Self-Test
IBM Aptiva 535: клавиша F1 пока в верхнем правом углу экрана во время
старта системы виден квадрат с волнистыми чертами [применимо ли это к
другим моделям Aptiva?]
IBM PS/2: Ctrl-Alt-Del, затем Ctrl-Alt-Ins когда в верхнем правом углу виден
курсор
Mr. BIOS: Ctrl-Alt-S во время Power-On Self-Test
Packard Bell: Для некоторых моделей, клавиши F1 или F2 key во время
Power-On Self-Test
Phoenix: Ctrl-Alt-Esc, или Ctrl-Alt-S, или Ctrl-Alt-Enter
Многие старые системы требуют Installation или Reference Disk
(Мы заинтересованы в получении информации о других BIOS для добавления в этот
список)
Перезагрузите систему и зарегистрируйтесь как root. Если вы используете команду "su"
для регистрации как root, используйте "su –", с опцией тире..
2. Размонтирование не-Linux разделов и сетевых дисков
Многие любят монтировать разделы с других операционных систем (DOS, Windows, OS/2,
итд), чтобы использовать их под L:inux. Эти разделы должны создаваться и копироваться
с их собственных операционных систем, поэтому размонтируйте их перед копированием
Вашего Linux-раздела. Например, если Вы имеете DOS-раздел, смонтированный как /dos,
вы должны размонтировать его с помощью следующей команды:
umount /dos
Заметьте, что команда "umount", без первой буквы "n" в слове "unmount".
Вы также должны размонтировать сетевые диски. .
3. Разбиение нового диска на разделы
Используйте следующую команду для разбиения нового диска:
fdisk /dev/hdb
EIDE-устройства идентифицируются как hda,hdb,hdc, и hdd в каталоге /dev. Разделы на
этих дисках могут быть от 1 до 16 и также находятся в каталоге /dev. Например,
/dev/hda4 указывает на 4-й раздел на диске a (первый EIDE-диск).
SCSI-устройства перечисляются как устройства sda,sdb,sdc,sdd,sde,sdf, и sdg в
каталоге /dev. Аналогично, разделы на этих дисках могут быть от 1 до 6 и также
находятся в каталоге /dev. Например, /dev/sda/3 указывает на третий раздел на SCSI-
диске (первый SCSI-диск).
Для Linux-разделов с файловой системой ext2, используйте системный ID 83. Для swap-
разделов, используйте системный ID 82.
Для получения дополнительной информации о разбиении дисков, смотрите Installation
How-To и Partition Mini How-To.
Если Ваш новый диск имеет более чем 1024 цилиндра, смотрите Large Disk Mini How-To.
Говоря кратко, Вы должны установить все файлы, требуемы для загрузки Linux в
пределах первых 1024 цилиндров. Один из путей добиться этого заключается в создании
небольшого раздела (5 Мегабайт или около того) только для каталога /boot в начале
диска. (Только для Slackware: Ядро /vmlinuz отличается от /boot/vmlinuz, таким
образом вы должны поместить оба каталога / и /boot в этом разделе.).
Разделы для других систем должны создаваться их собственным fdisk или
эквивалентной, а не командой Linux fdisk..
4. Форматирование нового диска
Используйте следующую команду для форматирования Linux-разделов с использованием
ext2fs на новом диске:
mkfs.ext2 /dev/hdb1
Для проверки диска на наличие сбойных блоков (физических дефектов), добавьте опцию -
c перед "/dev/hdb1".
Если новый диск имеет больше чем один Linux-раздел, форматируйте другие разделы с
помощью "mkfs.ext2 /dev/hdb2", "mkfs.ext2 /dev/hdb3", и так далее. Добавьте опцию
-c если требуется.
(На заметку: В старых дистрибутивах, команда "mkfs -t ext2 -c /dev/hdb1" не
проверяет на сбойные блоки под любыми RedHat, Debian или Slackware, хотя man
указывает на обратное. Сейчас это исправлено.)
Для форматирования swap-раздела, используйте команду:
mkswap /dev/hdb1
И снова, вы можете добавить опцию -c перед "/dev/hdb1" для проверки на сбойные
блоки.
5. Монтирование нового диска
Создайте каталог в котором Вы будете монтировать новый диск, например /new-disk, и
смонтируйте его:
mkdir /new-disk
mount -t ext2 /dev/hdb1 /new-disk
Если новый диск содержит более чем один Linux-раздел, смонтируйте их всех в /new-
disk в таком же виде, в каком они будут в будущем.
Пример: новый диск имеет четыре раздела:
/dev/hdb1: /
/dev/hdb2: /home
/dev/hdb3: /var
/dev/hdb4: /var/spool
Смонтируйте четыре раздела в /new-disk следующим образом:
/dev/hdb1: /new-disk
/dev/hdb2: /new-disk/home
/dev/hdb3: /new-disk/var
/dev/hdb4: /new-disk/var/spool
Вы должны создать точку монтирования для каждого "уровня" до того как Вы будете
монтировать разделы на данном уровне. Пример:
mkdir /new-disk [Первый
уровень]
mount -t ext2 /dev/hdb1 /new-disk
mkdir /new-disk/home [Второй
уровень]
mount -t ext2 /dev/hdb2 /new-disk/home
mkdir /new-disk/var [Также
второй уровень]
mount -t ext2 /dev/hdb3 /new-disk/var
mkdir /new-disk/var/spool [Третий
уровень]
mount -t ext2 /dev/hdb4 /new-disk/var/spool
Если вы создали точку монтирования /new-disk/tmp, Вам потребуется изменить права
доступа таким образом, чтобы предоставить всем пользователям доступ туда:
chmod 1777 /new-disk/tmp
6. Копирование файлов со старого диска на новый
Вы можете захотеть перейти в single-user mode перед копированием диска, для остановки
системных демонов и сохранения состояния log-файлов, и предотвращения входа
пользователей в систему:
/sbin/telinit 1
Когда копируете диск, Вам нужно скопировать все каталоги и все файлы, включая ссылки.
Однако, Вам не нужно копировать каталог /new-disk, потому что при этом Вы
скопируете диск в самого себя!
Более того, Вам нужно создать каталог /proc на новом диске, но Вам не нужно
копировать его содержимое: /proc является "виртуальной" файловой системой и не
содержит в действительности файлов, а содержит информацию о процессах запущенных в
системе.
Есть четыре различных способоа скопировать старый диск на новый. Это может занять
значительное время, особенно если Вы имеете большой диск или мало памяти. Вы можете
рассчитывать на копирование 10 Мегабайт в минуту,возможно больше.
Вы можете следить за процессом копирования, используя команду "df" с другого
терминала. Попробуйте "watch df" или "watch ls -l /new-disk" чтобы видеть отчет
обновляемый каждые две секунды; нажмите Ctrl-C чтобы остановить вывод. Помните
что запуск программы "watch" сам по себе замедляет процесс копирования.
i. cp -ax / /new-disk
Это простейший способ, но он работает только если Ваша исходная
Linux-система размещеная на одном разделе диска.
Опция -a сохраняет исходную систему, как только возможно. Опция
-x ограничивает cp в одной файловой системе; это необходимо для
того чтобы избежать копирования каталогов /new-disk и /proc .
(Только для SuSE: Только при использовании этого способа, Вы
также должны создать каталог /dev/pts на новом диске.
Используйте команду "mkdir /new-disk/dev/pts".)
(На заметку: когда используется опция -x, последние версии cp
создают каталоги /new-disk/new-disk и /new-disk/proc, хотя
каталоги будут пустыми. Если эти каталоги созданы, вы должны
удалить /new-disk/new-disk, и оставить /new-disk/proc.)
ii. cd / && echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-
disk | sh
(все пишется в одну строку)
Происходит переход в корневой каталог, затем копируются все
файлы и каталоги, за исключением /new-disk и /proc в /new-disk.
Заметьте что первая опция после ls является цифрой 1, а не буквой
L!
Эта команда должна работать в любом случае.
iii. (cd / && tar cpf - . --exclude new-disk --exclude proc) | (cd /new-disk
&& tar xpf -)
(все пишется в одну строку)
Происходит переход в корневой каталог, "затаривание" всего за
исключением /new-disk и /proc, переход в /new-disk and
"растаривание" всего туда. Заметьте что не должно быть косой черты
(слэша) до и после названий каталогов в опциях –-exclude.
(На заметку: Опция -l здесь не будет работать, потому что tar будет
заново создавать каталоги /new-disk и /proc хотя он не копирует их
содержимое. Таким образом, опция tar-а -l не имеет такого же
смысла как опция -x в старых версиях cp.)
Это способ немного медленнее чем другие.
iv. cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin /tmp
/usr /var /new-disk
(все пишется в одну строку)
Последний каталог, /new-disk, является получателем для команды
cp. Все остальные каталоги являются источниками. Таким образом,
мы копируем все перечисленные нами каталоги в /new-disk.
При использовании этого способа, Вы просто перечисляете сами
каталоги, которые Вам нужно скопировать. Здесь перечислены все
каталоги за исключением /proc и /new-disk. Если Вы по какой-либо
причине не можете использовать другие способы, Вы всегда можете
использовать эту команду чтобы вручную указать какие каталоги
Вам нужно скопировать.
Только при использовании этого способа, если в корневом каталоге
имеются каеие-либо файлы, Вам нужна другая команда чтобы их
скопировать. В частности, это требуется с Debian и Slackware,
поскольку эти дистрибутивы помещают файлы в корневой каталог.
cp -dp /* /.* /new-disk
После использования любого из этих способов, Вы должны также создать каталог /proc
на новом диске, если его там еще нет.
mkdir /new-disk/proc
В этот момент, Вы можете проверить структуру нового диска, если хотите
umount /new-disk
fsck.ext2 -f /dev/hdb1
mount -t ext2 /dev/hdb1 /new-disk
Если новый диск имеет более чем один раздел, Вы должны размонтировать "снизу вверх"
перед запуском fsck.ext2: в вышеприведенном примере, Вы должны сперва
размонтировать разделы третьего уровня, затем разделы второго уровня, и затем раздел
первого уровня.
Вы также можете сравнить два диска, чтобы удостовериться что файлы были
скопированы правильно:
find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -
exec cmp {} /new-disk{} \;
(пишется в одну строку)
(Только для Slackware: Основные иснталляции Slackware (только серия "A") не включает
в себя команду "cmp", поэтому Вы не можете запустить эту команду если вы установили
только основые файлы. Команда "cmp" есть в серии "AP1".)
Сравниваются только обычные файлы, не символьные или специальные блочные файлы (в
каталоге /dev), сокеты, итд, поскольку "cmp" не работает с ними правильно. Мы будем
рады предложениям как можно проверять эти "специальные" файлы.
7. Mодификация /new-disk/etc/fstab как требуется
Если Ваш новый диск имеет не такие же разделы или организован не как старый диск,
модифицируйте файл /new-disk/etc/fstab на новом диске как нужно.
Удостоверьтесь что разделы диска (первая колонка) соответствуют структуре Вашего
нового диска,
Make sure that the disk partitions (first column) correspond to the organization you'll have with
the new disk, once the old disk has been removed, and that you're only mounting one partition at
"/" as shown in the second column.
Для получения дополнительной информации о формате файла /etc/fstab, см. Linux
System Administrator's Guide, раздел 4, пункт "Mounting and unmounting".
Для swap-разделов, используйте строку, подобную этой:
/dev/hda1 swap swap defaults 0 0
8. Подготовка LILO для загрузки с нового диска
(Спасибо Rick Masters за помощь).
Мы предполагаем что LILO установлен в Главную Загрузочную Запись (MBR) диска; это
представляется наиболее принятой конфигурацией. Вы хотите установить LILO на диск,
который сейчас является вторым, но будет первым диском.
Отредактируйте файл /new-disk/etc/lilo.conf как показано:
disk=/dev/hdb bios=0x80 # Указываем LILO считать
второй
# диск первым диском
# (BIOS ID 0x80).
boot=/dev/hdb # Установить LILO на второй
диск
map=/new-disk/boot/map # Расположение"map file".
install=/new-disk/boot/boot.b # Файл для копирования в
boot-
# сектор диска.
prompt # LILO будет показывать
подсказку
# "LILO boot:".
timeout=50 # Загружать систему по
умолчанию
# через 5 секунд (значение
в десятых
# долях секунды.)
image=/new-disk/boot/vmlinuz # Расположение ядра Linux.
# В действительности имя
может
# содержать номер версии,
н-р
# "vmlinuz-2.0.35".
label=linux # Метка для Linux-системы.
root=/dev/hda1 # Расположение корневого
раздела
# нового диска. Измените
это в
# соответствии с Вашей
системой
# Помните что Вы должны
использовать
# будущее местоположение,
после того как
# старый диск будет удален.
read-only # Монтировать раздел
сначала "только
# для чтения", для запуска
fsck.
(Только для Slackware: Используйте "image=/new-disk/vmlinuz".)
Если вы используете SCSI-диск, Вам возможно понадобится добавить строку с "initrd".
Смотрите ваш существующий файл /etc/lilo.conf.
Установите LILO на новый диск:
/sbin/lilo -C /new-disk/etc/lilo.conf
Опция -c указывает LILO какой конфигурационный файл нужно использовать.
9. Подготовка загрузочной дискеты (необязательно)
Если Вы хотите, вы можете подготовить загрузочную дискету, на случай проблем с
загрузкой с нового диска.
Вставьте чистую дискету, отформатируйте, создайте файловую систему и смонтируйте:
fdformat /dev/fd0H1440
mkfs.ext2 /dev/fd0
mount -t ext2 /dev/fd0 /mnt
(Только для Debian: С Debian 2.x, используйте "/dev/fd0u1440" вместо
"/dev/fd0H1440". С Debian 1.x, используйте "/dev/fd0h1440", "h" в нижнем регистре.)
(Только для Debian: С Debian 2.x, используйте "superformat" вместо "fdformat". Вы
можете проигнорировать ошибку "mformat: command not found". С Debian 1.x, если у
Вас нет команды "fdformat", вы можете пропустить это дискета уже отформатирована. В
этом случае, Вы должны проверить дискету на наличие сбойных блоков, добавив "-c"
после команды "mkfs.ext2".)
(Только для Slackware: Используйте "/dev/fd0u1440" вместо "/dev/fd0H1440". Со
сарыми версиями, попробуйте "/dev/fd0h1440", "h" в нижнем регистре.)
(Только для SuSE: Используйте "/dev/fd0u1440" вместо "/dev/fd0H1440".)
Скопируйте все файлы из /boot на дискету:
cp -dp /boot/* /mnt
(Только для Red Hat: Если каталог /boot содержит оба файла vmlinux и vmlinuz
(обратите внимание на разницу в последней букве), Вам нужно скопировать только файлы
vmlinuz на загрузочную дискету . Они такие же как файлы vmlinux, за исключением того
что они сжаты для сохранения дискового пространства.)
(Только для Slackware: Скопируйте файл /vmlinuz на загрузочную дискету; используйте
команду "cp /vmlinuz /mnt".)
Создайте новый файл /mnt/lilo.conf как указано:
boot=/dev/fd0 # Устанавливать LILO на
дискету.
map=/mnt/map # Расположение"map file".
install=/mnt/boot.b # Файл для копирования в
boot-
# сектор дискеты.
prompt # LILO будет показывать
подсказку
# "LILO boot:".
timeout=50 # Загружать систему по
умолчанию
# через 5 секунд (значение
в десятых
# долях секунды.)
image=/mnt/vmlinuz # Расположение ядра Linux
на дискете.
# В действительности имя
может
# содержать номер версии,
н-р
# "vmlinuz-2.0.35".
label=linux # Метка для Linux-системы.
root=/dev/hda1 # Расположение корневого
раздела
# нового диска. Измените
это в
# соответствии с Вашей
системой
# Помните что Вы должны
использовать
# будущее местоположение,
после того как
# старый диск будет удален.
read-only # Монтировать раздел
сначала "только
# для чтения", для запуска
fsck.
Установите LILO на дискету:
/sbin/lilo -C /mnt/lilo.conf
Опция -c указывает LILO какой конфигурационный файл нужно использовать.
Размонтируйте дискету:
umount /mnt
10. Удаление старого диска
Выключите систему и удалите старый диск. Не забудьте поменять положение перемычек
и настройки BIOS для отражения изменений..
11. Перезагрузка системы, модификация файла
конфигурации LILO
Перезагрузите систему. Если возникнут проблемы, Вы можете использовать только что
созданную загрузочную дискету. Чтобы сделать это, Вам может понадобиться изменить в
BIOS порядок загрузки на "A:, C:".
Вы должны изменить файл /etc/lilo.conf на случай того что Вы будете позднее
запускать LILO.. Здесь приводится пример как файл должен выглядеть:
disk=/dev/hda # Установить LILO на первый
диск
map=/new-disk/boot/map # Расположение"map file".
install=/new-disk/boot/boot.b # Файл для копирования в
boot-
# сектор диска.
prompt # LILO будет показывать
подсказку
# "LILO boot:".
timeout=50 # Загружать систему по
умолчанию
# через 5 секунд (значение
в десятых
# долях секунды.)
image=/new-disk/boot/vmlinuz # Расположение ядра Linux.
# В действительности имя
может
# содержать номер версии,
н-р
# "vmlinuz-2.0.35".
label=linux # Метка для Linux-системы.
root=/dev/hda1 # Расположение корневого
раздела
# нового диска. Измените
это в
# соответствии с Вашей
системой
read-only # Монтировать раздел
сначала "только
# для чтения", для запуска
fsck.
(Только для Slackware: Используйте "image=/vmlinuz".)
Благодарности:
Выражаем благодарность Scott Christensen, Frank Damgaard, Alexandre Fornieles, David
Fullerton, Jerry Gaines, Chris Gillespie, Nicola Girardi, Per Gunnar Hanso, Richard Hawes,
Ralph Heimueller, Gerald Hermant, Andy Heynderickx, Paul Koning, Hannu Liljemark, Claes
Mansson, Rick Masters, Jason Priebe, Josh Rabinowitz, Douglas Rhodes, Valentijn Sessink,
Kragen Sitaker, Stephen Thomas, и Gerald Willman.
Этот документ может быть переведен на любой язык. Если Вы сделали это, пожалуйста
отправьте копию перевода Konrad Hinsen <hinsen@cnrs-orleans.fr>.
Copyright 1999 SW Interactive
www.swinteractive.com
//
Оболочка (Shell)
Оболочка переходит к выполнению системного профайла оболочки (/etc/profile) и вашего персонального профайла (обычно файл .profile в вашем домашнем каталоге), и, наконец, выводит на терминал приглашение команды ($ или %). В этот момент вы узнаете, что зарегистрированы, а наше путешествие заканчивается.
Оболочки
Автор: Денис Колисниченко, dhsilabs@mail.ru
Опубликовано: 31.07.2002
Оригинал: http://www.softerra.ru/freeos/19209/
Программы-оболочки.
Интерпретатор bash
Командный язык bash
Переменные. Массивы. Специальные переменные. Арифметические выражения Подстановка переменных. Подстановка значений. Управляющие структуры. Циклы. Подоболочки