Настройка и работа в Linux

         

Каталоговая структура /var


Каталог /var содержит файлы с изменяющимися данными. В их число входят каталоги и файлы спулинга, данные об администрировании и логировании, временные файлы.

Некоторые части каталоговой структуры /var не являются разделяемыми между разными системами. К ним относятся /var/log, /var/lock и /var/run. Другие части могут быть разделяемыми, например, /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news.

Структура каталогов /var определяется в стандарте FHS с той целью, чтобы сделать возможным монтирование каталога /usr в режиме только для чтения. Все, что записывается на диск в процессе выполнения системных операций (в противоположность процессам инсталляции и поддержки программного обеспечения), должно размещаться в каталоге /var.

Следующие каталоги или символические ссылки на каталоги должны обязательно присутствовать в /var.

cache
lib
local
lock
log
opt
run
spool
tmp
Данные кэшей приложений
Переменная информация о состоянии приложений
Переменные данные для /usr/local
Файлы блокирования устройств и программ
Каталоги и файлы протоколов
Переменные данные для /opt
Данные, относящиеся к запущенным процессам
Данные очередей, создаваемых приложениями
Временные файлы, сохраняемые между перезапусками системы

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

/var/backups

/var/cron

/var/msgs

/var/preserve

Наличие следующих подкаталогов в /var не является обязательным, но они (может быть как символические ссылки) должны иметься, если соответствующие системы установлены:

account - протоколы работы процессов,
crash - дампы памяти при крахе системы,
games - временные данные игровых приложений,
mail - файлы почтовых ящиков пользователей,
yp - файлы базы данных сетевой информационной службы (Network Information Service - NIS).

Приложения в общем случае не должны добавлять каталоги непосредственно в /var. Такие каталоги должны создаваться в соответствующих подкаталогах.



Keha




Вы слыхали, как поет ядро? 
(Некоторые возможности Linux)

- Vlad Vul, 15.12.01 -

Когда фанаты Юникса говорят о его какой то особой и сверхестественной концептуальности и внутреннем изяществе, мне кажется, мало кто этому верит. Люди из мира Windows просто пожимают плечами, а некоторые еще и пальцем у виска покрутят. Те из них, кто, поверив льстивым статьям, пытаются установить Линукс, в лучшем случае видят перед собой корявую подделку под старую добрую Вынь, и совершенно не понимают, откуда взялся весь этот хайп.

Кстати, вытереть потом Линукс со своего диска - задача нетривиальная, и требует некоторых знаний об устройстве загрузочных секторов и Partition Table. Часто в Линукс-форумах можно услышать крики о помощи: "Я переразбил и отформатировал диск, а Линукс все равно продолжает загружаться, помогите его стереть!". Линуксоиды коварно посмеиваются: вход рубль, выход два. На всякий случай подскажу рецепт: нужно загрузиться с дискеты или реаниматор-CD и выполнить команду fdisk /mbr.

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

Конвейеры.

В статьях для начинающих, которые часто пишут сейчас журналисты (Кстати, если вы хотите купить книжку про Линукс, ни в коем случае не покупайте ту, в названии которой есть слово Линукс. Еще хуже, если в названии книги упоминается ваш дистрибутив (Mandrake, RedHat, и т.д.) Такие книжки все написаны чайниками для чайников, там лишь поверхностные советы. Выбирайте книжку про Юникс - не ошибетесь), рассказывается, как в Линуксе вы можете выполнить команду

program > file.txt

и весь вывод program'мы окажется в файле file.txt. Тут продвинутые читатели фыркают: ну и что, и в DOS'е такие команды срабатывали, и даже стандартный был способ:

type longfile.txt | more ,

чтобы длинные файлы читать поэкранно.

Верно. Но это лишь остатки былого великолепия. Посмотрите как на самом деле используются конвейеры в юниксе:

tar -c /home/|gzip|uuencode mydir.tgz|mail -s "Каталог /home по состоянию на `date`" some@address.ru

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

tar - берет каталог /home и делает из него один плоский файл

gzip - сжимает его (заметно сильнее zip'а - специализация!)

uuencode - бинарный архив превращает в текст, пригодный для электронной почты

mail - кладет письмо в очередь на отправку, и оно будет отправлено при первой возможности (скорее всего мгновенно).

date - вставляет текущую дату-время в тему письма.

Конечно, ничего мудрого нет, чтобы послать каталог по почте:

Start-Programs-WinZip-New-Browse-Save as

Почта-Новое письмо-Тема-Прикрепить файл-Browse-Отправить

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

А в юниксе достаточно вставить вышеуказанную строку в файл планировщика, и будешь уверенным, что все будет сделано как надо, а если что собъется - например, каталог /home исчез - планировщик напишет тебе письмо с указанием ошибок, которое ты получишь вместе с утренней почтой.

Устройства как файлы.


Во времена ДОСа было модно печатать так: нажимаешь в Нортон Коммандере F5 (копирование), а в окошке "Куда копировать?" пишешь "PRN". Это, опять таки, только призрак былой концепции. В Линуксе даже диски изображаются как файлы, и если ты достаточно храбр, тебе не нужен Disk Editor - ты можешь рассматривать внутреннюю структуру файловых систем, просто открыв файл /dev/hda в любом текстовом редакторе. Если конечно тебе разрешил Администратор - иначе ты получишь Permission Denied - Доступ Закрыт. О дисках я еще расскажу, а вот как я люблю прикалываться. Дело в том, что даже звуковая карта представлена файлом /dev/dsp и можно выполнить команду:

cp /boot/vmlinux /dev/dsp

Тут же из динамиков раздастся вой, треск, скрежет и лязг - файл vmlinuz (это ядро Линукса) начнет проигрываться, как rawPCM - звуковой поток. Если немного поэкспериментировать, начинаешь на слух отличать код (программы) от, допустим, картинок. Архивы, как им и положено, звучат белым шумом - их содержимое псевдослучайно. А звуковые файлы, натурально, проигрываются без всяких специальных программ, если только формат совпадает.

Виртуальный CD-ROM.

Где то с неделю назад на сайте "Компьютерры" рекламировалась программка - виртуальный CD-ROM . Она позволяет хранить часто используемые CD на жестком диске, и подключать их по очереди. Стоит денег. В Линуксе это не только бесплатно, но и программ никаких не надо качать, а CD можно подключить все одновременно. Примерно так:

cp /dev/cdrom image.cdr

Теперь сидюк вы можете спрятать - его содержимое скопировано в файл image.cdr. Теперь подмонтируем его в файловую систему

mount -t iso9660 -o loop image.cdr /mnt/my_siduk1

готово - все содержимое бывшего компакта появляется в каталоге /mnt/my_siduk1. Конечно, это может выполняться при каждой загрузке автоматически.

Как я был хакером


Однажды я занимался не очень законными делами. Конечно, Линукс - лучшая платформа для хакера. И больше из интереса, чем со страху, я решил обезопасить себя от разных случайностей. А именно создал на диске секретный зашифрованный каталог. Тут пришлось мне лезть в интернет. Дело в том, что из-за американских ограничений на экспорт крипто ядро линукса идет без криптокода, который используется для шифрования дисков или сетевых соединений - его нужно скачивать отдельно. Я не понимаю, почему это нельзя было обойти как-то поизящнее, но факт остается фактом. Ладно. Пришлось скачать и поставить.

Я создал файл требуемого мне размера, на разделе Windows, а его название замаскировал под своп: win386.swp. Теперь создадим к нему шифрованный интерфейс.

losetup -k 192 -e aes /dev/loop4 /mnt/win/windows/win386.swp

192 - длина ключа, aes - стандарт шифрования (их на выбор штук 6). Тут у меня спросили мой будущий пароль. Забудешь его - каюк: он не просто проверка перед доступом к файлу. Паролем, как ключом, зашифровывается сам файл. Теперь форматируем наш новый жесткий диск (виртуальный):

mkfs.ext2 /dev/loop4

и монтируем его в дерево каталогов

mount -t ext2 /dev/loop4 /home/user2

Я создал специального юзера с ничего не говорящим именем user2, накидал в его домашний каталог всякого барахла (оно исчезает, когда "настоящий" каталог подключается.) Готово. Чем хороша многопользовательская система: можно быть уверенным, что личные файлы пользователя, все закладки, почта, скэшированные и скачанные с интернет файлы - все лежит в его каталоге, а значит, будет на лету зашифровано в секретном файле. Замедления скорости я на глаз не заметил.

В случае чего, интересным для агентов ФБР или отделения Р окажется тот факт, что на вашем компьютере не установлено никакой шифрующей диск программы - просто валяется в дальнем каталоге какой-то забытый своп, набитый случайными числами. Ну и Линукс стоит - пока что это не преступление.

***

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

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

Еще хочу сказать, что в мире Windows иногда попадаются программы, которые как будто пришли из царства юникса - маленькие, мощные, концептуальные, без лишней мышевозни. Таков замечательный планировщик Control Agent . Рекомендую.

Да, и еще. Линукс не виснет. Не так не виснет, как Win2000, а вообще не виснет. Никогда.

P.S. При написании этой статьи не постра.. не использовалось ни одной программы корпорации Microsoft :-)



Kkb


"Честная" Xkb-переключалка. Хотя в последних версях автор несколько отошел от "идеи XKB" и добавил "подгрузку" раскладок в процессе работы. Но надо заметить, что сделано это средствами XKB, то есть наиболее оптимальным способом.

Главный недостаток - для сборки требуется "тулкит" Qt.



Клавиатура


Теперь рассмотрим ту часть syscons, которая работает с клавиатурой.

Начнем с самого "низа" - "железного" контроллера клавиатуры. При нажатии на любую клавишу он выдает ее скан-код - некий номер кнопки на клавиатуре. Сразу замечу, что этот скан-код не имеет ничего общего с ASCII-кодами тех символов, которые "нарисованы на кнопках".

Более того, для каждой кнопки контроллер выдает по крайней мере два разных кода - один, когда вы нажимаете кнопку, другой - когда отпускаете ее. Эти коды всегда отличаются на величину 128 (старший бит в байте кода), хотя в данном случае это не так уж и важно. Кроме этого, при нажимании некоторых кнопок (и отпускании) контроллер генерирует скан-коды состоящие из двух байт - "префикса" (обычно это E0) и собственно кода кнопки. Обычно такие скан-коды называют "расширенными".

Основная задача syscons - преобразовать эти скан-коды в соответствующие коды символов. Причем, он делает это в два этапа.

Сначала "сырые" скан-коды (которые считываются из контроллера) преобразуются во внутренние коды syscons. В основном это касается "расширенных" кодов. Для обычных клавиш в качестве внутреннего кода берется просто скан-код, а вот "расширенные" коды заменяются на однобайтные коды (естественно, те, которые не заняты обычными клавишами). Кстати, в документации они обычно тоже называются скан-кодами, но учтите, что это "немного не те" скан-коды.

На втором этапе уже внутренние коды по специальной таблице "раскладки клавиатуры" (keyboard map) преобразуются в обычные ASCII коды символов. Надо заметить, что при этом используется только скан-код "нажатия клавиши".

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


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

А вот преобразованием в ASCII-коды, напротив, можно управлять. Таблица раскладки клавиатуры может быть загружена в syscons с помощью соответствующей утилиты (kbdcontrol). Естественно, если вы не будете загружать никакую таблицу, это не значит, что syscons не сможет перевести скан-коды в символы ASCII. В нем есть "встроенная" таблица раскладки "по умолчанию". Но, как я уже сказал, в любой момент можно поменять все соответствия кодов.

Также можно менять и последовательности, которые "навешиваются" на "функциональные" клавиши на третьем этапе.

Прежде чем перейти к более подробному рассмотрению "раскладки клавиатуры", надо отметить, что syscons можно переключить в режим, когда он будет отдавать в систему просто "сырые" скан-коды (RAW) или в режим выдачи "внутренних" скан-кодов (CODE). (В "нормальном" режиме выдаются "транслированные" (XLATE) коды.)

