Каталоговая структура /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"
Пример:
#!/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 не учитывал их при
# оценке длины строки.
# В противном случае длинные строки будут переноситься неверно.
#