Tips & Tricks

This article is protected by the Open Publication License, V1.0 or later. Copyright © 2005 by Red Hat, Inc.
Original article: http://www.redhat.com/magazine/005mar05/departments/tips_tricks/

Red Hat Magazine, выпуск 5, март 2005

Перевод: © Иван Песин

Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Пользователи, имеющие учетную запись сайта redhat.com, имеют ограниченный доступ к базе знаний. Подписчики Red Hat Enterprise Linux имеют полный доступ — с дополнительными категориями и возможностями расширенного поиска. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.

Скрипты командного интерпретатора могут не только произвести впечатление на ваших друзей, но и сохранить ваше время и силы. С помощью простых в использовании команд, некоторые задачи можно решить за несколько секунд, вместо минут и даже часов. Доказательством этому случат опубликованная в прошлом номере статья Как перестать беспокоиться и полюбить командную строку, часть 1 и статья из этого номера Как перестать беспокоиться и полюбить командную строку, часть 2. Этот выпуск Tips & Tricks раскрывает некоторые простые, но мощные команды Linux, которые каждый может взять в свой арсенал.

Советы от RHCE

Как прервать эти докучающие "непрерываемые" процессы

Любой, кто занимался администрированием NFS, рано или поздно сталкивался с недоступностью сервера, что приводило к появлению массы "неубиваемых" процессов, ожидающих восстановления связи с сервером NFS. Быстрый экскурс по параметрам монтирования NFS из страницы руководства mount(8) познакомит нас с опциями "intr" и "soft", которые позволяют прерывать такие процессы и завершать по тайм-ауту операции ввода-вывода с неотвечающим сервером. Но что, если мы не ожидали этих проблем? Или если мы решили использовать непрервыаемость операций ввода-вывода для обеспечения целостности данных приложений, выполняющих запись на тома NFS?

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

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

В случае NFS, подсистема управляется потоком ядра с именем rpciod. Быстрым решением будет старая добрая команда kill -9 <pid>, примененная к rpciod (или killall -9 rpciod). Не волнуйтесь, процесс в действительности не завершится, но в ответ не полученный сигнал, вернет всем ожидающим процессам ошибки. Более элегантным подходом будет заставить rpciod решить, что не стоит пытаться дождаться сервера. Этого можно добиться деактивировав сетевой интерфейс или добавив правило пакетного фильтра, которое будет возвращать ошибку "icmp-port-unreachable"... Будьте терпеливы, перед тем как rpciod сдастся, может пройти несколько минут, но он таки сдастся, даже с "жестко" смонтированными файловыми системами. Предположим, что сервер 192.168.0.5 стал недоступным. Чтобы разрешить ситуацию, добавим в пакетный фильтр клиента правило:

iptables -I OUTPUT -d 192.168.0.5 -j REJECT


Как найти разложение на простые множители какого-либо числа?

С помощью команды factor легко найти разложение на простые множители любого числа. Перед ее использованием, убедитесь что пакет coreutils установлен в системе. Его можно установить либо с компактов Red Hat Enterprise Linux, либо из Red Hat Network (RHN) командой up2date coreutils, если система зарегистрирована в RHN.

Формат использования команды factor:

factor <number>

Например:

factor 210

выдаст следующий результат:

210: 2 3 5 7

Если число не указано в командной строке, factor считывает числа, разделенные табуляцией, пробелом или символом новой строки из стандартного ввода.

Как узнать архитектуру установленного пакета?

Запрос командой rpm -q по-умолчанию не выводит информацию об архитектуре. Чтобы получить такую информацию, используйте команду rpm со следующими параметрами:

rpm -q --queryformat="%{n}-%{v}-%{r}.%{arch}.rpm\n" <имя-пакета>

Замените <имя-пакета> названием интересующего вас пакета. Если вы не знаете точного имени, вы можете использовать этот же ключ --queryformat вместе с командой rpm -qa и передать вывод команде grep для поиска всех пакетов, имя которых содержит указанную строку:

rpm -qa --queryformat="%{n}-%{v}-%{r}.%{arch}.rpm\n" | grep <имя-пакета>

Как узнать когда в системе был установлен RPM-пакет?

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

rpm -qa --last

Если вы хотите получить информацию по конкретному пакету, укажите в команде имя-пакета:

rpm -q --last >имя-пакета<

Например, используйте нижеприведенную команду, чтобы получить информацию о пакете filesystem:

rpm -q --last filesystem

вывод команды будет таким:

filesystem-2.2.1-3 Wed 07 Jan 2004 05:30:57 AM EST

Как мне скопировать файлы и каталоги на другой сервер и сохранить при этом символические ссылки?

Чтобы сохранить символические ссылки при копировании файлов и каталогов по сети, рекомендуется использовать команду rsync. При использовании команды scp, вместо ссылки копируется файл, на который указывает эта ссылка.

Например, чтобы скопировать и сохранить ссылку test.log на /home/test/test.log из локального каталога /rsync_test на машину serverOne в каталог /rsync_test, выполните:

 
rsync -a -e ssh /rsync_test/ serverOne:/rsync_test

Как узнать, кто сейчас зарегистрирован в системе?

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

Команда last выводит всех регистрировавшихся в системе пользователей, вместе с их терминалами. Однако, эта команда выводит информацию о регистрациях, выполненных после создания файла /var/log/wtmp. Потому, убедитесь, что файл /var/log/wtmp существует. Сделать это можно командой:

touch /var/log/wtmp

Другой командой, связанной с last, является lastb. Разница лишь в том, что последняя выводит список неудачных попыток регистрации в системе. Для ее работы, должен быть создан файл /var/log/btmp.

Кроме того, есть еще очень полезная команда w. Команда w выводит список текущих зарегистрированных пользователей и что они делают (выполняемый процесс). Для каждого пользователя выводятся следующие поля: имя пользователя, название терминала, удаленная система, время регистрации, время простоя, JCPU, PCPU и название текущего процесса пользователя.

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

Поле PCPU содержит процессорное время, использованное текущим процессом, указанным в поле "what".