Если вам захочется посмотреть скан-коды вашей клавиатуры, можете воспользоваться моими программками ("Приложение 4. Несколько мелких полезных программок.), которые используют эти режимы. Только хочу еще раз подчеркнуть, что наиболее интересными являются не "сырые" (RAW) скан-коды, а "внутренние" коды syscons (CODE), поскольку в таблице раскладки клавиатуры указываются именно они (причем, только "код нажатия").

Итак, что собой представляет таблица раскладки клавиатуры (keyboard map)?
  Во-первых, напомню, что есть несколько вспомогательных клавиш - "модификаторов" (Shift, Ctrl и Alt), которые меняют код выдаваемый другими клавишами.
  Поэтому, каждая строчка в "таблице раскладки" состоит из скан-кода клавиши ("внутреннего", не "сырого") и нескольких значений для этой клавиши. (В зависимости от комбинации "модификаторов" syscons выберет одно из них.)

Все возможные значения для клавиш можно разделить на несколько групп

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


Клавиша Meta


Модификатор meta в раскладке клавиатуры отсутствует. Если вам кажется, что он будет вам очень полезен, надо найти подходящую клавишу и присвоить ей значение meta.

Если у вас "микрософтовская" клавиатура, то под met'у можно задействовать одну из кнопок с "окошками", напрмер - левую. Если вы не знаете ее скан-код (вообще-то, это 105), можно найти ее по значению - "по умолчанию" она имеет значение fkey62

105 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 O

Просто замените значения во всех колонках на meta

105 meta meta meta meta meta meta meta meta O

Если у вас русская раскладка клавиатуры, то не забудьте ту же операцию проделать для той же кнопки в "альтернативной" части раскладки

233 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 O

Если же "микрософтовских" кнопок у вас нет, то можно под met'у выделить одну из "парных" кнопок ([Shift], [Ctrl] или [Alt]). Поскольку, для syscons нет разницы - какую из них вы нажмете для получения нужного эффекта, можно, напрмер, в качестве alt оставить только левую кнопку (та строчка, где значения - lalt), а правую кнопку (значения - ralt) изменить на meta.



Клоны Norton Commander


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

Маленькое отступление: в чем причина любви нашего народа к производным Norton Commander? Ведь ни в одной другой стране мира (и паче всего - в Америке) они не пользуются хотя бы сравнимой популярностью. Это оставалось для меня загадкой, пока я не прочитал посвященное Norton Commander исследование на сайте NeoSoft. В котором доказывается, что Питер Нортон - не кто иной, как лейтенант Шмидт, счастливо спасшийся из лап царизма и иммигрировавший в Америку, где поступил в американские ВМС под прославившим его в дальнейшем псевдонимом. Вероятно, призванным подчеркнуть, что он пришел "с холода". Имя свое, что характерно, он сохранил, а отчества у американцев не приняты.

Дослужившись до чина коммандера (что-то среднее между каперангом и контр-адмиралом), он вышел в отставку и подался в софтверную индустрию, где и нашел свое истинное призвание. Так что корни Norton Commander лежат не где-нибудь, а все на той же Руси исконной...

Версия, конечно, спорная, но имеющая право на существование. И, главное, многое объясняющая, вплоть до цветов интерфейса Norton Commander по умолчанию (инвертированные цвета Андреевского флага). Принимать или не принимать ее - оставляю на ваше усмотрение.

Однако я отвлекся. Первое, что приходит на ум при обращении к платформе Linux в рамках рассматриваемой темы - Midnight Commander, известный аналог Norton Commander. Именно он сохранил наибольшее количество черт своего предшественника, хотя функционально далеко его перерос. Много говорить о нем я не буду. Во-первых, он настолько близок к исходному Norton, что любой работавший с последним без труда разберется с ним. Во-вторых, он подробно описан на сайте Виктора Костромина. А в третьих, главное, где возникает потребность в файловых менеджерах - это графические оболочки (в консоли удобнее все же пользоваться средствами командной строки). Однако кое-что о нем сказать необходимо, так как именно MC - одна из программ, вызывающих чувство близости при первом заходе в Linux того, кто помнит времена чистого DOS.

И так, MC - это консольный файловый менеджер. Он входит в состав большинства дистрибутивов Linux (за исключением сугубо американских - они ведь патриоты и почвенники еще почище нас). И в ряде из них, как в Linux Mandrake, устанавливается по умолчанию. Вызывается просто - набором mc в командной строке. После чего возникают две всем памятные панели сине-белого цвета со строкой меню сверху и подсказкой по горячим клавишам - снизу.

Что делать дальше - знают все, заставшие времена DOS (а кто не знает - значит, и потребности в этом не испытывает). Скажу только одно: въевшаяся в плоть и кровь привычка перейти на другой диск с помощью клавиш Alt+F1 или Alt+F2 вызовет неожиданный эффект. Во-первых, как уже говорилось, в Linux нет понятия диска - и дисковый раздел, и второй винчестер, и дискета - не более, чем подкаталоги дерева каталогов. Добраться до которых можно обычным для Norton способом перехода из каталога в каталог. А во-вторых, комбинация Alt+функциональная клавиша зарезервирована в Linux для перехода в другую виртуальную консоль. Не зная этого, по первому разу нажав Alt+F2, можно весьма удивиться, обнаружив черный экран с предложением авторизации...

Впрочем, это, пожалуй, единственная сложность при работе с MC. А посему мы расстанемся с ним, перейдя к Norton-подобным файловым менеджерам графического режима.

Таковых довольно много. Это и KCommander, предназначенный для KDE, и Gentoo, основанный на Gtk и ориентированный на применение с GNOME. Однако первый из них (претендующий быть функциональным аналогом Windows Commander Христиана Гислера) еще не совсем доработан, второй же показался мне недостаточно устойчивым и не очень удобным.

А потому я остановлюсь на двух файловых менеджерах, не привязанных к какой-либо среде или специфической библиотеке - XNC и XWin Commander.

XNC (X Northern Commander) - произведение нашего соотечественника, Леонида Храмова. Он доступен на сайте http://www.xnc.dubna.su/ в исходных текстах или в виде rpm-пакета.

При первом запуске вид XNC достаточно необычен для клона Norton Commander. Кроме непривычной расцветки (светло-серый фон с разноцветными, в зависимости от типа файла, буквами, вместо привычных двух панелей можно видеть только одну, разбитую на три вертикальные колонки: переход на вторую панель (вернее, в терминологии программы, страницу, page) осуществляется с помощью закладки.

В верхней части экрана - строка анимированного заголовка. Ниже - строка меню, переключаемого с помощью небольшой стрелки. В положении по умолчанию в меню пункты: Left, Commands, Options, Right.

В пункте Left определяется представление левой панели (она же - верхняя страница, по умолчанию): короткий или длинный формат файлов; число колонок (от одной до четырех); порядок сортировки (по имени, расширению, размеру, дате или без сортировки); выход из программы, перед которым, как и во всех клонах Norton, от нас спрашивают подтверждения серьезностей этого намерения. Содержание пункта Right - идентично, за исключением возможности выхода из программы.

В пункте Commands - основные манипуляции с файлами:


перемонтирование текущего каталога;

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

В пункте Options - редактирование пользовательского меню и привязки типов файлов к приложениям (оба осуществляются вручную, во встроенном текстовом редакторе), а также конфигурирование.

Ниже меню - собственно страница-панель, переключаемая, как я уже говорил, с помощью закладок. Под панелью - статусная строка, командная строка (в которую, как и в Norton, можно поместить маркированный курсором файл путем комбинации клавиш Control+Enter), строка горячих клавиш. Последние в целом аналогичны таковым Norton Commander. Только клавиша F1 вызывает не помощь по программе, а man-страницы (которые нужно указать вручную), а клавиша F9 устанавливает права доступа к файлу.

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

Начальное конфигурирование можно выполнить из меню - Options - Configuration посредством панели с тремя закладками - Main, Prompts, Look/Feel. Оно достаточно элементарно, позволяя включить/отключить показ скрытых файлов, запросы на выполнения основных действий над файлами (копирования, перемещения, удаления и т.д.), время пересканирования каталогов, указать параметры, которые должны отображаться в статусной строке.

Однако основное конфигурирование требует запуска программы xncsetup. Она вызывает конфигурационную панель с пятью закладками. Первая (Common) позволяет определить:



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

В закладке Color определяются цвета фона и текста для файлов различных типов; это можно сделать бегунками или указать параметры RGB вручную.

В закладке Fonts определяются основной шрифт и шрифты для различных элементов интерфейса, в том числе - встроенного редактора IVES. А в закладке Keys можно переопределить горячие клавиши и их комбинации для основных файловых манипуляций и навигации по панелям.

Поработав в программе xncsetup, можно вернуть этому файловому менеджеру первозданный вид, идентичный Norton Commander. На чем и успокоиться.

Файловый менеджер XWC (X WinCommander) также написан нашим соотечественником, Максимом Барановым (правда, насколько я понял - бывшим). Найти его можно на http://www.geocities.com/SiliconValley/Mouse/7912/xwc.htmlс. С точки зрения интерфейса он на первый взгляд весьма отличен от Norton Commander, унаследовав от него, пожалуй, только две вертикально расположенные панели. Однако функционально XWC достаточно близок к нему, что позволяет включить его в число детей командира Нортона.

Запустив XWC, можно, помимо упомянутых панелей, наблюдать: строку меню (с пунктами Left, Commands, Bookmarks, Options, Right и Help), выпадающее меню для навигации, инструментальную панель (которая может быть заполнена плоскими или объемными кнопками). Пути к текущему файлу и статусные строки - самостоятельные для каждой панели. В общем, можно наблюдать некоторое сходство с Windows Commander; однако, вопреки старой и общепринятой командирской традиции, кнопки-горячие клавиши отсутствуют.

Однако если понажимать на функциональные клавиши, родство с Norton Commander проступает отчетливо: клавиша F5 осуществляет копирование файлов и каталогов, F6 - перемещение/переименование, F8 - удаление, F7 создает каталог, F9 позволяет изменить права доступа, а F10 - это выход из программы (как обычно, с запросом на подтверждение).

Однако очевидно, что апеллирование к традиционным горячим клавишам - лишь вспомогательный способ управления файлами, сохраненный как дань традиции. Поскольку два других способа - через главное и контекстное меню, - гораздо функциональней и удобней.

Сначала рассмотрим действия через меню. Традиционные пункты Left и Right - идентичны по содержания, определяя представление соответствующих панелей, а именно:



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

А вот пункт Commands не вполне традиционен по содержанию, которое составляют подпункты:

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

Содержание пункта Bookmarks - понятно, это создание закладок для быстрого перехода в какой-либо каталог.

В опциях можно включить или отключить показ таких элементов, как инструментальная панель, статусная строка, скрытые каталоги, дерево каталогов (добавляется к имеющимся панелям в качестве третьего окна), двухпанельное представление. Здесь же (в подпункте Font) можно выбрать гарнитуру, кегль и начертание шрифта (единые для всех элементов интерфейса), определить его кодировку. А в подпункте Customize - возможность прочих настроек, как то:

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

Основной же способ выполнения файловых операций - из контекстного меню по щелчку правой клавишей мыши на панели, файле или каталоге, или их выделенной группе (выделение группы осуществляется стандартным для Windows способом, левой клавишей мыши при нажатом Shift или Control).

Содержание контекстного меню для панели дублирует пункт Left (или, соответственно, Right) из главного меню. Для файла содержание этого меню составляют пункты:



Open with..., с историей программ, использованных для открытия файлов не только в текущем сеансе, в виде выпадающего меню; View и Edit, открывающие текстовые файлы для просмотра или редактирования средствами, определенными через Options - Customize Add to archive, создающий стандартно архив формата *.tar.gz за счет встроенного (и не настраиваемого) архиватора; созданный (да и любой другой) архив этого формата можно распаковать через то же контекстное меню: пункт Extract to добавляется в него автоматически при щелчке на архивном файле; однако средств просмотра содержимого архива без его распаковки, подобных таковым в kfm, не предусмотрено; Cut и Copy, Link и Symbolic Link, Delete (понятно без комментариев); скажу только, что копирование можно осуществить и перетаскиванием мышью с панели на панель или на дерево каталогов; Attributes, где опять-таки устанавливаются права доступа и принадлежности: как для одиночного файла или каталога, так и для их группы; кроме того, для каталога можно включить опцию рекурсивного изменения (то есть для вложенных файлов и подкаталогов); последняя особенность делает XWC уникальным в ряду прочих файловых менеджеров.

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

В заключение рассказа о файловых менеджерах скажу о программе, которая не может быть отнесена ни к производным Windows Explorer, ни к клона Norton Commander -


Когда locate не катит


Как всегда, отрицательные стороны locate вытекают прямиком из его положительных сторон. Так информация о файлах в базе может устареть с момента последнего обновления, и не соответствовать текущему состоянию файловой системы, некоторые файлы могут быть удалены, некоторые переименованы, другие добавлены. И если с удалением проблем вобщем не возникает, потому что locate после поиска в своей базе проверяет наличие найденных файлов в системе, то с новыми или переименованными файлами locate не дружит, они результатах будут отсутствовать:

$ locate somefile.txt <-- ищем файл somefile.txt которого нет $ touch /tmp/somefile.txt <-- создаем его $ locate /tmp/simefile.txt <-- пытаемся его найти, он не находится $ su <-- тогда логинимся под root, Password: # updatedb -- и обновляем базу locate # exit -- после чего возвращаемся exit $ locate somefile.txt <-- теперь поиск успешен /tmp/somefile.txt $ mv /tmp/somefile.{txt,old} <-- переименовываем $ locate /tmp/somefile.txt <-- под старым именем не находим $ locate /tmp/somefile.old <-- под новым тоже не находим $ su <-- еще раз обновляем базу под root-ом Password: # updatedb # exit $ locate /tmp/somefile.old <-- теперь все OK под новым именем находится /tmp/somefile.old $ locate /tmp/somefile.txt -- под старым нет $

В случае если вы и пользователь или root в одном лице, то проблема решается обновлением базы руками, иначе придется пользоваться чемто более мощным, типа find.

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

Иногда использование locate не эффективно, так был приведен немного исскуственный пример, когда мы находили все файлы в системе, а потом выводили их атрибуты с помощью ls -ld. В данном случае более правильное решение есть использовать тотже find, дело в том что в вышеприведенном случае сканирование системы происходит все равно, только делает это не locate, а ls, добавте сюда накладные расходы на трубопровод, xargs, в результате получаем:

$ cat /tmp/l locate -f proc / | xargs -n 1000 ls -ld

$ cat /tmp/f find / -ls 2>/dev/null

$ time /tmp/f >/dev/null 3.83user 2.80system 0:06.99elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (358major+147minor)pagefaults 0swaps

$ time /tmp/l >/dev/null 5.41user 5.92system 0:11.62elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (28176major+11719minor)pagefaults 0swaps

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

На этом разрешите откланяться. До новых встреч.



Когда не хватает места


Евгений Беленков, 19.05.2003, http://belen.pp.ru

Данный материал предназначен для тех, у кого Linux соседствует с Windows на одном жестком диске или установлен на второй диск небольшого объема... Как мне кажется такая ситуация встречается не так уж и редко.

Еще одной отличительной чертой этого момента является то, что решив попробовать Linux, пользователь выделяет для него немного дискового пространства (да и не все еще являются обладателями многогигабайтных винтов). А вот потом, когда к Linux уже привык, а винду сносить еще страшновато, появляются вопросы. И возникают они, в частности, при самостоятельной сборке программ, требующих значительного дискового пространства при компиляции (например, XFree86 и т.д.)... Места не хватает и компиляция прекращается с соответствующим сообщением...

И что делать в этом случае? Можно, конечно, перезагрузиться в винду и при помощи Partition Magic увеличить размер раздела, а можно поступить следующим образом (Я так делал когда собирал Иксы для Slackware From Scratch):

Начальные условия - допустим исходники распаковываются для компиляции в /tmp/sources ... места мало. Имеется достаточно свободного пространства на одном из разделов Windows(например на диске D:, смонтированном в /mnt/d)

Что делаем?

- Создаем на виндовом разделе пустой файл нужного нам размера (назовем его, к примеру, space.fs):

dd if=/dev/zero of=/mnt/d/space.fs bs=1024 count=1000000 (... в этом случае 1000000 блоков размером 1кб)

- форматируем этот файл (да-да, вы не ослышались):

mke2fs /mnt/d/space.fs (на вопросы отвечаем "y")

- монтируем получившуюся файловую систему:

mount -t ext2 /mnt/d/space.fs /tmp/sources -o rw,loop

- проверяем, сколько у нас теперь места:

df -h

и видим, что в /tmp/sources у нас места стало поболее (в нашем случае чуть меньше гигабайта)

После этого распаковываем наши исходники в /tmp/sources и компилируем, компилируем, компилируем... :-)

Да, и еще... Можно прописать в /etc/fstab, чтобы данный файл монтировался при загрузке системы автоматически.

Дополнительная информация: man dd, man mke2fs, man fstab

Можно спросить, а почему бы не распаковывать софт прямо на виндовый раздел... ан нет, не получится: при компиляции получаются исполняемые файлы Unix, а файловая система FAT32 не позволяет работать с исполняемыми файлами так как это нужно и права назначать там не получится.

ЗЫ. Хочу добавить, что я не использовал данную методику на ntfs разделах и не несу ответственности за порчу данных на них.



Источник - LinuxBegin.ru

http://linuxbegin.ru

Адрес этой статьи:

http://linuxshop.ru/linuxbegin/article328.html



Когда освобождать страницу


Так как система VM использует всю доступную память для кэширования диска, то обычно действительно незанятых страниц очень мало. Система VM зависит от того, как она точно выбирает незанятые страницы для повторного использования для новых распределений. Оптимальный выбор страниц для высвобождения, возможно, является самой важной функцией любой VM-системы, из тех, что она может выполнять, потому что при неправильном выборе система VM вынуждена будет запрашивать страницы с диска, значительно снижая производительность всей системы.

Какую дополнительную нагрузку мы может выделить в критическом пути для избежания высвобождения не той страницы? Каждый неправильный выбор будет стоить нам сотни тысяч тактов работы центрального процессора и заметное замедление работы затронутых процессов, так что мы должны смириться со значительными издержками для того, чтобы была заведомо выбрана правильная страница. Вот почему FreeBSD превосходит другие системы в производительности при нехватке ресурсов памяти.

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

В любом случае, бит использования страницы очищается, и в некоторый более поздний момент VM-система обращается к странице снова и обнаруживает, что этот бит установлен. Это указывает на то, что страница активно используется. Периодически проверяя этот бит, накапливается история использования (в виде счетчика) физической страницы. Когда позже VM-системе требуется высвободить некоторые страницы, проверка истории выступает указателем при определении наиболее вероятной кандидатуры для повторного использования.

Что, если аппаратура не имеет бита использования страницы?

Для тех платформ, что не имеют этой возможности, система эмулирует этот бит. Она снимает отображение или защищает страницу, что приводит к ошибке доступа к странице, если к странице выполняется повторное обращение. При возникновении этой ошибки система просто помечает страницу как используемую и снимает защиту со страницы, так что она может использоваться. Хотя использование такого приема только для определения использования страницы весьма накладно, это выгоднее, чем повторно использовать страницу для других целей и обнаружить, что она снова нужна процессу и подгружать ее с диска.

<
FreeBSD использует несколько очередей страниц для обновления выбора страниц для повторного использования, а также для определения того, когда же грязные страницы должны быть сброшены в хранилище. Так как таблицы страниц во FreeBSD являются динамическими объектами, практически ничего не стоит вырезать страницу из адресного пространства любого использующего ее процесса. После того, как подходящая страница, на основе счетчика использования, выбрана, именно это и выполняется. Система должна отличать между чистыми страницами, которые теоретически могут быть высвобождены в любое время, и грязными страницами, которые сначала должны быть переписаны в хранилище перед тем, как их можно будет использовать повторно. После нахождения подходящей страницы она перемещается в неактивную очередь, если она является грязной, или в очередь кэша, если она чистая. Отдельный алгоритм, основывающийся на отношении количества грязных страниц к чистым, определяет, когда грязные страницы в неактивной очереди должны быть сброшены на диск. Когда это выполнится, сброшенные страницы перемещаются из неактивной очереди в очередь кэша. В этот момент страницы в очереди кэша могут быть повторно активизированы VM со сравнительно малыми накладными расходами. Однако страницы в очереди кэша предполагается `высвобождать немедленно' и повторно использовать в LRU-порядке (меньше всего используемый), когда системе потребуется выделение дополнительной памяти.

Стоит отметить, что во FreeBSD VM-система пытается разделить чистые и грязные страницы во избежание срочной необходимости в ненужных сбросах грязных страниц (что отражается на пропускной способности ввода/вывода) и не перемещает беспричинно страницы между разными очередями, когда подсистема управления памятью не испытывает нехватку ресурсов. Вот почему вы можете видеть, что при выполнении команды systat -vm в некоторых системах значение счетчика очереди кэша мало, а счетчик активной очереди большой. При повышении нагрузки на VM-систему она прилагает большие усилия на поддержку различных очередей страниц в соотношениях, которые являются наиболее эффективными. Годами ходили современные легенды, что Linux выполняет работу по предотвращению выгрузки на диск лучше, чем FreeBSD, но это не так. На самом деле FreeBSD старается сбросить на диск неиспользуемые страницы для освобождения места под дисковый кэш, когда как Linux хранит неиспользуемые страницы в памяти и оставляет под кэш и страницы процессов меньше памяти. Я не знаю, остается ли это правдой на сегодняшний день.


Коллектив и поддержка пользователей


Поддержка пользователей - практически главная задача системного администратора. На вас по долгу службы будут сыпаться сотни вопросов: от "почему оно не включается?" до "может ли этот принтер печатать с разрешением 1200 dpi?" Отвечать надо по существу и без грубостей - если коллектив вас не примет, прижиться на работе будет нелегко.

Первым делом необходимо обучить пользователей правильно пользоваться техникой. Спасибо капиталистам - изобрели корпус ATX, и случайно выключить компьютер уже не удастся. Но не ATX'ом единым живем.

Приведу поучительные примеры из жизни.



Команда chgrp


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

chgrp "новая группа" "имя файла"

Естественно, все что было сказано о команде chown относительно выполнения ее над несколькими файлами и о ключе -R, также относится и к команде chgrp.



Команда chown


Команда chown выглядит очень просто

chown "новый владелец" "имя файла"

если же вы хотите поменять не только владелец, но и группу, то

chown "новый владелец":"новая группа" "имя файла"

Кстати, никто не мешает указать в команде "старого" владельца, тогда изменится только группа.

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

Если же вы хотите, чтобы аналогичная операция была проделана не только в текущей директории, но и во всех "нижележащих" поддиректориях, вам поможет ключ -R (recursively).

Например, команда

chown -R vasia:users *

заменит владельца на vasia, а группу на users для всех файлов и поддиректорий, находящихся в текущей директории и "ниже", то есть в самих поддиректориях.



Командная строка как универсальный инструмент управления файлами


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

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

Сразу после загрузки и авторизации мы оказываемся в собственном домашнем каталоге, сокращенно называемом $HOME. Чего нам хотелось бы перво-наперво? Правильно, просмотреть его содержимое. Что мы и делаем командой ls. Результат ее выполнения - нечто вроде: Desktop/ cat list1 song/ wallpapers/ GNUstep/ different.jbd list2 test/ abelskaya.jbd galich.jbd mysite/ test01.txt allwork/ image1.raw mysongs.jbd tmp/ autosave/ kjukebox.log nsmail/ visbor.jbd

то есть сплошного списка, где файлы и каталоги следуют без разбора в порядке кодов ASCII (различить их можно только по знаку / в конце имени каталога). Причем, как мы точно знаем, не все файлы и каталоги: ведь, помнится, мы в свое время редактировали конфигурационный файл командной оболочки bash, которого в нашем списке не наблюдается. Попробуем его выловить, дав команду ls -A

где A (от all) - опция, предписывающая вывести список всех файлов. Результат - на лицо, то есть на экране: .RealNetworks_RealMediaSDK_60 .mime.types .RealNetworks_RealPlayer_60 .netscape/ .RealNetworks_RealShared_00 .qcad/ .Xauthority .sane/ .Xdefaults .vimrc .Xdefaults.old .xap/

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

Ну а получить полную информацию о файлах и каталогах можно, дав команду ls -l


результатом чего будет список вроде этого: drwxr-xr-x 5 alv alv 4096 Jan 26 04:01 Desktop/ drwxr-xr-x 5 alv alv 4096 Jan 15 05:20 GNUstep/ -rw-r--r-- 1 alv alv 2687 Jan 17 20:26 abelskaya.jbd drwx------ 10 alv alv 4096 Jan 24 12:22 allwork/ drwxr-xr-x 2 alv alv 4096 Jan 18 17:22 autosave/

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

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

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

Копирование осуществляется командой cp с двумя обязательными аргументами: первый - имя файла-источника, и второй - приемник (каталог или устройство, которое, правда, тоже каталог). Вместо имени (или мен) файла можно указать шаблон. Например, командой cp $HOME/* mnt/floppy

все файлы из домашнего каталога будут скопированы на дискету. А с помощью могучего параметра -R можно скопировать также и содержимое подкаталогов всех уровней вложенности. Так, команда cp -R /mnt/cdrom $HOME

скопирует в домашний каталог все содержимое CD ROM с сохранением структуры его каталогов. Конечно, если оно туда поместится, во-первых, и если CD ROM предварительно вставлен в привод и, при отстутствии опции supermount, смонтирована командой mount, во-вторых.

Несколько ранее я жаловался, что при использовании файловых менеджеров при этом обычно возникают сложности, связанные с наследованием новообразуемыми каталогами атрибутов каталогов исходных. Так вот, с командой cp ничего подобного не произойдет: атрибут READ ONLY каталогов с CD ROM будет благополучно проигнорирован. Лишний аргумент в пользу командной строки при файловых операциях...

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

Столь же часто возникает необходимость сгруппировать некие файлы в одном каталоге. Для чего последний нужно создать. Что делается командой mkdir (от make directory) с желаемым именем каталога в качестве аргумента. Напомню, что результатом команды mkdir newdir



будет появление подкаталога в текущем каталоге, при mkdir ../newdir

он появится уровнем выше, а при mkdir /newdir

так просто в корневом. Если нужно создать каталог по некоему конкретному адресу, его следует прописать полностью, например mkdir /home/myname/work/newdir

с указанием абсолютного пути, или mkdir work/newdir

относительно текущего каталога myname. Все это относится и к любым другим файловым операциям.

И наконец, хотя все созданные нами файлы являют собой нетленные ценности, иногда их все же приходится удалять. Делается это командой rm (от remove), в том числе при использовании ее с параметром -R - рекурсивно. Нужно только запомнить, что конструкция вроде rm -R /

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

Тем не менее, для удаления ненужных каталогов лучше прибегнуть к команде rmdir (от remove directory) - она способна удалить только пустой каталог.

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

В мире DOS/Windows архивация и компрессия столь же неразделимы, как Ленин и Партия. Мне, например, не известны примеры архиваторов для этой платформы, которые не были бы одновременно и компрессорами. Но в системах Unix-Linux это понятия разные.

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

Так вот, Linux располагает двумя инструментами командной строки - командами tar и gzip, типичными представителями клана архиваторов и компрессоров, соответственно.

Формат команды tar следующий: tar n archivefile file1 file2...



где n - литера для требуемой опции: обратите внимания, что дефис перед опцией не ставится. Хотя для получения информации о команде все равно используется конструкция tar --help. Из которой и можно узнать о многочисленных опциях этой команды. Среди них - создание нового архива и записи его в файл (c и f, соответственно, это - разные понятия!), добавления в него файлов (r), просмотр состава архива (t), обновление и удаление файлов из архива, ну и конечно, извлечения их. Многочисленные опции позволяют сохранить не только пути архивированных файлов, но и всю информацию о правах доступа к ним. То есть - создать именно резервную копию, идентичную исходному набору файлов, что, в случае повреждения последних, позволяет их адекватное восстановление.

Ну а gzip - это именно и только чистый компрессор. Формат команды - gzip file, где file - имя файла, подлежащего сжатию. Следует помнить, что файл этот исчезает, замещаясь своим сжатым вариантом - файлом file.gz. Gzip может использоваться вместе с gunzip - программой, обеспечивающей развертывание сжатого файла. Впрочем, обе эти программы, при использовании соответствующей опции, выполняют обратную исходной операцию (прямая операция выполняется каждой из них без всяких опций).

Команды tar и gzip обычно используются в паре - первой создается архив, второй он сжимается для экономии места. В итоге образуется файл вида *.tar.gz. Давняя традиция совместного применения этих программ привела к тому, что они стали не только взаимодополняющими, но и взаимозаменяющими: средствами любой из них можно как создать архив с последующим его сжатием, так и развернуть компрессированный архив с полным восстановлением файлов в их исходной позиции.

В итоге большинство программ для Linux, которые можно обнаружить в Интернете, распространяются именно в формате *.tar.gz, а некоторые - и исключительно в нем.

К стати, на протяжении всего повествования неоднократно говорилось о всякого рода программах. Где же они берутся и как устанавливаются? Настало время поговорить и на эту тему, которую можно озаглавить как


Командный язык bash Переменные


Обязательным атрибутом переменной в любом языке программирования является тип значения переменной. В командном языке bash все переменные текстовые. Например, если вы присваиваете переменной значение A=23, то значением переменной будет строка из двух сиволов – «23».
Имя переменной должно начинаться с буквы и может состоять из латинских букв, цифр, знака подчеркивания.
Оператор присваивания в bash выглядит так:
<имя переменной>=значение.
Например,

NAME=Ivan

Если нужно присвоить значение, содержащее пробелы, нужно использовать кавычки:

NAME="Ivan Ivanov"

Обращение к значению переменной выполняется с помощью знака доллара перед именем переменной:

echo "NAME"
echo "$NAME"

Первая команда выведет на экран слово NAME, а вторая – значение переменной NAME (Ivan Ivanov). Если значение переменной может содержать пробелы, имя переменной нужно заключить в кавычки. Например,

NAME="Ivan Ivanov"
echo $NAME
echo "$NAME"

Первая команда echo выведет на экран слово Ivan, а вторая – Ivan Ivanov.
Интерпретатор bash использует такие метасимволы, имеющее для него особое значение:
   * ? ; & ( ) | ^ < > <возврат_каретки> <табуляция> <пробел&qt;
Для того, чтобы использовать эти символы как они есть, нужно их цитировать с помощью символа \. Например, символ перевода строки можно цитировать так \n, символ табуляции – \t, символ вопроса – \?
Особое значение при присваивании переменным значений имеют кавычки. Все символы, заключенные в одинарные кавычки ‘ ’ представляют самих себя. Между двойными кавычками “ ” выполняются команды и подстановки значений.
Символы “\”, “,”, “ ‘ ”, “ $ “ могут цитироваться с помощью обратной наклонной черты: \\, \$, \’



Командный процессор Zsh


Alex Ott, 27.05.03, Alex Ott's Home Page

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

Zsh -- командный процессор UNIX, который может использоваться как командный процессор для скриптов, так и интерактивная оболочка. Zsh обладает множеством возможностей, среди которых -- настраиваемый механизм дополнений (completitions), редактирование командной строки, механизм сохранения историй, встроенное исправление неправильных комманд.

По возможностям zsh наиболее сильно похож на ksh, но при этом обладает еще множеством расширений. Свежие версии zsh доступны с сервера www.zsh.org и его зеркал. Кроме этого zsh часто включают в состав популярных дистрибутивов Linux и других вариантов UNIX.



Команды


Большинство работы в bash может быть выполнено с использованием команд типа cp. Большинство из этих команд являются небольшими программами, однако некоторые (типа cd) встроены в шелл.

Команды собраны в пакеты, многие из которых разработаны Фондом Свободного ПО (Free Software Foundation or GNU). Вместо перечисления пакетов я направлю вас к документу Linux From Scratch HOWTO. Там вы найдете полный и свежий перечень пакетов, работающих с Linux, также как и инструкции по их сборке.



Команды bash


Перед тем как перечислять в алфавитном порядке наиболее употребительные команды bash, необходимо назвать три «справочных» команды, используемых почти исключительно при интерактивной работе, — help, info и man. Команда help выдает краткое описание любой встроенной команды bash, info предоставляет доступ к входящему в состав системы GNU развернутому справочнику, в котором bash, разумеется, подробно описан. Команда man позволяет обратиться к другому, более старому справочнику, где есть информация о ряде команд, не описанных в справочнике info (вообще говоря, команда info, не найдя сведений в собственном справочнике, ищет их и в справочнике man, однако кое-что можно получить только с помощью самой man). Естественно, команда help help позволяет получить справку по help, команда info info — по info, а man man — по man.

В приводимом ниже списке каждая команда снабжена пометкой, указывающей, как получить ее более подробное описание: (b) означает, что команда встроенная и, следовательно, информацию о ней предоставляет команда help, (i) соответствует команде info, (m) — команде man.

. (b) — синоним для команды source

: (b) — синоним для команды true

[ (b) — сокращение для команды test, но, в отличие от нее, требует закрывающей квадратной скобки

(( (b) — соотносится с командой let так же, как [ соотносится с test

[[ (b) — не вполне команда, а особое выражение, очень похожее на команду [ (test)

alias(b) — позволяет задавать псевдонимы для других команд

at(m) — ставит программу в очередь на выполнение в заданное время

atq(m) — в заданное время проверяет очередь программ на выполнение

atrm(m) — в заданное время удаляет программу из очереди на выполнение

awk(i) — язык для построчного сканирования и обработки файлов: простой, маленький и быстрый, но притом достаточно мощный

batch(m) — выполняет программу, когда система не слишком загружена

builtin(b) — позволяет вызвать встроенную команду bash, даже когда ее имя перекрыто именем функции или псевдонимом


bzip2(i) — более новая, чем gzip, программа сжатия файлов; работает медленнее, чем gzip, но обеспечивает лучший коэффициент сжатия

cat(i) — «склеивает» заданные файлы и выдает их на стандартный выход

cd(b) — изменяет текущий каталог

chgrp(i), chmod(i), chown(i) — изменяют соответственно группу, права доступа и владельца файла

command(b) — позволяет вызвать команду — встроенную или внешнюю, даже когда ее имя перекрыто именем функции или псевдонимом

cp(i) — копирует файлы и каталоги

cpio(i) — CoPy In/Out — системная программа создания архивов; не содержит встроенной поддержки сжатия файлов, но может использоваться совместно с gzip или bzip2

crontab(m) — позволяет модифицировать список регулярных заданий пользователя

cut(i) — выдает на стандартный выход выбранные части строк текстового файла

dd(i) — копирует файл блоками, выполняя одновременно некоторые дополнительные действия

du(i) — вычисляет объем, занятый на диске указанными файлами

declare(b) — позволяет задать имя и тип переменной (применяется не слишком часто, так как bash допускает использование необъявленных переменных)

df(i) — сообщает количество свободного и занятого места на диске

diff(i) — находит различия между двумя файлами

dirs(b) — выводит список запомненных подкаталогов

echo(b/i) — выводит на стандартный выход заданное сообщение

enable(b) — позволяет разрешить или запретить использование встроенных команд

eval(b) — выполняет аргументы так, как если бы они были введены в командной строке (ранее часто использовалась для обращения к переменной, имя которой содержится в другой переменной)

exec(b) — выполняет системный вызов exec, т. е. замещает процесс, где исполняется скрипт, другим, заданным в качестве параметра; часто используется в так называемых «скриптах-обертках» (wrapper scripts), настраивающих среду для выполнения программ

exit(b) — завершает работу командного интерпретатора (и, стало быть, скрипта)

export(b) — делает переменные данного скрипта доступными для других процессов, запущенных из командного интерпретатора



file(m) — определяет тип файла ( по содержимому; эвристический анализ выполняется на основе гибкой настраиваемой базы данных)

find(m/i) — ищет файлы по множеству признаков, но не по содержимому

false(b/i) — возвращает код ненормального завершения

getopts(b) — довольно сложная команда, похожая на аналогичное средство системной библиотеки; позволяет создавать скрипты, понимающие сложные опции

grep(m) — ищет строки в файлах; может использоваться совместно с командами find и xargs для поиска файлов по содержимому

gzip(i) — стандартная для GNU программа сжатия файлов; способна распаковывать (но не создавать) файлы в формате compress — более старой UNIX-программы сжатия

install(i) — копирует файлы, одновременно позволяя устанавливать их атрибуты

kill(b/m) — позволяет послать процессу сигнал; по умолчанию посылается сигнал SIGTERM, останавливающий процесс; отсюда такое устрашающее название

less(m) — улучшенная по сравнению с more программа просмотра файлов

let(b) — вычисляет арифметическое выражение; выражение может содержать многие операторы языка Си, а также переменные

local(b) — создает локальную (внутри функции) переменную

logout(b) — завершает работу командного интерпретатора, являющегося основным (login shell)

ln(i) — создает ссылки на файлы (дополнительные жесткие или символические)

ls(i) — выводит список файлов (например, для заданного каталога)

md5sum(i) — подсчитывает для файлов 128-битовую контрольную сумму

mkdir(i) — создает подкаталог

mktemp(m) — создает временный файл (чтобы избежать «дыр» в безопасности, создавайте временные файлы только с помощью mktemp)

more(m) — постранично выводит файл на экран (служит для просмотра длинных файлов)

mv(i) — перемещает или переименовывает файлы (каталоги)

patch(i) — применяет diff-файл (см. diff) к исходному файлу

popd(b) — удаляет подкаталоги из списка запомненных подкаталогов

printf(b/i) — обеспечивает форматированную печать данных (имеет много общего с одноименной функцией стандартной библиотеки Си)



pushd(b) — добавляет подкаталог в список запомненных подкаталогов и перемещает подкаталоги внутри этого списка

pwd(b/i) — выводит путь к текущему каталогу

read(b) — считывает строку со стандартного ввода и присваивает прочитанные значения указанным переменным

readonly(b) — защищает переменную от случайных изменений

return(b) — выходит из функции и передает управление в вызвавшую программу

rm(i) — удаляет файлы (подкаталоги)

rmdir(i) — удаляет пустые подкаталоги

sed(i) — потоковый редактор (a Stream EDitor); дает возможность быстро производить с текстом простые операции (например, поиск с заменой)

select(b) — довольно сложная команда, позволяющая организовывать меню с выбором вариантов из списка (в действительности это даже не команда, а особая синтаксическая форма, родственная синтаксическим формам while и for)

set(b/i) — очень сложная команда:

без параметров выдает список всех определенных на данный момент переменных и функций с параметрами вида +<option>, -<option> или -o <option> включает или выключает «на лету» режимы настройки командного интерпретатора (их можно устанавливать и в командной строке) все прочие параметры присваиваются последовательно переменным $1 $2 ... $N

(Команда help set не дает полного описания set; оно есть только в описании bash, получаемом командой info bash.)

shift(b) — сдвигает позиционные параметры ($1 становится равным $N, $2 — $N+1, $3 — $N+2 и т.д.)

sort(i) — сортирует файл

source(b) — читает и выполняет команды, содержащиеся в файле (часто используется для того, чтобы вынести определение переменных в отдельный файл конфигурации)

tar(i) — программа создания архивов (Tape ARchiver); не содержит встроенной поддержки сжатия файлов, но может использоваться совместно с gzip или bzip2

test(b/i) — вычисляет значение логического выражения; в основном проверяет атрибуты файлов (существует? пуст? исполняемый? подкаталог? и т. д.), однако может также сравнивать строки

tr(i) — заменяет одни символы на другие по заданной таблице подстановки



trap(b) — позволяет связать с сигналом особую обработку

true(b/i) — возвращает код успешного завершения

type(b) — возвращает «тип» слова, заданного в качестве аргумента (встроенная команда, псевдоним, функция и т. д.)

ulimit(b) — устанавливает или сообщает системные квоты для процесса (процессов)

umask(b) — назначение описано в статье «Файлы, файлы, файлы»

unalias(b) — удаляет имя из списка псевдонимов

uniq(i) — выводит уникальные (или, наоборот, повторяющиеся) строки в отсортированном файле

unset(b) — удаляет имя из списка переменных

wc(i) — подсчитывает число символов, слов и строк в файле

xargs(m) — получает параметры со стандартного входа и вызывает с этими параметрами заданную программу (по умолчанию echo)

Как уже говорилось, здесь перечислены далеко не все команды. В типичной системе GNU/Linux их значительно больше: есть, например, команды, выводящие восьмеричный и шестнадцатеричный дамп памяти (od и hexdump), печатающие начало и конец файла (head и tail), а ко многим упомянутым командам есть дополнительные (например, diff3 позволяет сравнить три файла, а bzcat — просмотреть файл, упакованный программой bzip2). Не попали в наш обзор и системные переменные, имеющие для bash особый смысл. Обо всем этом и о многом другом вы сможете узнать, набрав в командной строке слова info bash.

Вернуться


Команды для настройки системы


Есть возможность изменять другие параметры (не ядра) во время работы системы и сделать, чтобы эти изменения оказали эффект без перезагрузки системы. В основном это сервисы, демоны и серверы, которые прописаны в директории /etc/init.d. Поскольку в этой директории находится широкий спектр скриптов, то нет возможности рассмотреть их все здесь. Однако, ниже будут приведены несколько примеров того, как можно манипулировать этими скриптами в различных дистрибутивах Linux. Примеры изменения демона и перезагрузки конфигурации без перезагрузки системы могут быть полезны при:

Изменении конфигурации Web сервера и перезагрузки Apache

Удаления загружаемого в inetd сервиса, которым вы не пользуетесь

Манипулирования настройками вашей сети

Экспортирования новой файловой системы через NFS

Запуска/остановки вашего файервола

Сначала, основной способ манипулирования системными сервисами через скрипты в /etc/init.d. Эти скрипты используют параметры для управления своими сервисами. Вы можете ввести в командной строке имя сервиса без параметров чтобы увидеть допустимые параметры. Общие параметры таковы:

start: Запускает остановленный сервис

stop: Останавливает запущенный сервис

restart: Останавливает и затем запускает сервис; запускает остановленный сервис

reload: Перезагружает конфигурацию сервиса без прерывания его соединения

status: Выводит информацию запущен сервис или нет

В качестве примера следующая команда перезагрузит конфигурацию вашего xinetd без прерывания любых присоединенных сессий пользователей (полезно, если вы вносите изменения в ваш /etc/xinetd.conf):

/etc/init.d/xinetd reload

Red Hat предоставляет комнанду service, которая будет управлять сервисом для вас. Команда service выполняет те же действия, что и ввод имени скрипта. Синтаксис команды:

service script-name [parameter]

Пример: service xinetd reload

SuSE также предоставляет команду rc. Она похожа на service, но не имеет пробела между командой и именем скрипта. Синтаксис команды:

rc{script-name} parameter

Пример: rcapache start

Так же как и при изменении параметров ядра, при перезагрузке системы, все внесенные изменения будут потеряны. Многие дистрибутивы позволяют использовать команду chkconfig, которая управляет сервисами, запускаемыми на различных уровнях (включая загрузку). Во время написания статьи синтаксис команды chkconfig несколько отличался в различных версиях Linux, но если вы введете команду chkconfig без параметров, вы получите список возможных параметров и их использование. Больше информации о chkconfig может быть получено в man chkconfig(8).



Команды для управления процессами


Команда ps

Предназначена для вывода информации о выполняемых процессах. Данная команда имеет много параметров, о которых вы можете прочитать в руководстве (man ps). Здесь я опишу лишь наиболее часто используемые мной:

Параметр Описание
-a отобразить все процессы, связанных с терминалом (отображаются процессы всех пользователей)
-e отобразить все процессы
-t список терминалов отобразить процессы, связанные с терминалами
-u идентификаторы пользователей отобразить процессы, связанные с данными идентификаторыми
-g идентификаторы групп отобразить процессы, связанные с данными идентификаторыми групп
-x отобразить все процессы, не связанные с терминалом

Например, после ввода команды ps -a вы увидите примерно следующее: PID TTY TIME CMD 1007 tty1 00:00:00 bash 1036 tty2 00:00:00 bash 1424 tty1 00:00:02 mc 1447 pts/0 00:00:02 mpg123 2309 tty2 00:00:00 ps

Для вывода информации о конкретном процессе мы можем воспользоваться командой: # ps -ax | grep httpd 698 ? S 0:01 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1261 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1262 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1263 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1264 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1268 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1269 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1270 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1271 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1272 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1273 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A 1280 ? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A

В приведенном выше примере используется перенаправление ввода вывода между программами ps и grep, и как результат получаем информацию обо всех процессах содержащих в строке запуска "httpd". Данную команду (ps -ax | grep httpd) я написал только лишь в демонстрационных целях – гораздо проще использовать параметр -С программы ps вместо перенаправления ввода вывода и параметр -e вместо -ax.

Программа top

Предназначена для вывода информации о процессах в реальном времени. Процессы сортируются по максимальному занимаемому процессорному времени, но вы можете изменить порядок сортировки (см. man top). Программа также сообщает о свободных системных ресурсах. # top 7:49pm up 5 min, 2 users, load average: 0.03, 0.20, 0.11 56 processes: 55 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 7.6% user, 9.8% system, 0.0% nice, 82.5% idle Mem: 130660K av, 94652K used, 36008K free, 0K shrd, 5220K buff Swap: 72256K av, 0K used, 72256K free 60704K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 1067 root 14 0 892 892 680 R 2.8 0.6 0:00 top 1 root 0 0 468 468 404 S 0.0 0.3 0:06 init 2 root 0 0 0 0 0 SW 0.0 0.0 0:00 kflushd 3 root 0 0 0 0 0 SW 0.0 0.0 0:00 kupdate 4 root 0 0 0 0 0 SW 0.0 0.0 0:00 kswapd 5 root -20 -20 0 0 0 SW< 0.0 0.0 0:00 mdrecoveryd


Просмотреть информацию об оперативной памяти вы можете с помощью команды free, а о дисковой – df. Информация о зарегистрированных в системе пользователей доступна по команде w.

Изменение приоритета процесса – команда nice

nice [-коэффициент понижения] команда [аргумент]

Команда nice выполняет указанную команду с пониженным приоритетом, коэффициент понижения указывается в диапазоне 1..19 (по умолчанию он равен 10). Суперпользователь может повышать приоритет команды, для этого нужно указать отрицательный коэффициент, например --10. Если указать коэффициент больше 19, то он будет рассматриваться как 19.

nohup – игнорирование сигналов прерывания

nohup команда [аргумент]

nohup выполняет запуск команды в режиме игнорирования сигналов. Не игнорируются только сигналы SIGHUP и SIGQUIT.

kill – принудительное завершение процесса

kill [-номер сигнала] PID

где PID – идентификатор процесса, который можно узнать с помощью команды ps.

Команды выполнения процессов в фоновом режиме – jobs, fg, bg

Команда jobs выводит список процессов, которые выполняются в фоновом режиме, fg – переводит процесс в нормальные режим («на передний план» – foreground), а bg – в фоновый. Запустить программу в фоновом режиме можно с помощью конструкции команда &

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)


Команды (esc-последовательности) syscons


Во всех командах Esc означает символ Escape - 27.

Там где подразумевается числовой аргумент, я буду обозначать его буквой n или n1,n2 и т.д. если их может быть несколько. Все остальные буквы являются часть команды.

Если команда требует числовой аргумент (или несколько аргументов), его можно пропустить. В этом случае обычно подразумевается, что он равен 1.

Esc7 или Esc[sзапомнить положение курсора
Esc8 или Esc[uвосстановить запомненное положение курсора
Esccочистить экран и установить курсор в левый верхний угол



Команды и метасимволы


Конечно, bash может выполнять любые команды, имеющиеся в системе, но некоторые из них являются подпрограммами интерпретатора (внутренние команды), а некоторые другие, хотя и представляют собой самостоятельные программы, специально предназначены для использования в командных скриптах (внешние команды). Внутренних и внешних команд bash насчитывается более сотни; перечень наиболее, на мой взгляд, часто применяемых с краткими описаниями приводится во врезке на с. 154. (Оценка употребительности, разумеется, чисто субъективная: я, например, обычно получаю имя файла без пути с помощью конструкции ${filename//*/}, а кто-то, возможно, использует для этого специальную команду basename, хотя она внешняя и из-за этого работает несколько медленнее.)

Как же устроена сама команда? Ее базовая структура во всех языках скриптов одинакова и весьма проста: сначала записывается имя команды, за ним может следовать определенное число опций (ключей) и аргументов (параметров), отделяемых от имени и друг от друга пробелами. Регистр символов существенен в любом месте команды; имена большинства команд записываются строчными буквами. Специальные символы — ‘*’, ‘$’, ‘?’ ‘!’, ‘>’, ‘<’ и др. — используются в командах в качестве метасимволов, т. е. служат для управления работой самого интерпретатора; именно поэтому их избегают употреблять в именах команд, файлов, каталогов и т. д. При необходимости вывести на экран строку, содержащую спецсимволы, ее обычно заключают в кавычки (существуют и другие способы вывода спецсимволов, но этот — самый распространенный).

Стандартно каждая команда записывается на отдельной строке, но можно поместить в одной строке и несколько команд: они отделяются друг от друга точками с запятой, если нужно, чтобы очередная команда ждала завершения работы предыдущей, и амперсандами, если команды должны выполняться параллельно. Длинную команду, которой не хватает одной строки, можно перенести на следующую с помощью символа ‘’.



Команды помощи


какая-то_команда --help |more
Выдаёт на дисплей краткую справку по команде (работает с большинством команд). Например, попробуйте "cp --help |more". Ключ "--help" работает так же, как DOS-овский ключ "/h". Канал(pipe) к команде "more" нужен, когда вывод занимает больше, чем один экран.

man тема
Выводит содержимое страниц системного руководства (справки) по указанной теме. Нажмите "q" для прекращения просмотра. Попробуйте man man, если вам нужны более продвинутые возможности. Команда info тема работает так же, как и man тема, но может содержать более новую информацию. Man-страницы - нелегкое чтение для пользователя, потому что они написаны для программистов UNIX. Попробуйте какая-то_команда --help, чтобы получить краткую и простую справку по команде. Некоторые команды поставляются с README или другими файлами справки -- посмотрите в директории /usr/share/doc. Для вывода информации из определенной секции системного руководства, можно попробовать: man 3 exit (Это выводит информацию о команде exit из секции 3 системного руководства) или man -a exit (это покажет страницы руководства о exit из всех секций). Секции man содержат: 1-Команды пользователя, 2-Системные вызовы, 3-Подпрограммы, 4-Устройства, 5-Форматы файлов, 6-Игры, 7-Разное, 8-Системное администрирование, Остальные секции - новое. Для печати страницы систеного руководства, можно использовать: man тема | col -b | lpr (параметр col -b удаляет специфичные для man символы, затрудняющие печать).

info тема
Выводит сообщение по указанной теме. info является заменой для man и содержит более свежую информацию. Используйте <Space> и <BkSpace> для перемещения, а "q" - для выхода. Заменой для этой несколько странной системы просмотра справок может послужить pinfo - используйте его, если решите, что он чем-то лучше.

apropos тема
Даст мне список команд, которые смогут что-либо сделать с моей темой.

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

help команда
Выдает краткую информацию о встроенных командах bash (оболочка). Использование help без указания команды печатает список встроенных команд оболочки. Краткий список встроенных команд bash включает: alias, bg, cd, echo, exit, export, fg, help, history, jobs, kill, logout, pwd, set, source, ulimit, umask, unalias, unset.

kdehelp
kdehelpcenter
(в X-терминале, две команды, используйте ту, которая сработает в вашей системе). Просмотр полного списка команд в графической среде навигатора справочной информации KDE. Обычно справка KDE активизируется при выборе картинки на панели KDE. gnome-help-browser - эквивалент в среде GNOME.



Команды терминала syscons


Драйвер syscons эмулирует "интеллектуальный" терминал, который кроме обычного вывода "символ за символом" понимает ряд команд в виде esc-последовательностей (цепочка из нескольких символов, начинающаяся с кода Esc - 27). С помощью таких последовательностей программа может менять положение курсора на экране, очищать часть текущей строки или часть экрана, менять атрибуты символов (яркость, цвет, подчеркивание, мерцание и т.п.).

Список этих команд можно посмотреть в

"Приложение 1. Команды (esc-последовательности) syscons"(он в основном соответствует командам стандартного "ANSI-терминала").
Но хочу напомнить, что программа, если она претендует на то, чтобы работать на разных типах терминалов, и не должна знать команды конкретного дисплея. Для обеспечения такой независимости от типа терминала, в любом Юниксе существуют стандартные механизмы - "базы данных свойств терминалов"

(termcap и terminfo) и библиотеки ввода/вывода (ncurses, slang и т.п.), которые сами адаптируются к "системе команд" конкретного типа терминала.



Комбинации клавиш и прочие 'приключения'


Некоторые могут удивиться, почему я не упомянул как конкретно назначать программу на горячую клавишу, в самом начале. Ответ очень прост: Я не знаю.

Так точно, я не знаю как вы можете сделать это, потому-что я не знаю какой десктоп вы используете. Похоже что все они используют разные методы - если он у них вообще есть. Приведенное ниже не является доскональным исследованием, но я провел пару часов изучая это. Если вам известен метод, который будет работать глобально, с любым десктопом , то я очень прошу послать мне email. Мои результаты вне двух десктопов были ужасны. Я пробовал xmodmap, но, несмотря на то что я ничего не испортил, я ничего и не достиг ... Если у вас еще утро, то прислушайтесь к этому мучительному крику о помощи :).

IceWM

Как вы могли заметить из скриншотов, я использовал IceWM в это время. Тема на скриншотах - это моя личная смесь темы "blue plastic" и "Photon" (мне всегда хотелось иметь цифровые часы, которые загорались бы когда вы щелкните на них). На самом деле я жил в IceWM в течении нескольких месяцев. Это очень красивый, легкий десктоп и я нашел его легко настраиваемым и стабильным. Если вы используете его без IcePref (by David Mortensen) и iceme (by Dirk Moebius) вы многое теряете. Обе утилиты написаны на python, так что вы можете делать с ними все что захотите. Первое что вам нужно сделать после запуска iceme это использовать его, чтобы добавить его самого в меню. Теперь вы можете запустить iceme когда захотите. Другое приимущество заключается в том, что iceme может вызывать IcePref, так что вы можете убить двух зайцев сразу. iceme позволяет столь легко создавать горячие клавиши, что я даже не буду описывать процедуру. Обоим парням нужно поставить по пиву и шведской булочке на ближайшей конвенции.

Sawfish/Gnome

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


dcop khotkeys khotkeys reread_configuration

Есть еще две особенности KDE, которые я должен упомянуть. Одна касается вашего окружения, а другая буфера обмена.

Во первых, ваше меню, когда вы запускаете KDE в Mandrake. Mandrake имеет собственный, специальный скрипт 'startkde'. Есть хорошая причина: это позволяет согласованно распределить пункты меню (для всех оконных менеджеров и десктопов). В то же время, это означает, что когда вы заходите в X используя KDE, скрипт затрет дополнительные пункты меню, созданные при помощи kmenu или вручную. Решение: уберите разрешение на запись для всех - даже для вас самих - для директорий и пунктов, которые вы добавили самостоятельно в '.kde/share/applnk-mdk'. Это вызовет несколько ошибок, которые будут записываться в ваш файл '.xsession-errors', но это сохранит вашу работу в безопасности.

Во вторых, Mandrake версия скрипта 'startkde' (я совершенно не понимая почему) не распознает ваше окружение. Будучи запущенным из kdm, графического менеджера входа в систему, вы заканчиваете с десктопом, которые не знает о путях и псевдонимах установленных вами. Самое быстрое решение этой проблемы - модификация скрипта 'startkde', который лежит в /usr/bin. Просто добавьте эти строки где нибудь в начале:

source $HOME/.bashrc
source $HOME/.bash_profile

Так он будет считывать ваше окружение, как будто вы стартовали при помощи 'startx' из консоли.

Я мог запросто пропустить ваш любимый десктоп здесь (я ведь сделал обзор только трех из зиллионов). Пожалуйста напишите мне как работает ваш.


"Комбинация из трех пальцев" - Ctrl+Alt+Del


Если вам не нравится, что ваш компьютер можно перегрузить в любой момент, нажав "магическую комбинацию" Ctrl+Alt+Del, найдите в раскладке все строчки со словом boot (учтите, что клавиш Del две - одна над стрелками, а другая на "дополнительной цифровой клавиатуре").

083 del '.' '.' '.' 174 174 boot boot N 103 fkey61 fkey61 fkey61 fkey61 fkey61 fkey61 boot fkey61 O 211 del '.' '.' '.' 174 174 boot boot N 231 fkey61 fkey61 fkey61 fkey61 fkey61 fkey61 boot fkey61 O

Просто замените слово boot на что-нибудь другое - nop ("пустая" клавиша) или bel ("писк").

Кстати, если вы боитесь, что враги могут восстановить эту клавишу и все-таки "отправить в перезагрузку" вашу машину, в последних версиях syscons появилось более радикальное средство.

Надо пересобрать ядро с "option SC_DISABLE_REBOOT", и куда бы вы (или злоумышленники) ни назначили значение boot, оно просто не окажет никакого действия на машину.

Иван Паскаль pascal@tsu.ru



Компьютерная демонология


Демоном (daemon) в Unix (и в Linux) называется процесс, предназначенный для работы в фоновом режиме без терминала и выполняющий какие-либо действия для других процессов (не обязательно на вашей машине). Обычно демоны тихо занимаются своим делом, и вспоминают о них только в случае каких-либо неполадок в их работе: например, демону начинает недоставать места, и он посылает пользователю сообщение об этом, или демон перестает работать, и вам звонит босс с вопросом, почему у него принтер опять не печатает и когда это прекратится...

На многих машинах демоны, обслуживающие процессы других компьютеров, нужны достаточно редко, так что держать их в памяти постоянно загруженными и транжирить на это ресурсы системы нерационально. Для управления их работой был создан супердемон, которого зовут вовсе не Вельзевулом (в компьютерных демонах вообще мало "демонического" - они ближе демонам Максвелла), а куда скромнее - inetd (что, как вы догадались, является сокращением от Internet daemon).

В конфигурационном файле inetd (/etc/inetd.conf) записано, какой демон обслуживает обращения к какому сервису Internet. Обычно с помощью inetd вызываются программы pop3d, imap4d, ftpd, telnetd (предоставляю читателю определить, какие именно сервисы они обслуживают) и некоторые другие. Эти программы не являются постоянно активными, а значит, не могут считаться демонами в строгом смысле слова, но поскольку они порождаются "полноценным" демоном, их все равно так называют.



Компоненты конфигурации


rules = "..." model = "..." layout = "..." variant = "..." options = "..."

keymap = "..."

keycodes = "..." geometry = "..." types = "..." compat = "..." symbols = "..." (или symbolstouse = "...")

Описывают те же параметры, что и в главном конфигурационном файле X сервера (XF86Config).

Напомню, что собственный файл конфигурации XKB может быть составлен для каждого дисплея по отдельности. Поэтому, если компоненты конфигурации уже описаны в XF86Config, то здесь имеет смысл указывать только те компоненты (или rules/model/layout/etc.), которые для данного дисплея отличаются от общих. Естественно, все эти параметры, указанные в "дополнительном файле конфигурации" имеют больший приоритет и переписывают соответствующие значения из файла конфигурации X сервера.



Конец пояснений


Previous: Введение

Next: Корневая файловая система. Назначение.

Up: Оглавление

Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan


Previous: Файловая система

Next: Требования

Up: Оглавление

Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan




Previous: /mnt : Точка монтирования для временно монтируемых файловых систем

Next: /root : Домашний каталог для пользователя root (optional)

Up: Оглавление

Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan




Previous: /sbin : Системные утилиты

Next: Каталоговая структура /usr

Up: Оглавление

Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan



Консоль


Документация

пакет console-tools и документация из него (/usr/doc/console-tools* и man) Предварительное замечание. ReHat заменила в 6.0 реализацию драйвера консоли kbd на console-tools, так что старые рекомендации по руссификации консоли более неприменимы. Рекомендации данные здесь неприменимы к старым системам. Если при установке RH 6.2 выбрать Russian/ru-yawerty, то все будет настроено само собой (в частности, устанавливается LANG=ru_RU.KOI8-R - очень прикольно смотрятся устаревшие переводы man-ов на русский). в /etc/sysconfig/i18n LANG="ru_RU.KOI8-R" SYSFONT="cyr-sun16" SYSFONTACM="koi8-r"


серый цвет фона
Допускается объединение этих управляющих последовательностей. Например \033[1m\033[5m\033[36m может быть заменено эквивалентной последовательностью \033[1;5;36m.

Пример:

#!/bin/sh

#

# скрипт выводит на экран сообщение с использованием цвета

#

echo -en "\33[37;1;41m CAUTION \33[0m"

Пример:

#!/bin/sh

#

# скрипт запускает копию командного интерпретатора sh

# с цветным приглашением

#

export PS1="\[\033[1;30m\][\[\033[0m\]\t\[\033[1;30m\];\

\[\033[0m\]\W\[\033[1;30m\]]\[\033[36;1m\]|\[\033[0m\] "

echo "Now runing a new copy of shell width color prompt"

echo -en "use \033[1;36mexit\033[0m command or"

echo -e "\033[1;36m^D\033[0m to return back"

sh

#

# обратите внимание на то, что управляющие последовательности

# заключены в скобки "\[" и "\]"

# Это сделано для того, чтобы shell не учитывал их при

# оценке длины строки.

# В противном случае длинные строки будут переноситься неверно.

#

Управление положением курсора
Пример:

#!/bin/sh

#

# скрипт выводит на экран список устройств и на его фоне

# печатает строку " It is devices list "

#

ls -l /dev

echo -en "\033[12A\033[30G\033[1;5;31;41m It is devices list \033[0m\033[12E"

\033[#A
передвинуть курсор вверх на # строк
\033[#B передвинуть курсор вниз на # строк
\033[#С передвинуть курсор вправо на # столбцов
\033[#D передвинуть курсор влево на # столбцов
\033[#E передвинуть курсор вниз на # строк и поставить в начало строки
\033[#F передвинуть курсор вверх на # строк и поставить в начало строки
\033[#G переместить курсор в указанный столбец текущей строки
\033[#;#H задает абсолютные координаты курсора (строка, столбец)
Работа с палитрой
Пример:

#!/bin/sh



#

# скрипт делает фон красноватым

# такой фон удобно иметь на консоли root'a;

#

echo -en "\033]0550000"

\033]Pnrrggbb
Изменяет палитру. n -- номер цвета; rr, gg и bb -- значения RGB-компонент в шестнадцатеричной форме
\033]R Восстанавливает палитру, принятую по умолчанию
Работа с виртуальными консолями
Пример:

#!/bin/sh

#

# скрипт делает текущей консоль на которой запущена

# самая прожорливая задача

#

ps aOv | tail -n1 | ( read vpid vtty vother

echo -en "\033[12;${vtty}]" )

\033[12;#]
Сделать текущей консоль с указанным номером
Работа с xterm
Пример:

#!/bin/sh

#

# скрипт присваивает имена окну и иконке

#

echo -en "\033]2;My Window\007\033]1;My Icon\007"

\033]0;text\007
Присваивает имя окну и иконке
\033]1;text\007 Присваивает имя иконке
\033]2;text\007 Присваивает имя окну
Некоммерческая информация: О себе неофициально, Мои программы, Мои программы в WWW, Мои мысли и наблюдения, Управление консолью Linux, Управление энергосбережением под Linux, Магические клавиши SysRq в Linux, История OS UNIX, Интересные ссылки, У меня в гостях, Для души, Мои друзья
Коммерческая информация: Коротко о себе, Что я предлагаю, Каким образом я веду разработку, Что я уже сделал
a.michurin@online.ru, http://webcenter.ru/~intec/alexey/ (первая страница)
Мичурин Алексей
Alexey Michurin

Консолидированная безопасность


NTFS всегда располагала функциями безопасности, позволяющими администратору указать пользователей, которым разрешен или запрещен доступ к тем или иным файлам и каталогам. В версиях NTFS, предшествовавших Windows 2000, дескриптор безопасности каждого файла и каталога хранился в его собственном атрибуте безопасности. В большинстве случаев администраторы назначают единые параметры безопасности всему дереву каталогов, что приводит к дублированию дескрипторов безопасности для всех файлов и подкаталогов, к которым применяются параметры. Такое дублирование может привести к значительным потерям дискового пространства в многопользовательских средах, таких, как Windows 2000 Server Terminal Services и NT Server 4.0, Terminal Server Edition (WTS), где дескрипторы безопасности могут содержать элементы для многих учетных записей. NTFS5 оптимизирует выделение дискового пространства для хранения дескрипторов безопасности, сохраняя лишь один экземпляр каждого дескриптора безопасности на томе в центральном файле метаданных с именем $Secure.

Рисунок 2. Как работает файл метаданных $Secure.

В файле $Secure хранятся два индексных атрибута - $SDH и $SII - и атрибут потока данных, именуемый $SDS (см. Рисунок 2). NTFS5 назначает каждому уникальному дескриптору на томе внутренний идентификатор безопасности NTFS (не путать с SID, уникально идентифицирующим компьютеры и учетные записи пользователей) и хеширует дескриптор безопасности в соответствии с простым хеш-алгоритмом. Хеш-значение - потенциально неуникальное сокращенное представление дескриптора. Элементы в индексе $SDH отображают хеш-значения дескриптора безопасности на область хранения дескриптора безопасности в атрибуте данных $SDS, а индекс $SII отображает на область хранения дескриптора безопасности в атрибуте данных $SDS идентификаторы безопасности NTFS5.

Назначив дескриптор безопасности файлу или каталогу, NTFS получает хеш-значение дескриптора и просматривает индекс $SDH в поисках совпадений. NTFS сортирует элементы индекса $SDH согласно хеш-значению соответствующего дескриптора безопасности и сохраняет элементы в B+ дереве. Обнаружив для дескриптора совпадение в индексе $SDH, NTFS определяет смещение дескриптора безопасности элемента из записи $SDS Offset и считывает дескриптор безопасности из атрибута $SDS. Если совпадают хеш-значения, но не дескрипторы безопасности, то NTFS ищет еще один совпадающий элемент в индексе $SDH. Если NTFS обнаруживает полное совпадение, то файл или каталог, которому назначен дескриптор безопасности, может установить связь с дескриптором безопасности в атрибуте $SDS.


NTFS устанавливает связь, считывая идентификатор безопасности из элемента $SDH и сохраняя его в атрибуте $STANDARD_INFORMATION файла или каталога. В атрибуте $STANDARD_INFORMATION системы NTFS, который имеют все файлы и каталоги, хранится базовая информация о файле, в том числе атрибуты и временные метки. В Windows 2000 этот атрибут расширен, в нем появилась дополнительная информация, например идентификатор безопасности файла.

Если NTFS не обнаруживает в индексе $SDH элемента с дескриптором безопасности, совпадающим с назначаемым, значит, новый дескриптор уникален для тома, и NTFS назначает ему новый внутренний ID безопасности. Внутренние ID безопасности NTFS представляют собой 32-разрядные величины, а идентификаторы SID обычно в несколько раз длиннее, поэтому представление идентификаторов SID идентификаторами безопасности NTFS позволяет сэкономить место в атрибуте $STANDARD_INFORMATION. Затем NTFS добавляет дескриптор безопасности в атрибут $SDS, который сортируется в B+ дереве по ID безопасности NTFS, и дополняет индексы $SDH и $SII элементами, указывающими на смещение дескриптора в массиве данных $SDS.

Когда приложение пытается открыть файл или каталог, NTFS отыскивает дескриптор безопасности файла или каталога с помощью индекса $SII.

NTFS читает внутренний ID безопасности файла или каталога из атрибута $STANDARD_INFORMATION записи MFT, а затем использует индекс $SII файла $Secure для поиска элемента ID в атрибуте $SDS. По смещению в атрибуте $SDS система NTFS считывает дескриптор безопасности и завершает проверку безопасности. NTFS5 не удаляет элементы файла $Secure, даже если с ним не связано ни одного файла или каталога на томе. Наличие неудаленных элементов не приводит к значительной потере дискового пространства, так как число уникальных дескрипторов безопасности на большинстве томов, даже используемых в течение длительного времени, сравнительно невелико.

Благодаря универсальной индексации NTFS5 файлы и каталоги с одинаковыми параметрами безопасности эффективно используют общие дескрипторы. С помощью индекса $SII NTFS быстро отыскивает дескрипторы безопасности в файле $Secure в ходе проверок безопасности, а индекс $SDH позволяет быстро определить, имеется ли в файле $Secure ранее сохраненный дескриптор безопасности, пригодный для совместного использования с данным файлом или каталогом.


Консольные слепки и немного о шрифтах



Автор: Алексей Федорчук, alv@newmail.ru
Опубликовано: 02.02.2002
Оригинал: http://www.softerra.ru/freeos/15649/

Всем хороша текстовая консоль Unix-подобных систем: и быстра, и эффективна, и пригожа. Одна беда – мне никак не удавалось проиллюстрировать именно ее пригожесть. То есть – сделать скриншот текстовой консоли. Более того, я даже теоретически не представлял, как это сделать. И возможно ли это сделать вообще…

Поиски по файловым архивам привели меня к одной Linux-программе, которая такое обещала. Называлась она fbshot, и комплектовалась еще одной утилиткой – fbshit. Впрочем, назначение ее было просто – вывод сообщения, что с помощью fbshot можно быстро превратить диск в кучу… вот того самого, shit'а.

Хотя – вряд ли, сам по себе fbshot функции загромождения диска выполнять не желал категорически. Во-первых, работал он через линейный кадровый буфер (frame buffer), что не совсем идентично именно текстовой консоли. Во-вторых, чтобы он заработал, требовалась весьма трудоемкая (и неоднозначная) настройка, вплоть до пересборки ядра (далеко не всегда кончавшаяся удачно). И в третьих, то, что он выдавал на выходе – ну никак на скриншот не походило. И, отчаявшись, я эту затею оставил.

Решение пришло неожиданно – во FreeBSD. Где в штатной коллекции пакетов (как, впрочем, и портов) обнаружилась утилитка под названием scr2png  [1]. Именно для создания консольных скриншотов и приспособленная. Принцип ее действия основывалась на двух особенностях FreeBSD-консоли (вернее, syscons – драйвера ее системной консоли): возможности подгрузки шрифтов и создания дампа экранного буфера. И за ту, и за другую отвечает vidcontrol – программа управления выводом на экран в syscons. Соответственно, scr2png способна функционировать только в связке с последней. Но зато – вполне справно.

Сам по себе дамп экрана текущей консоли создается командой vidcontrol -p

в бинарном формате, или vidcontrol -P

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

Программа же scr2png просто-напросто конвертирует такой экранный дамп в графический файл – как не трудно догадаться из ее названия, формата именно PNG, а не какого-либо другого. Но не просто, а с учетом экранного шрифта. Который в принципе не обязан совпадать с загруженным в настоящий момент. Отсюда синтаксис команды – scr2png -f имя_шрифта


где в качестве аргумента можно взять любой шрифт из каталога /usr/share/syscons/fonts/. Разумеется, если есть желание воспроизвести русский текст, шрифт этот должен содержать символы кириллицы в должной кодировке. А для воспроизведения именно копии экрана консольный шрифт и шрифт для scr2png должны совпадать – правда, в этом случае аргумент можно не указывать вообще. Хотя, с другой стороны, это – один из способов проверить, как будет выглядеть экран при другом консольном шрифте, не загружая последний на самом деле.

Продолжим, однако, об изготовлении скриншотов. И указанная выше команда не приведет ни к какому результату (даже к возврату приглашения командной строки). Все указанное хозяйство нужно объединить в командную конструкцию с соответствующим перенаправлением ввода и вывода. Сделать это можно двояким способом. Во-первых, через промежуточный scr-файл: vidcontrol -p > shot.scr; scr2png < shot.scr > shot.png

Во-вторых, конвейеризацией команд: vidcontrol -p | scr2png > shot.png

В обоих случаях в итоге будет образован графический слепок экрана текущей консоли (файл shot.png). Однако такой слепок может быть получен и для любой другой доступной консоли, для чего она должна быть указана в качестве устройства ввода команды vidcontrol: vidcontrol -p < /dev/ttyv0 > shot.scr; scr2png < shot.scr > shot.png

или vidcontrol -p < /dev/ttyv0 | scr2png > shot.png

Наконец, если есть желание посмотреть на вид консоли при каком-либо другом шрифте, его следует задать явно (рис. 1).

 


Рис. 1. Полная форма использования scr2png

Освоившись с программой, я, наконец, смог осуществить давешнюю свою мечту – понаделать скриншотов с консольными шрифтами, в первую очередь теми, конечно, которые содержат символы кириллицы. К великому моему прискорбию, правда, таких – очень и очень немного – всего три: cp866, cp866b и cp866c (рис. 2, a,b и c, соответственно) и их аналоги для кодировки KOI8. Это – для матрицы 8x16; матрица 8x8 для высокой плотности отображения символов вообще представлена только одним шрифтом.

 


 


 


Рис. 2. Кириллические шрифты для консоли FreeBSD

Первые два шрифта представляют собой различные, если так можно выразиться, гарнитуры – sans serife, сходную со шрифтами семейства fixed (cp866) и курьерообразную с засечками (cp866b); третий же (cp866c) - весьма причудливая смесь того и другого, да еще и с иным набором символов (кое-какая псевдографика в нем заменена экзотикой). При этом устанавливаемый по умолчанию шрифт (cp866b) видится мне наиболее неудачным. Мало того, что шрифты с засечками – ИМХО, вообще не лучший выбор для экрана, для растровых шрифтов эти гарнитуры просто медицински противопоказаны. Так шрифт cp866b-8x16 отличается и еще одной особенностью: отчетливым различием размера символов латинской и кириллической составляющей. Что, конечно, полезно, если не вполне уверенно отличаешь русские буквы от английских, но зрительно производит странное впечатление.

Поневоле тут затоскуешь по Linux-консоли, которая, кроме того же стандартного набора, располагает и строго-элегантными беззасечечными sans и lenta, и стилизованной под древнеримских греков antiq'ой, и Times-подобными гарнитурами. Причем – для любых кодировок, от cp866 до Unicode. По крайней мере в отечественных дистрибутивах (Altlinux и ASPLinux) подобрать экранный шрифт для консоли, радующий сердце и не напрягающий глаз, труда не составит.

К сожалению, использовать Linux'овые шрифты в консоли FreeBSD напрямую не удается – формат шрифтовых файлов разный. Хотя не вижу причин, по которым нельзя было бы конвертировать один в другой. Правда, как – пока не придумал. Буду признателен за любую информацию по этому вопросу, с чем и откланиваюсь…

[1] Аналогов этой программы я не нашел ни в одном из подручных дистрибутивов Linux. Хотя, исходя из общих соображений, ничего хитрого тут быть не должно: экранные дампы можно сделать и здесь, а уж конвертировать их в какой-либо графический формат – дело техники. Или я не прав? [обратно к тексту]

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)


Копирование содержимого дисков


Предоставил: Renaud Waldura (renaud@softway.com>)

Для переноса файлов с вашего старого диска на новый, выполните:

# mount /dev/ad2 /mnt

# pax -r -w -p e /usr/home /mnt

# umount /mnt

# rm -rf /usr/home/*

# mount /dev/ad2 /usr/home



Корневой каталог


Стандарт FHS предлагает создать в корневом каталоге следующие подкаталоги

Таблица 2. Основные подкаталоги корневого каталога

bin Файлы основных команд (утилит), которые необходимы, когда никакая другая файловая система еще не смонтирована (например, в однопользовательском режиме).
boot Неизменяемые файлы, необходимые для загрузки системы
dev Файлы устройств
etc Файлы конфигурации системы на данном компьютере
home Домашние каталоги пользователей
lib Основные разделяемые библиотеки и модули ядра
lib<alt> Основные разделяемые библиотеки для альтернативных форматов исполняемых файлов
mnt Точка монтирования для временно подключаемых файловых систем
root Домашний каталог суперпользователя root
opt Дополнительные пакеты программного обеспечения
sbin Основные системные исполняемые файлы
tmp Временные файлы
usr Иерархия второго уровня
var Переменные данные



Это не означает, что все содержимое перечисленных каталогов должно размещаться в корневой файловой системе. Указанные каталоги могут являться просто точками монтирования для других файловых систем или ссылками на такие системы. Более того, в стандарте явно рекомендуется размещать в каталогах /usr, /opt и /var такие файлы, которые могут располагаться в других разделах диска или в других файловых системах. Впрочем, давайте отложим рассмотрение вопроса о том, как разместить каталоги по разным файловым системам, до последнего раздела настоящей статьи, а пока вернемся к рассмотрению тех требований, которые стандарт FHS предъявляет к корневому каталогу.

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

размер корневой файловой системы желательно сохранять по возможности малым из соображений безопасности и удобства использования;

если придерживаться данного соглашения, проще решаются проблемы монтирования других файловых систем, расположенных на других устройствах;

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

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

А теперь последовательно рассмотрим назначение каждого из основных подкаталогов корневого каталога.


В Linux-системах, если ядро расположено в /, мы рекомендуем использовать для него названия vmlinux или vmlinuz, которые используются в последних версиях исходных кодов ядра Linux.



Krishnakumar R


Кришнакумар -- студент последнего курса B.Tech в Govt. Engg. College Thrissur, Kerala, Индия. Его путешествие в земли Операционных Систем началось с программирования модулей для Linux. Он создал операционную систему GROS, основная цель которой -- выполнение функции маршрутизатора. (Детали вы можете найти на его домашней странице: www.askus.way.to ) Другие его интересы -- это сетевые драйвера, драйвера устройств, портирование компиляторов и встроенные системы (Compiler Porting and Embedded systems).


Кришнакумар -- студент последнего курса B.Tech в Govt. Engg. College Thrissur, Kerala, Индия. Его путешествие в земли Операционных Систем началось с программирования модулей для Linux. Он создал операционную систему GROS, основная цель которой -- выполнение функций маршрутизатора. (Детали вы можете найти на его домашней странице: www.askus.way.to ) Другие его интересы -- сетевые драйвера, драйвера устройств, портирование компиляторов и встроенные системы.



Кроссплатформенные библиотеки


Один из наиболее известных примеров такой библиотеки – CodeWeavers CrossOver Office. CodeWeavers создали клон библиотеки Win32, с помощью которого можно запустить Windows-программу (такую, как Word или PowerPoint) без наличия на компьютере самой операционной системы Windows.

Это – большое техническое достижение, учитывая тот факт, что Microsoft специально встраивает часть кода своих ведущих приложений в ядро Windows, чтобы помешать людям запускать эти приложения под другими операционными системами. (Технически это называется «привязка» (bundling), и это – одно из главных обвинений в суде против Microsoft).

CodeWeavers превосходно подходит в случае, когда вам нужно запустить именно PowerPoint и именно в то время, когда вы находитесь в Линуксе. Но он не предназначен для решения проблемы эмуляции на системном уровне, и не понадобится, если вам нужно тестировать программы на различных системных конфигурациях.



Кто использует эти файлы?


Автор: Станислав Лапшанский, slapsh@slapsh.pp.ru
Опубликовано: 10.12.2002

© 2002, Издательский дом «КОМПЬЮТЕРРА» | http://www.computerra.ru/
Журнал «СОФТЕРРА» | http://www.softerra.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу: http://www.softerra.ru/freeos/22483/

Статья является переводом текста Майкла Лукаса.

Однажды утром, когда мне казалось, что во всем мире не хватит кофеина что бы проснуться, я решил спрятаться от публики и разобраться со списком разнообразных мелочей требующих моего внимания. Среди прочего мне было нужно скопировать кое-какие файлы с компакт дискa на винчестер. Разумеется, для начала следовало установить необходимый диск в привод. Не правда ли нетрудно? Однако, вот незадача: # umount /cdrom/ umount: unmount of /cdrom failed: Device busy #

Такая ошибка возникает в случае попытки размонтировать CD-ROM использующийся в этот момент. Я сидел прямо перед лицевой панелью компьютера, но не заметил ни моргания лампочки на приводе, ни шума вращающегося мотора. CD-ROM был смонтирован, но явно не использовался.

В данном случае у меня было несколько способов решения этой проблемы. Я мог перезагрузить машину, при этом раздосадовав пользователей. С одной стороны разозленные пользователи достаточно забавны, а с другой, они могут породить массу проблем. В тоже время я мог бы заняться выяснением у каждого пользователя, не использует ли он CD-ROM, однако это означало бы, необходимость вылезли из удобного кресла и, о нет, общения с людьми. В принципе я мог бы принудительно размонтировать компакт диск, но я понятия не имел насколько это может быть разрушительно для несчастного пользователя. И, наконец, я мог бы выяснить почему система считает CD-ROM занятым и персонально разобраться с виновным. Поскольку этот способ предполагает минимальный контакт с людьми, я выбрал именно его. Для выяснения того, кто и какие файлы использует, применяется утилита fstat (1).

Согласно странице онлайнового руководства, утилита fstat (1) предназначена для «идентификации активных файлов». Хотя это не так заметно, но в системе UNIX любой объект является файлом. В более поздних операционных системах (типа Plan 9), реализация этой идеи достигла логического совершенства – там даже каналы и сетевые соединения представляются в виде файлов. Следовательно, имея возможность узнать список используемых в данный момент файлов, вы можете досконально выяснить, что происходит в системе. fstat (1) делает снимок состояния системы в данный момент времени. Поскольку программы только и занимаются, что постоянно открывают и закрывают всякие файлы, каналы и сетевые соединения, результат работы fstat меняется от запуска к запуску.

Если вы напечатаете в командной строке «fstat», то увидите на экране список всех используемых в системе файлов. Этот список может быть очень длинным, так как каждый процесс обычно открывает не один файл, а несколько. Мой ноутбук на котором выполняется стандартный набор «офисных» приложений, обычно содержит порядка 400 открытых файлов. На небольшом веб-сервере моего друга открыто порядка 9000 файлов. На некоторых сильно загруженных серверах это значение достигает 30 тысяч. Для того что бы жизнь не казалась вам медом, программы постоянно открывают и закрывают файлы, так что количество открытых файлов постоянно меняется. fstat (1) делает моментальный снимок системного списка открытых файлов, так что если вы несколько раз запустите fstat вы наверняка получите разные результаты.

Вот небольшой кусочек того, что fstat выдала на экран моего ноутбука: .... mwlucas ssh 2820 3* internet stream tcp c2ef2814 mwlucas rxvt 2819 root / 2 drwxr-xr-x 512 r mwlucas rxvt 2819 wd /usr 846337 drwxr-xr-x 2560 r mwlucas rxvt 2819 text /usr 802549 -rws--x--x 89092 r mwlucas rxvt 2819 2 /dev 60 crw------- ttyv0 rw mwlucas rxvt 2819 3* local stream c2ebdbd0 <-> c2ebd870 mwlucas rxvt 2819 4 /dev 104 crw-rw-rw- ptyp0 rw mwlucas mozilla-bin 2725 root / 2 drwxr-xr-x 512 r mwlucas mozilla-bin 2725 wd /usr 808118 drwxr-xr-x 1536 r ....


Вот как много информации. Что же она означает?

В первом столбце находится имя пользователя, открывшего файл. Во втором – имя программы, которая это сделала. Поскольку имя программы не всегда бывает полезно для реальных нужд, в третьем столбце содержится PID – идентификатор процесса в системе.

Начиная с четвертого столбца сведения становятся интереснее. Четвертый столбец может содержать или просто число, или число со звездочкой, или ключевое слово. Числом обозначается внутрипроцессовый дескриптор файла. Когда процесс открывает файлы, для организации к ним доступа, он назначает им номера (т.е. дескрипторы). Строки вывода fstat (1), в которых в четвертом столбце стоит число, содержат информацию о записываемых или читаемых процессом файлах.

Если в четвертом столбце находится число со звездочкой (как например в первой строке приведенного мною примера вывода fstat), то в строке описывается сокет. Это может быть UNIX-сокет, сетевой сокет или именованный канал. Строка описывающая сокет может меняться в зависимости от вида описываемого ею сокета. Сейчас мы не будем углубляться в сокеты. Утилита fstat (1) не слишком полезна при исследовании сетевых соединений под FreeBSD, а вот в OpenBSD fstat выдает IP-адрес и номер порта открытого соединения. Вид вывода может меняться в зависимости от операционной системы. Проверьте, что выдаст fstat у вас.

Если в четвертом столбце содержится слово «text», то это совсем не означает, что файл текстовый. Напротив, это значит что файл является «компьютерным» текстом, т.е. программой. (Только компьютерщики могут додуматься, что «текст» может означать «компьютерный текст»). В общем, это значит, что процесс запустил исполняемый файл.

Слово «wd» означает, что это рабочий каталог процесса. Рабочий каталог, это каталог, откуда запускаются программы. Например, у вас может быть запущен шелл, который просто «сидит» в каком-нибудь каталоге и ничего не делает, при этом каталог в котором он сидит является рабочим.

Четвертый столбец может содержать и другие ключевые слова, мы описали лишь самые распространенные.

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

Затем идут права доступа к файлу, в стандартном UNIX-формате.

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

И наконец нам показывают состояние «чтения/записи» этого файла. Если файл открыт для чтения, то вы увидите «r», если для записи, то «w». Сочетание «rw», как вы легко можете догадаться, появляется, когда файл открыт как для чтения, так и для записи.

Все это весьма круто, остается только понять, как мы можем воспользоваться этой мощью. Вы же не сможете отсортировать из вывода fstat 400 строк отбросив ненужные 30 тысяч. Разумеется, вы можете отфильтровывать данные при помощи команды grep (1), но довольно часто вы просто не сможете четко сформулировать критерии поиска для grep. Для облегчения вашей участи в утилите fstat предусмотрены три мощных фильтрующих ключа. Вы можете одновременно использовать любые из них.

Ключ «-f» выбирает записи по точке монтирования. Если вы заинтересовались, какие файлы используются в каталоге /usr/home/mwlucas, то это подходящий случай для использования ключа «-f». Обратите внимание, что fstat не ограничивается в своих поисках конкретным указанным каталогом, а ищет открытые файлы на всей файловой системе, в которой располагается каталог с данными пользователей. Таким образом команда «fstat -f /usr/home/mwlucas» выдаст нам список открытых файлов в файловой системе /usr, т.е. в системе, где у меня смонтирован домашний каталог.

Ключ «-u» фильтрует выдачу по имени пользователя. Для того что бы выяснить какие я использую в данный момент файлы, я могу запустить на выполнение команду «fstat -u mwlucas». Если требуется узнать список файлов, занятых конкретным процессом, можно воспользоваться ключом «-p» указав в качестве параметра идентификатор интересующего процесса.

Теперь давайте вернемся к нашим баранам. У меня есть привод компакт-дисков который кто-то занял. Кем он используется? В моей системе CD-ROM монтируется в каталог /cdrom. Для фильтрации я воспользуюсь флагом «-f». # fstat -f /cdrom chris tcsh 2834 wd /cdrom 141312 dr-xr-xr-x 6144 r #



Используется всего один файл. Оказывается этого достаточно, что бы я не смог размонтировать диск. Файл открыт пользователем «chris». Обратим внимание на четвертый столбец, в котором содержится ключевое слово «wd». Он означит, что открытый файл на самом деле является каталогом и в нем просто «сидит» какой-то интерпретатор команд. Больше никакой активности в файловой системе не проявляется.

Не следует забывать, что fstat предоставляет лишь «снимок», моментальное состояние, текущей активности в файловой системе. Для того что бы быль уверенным, что я не попал в момент, когда Крис просто ничего не делает, я мог бы попробовать запустить утилиту fstat несколько раз. Если компакт диск используется, то fstat покажет на нем еще какие-нибудь открытые файлы. В данном случае для такой проверки можно было бы просто поглядеть на лампочку CD-ROM'а. Но для нас это слишком просто. Впрочем, в любом случает, результат будет одинаков.

Я возьму телефон, позвоню Крису и скажу ему, что бы он вывел этот чертов шелл из каталога /cdrom, если он все-таки не собирается ничего в нем делать.

Может случиться, что fstat окажется свидетелем интенсивной работы совершаемой Крисом в каталоге /cdrom. В таком случае пользовательское имя Криса будет неоднократно упоминаться в записях многочисленных открытых файлов в этом каталоге. Тогда мне придется обсудить с ним способ выполнения моей и его задачи приемлемым для обоих способом.

Если Крис просто недоступен, скажем он ушел домой спать и оставил свой терминал заблокированным, я могу просто убить этот командный процессор. Утром он конечно разозлится, но мне на это наплевать. В зависимости от вашей ситуации вы можете не захотеть прибивать шелл другого пользователя, а вот я, чувствую себя замечательно, когда мне предоставляется возможность «убить» что-нибудь крисовское, поэтому именно так я и поступлю. В третьем столбце указан идентификатор процесса нашего интерпретатора, который висит где-то внутри каталога /cdrom. # kill -1 2834 # umount /cdrom #



В принципе я мог бы насильственно размонтировать CD-ROM, воспользовавшись командой unmount с ключом «-f». UNIX предоставляет массу разнообразных путей решения этого вопроса. Выбирайте понравившийся.

Одной из самых неприятных особенностей утилиты fstat является то, что она выдает лишь номер записи в индексной таблице, а не нормальное имя файла. Впрочем, это не такая уж и проблема. Вы легко можете найти имя файла по его номеру при помощи команды find (1). Для ограничения области поиска одной точкой монтирования (т.е. файловой системой), воспользуйтесь ключом «-x».

На своем ноутбуке я пользуюсь программной cvsupd (о том что это такое читайте http://www.onlamp.com/pub/a/bsd/2001/08/30/Big_Scary_Daemons.html). Если мне неожиданно захочется узнать, куда эта программа пишет свои журналы, то для выяснения я могу просмотреть сценарии ее запуска, конфигурационные файлы и страницы онлайнового руководства. Или я могу просто посмотреть какие файлы используется cvsupd. # ps -ax | grep cvsupd 199 ?? Is 0:00.00 cvsupd -e -C 100 -l @daemon -b /usr/local/etc/cvsup - #

Итак, cvsupd выполняется под идентификатором 199. # fstat -p 199 cvsup cvsupd 199 root / 2 drwxr-xr-x 512 r cvsup cvsupd 199 wd /var 40 drwxrwxrwt 512 r cvsup cvsupd 199 text /usr 1541084 -rwxr-xr-x 891596 r cvsup cvsupd 199 0 /dev 10 crw-rw-rw- null rw cvsup cvsupd 199 1 /var 1759 -rw-rw-r-- 0 w cvsup cvsupd 199 2 /var 1759 -rw-rw-r-- 0 w cvsup cvsupd 199 3* internet stream tcp c2ef1100 cvsup cvsupd 199 4* pipe c2e07000 <-> c2e06f20 0 rw cvsup cvsupd 199 5* pipe c2e06f20 <-> c2e07000 0 rw cvsup cvsupd 199 6* local dgram c2ebde10 <-> c2ebe000 #

Поскольку мы ищем файл журнала (т.е. текстовый файл, открытый на запись – прим. переводчика), то в четвертом столбце должна быть цифра. Третья, четвертая и пятая строка являются файлами. Посмотрим, что у этих строк находится в пятом столбце. Итак, третья строка это устройство (находится в каталоге /dev), так что эта строка отпадает. У нас остались четвертая и пятая строки, которые указывают на открытое что-то, что находится внутри каталоге /var. В шестом столбце содержится номер записи в индексной таблице. В обеих строках он равен 1759. # find -x /var -inum 1759 /var/tmp/cvsupd.out #

Мне никогда бы не пришло в голову искать файл журнала в таком месте, но к счастью fstat избавила меня от необходимости об этом догадываться.

Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте reclama@computerra.ru


Кто командует парадом?


Виктор Хименко, 01/2001.

В двух предыдущих статьях* мы рассмотрели файловую систему и управление процессами в ОС Linux. На все это мы глядели со стороны ядра: строго говоря, термин «Linux» и относится к ядру, а ОС в целом правильнее именовать GNU/Linux, поскольку многие критически важные ее компоненты взяты из системы GNU, создаваемой Фондом свободного ПО (Free Software Foundation, FSF). Именно так, кстати, делается в официальных названиях многих дистрибутивов (например, Debian GNU/Linux).

Настало время вспомнить и о пользователе — ведь это для него, собственно, создаются файлы и запускаются процессы, — а также о том, что для управления системой ему необходим пользовательский интерфейс. В этой статье речь пойдет о традиционном для UNIX-систем интерфейсе командной строки и о языке наиболее популярного в Linux командного интерпретатора bash.

Вы, возможно, удивитесь: есть же графические оболочки, такие как GNOME или KDE; именно благодаря им наблюдается сейчас бурный рост популярности Linux! Разве с их появлением командная строка не превратилась в никому не нужный анахронизм? Вовсе нет. Она по-прежнему остается самым удобным средством комбинирования программ и автоматизации рутинных процедур.

Что касается графических оболочек, то они одновременно и слишком просты, и слишком сложны. Элементарные действия вроде запуска отдельных программ и основных операций с файлами выполняются там очень похоже на то, как это происходит в Windows, и пользователь, знакомый с Windows, легко освоит их без посторонней помощи. Организация же взаимодействия программ, наоборот, требует довольно высокой программистской квалификации: например, среда GNOME основана на модели CORBA, а манипулировать CORBA-объектами весьма непросто. Командный интерпретатор предоставляет в наше распоряжение некую «золотую середину» — возможности весьма широкие и при этом относительно легко осваиваемые.

Примеры и иллюстрации, как и в предыдущих статьях, приводятся на материале дистрибутива KSI-Linux Release 3.0 (Manticore).



Кто виноват?


Довольно давно уже встречаются руководства по установке ПО для Linux, написанные самым разнообразным контингентом, которые сводятся к благословению и проклятию большинства софта для POSIX (*NIX): configure && make && make install ! Многие могут спросить: "И что тут такого? Я сам так делаю.". Резонный вопрос. Если руководство называется "Как установить <название ПО> за 15 минут" и выполнение предписанных шагов действительно позволяет получить работающую программу за 15 минут, что неправильно? А вот что: такие руководства по совести должны называться "Как установить <название ПО> за 15 минут, если у вас уже не крутится рабочая инсталляция, которую нежелательно будет сломать из-за неудачно скомпилированных файлов или сноса всю прошлую неделю редактировавшегося конфигурационного файла неконтролируемым make install; если вы наизусть помните все ключи configure; если вы самостоятельно напишете init и logrotate сценарии для этого ПО; если вы не собираетесь автоматизированно обновляться до следующей версии и если вы самостоятельно разыщете все файлы, которые наплодил make install, когда захотите избавиться от этого ПО". Уже не так привлекательно, правда? Мне такая формулировка не нравится, хотя это дело личного и профессионального вкуса. Всё зависит от того, какие цели преследуются.

[Хм... Я обеими руками за то, что сказал Денис, но хочу добавить кое-что от себя. Если Вам ОЧЕНЬ важно установить программное обеспечение из "сырцов" описанным выше способом то, чтобы не запутать и не захламить Вашу систему, попробуйте Stow. Эта утилита если и не решит все проблемы, то хотя бы поможет избежать большинства из них, как-то: поиск файлов, которые "...наплодил make install..." и т.п. А также позволит работать с несколькими версиями одной и той же программы. См. перевод на Russian Linux Gazette статьи Управление программными пакетами при помощи Stow. Но это так ... отступление от темы. Надеюсь, Денис не против того, что я вклинился в его рассказ. :-) Прим.ред.]


Давайте определимся, имеет ли смысл читать далее? Если:

необходим быстрый эффект любым путём (есть специальная группа лекарств: симптоматические, единственное их действие заключается в том, что вы чувствуете себя здоровым и нагружаете обычной нормой работы больной организм);

вам лень читать документацию; вы переустанавливаете систему очень часто и ничуть от этого не страдаете; обновления системы у вас популярностью не пользуются; вас вполне устраивает делать резервное копирование всей файловой системы, чтобы ничего случайно не забыть,

то напрягаться особо и не стоит. Если же наличествуют следующие признаки:

ваша основная специализация -- сопровождение серверов, а не пользователей;

вы непосредственно, то есть лично своей зарплатой/репутацией отвечаете за доступность и правильную работу сервисов, работающих в режиме как минимум 24*5/24*6; вы отвечаете более чем за одну машину; вы администрируете публично доступные сервисы и отдаёте себе отчёт в том, что свежую уязвимость сканер-автомат способен нащупать и "проломить" за несколько секунд; время восстановления работоспособности повреждённого или полностью уничтоженного участка сети и/или сервера не должно превышать время монтажа аппаратного обеспечения + несколько часов; предоставление сервисов вашей инфраструктурой планируется не на ближайшие пару месяцев, а на постоянной основе; показатель труда системных администраторов должен являться суммой усилий нынешних и предыдущих сотрудников, а не случайным значением из ряда разнесённых по времени и направлению попыток изменить что-то к лучшему,

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


Кунсткамера


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

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

Ларчик открылся достаточно просто. Как большинство систем указывает на то, какие блоки принадлежат файлу? Используются самые разнообразные способы. Например, можно хранить ссылки на блоки в описателе файла и каком-то количестве индексов:

бi – указатель на конечный (содержащий данные) блок файла

Можно хранить информацию не об отдельных файлах, а о сегментах:

На этой картинке дi – количество последовательно хранящихся блоков.

Можно хранить информацию о первом блоке и отдельно связанный список блоков:

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

В каждом блоке содержалось по две ссылки (соответственно на предыдущий и следующий блок). Поскольку это была система реального времени, то, как это обычно бывает в системах этого типа, никакого кэширования данных не предусматривалось. Любые действия над файлами были достаточно утомительными; в частности, для того чтобы просто позиционироваться в конец файла, требовалось прочитать его целиком. Трудной процедурой было и обычное выделение места под файл. Чтобы уменьшить затраты на повторное выделение места под файл, было принято следующее решение: при повторном открытии файла на запись место не освобождается, а просто изменяется счетчик длины. Как вы уже догадались, вероятно, именно этим и объяснялась уникальная "разумность" средств разработки в этой системе.



Курс молодого сисадмина


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



Курс молодого сисадмина-II: Advanced Settings


Продолжения этой статьи изначально не предполагалось. Но поскольку первая статья (см. выпуск рассылки от 21.05.2002) вызвала у читателей бурный интерес, автор (то есть я ;-) ) решил продолжить обсуждение наболевшей темы. Будут более детально рассмотрены некоторые аспекты работы, а также будет кое-что добавлено к уже сказанному в прошлой статье.

Сисадмин чем-то напоминает директора какого-нибудь предприятия советских времен. С одной стороны, в границах вверенного ему объекта вроде как всевластен и всемогущ. Но при малейшей оплошности либо невыполнении плана - сразу же в райком на ковер (роль райкома теперь отлично играет руководство фирмы). Плохо работаешь, товарищ, очень плохо! Позавчера в самый ответственный момент машина зависла! Вчера интернет с почтой полчаса не работали! Сегодня принтер не печатал! Будем принимать меры!

"Меры" обычно имеют финансовый характер и выражаются в "усыхании" зарплаты. И никто не хочет слышать о том, что машина зависла потому только, что юзеры прочитали письмо с вложением, зараженным вирусом. Интернет с почтой не "не работали", а отдыхали из-за перегруженности трафика. А принтер не печатал, потому что кто-то "снес"" драйверы... Надо тоже принимать меры!

Откажемся от лирических отступлений с меланхолической жалостью к самому себе и перейдем к решительным действиям. Не хотите по-хорошему - будем по-плохому! В самом деле, кто тут ВЛАСТЕЛИН СЕТИ?! Да я, если захочу, могу тако-о-о-е сделать: Э-э: кстати, а что именно я могу?..

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

Кто-то из "горячих голов" (обычно не отягощенных практическим опытом) возмутится: что ж там трудного? Попробовал, поэкспериментировал, пару раз перезагрузил, "перевесил" винду, в конце концов... Забываете, господа "горячие чайники", что дело-то происходит в офисе, а не в квартире! Это дома можно сегодня Windows угробить, а за выходные установить заново. На работе счет обычно идет на секунды. Особенно когда персонал и руководство в этом плане избалованы: попробуй поменять что-нибудь в настройках и перезагрузить сервер - сразу же раздадутся вопли недовольства! Не будем забегать вперед, начнем по порядку.

Разумеется, в одной статье невозможно выложить всю подноготную - с общими правилами и теоретическими выкладками. Посему рассмотрим практическую сторону действий на примере. Итак, условия задачи: неопытному сисадмину "в наследство" достается типичная офисная сеть: сервер, роутер, полтора-два десятка рабочих станций. Роль файлового сервера играет Windows 2000 Server с настроенным DNS. На роутере, как обычно, установлены proxy-server, mail-server. Интернет-канал - скажем, выделенная линия на 33,6Кбит/с. Локальная сеть - Fast Ethernet 100 Мбит/с. Фирма у нас пусть занимается куплей-продажей чего-либо. Все.

Начнем с социальных факторов, а точнее, с персонала. Как правило, в любой торговой организации основными трудягами являются продавцы-менеджеры, или, как их "ласково" называют сисадмины, манагеры. Они-то и есть главная проблема сисадмина... Точнее, не они сами, а их небрежное и халатное отношение к подведомственному сисадмину объекту. Менеджеры представляют значительно большую опасность для стабильной работы офисной сети, чем обычные пользователи, так как более интенсивно эксплуатируют ее ресурсы:



такие же письма приходят самим


они рассылают существующим и потенциальным клиентам письма с предложениями о сотрудничестве, обычно с вложенным прайсом;

такие же письма приходят самим менеджерам;

последнее время в моду входит переписка с клиентами по ICQ;

менеджеры постоянно ведут поиск информации в интернете.

Беда состоит в том, что обычно менеджер не уважает труд сисадмина, поскольку не видит его. Наихудший вариант - когда менеджеру удается заработать на очередной поставке несколько сотен у.е. для организации. После похвалы руководства у него появляется ощущение приоритета, порой граничащее с манией величия: "почему у меня эта программа тормозит?", "почему я не могу влезть на такой-то сайт?", "я не хочу делать так, я привык иначе!" и т.д.

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

Что ж, не будем доводить ситуацию до конфликта. Рассмотрим типичные "случаи на производстве" и то, как с ними бороться посредством элементарных мероприятий.

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


Квалификаторы глоббинга


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

. для указания обычных файлов

/ для указания каталогов

= для указания сокетов

и многие другие (можно указывать права доступа, времена модификации файлов и т.п.). Их полное описание можно найти в руководстве по zsh.



Ладно, а как мы передаём параметры ?


Перед тем как вызвать прерывание BIOS, нам нужно загрузить данные в заранее определённом формате в регистры процессора. Предположим, мы используем прерывание 0x13, предназначенное для чтения/записи с дискеты. Прежде чем вызвать его, мы должны определить адрес в оперативной памяти, куда будут загружены данные. Также мы должны передать информацию о номере устройства (fd0 - 0x00, fd1 - 0x01, hda - 0x80, hdb - 0x81 и т.д.), цилиндре, секторе и количестве копируемых секторов. Эти данные должны быть загружены в определённые регистры. Всё это вам станет понятно после того, как вы прочтёте описание работы кода загрузочного сектора, который мы разработаем чуть позже.

Есть одна очень важная деталь, о которой вы должны знать -- одно и тоже прерывание может использоваться для различных целей. Всё это зависит от номера функции, который указывается в регистре ah (иногда ax). К примеру, прерывание 0x10 может быть использовано как для вывода на экран строки, так и для получения координат курсора. Если мы запишем в регистр ah значение 0x03, то тем самым при вызове прерывания 0x10 мы выберем функцию, используемую для получения координат курсора. Для вывода строки на экран мы записываем в регистр ah значение 0x13, которое является номером функции вывода строки на экран.



Легкая переустановка Linux


Bob Quine, 19.02.2003, Xakep.ru

Linux является достаточно устойчивой системой и может работать, в отличии от MS Windows, очень долгое время. Однако иногда все же приходиться переустанавливать систему. Любой администратор имеет свой собственный подход к осуществлению данной задачи, и не мне что-то кому-то навязывать. Любой процесс переустановки - это долгое, рутинное и скучное занятие. Однако, некоторое время назад мне попался на глаза довольно удобный способ. Надеюсь, он тоже окажется кому-то полезным.

Для примера возьмем следующие характеристики:

3 Гб под root

128 Мб swap

Остаток места на жестком диске

Монтируем 3 к /mnt/drive2. Делаем каталог bobby (или другой), добавляем пользователя bobby и затем usermod -d /mnt/drive2/bobby bobby, чтобы сделать это домашним каталогом. В домашнем каталоге создаем директорию sys-config с подкаталогом conf_files. B conf_files копируем такие файлы, как /etc/hostname, /etc/hosts, необходимые вам файлы из /etc/rc.d/ и другие, которые подвергаются модифицированию при установке. В sys-config будет находиться скрипт install.sh, который копирует файлы из conf_files на их свои места. Данный скрипт находиться в конце статьи. Теперь, когда возникают проблемы с системой (например, кто-то вас взломал или файлы оказываются испорченными в результате чьей-то неграмотности), то надо просто проделать вышеуказанные шаги и запустить install.sh. Некоторые системные администраторы делают даже еженедельную переустановку своей системы.

Вот код:

#/bin/bash

bob_home_dir=/mnt/drive2/bobby

# устанавливаем crontabs

crontabs conf_files/crontab.root -u root

# копируем необходимые файлы на их места

(

cd conf_files

# etc files

cp hostname hosts exports fstab lilo.conf printcap syslog.conf

/etc

# X11

cp XF86Config /etc/X11

# ssh

cp sshd_config /etc/sshd

# используем новые файлы

killall -HUP sshd

# /etc/rc.d files

cp rc.modules rc.local /etc/rc.d

# samba

cp smb.conf /etc/samba

# сделаем так, что бы изменения возымели эффект

kill -HUP 1


# конфигурируем загрузочный сектор

/sbin/lilo

)

# создаем ссылки из /usr/local/bin & /usr/local/sbin

ln -s ${bob_home_dir}/bin/* /usr/local/bin

ln -s ${bob_home_dir}/sbin/* /usr/local/sbin

Вот и весь скрипт. Конечно, в нем можно много что изменить, но что именно - каждый решает сам в зависимости от системы.

Удачи!


Источник - LinuxBegin.ru

http://linuxbegin.ru

Адрес этой статьи:

http://linuxshop.ru/linuxbegin/article291.html













u="http://stat.iplog.md/"; d=document; nv=navigator; na=nv.appName; j="N"; d.cookie="b=b"; c=0; if (d.cookie) c=1; n=(na.substring(0,2)=="Mi")?0:1; rn=Math.random(); z="rn="+rn+"&c="+c; js="1.0";

js="1.1"; j = (navigator.javaEnabled()?"Y":"N"); js="1.2"; s=screen; px=(n==0)?s.colorDepth:s.pixelDepth; z+="&wh="+s.width+'x'+s.height+"&px="+px;

js="1.3"

y=""; y+=""; y+="
"; y+=""; d.write(y);if(!n) { d.write("






Level_name[]


Эта инструкция присваивает призвольное символьное имя для каждого "уровня", допустимого для данного типа. Соответственно, в квадратных скобка указывается "уровень" (Level1, Level2 ...), а справа от "присваивания" константа типа STRING, которая и является названием этого уровня.
Например,

level_name[Level1] = "Base"; level_name[Level2] = "Shifted";

(вместо слова level_name можно использовать levelname).

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



Lilo


3.1 Настройка

3.2 Упражнения

3.3 Дополнительные сведения


Когда компьютер загружает загрузочный сектор на нормальной Linux-машине, то что он загружает является частью lilo (LInux LOader), называемой загрузчиком первого этапа. Эта крохотная программа имеет единственной целью своего существования загрузку и выполнение загрузчика второго этапа.

Загрузчик второго этапа предоставляет вам возможность выполнения команд и может загружать ОС по выбору.

Когда система установлена и запущена, вы можете выполнить команду lilo. В этом случае отрабатывает ``map installer''. Он зачитывает файл настроек /etc/lilo.conf и записывает загрузчики на жесткий диск.

Есть множество способов организации загрузки вашей системы. То, что я описал, является наиболее очевидным и "нормальным", по крайней мере для машин, где главной ОС является Linux. Lilo Users' Guide рассматривает несколько примеров стратегий загрузки. С этим стоит ознакомиться, а кое-что и опробовать на практике.



Linux


Настоящее дополнение к стандарту относится только к операционной системе Linux.



Linux на двух дисковых разделах


Самый простой вариант подготовки диска для инсталляции Linux – его разбиение на два раздела: swap и корневой раздел. При этом под swap отводится место сообразно наличию оперативной памяти, а под корень «сколько не жалко». Преимущество такого разбиения – минимум административных действий, поскольку отпадает необходимость делать прогноз наполняемости файловой системы. При таком разбиении достаточно учесть следующее.

Для корневого раздела командой fdisk выбрать тип 83 (обычный тип для Linux) и максимально возможный размер. Рекомендуемая файловая система – одна из доступных журналируемых, например ext3, reiserfs или xfs. В случае использования reiserfs обязательна опция монтирования notail в соответствующей записи файла /etc/fstab.

Для swap раздела выбрать тип 82 (Linux swap), а с размером определиться из следующих соображений.

– жёсткий лимит снизу. Ядра, начиная с 2.4.10, не могут монтировать swap, если размер дискового раздела меньше 128 Mb.

– жёсткий лимит сверху. Размер swap не может превышать половины адресного пространства оперативной памяти. Для i86 при размере страницы памяти 4 Kb (значение по умолчанию) размер адресного пространства 4 Gb, а максимальный размер swap, соответственно 2 Gb.

– разумный лимит сверху. По эффективности использования рекомендуется иметь не более чем swap = 2*RAM. С точки зрения эффективности swap если и нужен, но в размере близком к лимиту снизу. Разумное исключение – интенсивное использование tmpfs (/dev/shm).

– ядро умеет балансировать нагрузку для swap между ide каналами (всеми scsi дисками). На многодисковых машинах хорошо иметь swap разделы на каждом master ide (каждом scsi) диске и сделать запись в /etc/fstab о равенстве их приоритетов, например: /dev/hda5 swap swap defaults,pri=1 0 0 /dev/hdc5 swap swap defaults,pri=1 0 0

Заметьте, лимит снизу становится равным 128 + 128 = 256 Mb.



Linux на многодисковой машине


Появление на машине уже второго диска меняет представление об оптимальном разбиении. Большой раздел с корневой файловой системой нужно делить. Кроме того, второй диск (если это scsi или ide-master на втором канале) наводит на мысль об извлечении выгод от использования «продвинутых» технологий. Становится возможным для каждой «берлоги» файлового дерева подобрать индивидуальный оптимизированный рабочий микроклимат. В первую очередь осознаётся потребность «выноса за скобки» с корневой файловой системы всего, что не критично для процесса загрузки. При ближайшем рассмотрении кандидатами становятся файловые системы /home, /var (эти в первую очередь) и /usr, /opt.

Для корневой файловой системы реально необходимое дисковое пространство, при условии выноса всего возможного, 120 – 180 Mb, а с учётом запаса – 250 – 350 Mb. Файловая система журналируемая (присмотритесь к стабильной ext3 и её data=ordered по умолчанию). Запись в /etc/fstab может выглядеть примерно так:

/dev/hda6 / ext3 defaults 0 1

Файловые системы /usr и /opt проблем обычно не приносят. Требуемый им размер дискового пространства относительно стабилен и зависит от инсталлированного software. С большой долей уверенности можно сказать, что 2,5 Gb на две файловые системы должно хватить (это для рабочей станции с GUI, у сервера, не обременённого графикой, запросы скромнее).

Что касается /home и /var, здесь всё сложнее. Прогноз резервирования дискового пространства не всегда сбывается. Это основная проблема при инсталляции Linux на множестве дисковых разделов (на данном шаге мы рассматриваем необходимость иметь 6 или 7 разделов). Проходит немного времени после распределения лимитов и фактического разбиения дисков под прогноз и выясняется, что одни файловые системы близки к заполнению, другие явно недоиспользуют дисковое пространство. Не всё так плохо. Если при разбиении диска был допущен просчёт, существует минимум четыре способа решения проблемы. Назовём их условно так: «радикальный» (не говорите, что его вам рекомендовали), «сопливый», «жесткий» и «гибкий». Давайте коротко о перечисленных способах.

К «радикальному» методу я отнёс бы следующее. Резервируется на внешний носитель вся нужная информация. Делается разбиение под новые «обстоятельства». Инсталлируется операционная система. Восстанавливаются зарезервированные данные. Вот так.

«Сопливый» метод следует понимать так. Отдельные подкаталоги переполненной файловой системы переносятся на незаполненную, а на их месте создаются гибкие ссылки на вновь созданные. До некоторой степени это помогает.

Под «жёстким» методом подразумевается применение утилит типа parted. Parted позволяет производить перепланировку разделов с гарантией сохранности данных. Жёстким этот метод назван лишь потому, что имеет некоторые ограничения по типам файловых систем (специфика xfs не позволит им воспользоваться), двигает «стенки» только между смежными разделами и бессилен, если разделы находятся на разных дисках. Освойте этот метод, он пригодится при переходе от схемы «три раздела на одном диске» к схемам разбиения для нескольких дисков.

«Гибкий» метод предполагает, что возможность возникновения и решения проблем с дисковыми ресурсами была заложена ещё при инсталляции системы. При таком подходе вынесенные из корня разделы создаются на логических томах. Конечно, не всё так просто. Метод подразумевает освоение новых команд, если точнее, освоение большого числа новых утилит (как следствие большой гибкости технологии). Затраты времени на освоение могут окупиться тем, что перепланировка разделов из проблемы превратится в ещё один системный сервис. Схема разбиения двух дисков с выносом на логику всего возможного из корневого каталога с точки зрения «физики» представляет собой linux на четырех симметричных разделах. Выбирая между linear и striped логикой можно достаточно полно реализовать преимущества многодисковой инсталляции. В интернете доступен LVM-HOWTO

В следующей статье будет описание «что было, что стало».

Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте reclama@computerra.ru