А была ли жизнь до консоли?
Давным-давно не было персональных компьютеров. А были большие машины, на которых работали одновременно десятки людей. У каждой машины были терминалы, которые ставились на тогда еще 25-пиновые COM-порты. Передача данных через такой порт была крайне медленной, а потому о графической среде просто не знали. Как не знали о манипуляторе "мышь". На каждого пользователя был один текстовой дисплей и одна клавиатура. Часто пользователи находились в разных концах страны. Но как-то работать все-таки было надо, и для этого были созданы правила:
Каждый пользователь, независимо от своего родного языка, географического местоположения и ширины канала связи, должен иметь все (ну или почти все) возможности, которые предоставляет компьютер. Каждый пользователь должен тратить минимальное время на выяснение где находится и как называется та или иная программа. При этом у него не должно возникать необходимости общения с другими пользователями. Каждый пользователь не должен иметь возможность совершения противоправных действий. Админ (здесь он называется root) это тоже пользователь, а потому все вышеперечисленное относится и к нему, т.е. он должен иметь возможность для любого конфигурирования компьютера из любой точки земного шара (понятно, при наличии в этой точке доступа к сети) на практически любом канале связи. "И стала консоль..." Пожалуй, этими словами можно начинать любую книгу о UNIX, ведь идеологически UNIX и консоль неразделимы. А что можно сделать с любой консоли? Прочесть, удалить и запустить файл или директорию. Вот из этого минимума и складывается практически вся работа. Но столь небольшое количество возможностей легко позволяет выполнить все требования.
Итак, самое главное, что должен знать любой человек при начале работы с UNIX (или его клоном), это организация его файловой системы. Она строится независимо от любых физических устройств, как-то винчестеров, сменных дисков, сетевых устройств и др. В ней все представляется файлами и каталогами. И все файлы и каталоги лежат на своих местах. В Linux (в других клонах это может незначительно различаться, но здесь и далее я буду давать примеры только из Linux) есть корневой каталог, который обозначается /. В нем расположены каталоги первого уровня. /bin - каталог исполняемых файлов и ярлыков к ним
/sbin - то же самое, только исполнять эти файлы имеет право только root
/root - домашний каталог root'а
/home - там расположены домашние каталоги других пользователей
/boot - каталог в котором расположены файлы, необходимые для загрузки
/mnt - каталог подмонтированных устройств (об этом позже)
/usr - второй уровень иерархии
/tmp - всякий мусор
/lib - разделяемые библиотеки
/var - изменяемые переменные (всякий мусор, только в отличие от /tmp, принадлежащий root'у)
Набор системных директорий: /dev - директория устройств
/proc - директория файловой системы proc
/etc - директория для файлов конфигурации
Если вы знаете, что где лежит, то вы можете этим спокойно управлять. Например, моя видеокарта Riva TNT2 находится в директории /dev и называется /dev/nvidia1.
А про реестр Windows вы не забыли?
Далее нам необходимо установить реестр по умолчанию, который в точности соответствует реестру, который есть на любой Windows-машине. Но перед этим надо не забыть немного подправить файл /etc/ld.so.conf . Для этого мы просто добавляем в него строку /usr/local/lib/wine [Здесь будьте особенно внимательны -- возможно ваша версия Wine собрана с другим ключом --prefix. Например, /usr. Соответственно, и пути поменяются. Прим.ред.], которая указывает на расположение библиотек, необходимых программе для имитации Windows-окружения.
Да, и не забудьте запустить /sbin/ldconfig после этого.
Итак, теперь мы можем использовать regapi, чтобы установить реестр по умолчанию. В каталоге с исходниками Wine выполните следующую команду:
programs/regapi/regapi setValue < winedefault.reg
Неплохо бы взять "родной" regedit.exe -- тогда у вас появится возможность "резвиться" в файле реестра. Если сделаете это, то заодно раскомментируйте в секции [DllOverrides] строку: "C:\\windows\\regedit.exe" = "native, builtin" Если нужно, исправтье путь к regedit.exe. Прим.ред.
От редактора:
А про шрифты вы не забыли?
Всё, что описал Gaurav, конечно, в тему. Но есть ещё один очень важный момент в настройке Wine -- шрифты. Для получения качественных шрифтов в Wine, необходимо в системе настроить и зарегистрировать ttf-шрифты. Идеальным вариантом будет скачать (опять обращаемся к Sisyphus) пакет ttf-шрифтов от Microsoft (ms-ttf-1.0-alt5.src.rpm). Затем правим (если нужно) в ~/.wine/config два раздела, [Fonts] и [FontDirs]. Получается примерно следующее:
[fonts] "Resolution" = "96" "Default" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r" "DefaultFixed" = "-monotype-courier new-*-*-*--*-*-*-*-*-*-koi8-r" "DefaultSerif" = "-monotype-times new roman-*-*-*--*-*-*-*-*-*-koi8-r" "DefaultSansSerif" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r"
[FontDirs] "dir1" = "/usr/X11R6/lib/X11/fonts/msttf"
Само собой разумеется, что каталог (или каталоги) меняется в зависимости от того, куда именно вы установили ttf-шрифты.
Кроме этого можно поиграть с антиалиасингом и способом и местом рендеринга шрифтов (на стороне клиента или сервера):
[x11drv] ... "ClientSideWithRender" = "Y" "ClientSideWithCore" = "Y" "ClientSideAntiAliasWithRender" = "Y" "ClientSideAntiAliasWithCore" = "Y" ...
Если же вам не нужен антиалиасинг в приложениях Windows, то выставите значение двух последних опций в "N".
А теперь давайте всё это подпалим!
В принципе, уже сейчас после произведённой ранее настройки можно попробовать запустить какое-нибудь простое Windows-приложение. Попробуем обычный калькулятор, который идёт в стандартной поставке Windows ("calc.exe").
Вы можете примонтировать раздел с Windows или скопировать calc.exe"
с дискеты в вашу систему в каталог "/c/windows" и запустить его одним из нижеуказанных способов:
cd /c/windows; wine calc.exe
wine /c/windows/calc.exe
wine "c:\windows\calc.exe"
Здесь вы можете посмотреть как выглядит это приложение на моей Линукс-машине. Здорово, не правда ли! (факт запуска калькулятора несомненно крут, но к тому, что на заднем плане это уже не относится, особенно после KDE 3.1 ... - прим. перев. )
А вы это знаете?
Надеюсь, что предлагаемые ниже полезности помогут при изучении Linux.
Потеряли файл на огромном диске. Сколько времени, Вы думаете, у Вас займет его поиск? 10 минут? 20? Для Linux эта операция займет всего несколько секунд:
$ locate file
где file -- часть имени файла, которую вы помните.
Дело в том, что Linux ведет базу данных по всем файлам и команда locate просто обращается к этой базе. Правда, для своей работы база требует постоянного обновления, которое происходит раз в сутки, по умолчанию где-то часа в 4 утра.
Возможно, вас удивляет, что означают все эти разные файлы, расположенные тут и там. Linux и здесь не оставляет вас один на один с неизвестным.
Попробуйте следующую команду, которая идет с любым Linux:
$ file unknown_file.ufx
Правильно, вам будет выдано подробное объяснение, что это за файл. Уже вошли в азарт? Зачем десять раз набирать одно и тоже! Команда
$ file *
покажет вам, что все эти файлы означают.
До сих пор не поймете, откуда они взялись у вас в системе? Тогда Linux RedHat (и некоторые другие дистрибутивы Linux) вам охотно помогут.
Предположим, что вы забрались в каталог /usr/bin и хотите знать, откуда у вас программа dig и из какой она категории. Запускать ее вы опасаетесь (и правильно, мало ли что может делать незнакомая программа; особенно суперпользователю не рекомендуется запускать что попало).
Попробуйте вот что:
$ rpm -qf /usr/bin/dig
Теперь вы знаете, что эта программа их пакета bind-utils-4.9.7-1.
Но из какой она все-таки оперы? Давайте посмотрим подробнее:
$ rpm -qfi /usr/bin/dig
Name : bind-utils Distribution: Manhattan Version : 4.9.7 Vendor: Red Hat Software Release : 1 Build Date: Tue Jun 30 23:58:38 1998Install date: Sun Aug 9 21:08:26 1998 Build Host: porky.redhat.com Group : Networking/Utilities Source RPM: bind-4.9.7-1.src.rpm Size : 319594 Packager : Red Hat Software <bugs@redhat.com> URL : http://www.isc.org/bind.html Summary : DNS utils - host, dig, dnsquery, nslookup Description : Collection of utilities for querying name servers and looking up hosts. These tools let you determine the IP addresses for given host names, and find information about registered domains and network addresses.
Вот так! Этот пакет утилит для сети.
А что еще входит в этот пакет и где оно находится?
$ rpm -qfl /usr/bin/dig
/usr/bin/addr /usr/bin/dig /usr/bin/dnsquery /usr/bin/host /usr/bin/nslookup /usr/lib/nslookup.help /usr/man/man1/dig.1 /usr/man/man1/dnsquery.1 /usr/man/man1/host.1 /usr/man/man5/resolver.5 /usr/man/man8/nslookup.8
Вот-вот. Теперь, если вас эта программа заинтересовала, можно прочитать документацию:
$ man dig
В принципе, можно было и сразу так сделать. Но по пути мы узнали много нового, не правда ли?
Ах, вы прочитали документацию и сочли, что те 319594 байт, которые эта программа занимает, лишние? Что-что? Деинсталлятор? Зачем так сложно! В RedHat Linux ОДИН инсталлятор/деинсталлятор на всех!
Попробуйте (уже как суперпользователь!):
# rpm -e --test bind-utils
Если вам действительно нужно убрать этот пакет, то сделайте приведенную выше команду без ключа --test.
Кстати, ставить программы в RedHat Linux также легко. Вы берете rpm-файл и говорите:
# rpm -ihv myfile-3.14-15.rpm
Вжииик! И программа у вас стоит, изучайте документацию!
А умеете ли вы быстро набирать названия файлов? Сколько времени вам потребуется, чтобы набрать имя уже существующего файла?
This_Is_VeRy_long_file_name_7523854_q.txt
Подождите! В оболочке bash все это название можно набрать за доли секунды (скажем, для использования в программе cat):
$ cat This
А потом нажмите клавишу табуляции:
$ cat This_Is_VeRy_long_file_name_7523854_q.txt
Вот так!
А хотите упрощенно вызывать нужную вам программу? (Предположим, что название команды начинается с at, а само имя длинное). Нет проблем:
$ a
и табуляцию. Не сработало? Значит таких команд несколько. Попробуйте второй раз табуляцию. Ну вот:
at atktopbm atobm atq atrm attraction
Оказывается, нужна третья буква:
$ att
и табуляция дает полное имя команды:
attraction
А вы еще спрашиваете, зачем нужен режим командной строки! Никакой графический интерфейс не позволит вам в долю секунды узнать и вызвать нужную вам программу (причем, программу, которую вы лишь смутно представляете себе по названию).
На экран что-то вывелось и вы не успели прочитать? Для MS DOS это фатально. В Linux можно увидеть пару-тройку уплывших экранов: клавиши SHIFT-PageUp/PageDown вам помогут!
Вы хотите запустить сразу несколько программ? Нет проблем! В Linux можно сделать до 64 виртуальных консолей. Ну а в X Window вы сможете загрузить еще больше терминалов. (И, кстати, не одни вы, а все, кто работает с вами вместе на одной машине.
Переключаться между терминалами очень просто: Alt-F1...12 обслуживают первые 12, а в остальные можно попасть с помощью Alt-влево/вправо.
Сильно сокращает работу на клавиатуре и следующий прием. Предположим, вы часто выполняете некоторую длинную команду, предположим:
# uucico -r1 -d9 -Sremotesys
Если вы уверены, что совсем недавно вызывали эту команду и вам он опять нужна, можно просто набрать:
# !uuc
Все остальное машина домыслит.
Вообще же говоря, стоит внимательно работать с этой возможностью.
Если Вы неуверены, лучше сначала попробовать "понарошку":
# # !uuc
# uucico -r1 -d9 -Sremotesys
Ага! Теперь можно и то, что нужно.
# !uuc
Совсем немного потренировавшись и освоив этот прием, вы будете очень быстро давать команды машине.
Многие спрашивают, почему в Linux, а точнее, в X Window System, нельзя на ходу менять разрешение экрана и глубину цвета.
Первый вопрос в X решается очень быстро: Ctrl-Alt-серый плюс и Ctrl-Alt-серый минус последовательно проведут вас через несколько разных разрешений, на которые способен ваш компьютер.
С глубиной цвета сложнее. Менять ее "на лету" нельзя, но если очень хочется, то можно завести два сервера для X Window!
$ startx -- :0 $ startx -- :1
и по Ctrl-Alt-F7/F8 между ними переходить!
Кстати, в отличие от некоторых других оконных систем, X Window позволяет разбить ваше рабочее поле на несколько частей, сравнимых по размеру с размером экрана. Обычно, в оконных менеджерах по умолчанию настроено 4-6 таких экранов.
Так что вашим окнам не обязательно толпиться на маленьком экранчике...
Установка новой программы (из архива tar.gz): Итак, поиски позади - вы обладатель нужной вам программы app. Обычно программы для Unix распространяются в виде архивов tar.gz (то есть, сначала применяется "архиватор" tar, а затем работает "компрессор" gzip). Если вы - не администратор системы, лучше попросить администратора поставить "нужную всем и так необходимую программу". Иначе установка может не быть завершена до конца (см. ниже)
Прежде всего, выберите (или создайте) пустую директорию, в которой распакованное содержимое архива не будет никому мешать. Предположим, что это директория /home/user/src/newapp.
Скопируйте архив в эту директорию (на всякий случай копию пока не стирайте):
cp app.tar.gz /home/user/src/newapp
Теперь можно заняться распаковкой:
gzip -d app.tar.gz
tar -xf app.tar.gz
Перед нами - распакованное содержимое. Если вы используете mc, предыдущий шаг мог выглядеть просто как нажатие Enter на имени архива. Наша следующая задача - узнать, как установить данную программу.
Прежде всего, посмотрите файлы с названиями README и INSTALL. В них должны быть указания по установке (часто на английском, но пусть это вас пока не смущает)
Если вы получили исходные тексты программы, то вам ее нужно сначала откомпилировать. (Исходные тексты обычно имеют буквы src в названии архива, а бинарная поставка для Linux как правило содержит буквы ELF, тоже в названии архива.)
Если у вас исходные тексты:
если вы ничего не поняли в английском тексте, поищите следующие файлы: configure или Makefile. Они должны называться именно так, а не, скажем, Makefile.in. Если вы видите файл configure, а он должен быть исполняемым фалом, смело попробуйте ввести команду:
$./configure
Полагаю, что слово "error", окруженное звездочками вы не получили, а это значит, что сработала автоконфигурация и вы можете приступить к следующему этапу. Этот этап состоит в указании команды
$make
К сожалению, иногда нужно еще что-то указывать, кроме make. Посмотрите, нет ли в README или INSTALL указаний на этот счет. Частые случаи:
$make all
$make app, где app -- имя программы
Предыдущий шаг (make) должен также закончиться без ошибок. (Вы уже знаете, что ошибка по-английски -- error, А если она особенно нехорошая, то и fatal error). В вашем каталоге должны появиться исполняемые файлы. Теперь вам нужно стать суперпользователем, чтобы установить программу для работы в системе. Заметим, что если у вас нет пароля суперпользователя (это говорит о том, что вы -- не администратор данной системы), то вам следует обратиться к администратору и попросить поставить данную программу. В некоторых случаях вы сможете использовать программу в том виде, в котором она есть, но все-таки лучше установить ее по-хорошему.
Итак, вы даете команду su, вводите пароль суперпользователя и говорите:
make install
(Заметьте, что приглашение теперь не $, а &doubledagger;) Если инсталляция прошла без ошибок -- попытайтесь вызвать программу по ее имени. Обычно программы устанавливаются в каталог /usr/local/bin.
Если у вас бинарные исполняемые файлы:
если в директории есть файл makefile, можно попробовать:
make install
Иначе можно попробовать переписать программу в каталог /usr/local/bin и наслаждаться. Конечно, вам могут потребоваться привилегии суперпользователя.
Если что-то из вышеперечисленного не получилось, другого пути, как внимательно прочитать документацию, просто нет. Впрочем, лучше читать документацию до того, как вы что-то ставите, а не после.
В RedHat Linux и SuSe Linux программы поставляются в так называемых пакетах rpm (package) и их установка происходит по-другому, более просто. Если же у вас система Linux Debian, то там есть свой стандарт пакетов: deb.
У меня есть предложение: если вы знаете какую-то полезность и хотите, чтобы о ней знали все v пишите, лучшие советы будут включены в следующие статьи.
X-Stranger
xstranger@tut.by
Эта статья послана с Linux.HiTECH.BY
http://linux.hitech.by/
AccessXДополнительные услуги для людей с ограниченными физическими возможностями
Имеются ввиду люди у которых подвижность рук (пальцев) ограничена или они вынуждены пользоваться какими-либо маханическими приспособлениями для работы с клавиатурой.
Проблемы, которые могут возникнуть при этом:
Невозможно нажимать одновременно несколько клавиш (например Shift+"буква"). Для решения этой проблемы в XKB предусмотрен режим StickyKeys
("прилипающие клавиши"). В этом режиме вместо одновременного нажатия нескольких клавиш можно нажимать их последовательно. Например, вместо Shift+Control+C можно последовательно нажать клавиши Shift, Control и C. Обратие внимание - не все клавиши должны "слипаться". Правило здесь простое - если клавиша является модификатором и без других кнопок ее нажатие не имеет смысла, то после нажатия такой клавиши XKB ждет нажатия других клавиш, чтобы "слепить" в одно событие. Если и последующие кнопки являются модификаторами (как Control после Shift в нашем примере), то XKB остается в состянии ожидания. И только после нажатия обычной (буквенной клавиши) генерируется event
и XKB возвращается в нормальное состяние.
Кроме того заметьте, что этот режим сам может вызвать проблему если клавиша модификатор нажата по ошибке. Любое следующее нажатие вызовет не то действие, которое хотелось бы. Поэтому в режиме StickyKeys предусмотрена специальная задержка (это настраиваемый параметр) в течении которой XKB ждет следующую клавишу. Если за это время другого нажатия не последовало, то клавиша отпускается. "Дребезг" клавиши при нажатии. Для решения этой проблемы в XKB предусмотрен режим BounceKeys ("прыгающие клавиши"). В этом режиме после первого нажатия на клавишу XKB на некоторое время становится "нечувствительным", то есть не обращает внимание на изменение состяния клавиши и таким образом игнорирует лишние нажатия. Естественно интервал времени "нечувствительности" можно менять. Ошибочное "задевание" клавиш. Имеется ввиду, что человек при перемещении руки от одной клавиши к другой может случайно задеть несколько клавшь, которые нажимать не собирался. Для решения этой проблемы предусмотрен режим SlowKeys ("медленные клавиши"). Смысл его в том, что клавиша считается реально нажатой если она остается в таком состоянии некоторое время (опять же это время можно настраивать). Другими словами, если клавишу нажать и быстро отпустить, то XKB игнорирут такое скоротечное нажатие. Невозможность управлять "мышью". Для решения этой проблемы в XKB предусморена возможность эмулировать события мыши с помощью клавиатуры. Подробнее об этом режиме мы поговорим ниже.
Все эти режимы осуществляются частью XKB модуля, которая называется AccessX. Все режимы можно включать и выключать по отдельности изменяя состяние одноименных "управляющих флагов XKB" (XKB Controls).
Обратите внимание, что само включение режимов AccessX может быть проблемой. (Представьте себе, что человеку нужен режим StickyKeys, а для его активизации нужно нажать сложную комбинация из нескольких клавиш). Поэтому для включения некоторых режимов используются специальные действия:
Если нажать клавишу Shift и удерживать ее нажатой в течении 8 секунд, то включается режим SlowKeys. Если нажать тот же Shift пять раз подряд, то включется режим StickyKeys.
Правда для этого должен быть включен режим распознавания таких "магических последовательностей" (AccessXKeys). Его можно включить
либо указав соответствующий ключ при запуске X-сервера, либо установив нужный флаг в "файле конфигурации XKB", или включить тот же флаг с помощью клавиши с нужным action
(по умолчанию такой клавиши нет, но ее можно предусмотреть в раскладке клавиатуры).
С другой стороны, если один из режимов AccessX включен, а компьютер используется разными пользователями, то человку не имеющему ограничений он может наоборот мешать. Поэтому в XKB предусмотрено автоматическое отключение режимов AccessX, если в течении некоторого времени клавиатура никак не использовалась. Кроме того, режим StickyKeys (эмуляция одновременного нажатия через последовательное) автоматически выключиться, если вы нажмете несколько клавиш действительно одновременно.
Саму возможность автоматического выключения AccessX по таймауту можно (как и другие режимы) включить/выключить соответствующим флагом (AccessXTimeout) в XKB Controls.
И наконец - в AccessX предусмотрен дополнительный режим звуковой индикации всех происходящих событий - начало и окончание всевозможных таймаутов, а также включение и выключение LED'ов. Для того, чтобы лучше ориентироваться в этх событиях (особенно если включено несколько разных режимов AccessX) XKB старается озвучивать их звуками разной длительности и тона (насколько позволяет "железо").
Этот режим, как и другие может быть включен/выключен соответсвующим флагом (AccessXFeedback) в XKB Controls. Кроме того, можно по отдельности включить/выключить озвучивание отдельных событий.
Account expiration time
А здесь администратор задает дату, после которой доступ юзеру в систему будет запрещен. То есть, account юзера сохраняется (и все его файлы тоже), но войти в систему он не сможет (пока не договорится с администратором :-).
Подробнее обо всем этом можно прочитать в соответствующем man'уале.
man 5 passwd.
Иван Паскаль pascal@tsu.ru
ACL
Речь идет о "Списках управления доступом" (Access Control Lists).
Например, в AIX (клон Юникса фирмы IBM) владелец файла может для любого файла составить такой список (acl). По умолчанию, у файла такой список отсутствует. Но, при желании, владелец файла может с помощью специальной утилиты (acledit) "включить" файлу acl и занести туда отдельных юзеров и/или группы, для которых он хочет задать особые права на файл. Естественно, он может как "расширить" права отдельным юзерам (например, дать право записи), так и "сузить" (то есть, наоборот - убрать все права доступа для отдельных юзеров).
Права задаются так же, как для отдельной категории юзеров в обычных файлах, то есть - тройка битов rwx.
При наличии acl'я система определяет права конкретного юзера по отношению к файлу в следующем порядке
если юзер есть в списке, то права берутся оттуда если юзера нет в списке, но есть группа, членом которой он является, то применяются права для этой группы и, наконец, если ни юзера, ни группы в списке нет, то проверяются обычные permissions для этого файла.
Итак. Если описанные выше решения проблем вас никак не удовлетворяют, то могу дать еще один совет - смените Юникс, на такой, который поддерживает acl. Или ждите, пока эта поддержка появится в вашем любимом клоне Юникса. :-)
Иван Паскаль pascal@tsu.ru
Action
Описывает "действие". Подробнее об этом читайте "Описание действий".
Здесь замечу, что "действие" также может быть "пустым". Если "интерпретация" нужна для того, чтобы перенести не "действие", а только "флаги" или "виртуальный модификатор", то ее описание может выглядеть как
interpret ... { repeat = False; locking = True; action = NoAction(); };
Actions
Аналогично предыдущему объявлению, только задает не список символов, а список "действий" для данной клавиши. Имеет такой же вид как объявление symbols, только вместо "имен символов" должны быть описания "действий". Немного подробнее об этих описаниях смотри "Описание действий".
Здесь замечу только, что если какой-то уровень не имеет соответствующего "действия", можно использовать специальное название - NoAction().
Addgroup
Комманда addgroup может использоваться не только для создания новой группы, но и для добавления юзера в существующую группу. Например, команда
addgroup games vasia
добавит юзера vasia в группу games.
Пожалуй это тот редкий случай, когда проще воспользоваться специальной командой, чем редактировать файл /etc/group. Но будьте осторожны - если вы случайно ошибетесь в названии группы, эта команда молча создаст новую группу и впишет юзера в нее.
Adduser
Это самая "продвинутая" программа для добавления нового юзера. Она задает вопросы касающиеся нового юзера, сама проверяет имя и user ID на уникальность (причем, для user ID она сама предложит подходящее значение), создает домашнюю директорию для юзера и копирует туда заготовки настроечных файлов, и даже может послать приветственное письмо вновь зарегистрированному юзеру. Естественно, она же делает запись в БД учетных карточек.
Однако, если вам нужно зарегистрировать не обычного юзера, то она вам только помешает.
Например, вам нужно зарегистрировать "почтового юзера". Для такого юзера не нужна домашняя директория (а тем более заготовки стартовых файлов) и Shell у этого юзера должен быть нестандартный. Так вот - заставить эту программу не делать домашнюю директорию очень трудно (если вообще возможно). Кроме того, она не даст вам указать в качестве Shell произвольную программу.
Поэтому, в этой ситуации, вам придется либо подчищать за ней все лишнее, что она сделает, либо обратиться к другим способам создания учетной карточки.
Администрирование
Consortium Deamonicum
Я где-то читал, что администрирование UNIX - это на 60% знание конфигурационных файлов в /etc, на 20% - логов в /tmp и /var, на 10% файловой системы /proc, и только уделяется 10% остальным корневым каталогам. Пожалуй, это действительно так. Ведь в каталоге /etc находятся практически все управляющие файлы вашей системы. Если здесь я буду указывать файл shadow, то следует понимать, что он имеет полное название /etc/shadow. А если rc.d/rc1 - то /etc/rc.d/rc1. Управление Windows сводится, согласно их "frendly" и "easy-to-use", к постановке галок и нажатиям кнопок, а сам интерфейс подобен наколотым в разных местах пометочным листам. Если вам вдруг, захочется заглянуть поглубже, то, скорее всего, это не удастся, а если вы вдруг запортите один из листочков, то придется "переустанавливать систему". Управление Linux и UNIX аналогично тетради, которая всегда лежит в одном и том же месте и заполнена страничками-файлами. Для того чтобы получить полный доступ к возможностям системы достаточно прочесть эту тетрадь. Для облечения чтения этой тетради, на ее полях написаны примечания и комментарии. Если вдруг испортите одну из страничек, то просто создайте новую.
Администрирование UNIX системы сводится к нескольким основным моментам - это обеспечение нормального функционирования системы, работы пользователей и работы сетевых служб, а также установка новых программ и патчей. Обеспечение работы пользователей на сегодняшний день почти полностью автоматизировано специальными программами, например adduser.
Не рекомендуется менять эти настройки вручную через простой текстовый редактор, поскольку он может поменять не то, что нужно (например, маску доступа), а как раз то, что необходимо, вы забудете изменить.
Система предоставляет удобный интерфейс, который позволяет создать пользователя (в этом работа администратора сравнима с божественной), убить (а в этом с работой киллера), закрыть доступ к системе в течение определенного времени (это уже работа тюремного надзирателя), а также сделать массу неприятных для них штук. А потому пароль рута - это самая желаемая цель любого хакера. Следует очень внимательно оберегать этот секрет, не доверяя никому. (Автор и его друзья, в бытность юзерами, 4 раза по разным причинам угадывали пароли админов.)
Для обеспечения достаточной безопасности существует система теневых паролей. Они находятся в файле shadow, доступ к которому имеет только root. Каждый раз, когда кто-либо вводит логин и пароль, активируется механизм PAM (Pluggable Authentication Modules). Он разработан в связи с тем, что многим программам требуется авторизация пользователя, как например login, ftp, telnet и др. После получения пароля, модуль PAM, который имеет приоритет root'а, выполняет его шифрование, а затем сравнивает с зашифрованным значением из файла shadow. Это шифрование одностороннее, т.е. зная шифр нельзя узнать пароль, по крайней мере, в ближайшие 10000000 лет. Однако существует механизм позволяющий подобрать пароль при известном шифре (например, программой crack) с помощью простого перебора, если доступен файл shadow. Для защиты от таких взломов, shadow имеет владельца root, и маску доступа 600.
Другим механизмом защиты от пользователей реализованным в adduser, является система дисковых квот. Каждый юзер любит набить свой каталог всяким хламом, игрушками и порнухой. Если диск переполняется, то могут случатся самые неожиданные вещи, вроде полного отказа системы. А потому следует устанавливать квоты таким образом, чтобы в полностью заполненном состоянии оставалось не менее 20% свободного места. Имеется 2 вида квот - мягкие и жесткие. Нарушение жестких квот невозможно, тогда как при нарушении мягкой квоты пользователю выдается предупреждение о том, что через определенный промежуток времени следует освободить незаконно занимаемое дисковое пространство. По истечении этого срока пользователь просто не может зайти в систему, а админ получает сообщение о превышение мягкой квоты пользователем lamer.
Админ должен защищаться и сам. Существует несколько простых методов безопасности, которые должен выполнять любой root. Во-первых, никогда не следует заходить в систему под логином root. Для того, чтобы нормально работать как root, существует простая программка su (SuperUser). Если в shell ввести su, а затем пароль root'а, то можно получить все необходимые возможности. Никогда не следует отходить от открытого компьютера, не забывайте про logout. Пользоваться su следует очень осторожно, только по необходимости, затем немедленно logout. Пароль админа должен быть уникальный (шедевры вроде kozlik4 оставьте при себе), и нигде более не употребляться и не записываться.
Не менее серьезную дыру в безопасности представляют собой альтернативные загрузочные устройства, как-то флоппик и привод CD-ROM. Для простой работы они обычно не нужны, а потому их очень полезно отключить. Не следует в этом деле доверяться паролю на биосе, поскольку большинство материнских плат, помимо паролей для administrator и user, имеет еще и пароль для manufacturer (который, понятно, не меняется). Пускай юзеры пользуются новейшим достижением компьютерной мысли, более известным как локальная сеть.
Я малость отвлекся на больную тему всех админов, но продолжу. В директории /etc находится большое количество разнообразных файлов, а не только shadow. Есть там и развлекательные вещи. К таким несерьезным (но очень интересным) настройкам относятся issue и motd. В issue приглашение, которое выводится перед login. В серьезных системах это обычно ее описание, или, проще говоря, самореклама местного админа, для остальных - сообщение вроде "Заходи тихо, проси мало, уходи быстро". Файл motd содержит сообщения, которые в произвольном порядке получает пользователь сразу после входа в систему. В Windows есть аналогичное Tip of day, или "Сообщение дня", как правило, глупое и скучное. А в файл motd можно сунуть все что угодно, а не только приторную радость операционной системы от вашего присутствия, например полторы сотни коротких анекдотов или законы Мерфи. Мне даже известен один слабо одомашненный компьютер, который виртуозно ругался матом. Если вы только начинаете знакомиться с системой, то сначала следует "поменять мебель", т.е. motd или issue.
В конце предыдущего раздела я обещал подробно рассказать о конфигурации загрузчика lilo. Он управляется конфигурационным файлом lilo.conf. Поскольку lilo умеет загружать не только Linux, но и другие операционные системы вроде Windows, DOS, OS/2 и т.д., то его конфигурация должна учитывать и их особенности. Файл lilo.conf имеет заголовок, который описывает общую работу загрузчика и секции по каждой операционной системе.
#Файл lilo.conf
#Заголовок
#
#Положение загрузчика, в данном случае в начале диска
boot=/dev/hda1
#Положение корневой файловой системы (не путать с администратором)
root=/dev/hda2
#map-файл, создается автоматически
map=/boot/map
#Графический режим загрузки
vga=normal
#Задержка для выбора
delay=30
#Секции
#Linux
image=/boot/bzImage-2.4.4
label=linux-2.4.4
#Не забудьте указать следующую строку
read-only
#Команда, подаваемая ядру Linux
append="ether=10,300,eth0"
#Windows, содержит указатель на загрузчик и таблицу разделов
other=/dev/hda3
table=/dev/hda
label=win
#Old Linux kernel
image=/boot/oldkernel
label=oldkernel
read-only
append="ether=10,300,eth0"
После того, как вы внесли какие-нибудь изменения в lilo.conf, следует их активизировать, запустив загрузчик командой lilo или /sbin/lilo. В команде,подаваемой ядру, обычно содержится информация об активных сетевых интерфейсах. Обратите особое внимание, на то что в этой строке запрещены пробелы. Если в ней присутствует пробел, то ядро воспримет это как следующую строку!
Ядро приводит к запуску основного процесса системы init - это предок всех процессов, остальные процессы являются его потомками. Каждый процесс имеет свой номер и приоритет, номер init - 1 (один). Но сам по себе init конечно не знает, какие процессы ему следует запустить. Для этого служит группа файлов (понятно, в каталоге /etc). Основной файл этой группы называется inittab, и он определяет уровни выполнения. Каждая строка в этом файле имеет вид
id:runlevel:action:process
А все строки, начинающиеся с #, считаются комментариями. (Короткое замечание о комментариях. Они так обозначаются практически везде, это не C. Всегда читайте комментарии, в них часто написано гораздо больше полезного и интересного, чем в мануалах. Всегда когда меняете какой-либо параметр, сначала закомментируйте старое значение, а потом пишите новое.)
Теперь подробнее о inittab
id - Параметр строки, каждая строка должна иметь уникальный id. runlevel - Уровни исполнения, обозначаются числом от 0 до 6. action - Действие выполнения, различаются множественные и однократные. process - Имя запускаемого процесса.
Иногда требуется, чтобы уже работающая система перечитала inittab без перезгрузки. Выполните команду kill -HUP 1. init также управляет выключением и перезагрузкой системы. Значения runlevel отвечают следующему
0 - Выключение системы.
1 - Однопользовательский режим.
2-4 - Различные режимы нормальной работы.
5 - Загрузка с графической средой.
6 - Перезагрузка.
Когда init запускается, он ищет в inittab строку, которая определяет уровень загрузки по умолчанию
id:5:initdefault:
В данном случае, это загрузка с графической оболочкой. Для работающей системы параметр initdefault меняется командой telinit. Менять остальные параметры сценариев загрузки требуется редко, и для этого надо знать язык программирования shell.
В средневековье была наука под названием "демонология". Предметом ее изучения была связь демонов с человеком, поскольку тогда считалось, что человек не может познать связь демонов между собой. Но работа с Linux вынуждает заниматься именно этим. Демоны существуют в каждом компьютере, на котором стоит операционная система семейства UNIX. (Windows демоны переименованы в сервисы, т.е. в слуг или рабов, однако называть всех демонов слугами неправильно, есть огромное количество диких демонов.) Демоны запускаются процессом init и живут до того, как их не прикончит Бог (root) или плановый Армагеддон (shutdown). Демоны управляют практически всем в системе, и внутренними ресурсами и сетевыми соединениями. Запускаясь, демон сообщает об этом, также он сообщает, удалось ли это ему. Кстати, это противоречит спецификациям Microsoft pc99 и pc2001, согласно которым, человек не должен знать, какие сервисы в данный момент находятся в системе. Вот и думай после этого, кто демон, а кто слуга. Я приведу сокращенный список домашних (т.е. несетевых) демонов, а потом опишу некоторые подробнее.
crond | Большой Демон Времени. Выполняет периодические команды. |
anacrond | Малый Демон Времени. |
atd | Демон Часов, выполняет однократные команды, заданные на определенное время. |
gpm | Демон Консольной Мыши. Вообще говоря, не нужен, поскольку мышь в X Windows работает без некого, а в "чистой" консоли мышь пользуются крайне редко. |
kerneld | Демон Ядра. |
moduled | Демон Модулей Ядра. |
syslogd | Демон-Архивариус. Записывает все что происходит, необходим для работы. |
lpd | Демон Печати, управляет принтерами. |
pcmciad | Демон PCMCIA-устройств. |
dbflush | Демон Синхронизации Файловой Системы. |
autofsd | Демон Монтирования Файловых Систем. |
Для удобства восприятия и удовлетворения идеологии устройства в UNIX передаются файлами. Это так называемые специальные файлы, или файлы устройств. Каждый файл имеет описание, и если обычный файл помещает его в заголовке, то файл устройства прячет его в драйвере. Существует соглашение, что все используемые файлы устройств находятся в каталоге /dev. Их там очень много, это произошло не потому, что у вашего компьютера так много устройств, а для того, чтобы пользователю не приходилось их добавлять самостоятельно. Непосредственно работать с файлами устройств приходится крайне редко, а если и приходится, то работа эта полностью автоматизирована. Полезно пожалуй знать что для этого существуют скрипты /dev/MAKEDEV и /dev/MAKEDEV.local. Однако довольно часто приходится обращаться к этим устройствам, а потому полезно знать как расшифровываются их названия. Я приведу несколько примеров по которым легко это понять
/dev/hda | IDE Primary Master |
/dev/hdb | IDE Primary Slave |
/dev/hdc | IDE Secondary Master |
/dev/hda1 | Первый раздел на hda |
/dev/cdrom | обычно мягкий линк на обнаруженный CD-ROM |
/dev/fd0 | первый дисковод |
/dev/ttyS0 | COM1 |
/dev/ttyS1 | COM2 |
/dev/ps2mouse | обычно мышь PS/2 |
/dev/nv | видеокарта nVIDIA |
/dev/nvidia1 | видеокарта nVIDIA в понимании nVIDIA |
/dev/modem | обычно мягкий линк на порт модема (не рекомендуется) |
cp /home/newbieroot/myfile /dev/hdb1
с привилегиями root'а запросто уничтожит файловую систему на первом разделе диска hdb (или диска d: в DOS), поскольку скопирует файл myfile в устройство /dev/hdb1 ПОСИМВОЛЬНО, начиная с первого сектора!
Дальше >>
Источник - LinuxBegin.ru
http://linuxbegin.ru
Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article142.html
Администрирование групп (пользователей)
Что такое группа?
Где хранится информация о группах?
Сколько может быть групп, юзеров в группе, групп у юзера?
Как создать или удалить группу?
Как поменять принадлежность юзера к группе (группам)?
Иван Паскаль pascal@tsu.ru
Что такое группа?
Где хранится информация о группах?
Сколько может быть групп, юзеров в группе, групп у юзера?
Как создать или удалить группу?
Как поменять принадлежность юзера к группе (группам)?
Иван Паскаль pascal@tsu.ru
Что такое группа?
Где хранится информация о группах?
Сколько может быть групп, юзеров в группе, групп у юзера?
Как создать или удалить группу?
Как поменять принадлежность юзера к группе (группам)?
Иван Паскаль pascal@tsu.ru
Администрирование Linux на лету
Graham White, 14.05.2003. Перевод - Валерий Абросимов
Содержание:
Изменение параметров работающего ядра
Внесение изменений
Выполнение постоянных установок ядра
Команды для настройки системы
Заключение
Источники
Файловая система /proc - это одна из величайших особенностей Linux и эта статья проведет вас по наиболее полезным ее аспектам. С ней вы сможете администрировать многие детали вашей системы без необходимости перезагрузки машины.
Любой, кто администрировал систему коммерческой важности, знаком с головной болью из-за падения системы. Одной из основных причин, по которой компании запускают UNIX сервера, является их стабильность. При аккуратном администрировании такой сервер не приходится перезапускать в течение очень долгого времени. Более того, выполнение администраторских задач, даже на уровне ядра, может выполняться на лету, сохраняя стабильность сервера. Вам может понадобиться перезапустить сервер при апгрейде оборудования или если кто-нибудь оборвет питающий провод, однако большую часть администрирования можно выполнять без этого. Эта статья включает подсказки и советы для выполнения различных административных задач и изменения вашей системы без перезагрузки.
Linux позволяет вносить изменения в систему и устанавливать различные параметры во время работы многими способами. Есть две основные формы, общие для всех систем Linux, которые заложены в ядро (вы можете найти много информации о ядре Linux и загрузить исходный код ядра из архивов; см. Источники), а также в том ядре, которое идет в дистрибутиве. В этой статье рассматриваются оба способа.
Внимание: Эта статья написана для ядер серии 2.4-х. Некоторые опции и возможности могут отличаться в ядрах других серий.
Администрирование пользователей (юзеров)
Что такое "учетная карточка" (user account)?
Какие данные хранятся в учетной карточке?
Для чего используется учетная карточка?
Где хранятся учетные карточки?
Как добавить юзера?
Как поменять данные в учетной карточке?
Как удалить юзера?
Что может поменять сам юзер в своей учетной карточке?
Как временно убрать юзера (не удалить, но запретить вход)?
Что еще почитать?
Иван Паскаль pascal@tsu.ru
Alan Ward
Алан преподает компьютерные науки в Андорре на уровнях высшей школы и университета. Его увлечениями также являются научная фотография (как цифровая, так и традиционная), треккинг, рок и коллекционирование процессоров.
AllowExplicit
Логический флаг, который разрешает (запрещает) прикладным программам включать/выключать индикатор. Обратите внимание, конечно, для включения/выключения индикатора прикладная программа посылает специальные запросы к XKB. Но XKB по этим командам только меняет (если это разрешено) только состояние индикатора, не затрагивая свое "состояние". Естественно, при этом состояние индикатор может не соответствовать состоянию XKB.
Поскольку allowExplicit является логической переменной, справа от присваивания должно быть только True или False.
Можно также использовать другую форму этой инструкции. Так, просто указание
allowExplicit;
эквивалентно
allowExplicit = True;
а строчка
!allowExplicit;
эквивалентна
allowExplicit = False;
По умолчанию этот "флажок" - True. То есть, прикладным программам разрешено менять состяние индикатора, помимо "состояния клавиатуры".
Alock и ashift
Следующие два модификатора - alock (Alt Group Lock) и ashift (Alt Group Shift). Они действуют на другие клавиши одинаково, причем, на все клавиши. Разница только в том, что alock "фиксирующаяся" (как clock и nlock), а ashift - "не фиксирующаяся" (как и обычный shift).
Действие же этих модификаторов заключается в том, что в состоянии AltGroup syscons к скан-коду каждой клавиши добавляет постоянное смещение (а именно - 128), а только после этого подбирает подходящее значение из таблицы "раскладки клавиатуры".
То есть каждая клавиша имеет как бы два разных скан-кода, один в обычном состоянии и другой скан-код (на 128 больше) в состоянии AltGroup. Таким образом получается для того же набора физических кнопок еще одна раскладка - "альтернативная".
Обычно альтернативная раскладка используется, чтобы на "буквенные" клавиши "навесить" буквы (точнее, коды букв) какого-нибудь национального языка, алфавит которого отличается от английского. По крайней мере, именно эта "альтернативная раскладка" используется для русификации клавиатуры.
Таким образом, руссифицированная раскладка отличается от обычной тем, что в нее дописывается еще столько же строчек (сколько в обычной) с номерами скан-кодов больше на 128. При этом, для "небуквенных" клавиш все значения обычно такие же, как и в первой части таблицы, а для "буквенных" подставляются соответствующие коды русских букв. (Надо отметить, что в дистрибутиве FreeBSD есть раскладки для кодировок koi8 и cp866. Если вам захочется иметь раскладку для cp1251 ее можно изготовить самостоятельно).
Естественно, что по умолчанию эти два модификатора не назначены ни на какие клавиши. Но если загружается одна из русских раскладок, то alock присвоена клавише [Caps Lock], но только в первой колонке. То есть в таком качестве [Caps Lock] выступает только тогда, когда не нажат ни один из основных модификаторов (shift, ctrl или alt). Если вас это не устраивает и вы хотели бы, чтобы [Caps Lock] была именно CapsLock'ом, можно "подвесить" alock на любую другую клавишу или комбинацию клавиш (например "два Shift'а" или "Ctrl+Shift"). Подробнее можете посмотреть в "Несколько примеров изменения назначения клавиш"..
Значение ashift в стандартных раскладках отсутствует (даже в русских). Если она вам нужна, выберите подходящую для нее клавишу и отредактируйте соответствующий файл "раскладки клавиатуры".
Альтернативный способ доступа к физическим дискам
Когда есть необходимость в обмене данными между базовым компьютером и виртуальным, один и тот же диск можно подключать к этим компьютерам поочередно. Для этого потребуется вначале смонтировать раздел в базовой ОС Linux, перенести в него необходимые данные, размонтировать диск, запустить VMware и виртуальный компьютер, скопировать данные на виртуальный диск, выключить VMware и вновь отдать диск базовой ОС. Конечно, такой способ обмена данными очень неудобен. Кроме того, подключить физический диск к виртуальному компьютеру удается не всегда. Очевидная причина затруднений может состоять в том, что на физическом диске создана файловая система, с которой не умеет работать ОС виртуального компьютера. И хотя можно пытаться установить специальные драйверы, делать этого не стоит, поскольку обмен данными с базовым компьютером, как и со всем остальным миром, можно организовать с помощью сетевых средств.
Поддержка сетевых возможностей в операционной системе виртуального компьютера осуществляется с помощью виртуальных Ethernet-плат. К одному виртуальному компьютеру можно подключить до трех таких плат; они «представляются» операционной системе как платы типа AMD PCnet PCI. Большинство операционных систем распознают такие платы и автоматически подключают соответствующий драйвер. Кроме того, вместе с VMware на базовом компьютере устанавливаются специальные драйверы, которые организуют четыре виртуальных сетевых интерфейса: vmnet0, vmnet1, vmnet2 и vmnet3. Каждый интерфейс ассоциируется с виртуальным Ethernet-концентратором, через который к базовому хосту можно подключить любое число виртуальных компьютеров. Обычно vmnet0 используется в варианте «Bridged networking», vmnet1 — для «Host-only networking», а оставшиеся два интерфейса — для «Custom networking».
Начиная с версии VMware Workstation 2.0 для Linux одновременно с системой VMware на базовом компьютере можно установить сервер Samba, который необходим для предоставления ресурсов базового компьютера через сеть. Правда, сервер этот слегка модифицирован по сравнению с обычным сервером Samba, чтобы обеспечить поддержку виртуальных Ethernet-плат. Вообще говоря, можно запустить на базовом компьютере одновременно как стандартный сервер Samba, так и тот его вариант, который поставляется вместе с VMware Workstation. Однако версия стандартного сервера Samba должна быть не ниже 2.0.6 и его следует корректно сконфигурировать; определить версию Samba можно командой smbd -V, а для его корректной настройки в VMware предлагают воспользоваться примером конфигурационного файла smb.conf, размещенном на сайте компании.
При создании виртуального компьютера можно отказаться от конфигурирования сетевой поддержки [1], однако чтобы такую поддержку задействовать, придется переустановить VMware. К счастью, сделать это очень просто, причем при переустановке не нарушается конфигурация созданных в системе виртуальных компьютеров (в частности, сохраняется вся информация, записанная на виртуальных дисках). И конфигурация виртуальных машин, и все относящиеся к ним файлы хранятся в двух подкаталогах домашнего каталога пользователя, создавшего виртуальный компьютер: ~/vmware и ~/.vmware. Эти каталоги не изменяются при переустановке ПО VMware, и ранее созданные виртуальные машины после такой переустановки будут снова запускаться без проблем (по крайней мере, если не менять версии ПО). Для того чтобы переустановить VMware, ее надо сначала удалить, а потом установить заново. Если она устанавливалась из RPM-пакета, то переустановка выполняется командами
[root]# rpm -qa | grep VMware
(позволяет узнать точное имя установленного пакета, которое требуется, например, в следующей команде)
[root]# rpm -e VMware-2.0.3-799 [root]# rpm -Uhv VMware-2.0.3-799.i386.rpm
Перед запуском третьей команды надо перейти в каталог, где располагается указанный пакет. Если ОС устанавливалась из tar-архива, то для ее удаления надо запустить скрипт vmware-uninstall.pl.
После переустановки нужно определиться с вариантом подключения — «Host-only» или «Bridged», а затем запустить скрипт vmware-config.pl и теперь уже не пропускать этап задания конфигурации сети. Выбор варианта конфигурации сетевых средств определяется ответами на вопросы этого скрипта.
Первый вопрос призван определить, будет ли на базовом компьютере установлен вариант сервера Samba от VMware. В данном случае требуется еще решить, задать ли IP-адреса самостоятельно или предоставить их выбор скрипту. Если будет использоваться вариант «Bridged networking», то следует указать реальный адрес, полученный от администратора сети. Если же решено создать виртуальную сеть («Host-only networking»), то лучше предоставить выбор адресов скрипту; впрочем, и в этом случае можно задать адреса самому.
Если же на первый вопрос ответить отрицательно, то следующий вопрос призван выяснить, будет ли вообще поддерживаться сеть. В случае же утвердительного ответа скрипт еще раз интересуется, не нужно ли сконфигурировать вариант «Host-only networking». Если ответить «нет», то может использоваться только вариант «Bridged networking», о чем свидетельствует следующее сообщение:
Starting VMware services: Virtual machine monitor [ OK ] Virtual ethernet [ OK ] Bridged networking on /dev/vmnet0 [ OK ]
Интерфейс vmnet0, используемый для варианта «Bridged networking», задействуется в любом случае, даже если пытаться настроить сетевые службы VMware только на использование варианта «Host-only».
Далее надо запустить VMware, выбрать нужный конфигурационный файл виртуального компьютера (меню «File/»Open»), не запуская виртуальный компьютер, запустить Редактор конфигурации (меню «Settings» > «Configuration Editor») и щелкнуть по значку «+» слева от надписи «Ethernet Adapters». Появятся три дополнительные строки, соответствующие трем возможным виртуальным сетевым платам. Следует переместить курсор на первую из этих строк, щелкнуть по треугольнику возле выпадающего меню выбора типа подключения («Connection Type») и выбрать один из трех возможных вариантов («Bridged», «Host-only» или «Custom»). Вариант «Custom» выбирать не стоит, пока не освоена система VMware. После этого надо щелкнуть по клавише «Install» и сохранить конфигурацию щелчком по клавише «Safe».
На этом установка необходимых сетевых средств VMware завершена. Теперь требуется сконфигурировать сетевые службы операционной системы, запускаемой на виртуальном компьютере. При этом в качестве сетевой платы надо выбрать AMD PCnet PCI Ethernet, а затем либо задать фиксированный сетевой адрес, либо задействовать динамическое получение адреса посредством DHCP.
Подключившись к реальной физической сети, можно «увидеть» другие компьютеры локальной сети (в этом можно убедиться, раскрыв в Windows окно «Сетевое окружение»), а следовательно, и получить доступ и к тем дискам, каталогам, принтерам, которые на этих компьютерах отданы «в общее пользование». Однако ресурсы базового компьютера, скорее всего, еще не видны. Для того чтобы предоставить доступ из Windows к дискам Linux-компьютера, необходимо запустить на последнем сервер Samba и правильно его настроить.
Аппаратное обеспечение
Две машины -- Fish и Bell. Fish -- это Sun E250, а Bell -- Pentium 3 (450 MHz). Они находятся в одной и той же подсети Ethernet.
Арифметические выражения
Подстановка арифметических выражений осуществляется с помощью конструкции
$(( выражение ))
Например,
N = $(( (10+5)/2 ))
echo $N
На экране вы увидите 3, а не 3,5, потому что интерпретатор bash использует целочисленные вычисления.
Количество часов, прошедшее с момента запуски оболочки можно вычислить так:
hrs = $(( $SECONDS/3600 ))
Автоматический запуск коммуникационных программ
Если к компьютеру подкючен модем, он может оказывать различные услуги через телефонные линии (BBS, прием/передачу e-mail, IP-доступ и т.п.). Если один и тот же телефонный вход используется для различных услуг, то возникает проблема - как обеспечить запуск различных коммуникационных программ для разных клиентов.
Одно из решений заключается в следующем. Для каждой возможной услуги регистрируется пользователь, у которого в качестве Shell указывается соответствующая коммуникационная программа.
Например, можно зарегистрировать пользователей:
UUCPuser - для которого запускается программа uucico (из пакета uucp),
PPPuser - для которого запускается драйвер, для связи по протоколу PPP,
SLIPuser - для которого запускается драйвер, для связи по протоколу SLIP.
Теперь, если клиент, позвонивший на модем, введет в качестве Login name PPPuser (например), то для него на этом конце модемной линии включится драйвер PPP и он получит IP доступ по этому протоколу.
Кроме того, любой Unix, всегда запоминает время, когда юзер вошел в систему и когда закончил работу. Поэтому, если каждому клиенту дать отдельное имя (и, естественно, секретный пароль), то можно легко вести статистику - сколько времени каждый клиент занимал ваш телефон.
Особенностью учетной карточки такого юзера, как и в предыдущем случае, является нестандартный Shell. Может отсутствовать Home dir (это зависит от коммуникационной программы, некоторые из них пытаются извлечь некоторые настроечные данные из домашней директории юзера).
Иван Паскаль pascal@tsu.ru
Автоматизация регистрации
Ок, это было занятно, но наша цель в этой статье -- разработать новый тип регистрации -- автоматический.
Наша задача -- заставить выполняться все эти вещи (init, getty, login и shell), кроме приглашения на ввод имени и пароля.
Для этого существует множество способов, однако я написал программу qlogin, которая делает все это очень просто. qlogin выполняет функции getty и login. Она вызывается init'ом, как и getty, а ее последним действием является вызов программы оболочки, как у login.
Итак, все, что нам потребуется для установки -- заменить приведенную выше строку /etc/inittab на такую строку:
c4:235:respawn:/sbin/qlogin /dev/tty5 bryanh
Во время загрузки она, вместо прохождения всей процедуры ввода имени пользователя и его пароля, регистрирует имя пользователя bryanh на виртуальной консоле /dev/tty5.
Учтите, "respawn" в этой строке означает, что по завершении этого процесса init создаст его заново. Т.е. в традиционных Unix-системах ваш выход из оболочки вызовет завершение процесса, запустится новый getty и на терминал будет выведено приглашение регистрации для следующего пользователя. В случае qlogin, при вашем выходе из оболочки ее немедленно заменит новая. Таким образом, если вы хотите полностью обновить свою сессию, то для этого хорошим способом будет ввод команды logout.
Автоматизация регистрации виртуальных консолей
{
Автор: Брайэн Хендерсон [Bryan Henderson], bryanh@giraffe-data.com Перевод: Алексей Саввин, savvin@mail.ru Оригинал [eng]: http://www.linuxgazette.com/issue69/henderson.html
Оригинал [rus]: http://gazette.linux.ru.net/lg69/articles/rus-henderson.html
Номер: __#74__ }
После загрузки Linux на виртуальных консолях вы видите приглашение "login:" и должны на каждой из них набрать свое имя и пароль? Даже если вы -- единственный, кто работает в системе? Хорошо, попробуем это убрать. Можно сделать так, что при каждой загрузке все эти консоли уже будут зарегистрированы и на них будет приглашение командной строки.
Если же вы думаете, что приглашение к вводу пароля необходимо в целях безопасности, подумайте еще раз. Если кто-то имеет доступ к клавиатуре вашей консоли, то он имеет также доступ к вашему дисководу и легко может вставить свою собственную системную дискету и зарегистрироваться, как и вы, в течение трех минут. Это приглашение на ввод пароля нужно так же, как рыбе зонтик.
Авторские права
Авторские права на этот документ принадлежат (c) 1999, 2000 Greg O'Keefe. Вы можете использовать, копировать, распространять или изменять этот документ не взымая за это денег, следуя соглашениям Общественной Лицензии GNU - GNU General Public Licence. Прошу уведомить меня, если вы используете его целиком или частично как часть другого документа.
Авторы
С.Е.С Эртайм -- фан GNU и адвокат свободного ПО с 2000.
Дж. А. Баро -- пользователь Linux и Perl-хакер с 1996.
"Баги" в termcap
Не могу не сказать несколько слов о проблеме соответствия между реальными свойствами терминалов и их описанием в termcap. К сожалению, расхождения случаются довольно часто. И речь не только о
клавише Delete в syscons.
Я сталкивался с несоответствием кодов клавиш у программы xterm и ее описания терминала xterm, а уж всевозможные телнеты из других ОС (MS DOS, MS Windows), хотя и берутся изображать из себя ANSI-терминал или VT100, очень редко делают это полностью в соответствии с termcap.
Что делать в таких случаях? Понятно, что для полного соответствия надо либо исправлять описание в termcap, либо "подправлять" саму программу, эмулирующую терминал. Другой вопрос - что лучше?
Если "поднастроить" программу невозможно, то ответ однозначный - исправить termcap или создать в нем новое описание, специально для конкретной программы- эмулятора.
Другое дело, что большинство таких программ можно "перенастроить" через их файлы конфигурации. В этом случае, обычно, лучше подправить свойства программы.
Ну и, конечно, первым делом надо поискать в termcap наиболее подходящее описание, возможно оно там уже есть.
И, наконец, ответ на вопрос - "что лучше" может отличаться в зависимости от конкретных условий.
Если речь идет о вашем персональном компьютере, куда посторонние не заглядывают, то - "без разницы" как вы добьетесь соответствия.
Если это машина, на которую многие ходят телнетом (или xterm'ом), да еще и с разных платформ, то исправление termcap под одних клиентов может оказаться "багом" для других. Понятно, что в этом случае лучше его не трогать.
А вот если речь идет об организации, в которой всем пользователям ставится одна и та же программа для доступа к Юникс-серверу (да еще и выяснится, что программу уже поставили на многие рабочие станции, а она не "подстроена"), то может оказаться проще все-таки изменить termcap.
Короче, решайте сами :)
Bash
11.1 Настройка
11.2 Упражнения
11.3 Дополнительные сведения
Если вы ввели правильную комбинацию имя пользователя/пароль, login
выберет из файла /etc/passwd шелл, который нужно для вас загрузить. Для Linux систем в большинстве случаев это будет bash. Работа bash заключается в том, чтобы читать ваши команды и следить за тем, чтобы они были выполнены. Он является и интерфейсом пользователя и интерпретатором командного языка.
Как интерфейс пользователя он читает ваши команды и выполняет их сам (если это "внутренние" команды типа cd) или находит и выполняет программу (т.е. "внешнюю" команду типа cp или startx). Он также проделывает такие приятные вещи как сохранение истории команд и автоматическое завершение имени файла.
Мы уже наблюдали работу bash в качестве интерпретатора языка программирования. Скрипты, запускаемые программой init при старте системы являются обычно сценариями оболочки и выполняются при помощи bash. Сочетание удобного языка программирования с обычными системными утилитами, доступными из командной строки, представляет очень мощную комбинацию в случае, если вы знаете что делаете.
Например (включен режим самодовольства) мне необходимо применить большой набор патчей к директории содержащей некоторые исходные тексты. Я могу сделать это, набрав единственную команду:
for f in /home/greg/sh-utils-1.16*.patch; do patch -p0 < $f; done;
Будут найдены все файлы в моей домашней директории, чьи имена начинаются на sh-utils-1.16 и заканчиваются на .patch. Далее в цикле переменной f будут присваиваться имена этих файлов и выполняться команды заключенные между операторами do и done. В данном случае присутствовало всего 11 файлов-патчей, но это было-бы также просто будь их хоть 3000.
Безопасное туннелирование
Для следующего шага мы использовали пакет OpenSSL, вместо FTP.
Сперва мы обменялись паролями для возможности работать в пакетном режиме:
root@fish# ssh-keygen
artime@bell$ ssh-keygen
root@fish# scp /root/.ssh/identity.pub artime@bell:/home/artime/.ssh/authorized.keys
root@fish# scp artime@bell:~/.ssh/identity.pub ~/.ssh/authorized.keys
На машине Fish выполняем скрипт:
#!/bin/sh
for i in $(seq 0 460)
do
dd if=/dev/sda8 bs=$((2*11*1024)) skip=$i of=fula
scp --batch fula artime@bell:~/fiback.$i
done
Объединяем куски на машине Bell:
for i in $(seq 0 460)
do cat fiback.$i >> fiback.raw
done
То же самое можно было сделать проще, с машины Fish:
#!/bin/sh
for i in $(seq 0 460)
do
dd if=/dev/sda8 bs=$((2*11*1024)) skip=$i | ssh artime@bell "cat >> fiback.raw"
done
Библиотека GNU C
5.1 Настройка
5.2 Упражнения
5.3 Дополнительные сведения
Следующей, после загрузки ядра, вещью, является запуск процесса init. Однако init, подобно другим программам, использует вызовы функций из системных библиотек.
Вы наверняка знакомы с демо-программами похожими на эту:
main() { printf("Hello World!\n"); }
Программа не содержит определения функции printf, так откуда она её вызывает? Функция берется из стандартной библиотеки C, в системе GNU/Linux это glibc. Если вы скомпилируете её под Visual C++, функция будет взята из стандартной библиотеки реализации Microsoft. Существуют зиллионы стандартных функций для математических и строковых операций, манипулирования датой/временем, оперативной памятью и т.д. и т.п. Всё в мире Unix (включая Linux) либо написано на C либо старается быть написанным, так что всё использует эти функции.
Если вы заглянете в /lib на вашей Linux машине, вы обнаружите множество файлов libsomething.so или libsomething.a
и т.п. Это библиотеки таких функций. Glibc является просто реализацией этих функций проектом GNU.
Для программ существует два способа использования библиотечных функций. Если программа собирается статически, эти функции будут скопированы в создаваемый исполняемый код. Код при этом будет взят из библиотеки типа libsomething.a. Если программа собирается динамически, (что происходит по умолчанию) эти функции будут загружаться при выполнении программы по мере надобности. При этом будет использован код из файлов типа libsomething.so.
Команда ldd будет вашим помощником, если вам понадобится выяснить какие библиотеки нужны для работы некоторой программы. В качестве примера приведу список библиотек необходимых для запуска bash:
[greg@Curry power2bash]$ ldd /bin/bash libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000) libc.so.6 => /lib/libc.so.6 (0x4001d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Big
Таблица 1. Стандартные сервисы Linux
Сервис | Описание | Нужен или нет?* |
anacron, crond | Планировщики заданий, по графику запускают те или иные программы | При необходимости |
apmd | Отслеживает состояние батарей ноутбука и выполняет заданные действия при определенных событиях (например, при разрядке батарей) | Нет |
atd | Еще один своеобразный планировщик запуска программ | Нет |
autofs | Автомонтировщик файловых систем | Да |
cups | Новая подсистема печати в Unix-подобных ОС (Common Unix Print System) | Да |
diald | Автоматический дозвон к провайдеру по требованию программ | Нет |
gpm | Поддержка мыши в консоли операционной системы | Да |
internet | Устанавливает соединение с провайдером при загрузке системы и обрывает его при завершении работы системы. Имеется не во всех дистрибутивах | Да |
keytable | Загружает раскладку клавиатуры, указанную в файле /etc/sysconfig/keyboard | Да |
klogd | Протоколирует сообщения ядра в файлы каталога /var/log/kernel (для диагностики ошибок) | Да |
kudzu | Ищет изменения в аппаратной конфигурации. Вполне может запускаться вручную | При необходимости |
linuxconf | Организовывает выполнение различных задач конфигурирования при загрузке системы. Имеется не во всех дистрибутивах | Нет |
named | Сервер DNS | Нет |
netfs | Обеспечивает монтирование удаленных сетевых файловых систем: NFS, SMB (Windows/LAN Manager), NCP (NetWare) | При необходимости |
network | Поддержка сети, необходима даже для работы графической системы и системы печати | Да |
nfslock | Механизм блокирования файлов NFS | Нет |
numlock | Автоматическое включение NumLock при загрузке | Да |
oki4daemon | Поддержка OKI 4w-совместимых Windows-принтеров | При необходимости |
portmap | Необходим для приложений, использующих удаленный вызов процедур RPC. Нужен для NFS и NIS (Network Information Service) | Нет |
httpd, proftpd, wu-ftpd, sendmail, postfix | Web-, FTP- и почтовые серверы. На рабочей станции обычно не нужны | Нет |
random | Улучшает качество генерации случайных чисел | Да |
rawdevices | Не вдаваясь в технические подробности, просто отключите этот сервис. Он вам понадобится разве что при установке какой-нибудь мощной СУБД (вроде Oracle) | Нет |
smb | Samba (демоны smbd и nmbd), необходим для работы в Windows-сети | При необходимости |
winbind | Используется для аутентификации в домене Windows NT | При необходимости |
Xfs | X Font Server, нужен для работы XFree86 | Да |
xinetd | Суперсервер, обеспечивающий работу сервисов вроде pop3 и пр. | Да |
* Здесь приведены лишь краткие рекомендации, которые подойдут большинству пользователей. Помните, чем меньше ненужных вам сервисов будет запущено, тем быстрее будет работать ваша система, но отключать их стоит по одному и с оглядкой.
/Bin : Основные исполняемые файлы команд пользователя (доступные всем пользователям)
Linux-системы, в которых следующие файлы требуются, должны помещать их в /bin.
{ setserial }
Бит sgid
Бит sgid. Расшифровывается как Set group ID, переводится как "установить идентификатор группы".
Эго смысл аналогичен смыслу предыдущего бита . Только меняется не идентификатор юзера, а идентификатор группы. То есть, при выполнении этого файла он имеет такие права как будто его запустил кто-то из группы, которая приписана к этому файлу.
Permissions такого файла выглядят как *****s*** (если установлен бит x
для группы) или *****S** (если соответствующего бита x нет). Также как и в предыдущем случае, бит sgid для неисполняемых файлов никакого смысла не имеет.
А вот что касается бита sgid на директории...
Для FreeBSD (и других ветвей BSD) этот бит, опять же, не оказывает никакого действия. Но в некоторых других Юниксах он означает, что, когда файлы создаются в такой директории, в их атрибутах проставляется группа та же, что и у директории. Другими словами, файлы, создаваемые в такой директории "наследуют" группу от директории.
Бит sticky
Бит sticky. Никак не расшифровывается, переводится как "липкий". :-)
Выглядит в permissions как ********t (если вместе с битом x для "всех остальных") или ********T (если соответствующего бита x нет).
Для директорий его смысл заключается в том, что удалить файл из такой директории (или переименовать) может только владелец файла. Напомню, что в обычном случае (без такого бита) возможность удалять файлы (как и создавать) определяется правом записи (бит w) на директории. То есть, если какой-либо юзер принадлежит к категории, для которой разрешена запись в директорию, он может удалить в ней любой файл, независимо от атрибутов (владельца, группы, permissions) самого файла.
Применяют этот бит, обычно, на директориях, которые являются "публичными" (например, /tmp). Такие директории имеют права доступа, позволяющие всем юзерам создавать там свои файлы и удалять их. Однако, было бы неправильно, что любой другой юзер мог по ошибке или "из вредности" удалять файлы, к которым он не имеет никакого отношения. Для того, чтобы предотвратить возможность удаления файла "посторонним" юзером, как раз и служит sticky бит.
Этот бит может ставиться также на исполняемые файлы. В этом случае он означает, что файл, даже после завершения работы, должен оставаться в памяти (конечно, не в ОЗУ, а в swap'е).
Как говорится в документации, это полезно для "часто используемых исполняемых файлов общего пользования". К сожалению, реальных примеров таких файлов я не нашел. Возможно, практически он никем не используется.
Иван Паскаль pascal@tsu.ru
Бит suid
Бит suid. Расшифровывается как Set user ID, переводится как "установить идентификатор юзера". Поскольку подходящего русскоязычного термина не существует, его обычно называют "суидный" бит, а файлы, на которых он установлен - "суидными".
Смысл его состоит в том, что если он установлен на файле, который является программой, то при выполнении эта программа автоматически меняет "эффективный userID" на идентификатор того юзера, который является владельцем этого файла. То есть, не зависимо от того - кто запускает эту программу, она при выполнении имеет права хозяина этого файла.
Обычно это делается для того, чтобы юзер мог выполнить действия, которые требуют привилегий root'а (например, поменять свой пароль). Естественно, что для этого владельцем такой программы должен быть юзер root.
Понятно, что такая программа является "потенциально опасной". В "нормальном" случае она не позволит обычному юзеру сделать то, что выходит за пределы его полномочий (например, программа passwd разрешит юзеру изменить только собственный пароль, но не пароли других юзеров). Но, даже незначительная ошибка в такой программе может привести к тому, что "злоумышленник" сможет заставит ее выполнить еще какие-нибудь действия, не предусмотренные автором программы. Кстати, большинство известных способов "взлома" системы заключаются не в том, чтобы узнать пароль root'а, а как раз в том, чтобы заставить какую-нибудь из "суидных" программ выполнять действия необходимые "взломщику".
Вообще говоря, использование "суидных" программ (когда они нужны и для чего) - достаточно обширная тема выходящая за рамки разговора о permissions. Замечу только, что это не единственный путь сменить "эффективный userID". Это можно сделать из самой программы, вызвав специальную системную функцию, но для этого программы должна уже иметь права root'а. То есть, ее должен запустить юзер root, или она должна быть "суидной", как сказано выше.
Возвращаясь к разговору о "правах доступа", надо сказать, что у такого файла permissions выглядят как **s****** (если еще и установлен бит x для владельца файла) или как **S****** (если бит x не установлен). Однако, ставить suid бит на неисполняемые файлы обычно не имеет смысла (по крайней мере в FreeBSD). Хотя, мне попадались программы, которые проверяли этот бит даже для текстовых файлов.
Также, это бит не несет никакого смысла если его поставить на директорию, хотя никто не запрещает это сделать.
Благодарности
Клочков Роман ? масса ценных комментариев, первый кто написал мне письмо в ответ на эту статью :)
Источник - LinuxBegin.ru
http://linuxbegin.ru
Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article342.html
Автор выражает благодарности тем, кто принимал участие в этом проекте:
Darryl Okahata (darrylo@hpnmhjw.sr.hp.com>) за понятное описание настройки диска для режима эксклюзивного использования, которое я постоянно использую в списке рассылки FreeBSD-questions.
Jordan Hubbard (jkh@FreeBSD.org>) за то, что он сделал sysinstall подходящим инструментом для выполнения таких работ.
John Fieber (jfieber@indiana.edu>) за создание примеров и предоставление информации о DocBook DTD, на основе чего написан этот документ.
Greg Lehey (grog@FreeBSD.org>) за проверку моей работы и указания на неточности, а также за поддержку.
Разработчики стандарта FHS хотели бы поблагодарить разработчиков, системных администраторов и пользователей, которые внесли свой вклад в разработку настоящего стандарта. Мы благодарны всем тем, кто помогал писать, составлять и отлаживать настоящий стандарт.
Группа разработки стандарта (The FHS Group) также благодарит тех разработчиков ОС Linux, которые поддержали FSSTND, предшественника настоящего стандарта. Если бы они не продемонстрировали, что FSSTND был полезен (was beneficial), стандарт FHS никогда бы не был создан.
Previous: Сфера действия стандарта
Next: Участники разработки
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Названия продуктов являются торговыми марками соответствующих владельцев.
Есть несколько людей, которым я хотел бы сказать спасибо за помощь в подготовке этого документа.
Michael Emery
За напоминание про Unios. Tim Little
За несколько хороших советов по поводу /etc/passwd
sPaKr on #linux in efnet
Который заметил, что syslogd требует присутствия /etc/services, и подсказал мне выражение ``rolling your own'' применительно к построению системы из исходного кода. Alex Aitkin
За привлечение моего внимания к Vico и его ``verum ipsum factum'' (понимание приходит через делание). Dennis Scott
За исправление моей шеснадцатеричной арифметики. jdd
За указание нескольких опечаток. David Leadbeater
За вклад в тему демонов ядра. Dominique van den Broeck
За перевод этого документа на французский. Matthieu Peeters
За полезную информацию о демонах ядра. John Fremlin
За полезную информацию о демонах ядра. Yuji Senda
За перевод этого документа на японский. Antonius de Rozari
предоставившему версию UNIOS на ассемблере GNU (см. раздел ресурсов на домашней странице)
Bochs
Эмулятор компьютера x86. Один из самых близких Open Source-аналогов для коммерческого продукта VMWare. Bochs полностью эмулирует компьютер вместе с основными устройствами ввода-вывода, и это – хороший выбор, если вы хотите эмулировать стандартные системы с установленными *BSD, Linux или Windows.
Главное преимущество Bochs – то, что это настоящий эмулятор, который может быть запущен на любой Unix-платформе. А это значит, что вы сможете эмулировать Windows и другие операционные системы для x86 на компьютерах PPC, Sun и даже на мэйнфреймах IBM.
Bog BOS: Linux с точки зрения системного администратора
Выбор дистрибутива Ядро Подбор оборудования Борьба с железом Где взять софт Установка Русский язык Настройки Сеть Графика Печать Диски/разделы/файловые системы Сервера и демоны интернет Как выпутываться из проблем Где взять дополнительную информацию
Выбор дистрибутива |
Самая трудная проблема для начинающего - это выбор дистрибутива. Столько их развелось в последнее время, что глаза разбегаются. Даже производитель материнских плат Abit выпустил дистрибутив Linux под свои платы (Gentus; похоже уже умер). Хорошо что, когда я ставил себе Linux в первый раз, этой проблемы не было :) Либо ставишь Slackware, либо собираешь дистрибутив сам. Пару лет я им пользовался, пока не заметил, что слишком много пакетов приходится устанавливать дополнительно (в комплект Slackware входили очень старые версии или не входили вообще). Так как все дополнительные пакеты были в формате RPM, то вполне естественно, что я перешел на RedHat. Судя по опросам на linux-ve и linux.org.ru, я не одинок (учтите, что BlackCat и Mandrake тоже базируются(овались) на RedHat, так что в сумме они занимают порядка 60%). Наличие Alan Cox в штате RedHat тоже плюс ;) Можно еще обратить внимание на Debian GNU, но у меня нет на это времени (самая полная коллекция, но были (есть?) серьезные проблемы с русским языком). Бывают и "самодельные" дистрибутивы.
Из руссифицированных вариантов можно отметить (сам я не пробовал):
Mandrake RE (ALTLinux, в девичестве IP LABS Linux Team) ASPLinux Black Cat Linux (ныне слился с ASPLinux)
Списки дистрибутивов:
на LinuxJournal на LinuxHQ ISO-образы различных дистрибутивов (покупка в ближайшем ларьке обходится на порядок дешевле, чем загрузка по тарифам Ростелекома)
Ядро |
Времена, когда приходилось самостоятельно устанавливать новое "свежеиспеченное" ядро, надеюсь уже прошли. Сейчас лучше положиться на составителя дистрибутива. Однако, необходимость быть в курсе грядущих изменений осталась.
Сайты, следящие за изменениями в ядре:
http://www.kernel.org/ (архив исходников ядра и заплаток) LinuxHQ (обзоры, Linux Edge) Kernel-traffic (еженедельник для разработчиков ядра - часто меняет место) Kernel Notes (когда-то здесь был список изменений для каждой версии с точки зрения пользователей, а не разработчиков, как в ChangeLog, но сейчас сайт заброшен)
Что нового в 2.4:
Linux Gets An Upgrade (переход к 2.4, январь 2001) Joe Pranevich: Wonderful World of Linux 2.4 11/23/00 ("Turkey Day" Update) Linux 2.4 Status/TODO Page (с выходом версии перестал обновляться)
Подбор оборудования |
К сожалению, проиводители оборудования очень любят выпускать разные устройства под одним маркетинговым именем или одно и то же устройство под разными. Так что доверять чужому опыту надо осторожно. Рекомендуется поискать в телеконференциях как положительные, так и отрицательные отзывы.
Ссылки на списки оборудования, совместимого с Linux.
Linux hardware database http://www.linuxhardware.net/ Hardware-HOWTO (1999 :(
Более продуктивная работа с bash x
Автор: DH и Arlantine , dh@dh.net.ru, arlantine@mtu-net.ru
Опубликовано: 05.03.2002
Оригинал: http://www.softerra.ru/freeos/16449/
Перевод статьи Яна Макдональда (Ian Macdonald) «Working more productively with bash 2.x»
Обзор и введение Советы и приемы эффективной работы Программируемое автозаполнение
Введение Стандартное автозаполнение Download Установка Начало работы Исправление ошибок и дополнения Связь со мной
Больше места или сделаем swap общим
Автор: Андрей Клепча, drew@tech.telecom.mogilev.by
Опубликовано: 25.11.2001
Оригинал: http://www.softerra.ru/freeos/14253/
В этой статье я хочу поделиться опытом более удобного (на мой взгляд по крайней мере) использования места на диске под swap на системах с установленными Linux и Windows. Идея не нова - на каком-то из старых дистрибутивов Linux'а (вроде это был дистрибутив Caldera или RedHat) в Linux-HOWTO описывалось нечто подобное, правда по-английски :).
Для работы и для большей части развлечений я использую Linux, но когда появляется потребность запустить игрушку, использующую OpenGL, или посмотреть фильм... Именно тогда я начинаю стучать в барабаны, жечь ритуальные костры, протыкать иголкой тряпичные фигурки и слать смертельные проклятья как в адрес самой корпорации Intel так и ее видеокарты Intel 740 (самый обычный образчик которой есть и у меня). Наступает время Windows 9x... т.к. под Windows 2000 нормальных драйверов под Intel тоже нет. Впрочем это к делу не относится, а всего лишь объясняет зачем мне понадобилась Windows (кстати, может кто-нибудь подскажет мне другой выход из ситуации, когда нет нормальных (OpenGL, DGA2, DRI) драйверов под Linux для Intel 740?).
Но, довольно обсуждения объективных причин, заставляющих людей держать две операционки на диске - этих причин могут быть тысячи. Займемся тем, чтобы сделать эту ситуацию чуть менее болезненной с точки зрения расходования драгоценного места на жестком диске, который и так уже трещит по швам.
Мне давно не давало покоя сознание того, что впустую расходуется мегабайт 150 - 200 под Linux'овый swap-раздел когда я загружаю Windows, и примерно столько же когда работает Linux, а на разделе FAT лежит жирный pagefile.sys (это в случае Windows NT, если же Вы используете Win9x, то роль «жирного» выполняет win386.swp). Идея напрашивалась сама собой - сделать так, чтобы две (или больше, если Вы большой выдумщик) операционки использовали под swap один и тот же раздел на диске. Итак начинаем.
Пусть у нас имеется жесткий диск с разбиением следующей конфигурации: Disk /dev/hda: 255 heads, 63 sectors, 1216 cylinders Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System /dev/hda1 1 117 939771 b Win95 FAT32 /dev/hda2 118 955 6731235 5 Extended /dev/hda3 * 956 1216 2096482+ 83 Linux /dev/hda5 118 955 6731172 b Win95 FAT32 /dev/hda6 923 955 265041 82 Linux swap
Мы видим следующие разделы:
Основной раздел DOS с файловой системой FAT32 размером в 917.74М (надеюсь все помнят, что 917.74М это вовсе не 917740К, а 939771К, т.е. 917.74*1024, ведь 1М = 1024К, а 1К = 1024 байт) [/dev/hda1]; Дополнительный раздел DOS (размером, как Вы уже догадались 6731235К / 1024 = 6573.47М / 1024 = 6.41G) [/dev/hda2]. В дополнительном разделе определены: досовский диск FAT32 (диск D:) [/dev/hda5] и раздел для свопа Linux [/dev/hda6]. Раздел Linux [/dev/hda3].
Немного слов о том, почему разделы нумеруются именно таким образом. На диске может быть до четырех первичных разделов (primary partition). Эти разделы получают номера от единицы до четверки. Остальные разделы могут создаваться в разделе Extended и являются логическими (logical). Они получают номера начиная с пятерки.
Теперь, когда мы прояснили имеющуюся ситуацию с разделами на нашем диске, мы можем начинать что-либо планировать более целенаправлено.
Дам небольшую наводку. Linux может использовать как своп очень много чего. В принципе даже на дискете можно попробовать сделать swap ;). Windows же умеет только файл подкачки. Правда, о чудо! (и в этом наше счастье) может размещать его на различных дисках. Значит все наше шаманство будет осуществляться средствами Linux, а продукту Самой Доброжелательной Компании в Мире мы просто сообщим куда (следует читать 'на какой диск') положить этот самый злополучный файл.
Если Вы еще не догадались, то теперь настало время раскрыть стратегию этого замысла. Раздел /dev/hda6 должен быть логическим диском DOS, полностью (это ВАЖНО) отдаваемым под swap файл windows. Ни в коем случае не размещайте на нем какие-либо другие файлы кроме файлов подкачки. Размещать там что-либо еще нельзя, потому как Linux будет использовать этот же раздел, как свой swap, а следовательно данные будут потеряны.
Вот какие операции должны выполняться для реализации задуманной нами схемы:
1. Задачи Linux:
Создать swap на разделе, который для этого выделен; Подключить только что созданный swap; Работать; При получении команды на перезагрузку или выключение питания сделать раздел, используемый под swap, обычным диском DOS; Остановить работу компьютера или перезагрузить его.
2. Задачи Windows:
Создать win386.swp на диске, созданном на этапе 1; Работать; При получении команды на перезагрузку или выключение питания завершить работу или повиснуть :).
Теперь займемся реализацией.
Прежде всего нужно отключить swap раздел Linux'а (я предполагаю, что именно это место на диске мы хотим сделать общим для свопа Windows и Linux). Для этого скажем 'cat /proc/swaps' и далее 'swapoff $device', где $device - имя раздела, который у Вас используется как swap раздел (это имя будет написано в выводе предыдущей команды в графе Filename).
Далее все действия выполняем от пользователя root. Создадим раздел, который будет использоваться как swap. Процесс создания подробнее описывать не буду - здесь вроде все должно быть понятно. Берется досовский или линуховый fdisk и - вперед (те кому не нравится fdisk могут пользоваться другими утилитами, например, parted, Partition Magic и т.д.). Форматируем этот раздел в FAT16 (мне кажется, что для windows свопа FAT16 более предпочтительный вариант, чем FAT32 в плане скорости и меньшего размера самой таблицы размещения файлов). Для форматирования можно использовать как штатные досовские средства, так и mkdosfs из пакета dosfstools. Partition Magic, если мне не изменяет память, сразу же сам форматирует создаваемый раздел;
Здесь и далее по тексту я предполагаю, что для свопа мы используем /dev/hda6. Вы, в свою очередь вместо него используете имя того раздела, который выделили под swap. Итак в командной строке Linux'а даем команду 'mount -t vfat /dev/hda6 /mnt/temp', чем монтируем /dev/hda6 в каталог /mnt/temp (естественно он должен существовать к этому моменту);
Затем забьем нулями содержимое этого досовского диска (зачем - расскажу позднее). Для этого скажем в командной строчке 'dd if=/dev/zero of=/mnt/temp/zeros'. Команда завершится сообщением о том, что на устройстве назначения больше нет места и сколько записей произведено;
На всякий случай отмонтируем /dev/hda6 командой 'umount /mnt/temp' (это может делать и не обязательно, но так мы будем уверены, что в кэше ничего не осталось и все нули дошли до адресата :). Теперь примонтируем его снова 'mount -t vfat /dev/hda6 /mnt/temp' и удалим файл zeros командой 'rm -f /mnt/temp/zeros'. Теперь опять отмонтируем /dev/hda6 ('umount /mnt/temp');
Теперь у нас есть раздел с пустой fat16 и нулями в области данных.
У меня нет информации о том, как рассчитать сколько занимает места на разделе таблица размещения для FAT16. На диске емкостью 250М мне хватало примерно пяти мегабайт (те кто заинтересован разобраться во всем до конца могут попробовать найти старую досовскую программу TechHelp - там наверняка будет информация о DOS FAT). Возможно и меньшее число могло бы быть использовано, но мне нравиться цифра 5 ;). Вы спросите зачем нам это нужно? Для того, чтобы после использования Linux'ом раздела /dev/hda6 для свопа, можно было бы легко восстановить на диске таблицу размещения файлов.
Командой 'dd if=/dev/hda6 of=/etc/winswap bs=1k count=5000' мы создадим копию нашей таблицы в файле /etc/winswap. Команда последовательно скопирует пять тысяч блоков (count=5000) размером в один килобайт (Block Size = 1К) с исходного устройства или файла (Input File) в устройство или файл назначения (Output File). Получившийся файл занимает почти 5 мегабайт. Но мы же очень жадные люди на мегабайты, верно? Поэтому мы говорим 'gzip -9 /etc/winswap'. В результате пятимегабайтный winswap превращается в пятикилобайтный(!) winswap.gz (помните, мы забили диск нулями, а это значит, что файл очень хорошо сожмется. Ключ -9 задает максимальный уровень компрессии).
Теперь настало время позаботиться собственно о пункте 1.г. Для этого открываем на редактирование файл /etc/init.d/halt и делаем поиск слова 'swap'. Вы увидите что-нибудь вроде: # Turn off swap, then unmount file systems. SWAPS=`awk '! /^Filename/ { print $1 }' /proc/swaps` [ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS
Во всяком случае так обстоит дело с RedHat. Если у Вас другой дистрибутив, то, возможно, файл будет называться по-другому. Во всяком случае Вы должны будете найти скрипт, куда можно будет вставить строчку так, чтобы она выполнилась _после_ отключения swap. А строчка будет такой: zcat /etc/winswap.gz >/dev/hda6
Она восстанавливает таблицу размещения файлов на устройстве /dev/hda6 (точнее zcat выводит распакованное содержимое указанного ей сжатого файла в стандартное устройство вывода, но '>/dev/hda6' перенаправляет вывод на раздел где был swap). Итак о досовском диске для swap файла Windows позаботились. Пришло время позаботиться о Linux.
Открываем файл, где включаются swap разделы (для RedHat это - /etc/rc.d/rc.sysinit). Опять ищем 'swap'. Видим: # Start up swapping. action $"Activating swap partitions: " swapon -a -e
комментируем эту строчку и пишем новые: action "Build swap on /dev/hda6" mkswap /dev/hda6 265041 action "Activating swap..." swapon /dev/hda6
265041 - размер раздела /dev/hda6 и размер соответственно swap'а Linux. Это число Вы заменяете своим.
Открываем файл /etc/fstab на редактирование и комментируем строчку "что-то вроде этого": /dev/hda6 swap swap defaults 0 0
Да! Cейчас внезапно подумал... Если кто не знает - строка комментируется подстановкой символа '#' в ее начало.
После перезагрузки, загружаете windows и в установках 'My Computer' / 'Settings' / 'Perfomance' / 'Virtual Memory' устанавливаете swap файл на новый диск. Параметры minimum size и maximum size лучше установить одинаковыми (фиксированный файл подкачки) и максимально возможными (файл подкачки на весь диск).
Положительным моментом для файла подкачки windows является еще и то, что он не будет фрагментирован, что несколько повысит быстродействие. Из отрицательных моментов можно назвать то, что при переразбиении диска (которое Вам возможно понадобиться в будущем) нужно будет повторить некоторые из рассмотренных операций заново с новыми условиями.
Вот, наверное, и все. Попробуйте - должно получиться.
Напоследок - совет. При выполнении указанных мною пунктов читайте соответствующие страницы руководства ('man mount', 'man swapon', 'man dd' и т.п.) для того, чтобы Вы точно представляли что именно Вы делаете на данном этапе. Удачи!
Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)
Boot
Клавиша boot вызывает немедленную перезагрузку системы (как при вводе команды reboot).
Изначально находится на комбинации - [Ctrl]+[Alt]+[Delete].
На этом разделе обычно лежат рабочее и failsafe ядра, initrd образы, system.map файлы, а также некоторые данные используемого загрузчика (lilo или grub). На этот раздел обычно достаточно 5-10Mb. Обычно самый первый раздел (занимающий первую дорожку), и является самостоятельным primary разделом (не является logical volume на LVM как остальные).
Bootstrapping, или как Linux сам себя ставит на ноги
Каждый день во всем мире миллионы пользователей Linux включают свои компьютеры, и ждут несколько секунд (или минут, в зависимости от скорости процессора), прежде чем увидеть, что их любимая операционная система загрузилась и получить в конце этого процесса приглашение "login". Готово. Это само по себе огромное удовольствие: просто начать работу с любимой операционной системой. Нет? Ну, ко мне это точно относится. Хотя нужда включать компьютер возникает у меня не чаще, чем раз в два месяца -- я разрешаю ему работать без перерыва!
Большинство читателей, верно, обратили внимание на большое количество сообщений, появляющихся на экране во время загрузки компьютера. Командой cat /var/log/dmesg | more их можно просмотреть и после загрузки (вывод cat может быть просто необозримым). Возникает вопрос: а что типа означают все эти сообщения? На него легко ответить: Загляните в любой учебник по Linux'у, и вы найдете что-нибудь вроде "это имеет отношения к сообщениям загрузки ядра" и т.д. И это все? А что означает "сообщения загрузки ядра"?
Жизнь научила меня многому. В частности, терпению. А понимание внутреннего механизма Linux требует большого терпения и жертвенности, потому что сначала нужно как следует понять "Архитектуру Ядра Linux". У большинства пользователей для этого либо не хватает времени, либо им это не слишком интересно, у некоторых в жизни могут быть дела поважнее и т.д.
В этой статье я НЕ собираюсь излагать "Архитектуру Ядра Linux", для этого потребовалась бы целая книга. Скорее я собираюсь в деталях описать одну из наиболее важных в системном программировании концепций: самозагрузку или bootstrapping в применении к компьютеру под управлением ОС Linux. Говоря по другому, я хотел бы объяснить (по крайней мере, попытаюсь объяснить) весь ход событий от момента включения питания до появления приглашения "login" (в предположении, что используется консольный режим). Мы увидим, как ядро, а значит и вся система, "самоподнимает" себя.
Обратите внимание:
О читателя ожидается понимание внутренней работы ядра Linux на элементарном уровне. Все упоминаемые в статье файлы относятся к Linux Kernel 2.4.2-2. Хотя все эти файлы практически одинаковы во всех ядрах Linux и присутствуют в любом дистрибутиве, я использовал Red Hat Linux 7.1 Distribution Release.
1. Что такое bootstrapping?
В классическом смысле термин bootstrap (буквально: тянуть за ушки на голенищах сапог; прим. переводчика) описывает поведение человека (обычно человек этот лежит т.к. сильно устал), поэтапно и с трудом приводящего себя в вертикальное положение, подтягиваясь за голенища собственных сапог. В мире операционных систем bootstrapping'ом называется процесс, в ходе которого часть операционной системы загружается на выполнение, что в свою очередь загружает и инициализирует следующую часть операционной системы. При этом инициализируются переменные во внутренних структурах ядра Linux и запускаются процессы (в дальнейшем обычно порождающие другие важные процессы). "Самозагрузка" компьютера -- долгая и сложная задача, ибо в момент включения компьютера все устройства находятся в непредсказуемом состоянии, а оперативная память неактивна и содержит случайные значения. Поэтому понятно, что процесс самозагрузки (bootstrapping) сильно зависит от архитектуры компьютера.
Внимание!
Мы говорим об архитектуре IBM PC. Один мой сосед пинает свой системный блок для того, чтобы его запустить. Он называет это "bootslapping" [шмяканье сапогом], а не "bootstrapping". Но описанный ниже процесс происходит и в этом случае!
2. Что такое BIOS? Чем он занимается?
В момент включения питания компьютер практически бесполезен. Поскольку оперативная память содержит случайные данные, не инициализирована и отсутствует операционная система. В начале самозагрузки специальный электронный контур устанавливает логическое значение на выходе RESET процессора . Затем, некоторые регистры процессора, включающие регистр CS ( один из Сегментных Регистров, он указывает на сегмент памяти, содержащий инструкции программы) и EIP (когда CPU выявляет сгенерированное процессором исключение, другими словами, когда процессор возбуждает исключение, обнаружив что-либо аномальное при выполнении инструкции, а исключения бывают трех видов, а именно "fault", "trap" и "abort", в зависимости от значения регистра EIP, сохраненного в стеке режима ядра в том момент, когда блок управления CPU возбуждает исключение -- во как! Не у всякого получится!) устанавливаются в фиксированное значение [для тех, кто случайно забыл: EIP -- регистр процессора, указывающий на следующую 32-разрядную команду. прим. переводчика]. Затем выполняется код, находящийся по физическому адресу 0xfffffff0. Этот адрес аппаратно отображается в чип с постоянной памятью, которую обычно называют ROM. BIOS (Basic Input/Output System -- Базовая Система Ввода/Вывода) -- набор хранящихся в ROM программ. Этот набор включает несколько низкоуровневых процедур обработки прерываний, которые используются разными операционными системами для управления составляющими компьютер устройствами. DOS от Microsoft -- это одна из таких операционных систем.
Теперь возникает такой вопрос: пользуется ли Linux BIOS для инициализации подсоединенных к компьютеру устройств? Или для этой цели служит что-либо иное? И если да, то что? Ну, ответ не так прост, потому его надо тщательно разобрать. Начиная с модели 80386 микропроцессоры Intel выполняют трансляцию адресов (Логический Адрес --> Линейный Адрес --> Физический Адрес) двумя способами, называемыми "Реальным режимом" и "Защищенным режимом". Реальный режим существует главным образом для совместимости со старыми моделями. Все процедуры BIOS выполняются в Реальном режиме. Но ядро Linux выполняется в Защищенном режиме, а НЕ в Реальном режиме. Таким образом, Linux после инициализации НЕ использует BIOS, а предоставляет собственный драйвер для каждого устройства в компьютере.
Далее возникает следующий вопрос: если Linux работает в защищенном режиме, то почему BIOS не может использовать тот же режим? BIOS использует для своей работы реальный режим потому, что BIOS для своей работы пользуется адресами реального режима, а адреса реального режима -- единственно доступные в момент включения компьютера. Адрес реального режима состоит из сегмента seg и смещения off, соответствующий ему физический адрес равен seg*(2*8)+off. (Дополнительно заметьте: поскольку Дескриптор Сегмента имеет длину 8 байтов, его относительный адрес в GDT или LDT [глобальной или локальной таблице дескрипторов] получается умножением наиболее значимых 13 битов селектора сегмента на 8 -- все понятно?).
И что, это означает, что Linux не использует BIOS в ходе процесса самозагрузки [bootstrapping]? М-м, ответом будет Нет: Linux вынужден воспользоваться BIOS на том этапе самозагрузки, когда нужно извлечь образ Ядра с диска или с еще какого-либо внешнего устройства.
Подытоживая, давайте рассмотрим главные действия, выполняемые BIOS в ходе начальной загрузки. Действия эти таковы:
Выполняется всеобъемлющий тест аппаратуры. Это нужно для того, чтобы определить, какие устройства наличествуют и то, какие из обнаруженных устройств работают нормально, а какие -- нет. Обычно этот этап называется POST [Power-On Self-Test или самопроверка при включении питания]. В этот момент выводится заставка с версией и серия сообщений (помните моего друга, который заводит свой комп ногой? POST на его машине не выдает сообщений об ошибке!!). Затем, BIOS инициализирует аппаратуру. Это очень важный этап, потому что он гарантирует то, что все аппаратные устройства работают без конфликтов за линии прерывания и порты ввода/вывода. Когда эта процедура завершается, BIOS выводит таблицу установленных на шине PCI устройств. Затем приходит очередь "операционной системы". В зависимости от своих настроек, на этом этапе BIOS'у может потребоваться получить доступ к загрузочному сектору дискеты, жесткого диска или какого-либо из установленных в системе CD-ROM'ов. Как только найдено пригодное устройство, BIOS копирует содержимое его первого сектора в память по физическому адресу 0x00007c00, а затем совершает переход на этот адрес и выполняет только что загруженный код. Вот и все. Это и есть операции, которые назначено выполнить BIOS'у. Как только они завершаются, за дело берется начальный загрузчик [Boot Loader]. А мы переходим к следующему разделу.
3. Начальный Загрузчик [Boot Loader]. А это что? Что он делает-то?
BIOS вызывает (обратите внимание: НЕ ВЫПОЛНЯЕТ, а вызывает) специальную программу, чья главная (а скорее единственная) задача -- загрузить в оперативную память образ ядра операционной системы. Эта программа называется Загрузчик [Boot Loader]. Прежде, чем мы двинемся дальше, давайте мельком взглянем на разные способы загрузки системы:
Загрузка Linux с загрузочной дискеты Загрузка Linux с жесткого диска
1. Загрузка Linux с загрузочной дискеты: Когда загрузка происходит с гибкого диска, в память считываются инструкции, хранящиеся в его первом секторе. Этот код далее копируют в память остальные секторы, содержащие образ ядра.
2. Загрузка Linux с Жесткого Диска: В этом случае процедура загрузки иная. Первый сектор жесткого диска, называемый Главной Загрузочной Записью [Master Boot Record, MBR] содержит таблицу разделов и небольшую программу. Эта программа загружает первый сектор того раздела, который содержит назначенную к старту операционную систему. Linux, будучи в высшей степени гибким и изощренным образчиком программного обеспечения, заменяет программу в MBR на более хитроумную, называемую LILO (LInux boot Loader). LILO позволяет пользователю выбрать загружаемую операционную систему.
А теперь приглядимся к этим двум способам загрузки OS внимательнее.
4. Загрузка Linux с дискеты
Ядро Linux влезает на одну дискету на 1,44 Mb. (На самом деле есть вариант установки Red Hat Linux, известный как "голый", которому нужно приблизительно 2 Mb оперативной памяти и приблизительно 1,44 Mb на диске для того, чтобы запустить Red Hat Linux. В конце концов, в этом суть Linux, не так ли?) Но единственный путь хранить Ядро Linux на дискете -- сжать образ ядра. Важно понимать, что сжатие происходит в момент компиляции, в то время как распаковка производится загрузчиком в момент загрузки.
В случае загрузки с дискеты загрузчик устроен очень просто. Он написан на ассемблере и находится в файле /usr/src/linux-2.4.2/arch/i386/boot/bootsect.S. При компиляции ядра и построении нового образа выполнимый код, созданный из этого ассемблерного файла, помещается в начало файла с образом ядра. Это облегчает изготовления загрузочной дискеты с Linux Kernel Image.
Копирование образа ядра на дискету начиная с первого сектора создает загрузочный диск. Когда BIOS загружает первый сектор дискеты, он на самом деле копирует код загрузчика. Загрузчик, вызывается BIOS безусловным переходом [jump] по физическому адресу 0x00007c00 и выполняет следующее:
Перемещает себя с адреса 0x00007c00 в область памяти 0x00090000. Устанавливает стек реального режима по адресу 0x00003ff4. Устанавливает таблицу параметров диска. Эта таблица используется BIOS'ом для управления драйвером гибкого диска. С помощью процедуры BIOS выводит сообщение "Loading". Далее. Вызывает процедуру BIOS для загрузки кода setup() из образа ядра на дискете. Этот код загружается в память по адресу 0x00090200. Вызывает завершающую процедуру BIOS, которая загружает с дискеты оставшуюся часть ядра. Загрузка производится либо по адресу 0x00010000 (так называемая загрузка "в нижние адреса" [low address] для ядер малого размера, собираемых командой "make zImage"), либо по адресу 0x00100000 (называется загрузкой "в верхние адреса" [high address] для "больших" ядер, собираемых командой "make bzImage"). И, наконец, выполняет безусловный переход на код функции setup().
5. Загрузка Linux с жесткого диска
Чаще всего ядро Linux загружается с жесткого диска. Для этого требуется двухшаговый загрузчик. В системах на базе Intel наиболее обычен загрузчик LILO. Для других архитектур существуют свои загрузчики. LILO может быть установлено либо в MBR, либо в загрузочный сектор активного раздела жесткого диска (обратите внимание, что в процессе установки Red Hat Linux имеется этап, на котором пользователь должен выбрать, куда будет записано LILO: в MBR или в загрузочный сектор).
LILO разбито на две части, иначе оно было бы слишком велико для того, чтобы поместится в MBR. Собственно MBR или загрузочный сектор раздела включают маленький загрузчик, который BIOS помещает в оперативную память по адресу 0x00007c00. Эта маленькая программа перемещает себя по адресу 0x0009a000, а затем устанавливает стек реального режима и, наконец, загружает вторую часть LILO. (Обратите внимание: стек реального режима занимает адреса памяти 0x0009b000-0x0009a200).
Вторая часть LILO читает с диска сведения обо всех доступных операционных системах и выводит приглашение, позволяющая пользователю выбрать одну из имеющихся ОС. После того, как то или иное ядро выбрано (в моей системе имеется возможность выбрать любое из 8 различных custom ядер!), загрузчик копирует в оперативную память либо загрузочный сектор соответствующего раздела (и передает ему управление), либо непосредственно копию образа выбранного ядра.
Поскольку образ ядра должен быть загружен, автономный загрузчик Linux по сути выполняет те же действия, что и загрузчик, встроенный в образ ядра. Загрузчик, вызываемый из BIOS безусловным переходом на адрес 0x00007c00, выполняет следующие действия:
Перемещает себя с адреса 0x00007c00 на адрес 0x00090000. Устанавливает стек реального режима по адресу 0x00003ff4. Настраивает таблицу параметров диска. Она нужна BIOS'у для управления драйвером жесткого диска. С помощью вызова процедуры BIOS выводит сообщение: "Loading Linux". Затем вызывает процедуру BIOS, которая загружает процедуру setup() из образа ядра. Она помещается в память по адресу 0x00090200. Вызывает завершающую процедуру BIOS, которая загружает с дискеты оставшуюся часть ядра. Загрузка производится либо по адресу 0x00010000 (так называемая загрузка "в нижние адреса" [low address] для ядер малого размера, собираемых командой "make zImage"), либо по адресу 0x00100000 (называется загрузкой "в верхние адреса" [high address] для "больших" ядер, собираемых командой "make bzImage"). И, наконец, выполняет безусловный переход на код setup().
6. Функция setup( ). А эта зачем?
Ну, вот и пришло время внимательнее поглядеть на некоторые незаменимые для процесса "самозагрузки" [bootstrapping] функции, необходимо написанные на языке ассемблера. Здесь мы рассмотрим функцию setup().
Исходный текст setup() можно найти в файле /usr/src/linux-2.4.2/arch/i386/boot/setup.S. Компоновщик помещает машинный код функции непосредственно после встроенного загрузчика ядра, а именно по смещению 0x200 в файле образа ядра. Этот факт позволяет загрузчику легко найти этот код и скопировать его в оперативную память по физическому адресу 0x00090200.
Возникает вопрос: а что собственно делает функция setup()? Как подсказывает ее имя, она что-то устанавливает. Но что? И как?
Как все мы знаем, для того, чтобы ядро могло нормально работать, необходимо обнаружить и в нужном порядке инициализировать все имеющиеся в компьютере аппаратные устройства. Функция setup() как раз и занимается тем, что инициализирует аппаратные средства, создавая таким образом среду для работы ядра.
Стоп, стоп, стоп. Разве несколько минут назад мы не видели, что этим вроде бы должен заниматься BIOS? Ну да, верно. 100%. И хотя BIOS уже проинициализировал большую часть аппаратуры, ядро Linux на это не полагается и инициализирует все устройство по-своему. Кто-нибудь спросит: "Ну, а почему это Linux так поступает?". Ответ на этот вопрос с одной стороны очень прост, а с другой стороны это крайне трудно объяснить. Ядро Linux спроектировано именно так для улучшения переносимости и увеличения надежности. Эта одно из многих свойств, которые делают ядро Linux лучшим из всех имеющихся ядер Unix и Unix-подобных операционных систем и уникальным в столь многих отношениях. Полное понимание того, как эта функция реализована в ядре Linux, находится за пределами этой статьи и требует весьма детального рассмотрения существенных моментов Архитектуры Ядра Linux.
Код setup() выполняет следующие задачи:
Во-первых, определяется общий объем имеющейся в системе оперативной памяти. Для этого вызывается процедура детектирования памяти BIOS. Устанавливается задержка и частота автоповтора клавиатуры. Определяется видеоадаптер. Проводится переинициализация контроллера жесткого диска и определяется параметры дисковых накопителей. Проверяет наличие шины IBM Micro Channel (MCA). Проверяет наличие указательного устройства PS/2 (bus mouse). Проверка наличия поддержки управления питанием Advanced Power Management (APM) в BIOS. Далее проверяется расположения загруженного в оперативную память образа ядра. Если ядро было загружено "по нижнему адресу" (при использовании zImage загрузка проводится по физическому адресу 0x00010000) ядро перемещается в "верхние адреса" (по физическому адресу 0x00100000). Если ядро загружено из "bzImage", то оно НИКУДА не перемещается. Устанавливается таблица дескрипторов прерываний (IDT) и глобальная таблица дескрипторов (GDT). Если имеется блок операций с плавающей точкой (математический сопроцессор или fpu), он перезагружается на этом шаге. На этом шаге перепрограммируется программируемый контроллер прерываний (PIC). ЦП переключается из реального режима в защищенный режим с помощью установки бита PE в статусном регистре cr0. Совершается безусловный переход [jump] на код ассемблерной функции stratup_32().
С этого момента изложение становиться "круче" т.к. с этого момента процесс самозагрузки делается несколько сложнее. Я надеюсь, что вы отложите все дела и всерьез вникнете в то, что последует.
7. 1-я функция startup_32( ). А зачем эта?
Итак, сразу перейдем к источнику путаницы. Существуют две функции, называемые startup_32(). И хотя обе написаны на ассемблере и необходимы для "bootstrapping'а", это совершенно разные функции. Код той, о которой идет речь сейчас, находится в файле /usr/src/linux-2.4.2/arch/i386/boot/compressed/head.S. В зависимости от того, в "высокие" или "низкие" адреса оперативной памяти загружен образ ядра после выполнения setup(), тело этой функции оказывается перемещенным либо на физический адрес 0x00100000, либо на физический адрес 0x00001000.
В ходе выполнения эта функция делает следующее:
Инициализация сегментных регистров и временного стека. Заполнение нулями области неинициализированных данных ядра. Эта область может быть идентифицирована по символам _edata и _end. Затем вызывается функция decompress_kernel(). Она используется для распаковки образа ядра Linux. В результате этого вызова на экране появляется надпись "Uncompressing Linux ...". После того, как образ ядра распакован без ошибок, на экран выводится сообщение "OK, booting the kernel.". Здесь важен вопрос: "Хорошо, мы поняли, что образ ядра распаковывается. Но куда загружается этот распакованный образ?". Ответ таков: Если образ ядра был первоначально загружен в "низкие" адреса, распакованный образ ядра помещается по физическому адресу 0x00100000. В противном случае, если сжатый образ ядра был загружен "высоко", распакованное ядро сохраняется во временном буфере сразу за сжатым образом. По окончании распаковки ядро помещается в свою окончательную позицию по физическому адресу 0x00100000. И, наконец, управление передается на физический адрес 0x00100000.
Теперь, когда завершилась четвертая из упомянутых выше операций, за работу берется другая функция sturtup_32(). Другими словами, эстафета самозагрузки передается во вторую функцию.
8. 2-я функция startup_32( ). Что происходит здесь?
Распакованное ядро Linux начинается с другой функции sturtup_32(). Ее код хранится в файле /usr/src/linux-2.4.2/arch/i386/kernel/head.S.
Естественен вопрос: "Стойте, две разные функции с одинаковым именем... Разве это не источник геморроя?". Отвечаю: нет, никоем образом. Поскольку обе функции получают управление в результате безусловного перехода на их физический адрес и с этого момента выполняются в своем отдельном, собственном окружении. Ну, вообще никаких проблем!
Теперь посмотрим на возможности второй sturtup_32(). Что она делает? В ходе своей работы эта функция, по сути, устанавливает окружение времени выполнения для первого процесса Linux (с номером 0). Выполняются следующие операции:
Окончательная установка значений сегментных регистров. Создание и настройка стека режима ядра для процесса 0. Затем вызывается и выполняется функция setup_idt(), которая заполняет таблицу дескрипторов прерываний (IDT, Interrupt Descriptor Table) нулевыми дескрипторами обработчиков прерываний. Полученные из BIOS параметры системы помещаются в первую страницу [first page frame]. Определяется "Модель" процессора. Загружает адреса GDT и IDT в регистры gdtr и idtr. И, наконец, совершает безусловный переход на код функции start_kernel().
9. Функция start_kernel( ). Чем занимается она?
start_kernel() завершает "инициализацию" ядра Linux. В ходе ее выполнения инициализируются все жизненно необходимые компоненты ядра. Что, в сущности, есть последний этап процесса "bootstrapping'а".
В процессе выполнения этой функции происходит следующее:
Функция paging_init() инициализирует таблицу страниц. Затем функция mem_init() инициализирует дескрипторы страниц. Функции trap_init() и init_IRQ() в ходе своего выполнения проводят завершающую инициализацию IDT. Выполняются функции kmem_cache_init() и kmem_cache_sizes_init (), инициализирующие систему распределения памяти Slab Allocator. Системные дата и время устанавливаются в ходе выполнения функции time_init(). Создается поток выполнения [thread] ядра для процесса 1 посредством вызова функции kernel_thread(). Этот процесс в свою очередь создает другие "ядерные" потоки выполнения и запускает программу /sbin/init.
Сообщение "Linux version 2.4.2 ... " появляется на экране сразу после начала выполнения start_kernel(). Появляются и другие сообщения. В конце на консоли возникает знакомое приглашение login. Его появление говорит пользователю, что ядро Linux загружено, работает и рвется в бой... И правит миром!
10. Заключение
Подведем итог нашему долгому и трудному путешествию по всему процессу начальной (само)загрузки [bootstrapping] Linux-системы, или, другими словами, компьютерной системы под управлением операционной системы Linux. Я НЕ СТАЛ объяснять большую часть разных компонентов и терминов, упоминаемых в изложении. Речь идет о таких вещах, как IDT, GDT, регистр eip, регистр cs и т.д. Полноценное объяснение не позволило бы уложить статью в несколько страниц и, кроме того, сделало бы изложение весьма скучным. Так что я надеюсь, что читатель поймет, что в этой статье я предлагаю лишь поверхностный взгляд на ход событий, происходящих во время загрузки Linux. Подробное рассмотрение всех участвующих в этом функций, таких как paging_init() и mem_init(), выходит за рамки моей темы.
Bryan Henderson
Bryan Henderson (Брайэн Хендерсон), системный программист, работающий, в основном, на больших компьютерных системах. Любовь Брайэна к компьютерам возникла в старших классах с 110-бодового подключения к местному колледжу, но Брайэн мало интересовался домашними компьютерами, пока не появился Linux.
Команда переводчиков:
Владимир Меренков | Александр Михайлов | Иван Песин | Сергей Скороходов | Алексей Саввин | Павел Ступин | Роман Шумихин |
Со всеми предложениями, идеями и комментариями обращайтесь на cobalt@linux.ru.net
Сайт рассылки: http://gazette.linux.ru.net
Буфер экрана (history buffer)
Каждый виртуальный терминал имеет буфер экрана, больший, чем размер физического экрана. Обычно физический размер экрана 25 строчек, хотя, при желании, вы можете переключить syscons в режим при котором на экране отображаются 43, 50 или 60 строчек, если, конечно, видеокарта поддерживает такие режимы (подробнее об этом в "Режим отображения")
Так вот, каждый виртуальный терминал помнит последние 100 строчек вывода из которых только последние отображаются на физическом экране.
Эти 100 строчек хранятся в буфере экрана и вы можете их "пролистать", переключив syscons в специальный режим - "просмотра буфера" (подробнее в "Специальные клавиши: slock").
Кроме того, надо отметить, что 100 строк - это размер "по умолчанию". При желании его можно увеличить иди уменьшить (подробнее в "Изменение размера буфера терминала"). Причем, каждый из виртуальных терминалов может иметь свой размер буфера.
Быстрый поиск файла по имени - утилита locate
Как было сказано ранее find
решает практически все задачи которые могут возникнуть у пользователя в связи с поиском и последующей обработкой нужных файлов или каталогов. Однако, довольно часто, возникают ситуации когда вам с одной стороны не нужна вся мощь find, а с другой хотелось чтобы поиск происходил побыстрее, и без значительной загрузки системы. Ведь запустив find с каким нибудь хитрым условием, да еще вызывающий внешние команды, да указав начать поиск с корневой директории, можно добиться того что система будет настолько загружена, что ваш системный администратор грешным делом подумает о визите кул хацкеров, но мы конечно не звери и нашего администратора пугать не будем. Поэтому для глобального поиска воспользуемся утилитой locate.
Catch
Висит? Снимем! |
Петр 'Roxton' СЕМИЛЕТОВ, 13.01.03, Мой Компьютер Weekly. |
Если зависает Windows, пользователь делает некие телодвижения, а затем, убедившись в «тщете и суетности этого мира», со спокойным сердцем нажимает RESET. В Линуксе все обстоит иначе.
Начнем с того, что «подвесить» Линукс вполне реально, несмотря на стабильность системы. «Подвесить» взято в кавычки потому, что при кажущихся признаках капитального останова системы ядро продолжает работать. Давайте разберем несколько типичных ситуаций и посмотрим, как можно с честью выходить из них. Предлагаю вам ощутить себя в нескольких героических ипостасях.
Ипостась первая — Зевс-Громовержец
Предположим, что вы работаете в KDE. У вас нет KDE? Ничего не могу поделать. KDE — самая популярная графическая оболочка, поэтому плясать мы будем вокруг нее. Итак, вы мирно работаете в KDE, запускаете какую-то шаманским образом откомпилированную прогу, и она повисает. Можно запустить менеджер процессов (Ctrl+Esc) и прибить замороженное приложение, но я предпочитаю более скоростной способ. Нажимаю Ctrl+Alt+Esc, и курсор превращается в молнию! Теперь достаточно щелкнуть ею по зависшему окну, и оно исчезнет.
Ипостась вторая — Киллер Икс.
В него вам придется перевоплотиться, когда зависнуть «иксы» — графическая оболочка. Или не зависнут, однако будут себя вести вызывающе и неадекватно. Например, самовольно уползет в свою нору мышь, не подавая больше признаков жизни, или оболочка упорно откажется закрыть себя и собственные окна. Знаете, ее можно понять — к десктопу приросла, — но ведь это противоестественно.
Рецепт прост, как ящик пива. В любой иксовой оболочке, будь то KDE, Gnome или BlackBox, срабатывает комбинация клавиш Ctrl+Alt+Backspace. Сразу после их нажатия следует низвержение экрана во тьму. Ничего страшного. Это всего лишь консоль. Иксы закрыты, можете снова их запускать — startx.
Ипостась третья — Терминатор
Могут произойти и совсем скверные вещи. Например, у вас компьютер подключен к бесперебойнику, а монитор — нет. Когда свет отрубают и наступает временный Апокалипсис, компьютер продолжает работать какое-то время, питаясь от аккумуляторов, а вот монитор гаснет. Между тем, вы же в поте лица своего трудились в KWord'е над неким громадным текстовым файлом и не успели его сохранить.
Положим, сохранить вы успеваете — вот оно, судорожно-резвое нажатие на Ctrl+S. Но ведь реальное сохранение могло не произойти! Линукс кэширует данные и периодически сбрасывает их на диск. Последняя операция носит титул синхронизации буфера. Ее можно запустить вручную, нажав на Alt+SysRq+S. Напомню, что SysRq — это та же клавиша, что и PrintScreen. SysReq расшифровывается как System Request, то бишь «системный запрос». Итак, нажав вышеприведенную комбинацию, мы синхронизировали буфер.
Но ведь нужно еще выйти из системы как полагается. Ведь когда, допустим, вы выходите из дому, забыв выключить газ, свет и воду, то могут произойти всякие... Неприятные вещи, скажем так.
Хорошо, если в момент выключения монитора вы были в консоли, в ее командной строке — тогда вы можете быстро набрать вслепую команду halt, которая синхронизирует буфер, размонтирует файловые системы и, наконец, выключит питание компьютера. А если вы в графической оболочке? Если вы не помните ее «горячие клавиши» для выхода или перезагрузки (если оболочка вообще поддерживает таковые)?
Здесь мы снова сделаем уклон в сторону KDE. Есть, есть в ней такие волшебные клавиши. Нужно только их настроить. Для этого запустите Центр управления KDE и перейдите в нем в LookNFeel > Ярлычки. Теперь, на странице Глобальные привязки найдите пункт Остановить без запроса на подтверждение и назначьте ему свое сочетание клавиш.
Но это в KDE. А нет ли чего-нибудь глобального, для других файловых менеджеров. И чтобы в консоли это тоже работало? Есть! Можете записать себе на бумажке или вырезать кусочек статьи и присобачить его на стенку. А еще лучше — держите весь журнал под рукой. Итак, список волшебных клавиш, действующих во время шторма:
Alt+SysRq+O — действует на систему подобно выстрелу в висок. Никакой синхронизации буфера, размонтирования и прочего. Сразу гасится свет, то бишь вырубается питание. Поэтому до нажатия этих клавиш следует синхронизировать буфер (Alt+SysRq+S), затем размонтировать файловые системы (Alt+SysRq+U) и только потом нажимать страшное Alt+SysRq+O. И запомните — сначала синхронизация, потом размонтирование, однако не наоборот;
Alt+SysRq+K — эта комбинация носит название Secure Access Key (SAK). Она убивает все запущенные в текущей виртуальной консоли процессы. Даже глазом моргнуть не успеете. Полезно использовать, когда зависла некая программа и даже не позволяет вам переключиться в другую виртуальную консоль. Исторически SAK предназначался для других целей. Применять его советовали пользователям перед тем как залогиниться в систему. Дело в том, что довольно легко написать программу или скрипт, эмулирующие логин. Неискушенный пользователь вводит свой логин и пароль, а «троянский конь» сохраняет их в надежном месте, чтобы злоумышленник воспользовался плодами вашей доверчивости. Если же юзер перед тем как зайти в систему нажмет SAK, то прибьет трояна и получит нормальное, «оригинальное» приглашение системы.
А вот еще три сходные по действию функции-киллеры:
Alt+SysRq+E — посылает сигнал SIGTERM всем процессам, кроме init. Сигнал SIGTERM означает, что система завершает некий процесс и прибирает за ним мусор — закрывает открытые процессом файлы, убивает временные и так далее;
Alt+SysRq+I — посылает сигнал SIGKILL всем процессам, кроме init. В отличие от предыдущего сигнала, SIGKILL грубо прерывает выполнение программы, не выполняя после этого «зачистку».
Здесь уместно сделать небольшое отступление и рассказать немного о сигналах, с помощью которых можно управлять выполнением программ, а точнее — их завершением. Сначала нам нужно получить PID программы. Аббревиатуру PID следует толковать как Process Identifier, то бишь идентификатор процесса. Наберем в консоли следующую команду:
ps
После ее выполнения на экран будет выведена информация о запущенных в текущей консоли процессах. Примерно вот так:
[root@localhost root]# ps PID TTY TIME CMD 1434 pts/2 00:00:00 bash 1621 pts/2 00:00:00 bc 1622 pts/2 00:00:00 ps
Из этого следует, что в во время запуска команды ps были активны следующие процессы: bash (интерпретатор оболочки), сама ps и удобный консольный калькулятор bc. В первом столбце таблицы видим интересующие нас идентификаторы процессов. Зная их, можем послать процессу некий сигнал. Допустим, мы хотим прервать выполнение bc. Попробуем сделать это вежливо, послав SIGTERM:
kill -SIGTERM 1621
В ответ — молчание... Проверяем активные процессы командой ps.
[root@localhost root]# ps PID TTY TIME CMD 1434 pts/2 00:00:00 bash 1621 pts/2 00:00:00 bc 1647 pts/2 00:00:00 ps
Как видим, калькулятор все еще висит в памяти. Тогда попросим его более настойчиво, уже с помощью сигнала SIGKILL:
kill -SIGKILL 1621
И что же? На экране появляется сообщение:
[1]+ Killed bc
С чем и поздравляю — процесс убит наповал. Вот что называется «магией на кончиках пальцев». Далее:
Alt+SysRq+L — посылает сигнал SIGKILL всем процессам, включая init. В этом случае система уходит в полный даун. Эту команду лучше не трогать. Смерть от напалма!
Alt+SysRq+B — перезагрузка системы. Очень быстрая, потому что этапы синхронизации и размонтирования пропускаются. Употреблять только в самых крайних случаях. С таким же успехом можете нажать на Reset.
Alt+SysRq+R — изменение режима клавиатуры с Raw в XLAT. Например, после краха видеоплейера или игры, работающего с популярной библиотекой SVGALib, вы могли заметить, что консоль не реагирует на нажатия клавиш. Вот это средство и поможет!
Под конец статьи затрону тему, которая напрямую связана с проблемами функционирования программ. Говоря проще — с вылетами. Речь идет о coredump'ах — файлах довольно ощутимых размеров, которые создаются после аварийного завершения программы. Читать coredump'ы может быть интересно программистам, для простых же пользователей они совершенно бесполезны и только засоряют винчестер. Как бороться?
Открываем в текстовом редакторе файл bashrc, который лежит в директории /etc. В его конец добавляем всего одну строчку:
ulimit -c 0
Этим мы ограничиваем размер создаваемых coredump'ов до нуля, тем самым предотвращая их появление. Чтобы команда вступила в силу, надо (в общем случае) перезагрузить систему. Проверим, получилось ли. Пример даю исходя из того, что вы работаете в KDE. Заходим в директорию с каким-нибудь текстовым файлом, из контекстного меню выбираем просмотр этого файла неким редактором. Теперь нажимаем Ctrl+Esc, чтобы вызывать Системный монитор (Рис. 2). В его списке делаем правый клик на имени редактора, чтобы вызвать контекстное меню. В нем активизируем пункт Послать сигнал. Появится меню сигналов, из которых следует выбрать SIGSEVG. Программа «вылетает», а мы смотрим, появился ли coredump. Не появился. Очень хорошо.
CD-R (CD-RW)
FAQ и копия
список, поддерживаемых устройств
Я пробовал на HP CD-Writer Plus 8100 , IDE/ATAPI (24/4/2, в действительности скорость чтения не выше 12x) и Mitsumi CR-4804TE, IDE/ATAPI (24/4/4).
Особенности конфигурации ядра (IDE CD-RW), шаг влево, шаг вправо - и работать не будет:
SYSCTL=y автоматическая загрузка модулей (kerneld) IDE=y IDECD=m, модуль - ide-cd SCSI hostadaptor emulation (ибо ATAPI - это эмуляция SCSI на IDE/ATA), IDESCSI=m, модуль - ide-scsi Loopback device (файловая система внутри файла), BLK_DEV_LOOP=m, модуль - loop SCSI=m, модуль - scsi SCSI CDROM, BLK_DEV_SR=m, модуль - sr BLK_DEV_SR_VENDOR=y SCSI generic, CHR_DEV_SG = m, модуль - sg ни в коем случае SCSI_MULTI_LUN в версиях ядра до 2.2.10 (Up to kernel-version 2.2.10, don't enable CONFIG_SCSI_MULTI_LUN ('probe for multiple luns') and ide-scsi support at the same time) SCSI драйвер FAT_FS=m, MSDOS_FS=m, VFAT_FS=m, UMSDOS_FS=m ISO 9660 CDROM filesystem (включает RockRidge), обязательно встроенный в ядро. Microsoft Joliet cdrom Создание образа файловой системы (не более 650MB!, 680 000 000)
mkisofs (ISO 9660, RockRidge, El torito, Juliet, HFS, мультисессии), пакет mkisofs-1.8-2 в RedHat 6.2 или mkisofs-1.9-2 в RedHat 7.0. простейший случай: mkisofs -r [ -P имя-публикатора ] [ -V имя-тома ] -v [-o образ-CD] исходная-директория ... (ISO9660 и RockRidge со сброшенными правами доступа к файлам)
если -o опущен, то выводится на stdout
-R (вместо -r, если надо сохранять права доступа в RockRidge)
-M исходный-образ-CD (позволяет добавлять файлы к ранее созданному образу)
-J (делает вдобавок оглавление Juliet, который не переносит несколько файлов с одним и тем же именем, получающиеся после слияния нескольких исходных директорий)
-m шаблон-имени-файла (не записывать эти файлы) тестирование полученного:
mount -t iso9660 -o ro,loop=/dev/loop0 образ-CD /cdrom Прожигание
cdwrite - старая, заброшенная программа cdrecord-1.9. Пакет cdrecord-1.9-2 в ReDHat 7.0.
загрузить ide-scsi (после этого надо обращаться не к /dev/hd?, а к /dev/scd?)
modprobe ide-scsi (нужны права root)
он должен найти CD-ROM и все про него рассказать (на syslog), создать sr-устройство (у меня sr0 на scsi0 (chanel 0, id 0, lun 0), даже оказался scsi3-mmc drive: 24x/24x writer cd/rw xa/form2 cdda tray) появились устройства (/proc/devices): char 21 (sg) и block 11 (sr) cdrecord -scanbus находит устройство (scsibus0, 0) появились модули: ide-scsi, sg, scsi_mod после доступа к CD появились модули: cdrom, sr_mod запись обычного диска с данными в одну сессию
cdrecord -v speed=скорость dev=номер-шины,номер-устройства,lun-data образ-CD
для CD-RW надо добавить опцию: blank=fast (полторы минуты)
используйте имя файла "-" для обозначения stdin ключ -dummy имитирует процесс записи, что позволяет проверить ее возможность на указанной скорости ключ -multi не закрывает диск, что позволяет в дальнейшем дописывать на него ключ -prcap рассказывает очень много интересной информации об устройстве ключ -force позволяет иногда вернуть к жизни CD-RW fs=размер задает размер буфера (более 16m не выносит Linux, а больше 4m не выносит HP 8100 )
cdrdao (специально для CD-Audio) GUI
X-CD-Roast - интерфейс к mkisofs и cdrecord BurnIT - интерфейс (на Java) к mkisofs, cdrecord и cdda2wav XDaodio - интерфейс (Tcl/Tk) к cdrdao для копирования audio CD 1:1
Чем мы руководствовались
При разработке стандарта мы стремились достичь следующих целей:
решить технические проблемы, и вместе с тем уменьшить трудности перехода на стандарт. сделать спецификацию в разумной степени стабильной. заслужить одобрение разработчиков, дистрибьюторов и других лиц, принимающих решения в группах разработчиков, и склонить их к участию в разработке стандарта. создать стандарт, который будет привлекательным для разработчиков различных UNIX-подобных систем.
Previous: История стандарта FHS
Next: Сфера действия стандарта
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Чем придётся пожертвовать?
Вопрос важный. Выигрывая в одном, неизбежно проигрываешь в другом. Как удобство использования влияет на общую производительность? Тестирование (сравнивались физика и linear логика) показало следующее. Перенос файловых систем с физики на логику на скорости операций I/O не отразился. Другое дело, такой перенос для всех типов тестируемых файловых систем (ext3, reiserfs, xfs) повысил нагрузку на процессор примерно на 10% – 15%. Тесты не претендовали на академичность и могут дать иной результат на другом железе, но некоторое представление о предмете дают. Общий вывод такой: подбор файловых систем более критичен для производительности, чем переход с физики на логику. Интересно было бы видеть результаты тестов для striped логики.