ВНИМАНИЕ !
Эта статья перенесена на sysadminwiki.ru,
где вы можете принять участие в её улучшении!
Здесь она обновляться больше не будет.

Решение проблем в Linux.

2010.02.18
версия 1.26
24pm@mail.ru


Быстрый доступ к тематикам этой страницы:
apt, bind, dpkg, lilo, mcmysql, php, rpm, squid, zypper
полезные команды,
сетевой интерфейс
Восстановление пароля root
В конце этого документа помещены заметки не выделенные в тематики.

Также можно посмотреть отдельные статьи по темам:
apache
, iptables, logwatchmrtg, ntp, postfix, samba, ssh, vpn, wget,
резервное копирование


apt

Обновлять и доустанавливать пакеты можно и без доступа в интернет. Для этого:
а) кладём все доступные репозитории на один из локальных компьютеров (напр 10.0.0.239 в каталог /usr/dvd-1-apt) и заносим этот источник в список просматриваемых, т.е. создаём файл

# vi /etc/apt/sources.list.d/local.list
и добавляем туда строку (для баз: base classic kernel)

rpm ssh://10.0.0.239/usr/dvd-1-apt/ i586 base classic kernel

б) если CD-ROM есть, то добавляем содержимое диска:
# Apt-cdrom add

в) можно положить образ установочного диска на локальный жёсткий диск и смонтировать его. 
Для Alt Linux:
# mkdir /mnt/alt4dvd
# mount -o loop /home/pavel/distrib/alt4dvd.iso /mnt/alt4dvd
Добавим в /etc/apt/sources.list строку:

rpm file:/mnt/alt4dvd ALTLinux base disk contrib

где ALTLinux - каталог на DVD с дистрибутивом, а в ALTLinux/base находятся файлы pkglist.base, pkglist.contrib, pkglist.disk, описывающие имеющиеся на диске 3 набора пакетов. Эти наборы мы и подключили. Сами пакеты находятся в каталогах ALTLinux/RPMS.имя_набора.

Для Debian:
# mkdir /mnt/debian_dvd1 /mnt/debian_dvd2 /mnt/debian_dvd3
# mount -o loop /data/distrib/OS/Debian4.0r5/debian-40r5-i386-DVD-1.iso /mnt/debian_dvd1
# mount -o loop /data/distrib/OS/Debian4.0r5/debian-40r5-i386-DVD-2.iso /mnt/debian_dvd2
# mount -o loop /data/distrib/OS/Debian4.0r5/debian-40r5-i386-DVD-3.iso /mnt/debian_dvd3
В /etc/apt/sources.list добавляем:

deb file:/mnt/debian_dvd1 stable main contrib
deb file:/mnt/debian_dvd2 stable main contrib
deb file:/mnt/debian_dvd3 stable main contrib


Обновим список пакетов:
# apt-get update
Теперь, можно устанавливать пакеты как обычно через "apt-get install".


Если для установки пакета требуется наличие более старых пакетов, чем установленные у нас, то можно произветси даунгрейд (возврат к более старой версии) установленных пакетов.
# apt-get install liblzo-devel

The following packages have unmet dependencies:
liblzo-devel: Depends: liblzo (= 1.08-alt2) but 1.08-alt3 is to be installed
E: Broken packages

# apt-get install liblzo=1.08-alt2

Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be DOWNGRADED

Но прежде чем опускаться до более старый версий стоит попробовать обновить информацию о репозитории:
# apt-get update
И установить ещё раз. Если даунгрейд потянет за собой много других пакетов, то может быть имеет смысл открыть в /etc/apt/sources.list доступ к репозиторию Sysiphus и после команды update, попытаться установить пакет ещё раз.


Если сервер не имеет прямого подключения к Интернет, то можно обновиться и через прокси-сервер. Для этого определим переменные окружения:
# export http_proxy="http://host:port"
# export ftp_proxy="http://host:port"
Если прокси требует пароля, то:
# export http_proxy="http://username:password@host:port"

Некоторые команды пакета apt
Команды пакета apt

Описание

apt-get update обновление репозитария
apt-get dist-upgrade полное обновление ОС
apt-get check проверить текущее состояние системы
apt-get install <package> установить пакет. Всё скаченное apt-get лежит в /var/cache/apt/archives.
apt-get -f install <package> исправить зависимости
apt-get install -d <package> скачать пакет не устанавливая. Лежать будет в /var/cache/apt/archives.
apt-get source <package> скачать исходный текст пакета
apt-get remove <package> удалить пакет. Результаты можно посмотреть в /var/log/user/info
apt-cache search <string> поиск пакета по описанию
apt-cache showpkg <package> показать описание пакета


Bind

Если при запуске DNS вервера не копируются slave зоны, а в журнале появляются записи:

May 03 16:33:23.403 general: dumping master file: tmp-XXXXvmmNBt: open: permission denied
May 03 16:33:23.403 xfer-in: transfer of 'coke.com/IN' from 10.0.0.85#53: failed while receiving responses: permission denied

то нужно изменить владельца каталога zone на named.named:
# chown -R named.named /var/lib/bind/zone
а если ещё и не создаётся журнал, то изменить владельца var
# chown -R named.named /var/lib/bind/var

dpkg

 - В Debian для перенастройки некоторых пакетов можно использовать утилиту dpkg-reconfigure, которой параметром передать имя пакета, например:
# dpkg-reconfigure postfix


Команды dpkg (Debian)

Описание

dpkg --get-selections [образец...] Выдает список состояний выбора пакетов.
dpkg -p | --print-avail имя пакета Выводит детальную информацию о пакете, которую извлекает из файла /var/lib/dpkg/available.
dpkg -l | --list <образец имени пакета>... Показывает пакеты, соответствующие данному образцу. Если образец имени пакета не задан, показывает все пакеты в /var/lib/dpkg/available. В образце имени пакета можно указывать обычные символы шаблона командной оболочки.
dpkg -L | --listfiles <имя пакета> ... Показывает файлы, установленные на вашей системе из пакета с указанным именем. Заметьте, однако, что файлы, созданные установочными скриптами пакета, не будут показаны.
dpkg -S | --search <образец имени файла для поиска> ... Ищет в установленных пакетах файл по заданному образцу. В образце допустимы стандартные символы шаблонов командной оболочки.
dpkg --audit команда покажет частично установленные (Half-Installed) пакеты, пакеты, настройка которых не удалась (Failed-Config), а также все пакеты в ошибочных состояниях.



Lilo

Некоторый аналог windows'овского "Режима защиты от сбоев" или "Безопасного режима" в Linux - это однопользовательский режим. Чтобы войти в него, нужно при старте системы, ещё до появления сообщения загрузчика Lilo, прижать Alt (левый), тогда lilo войдёт в интерактивный режим загрузки. В командной строке запустить команду linux single:
boot: linux single
В этом режиме будут пропущены все стартовые скрипты из /etc/init.d  и rc.local. В Alt Linux для контроля каждого загружаемого драйвера/службы можно загружаться в обычном режиме, но нажать "I" для входа в интерактивный режим.

Восстановление пароля root

Для смены пароля root, не зная его, делаем следующее:

Получив физический доступ к компьютеру, нажимаем Ctrl + Alt + Del (возможно дважды) - система уходит в перезагрузку.

1 вариант)
- Попробовать загрузиться в однопользовательском режиме (single mode). Для этого в меню загрузчика (Grub или Lilo - всё равно) отредактировать вариант, начинающийся со слова kernel - добавить в конец 1 или слово single, заменив также режим монтирования диска (если указан) с ro на rw (чтобы можно было сохранить новый пароль).
- Если при загрузке запрашивает пароль root'a, то нужно перезагрузиться и изменить команду загрузчика по другому, добавив вместо single параметр init=/bin/bash, заменив также режим монтирования диска (если указан) с ro на rw

2 вариант)
- Входим в интерактивный режим загрузчика (см выше) и указываем ему опцию:
linux init=/bin/bash
- После загрузки оболочки необходимо перемонтировать корневой раздел в режим RW:
mount -o remount,rw /
- Меняем пароль:
passwd
- Сбросим данные из кеша на диск. Для этого достаточно просто перемонтировать корневой раздел обратно в режим только для чтения:
mount -o remount,ro /
- Теперь можно перезагрузить компьютер в обычный режим. Не забывайте, что скрипты инициализации для нашего сеанса /bash не работают.

Полезные ссылки:
http://special.w6.ru/node/37
http://itshaman.ru/articles/12/passwd-root-linux


Как-то у меня возникла проблема с загрузчиком, при загрузке система выдавала L 01 01 01 ... на пол экрана. Помогла следующая инструкция Георгия Литвинова из тех. поддержки Alt Linuxa (за что ему спасибо):
1. Загрузится с liveDVD
2. Открыть консоль, получить права рута su -
3. Узнать какое название диска
# ls -l /mnt/
Если дисков много,то узнать какой диск с системой по содержимому диска. К примеру
# ls -l /mnt/sda1
4. После этого в папку нужного нам диска монтируем dev. Папок новых не создавать! На диске уже должна быть пустая папка dev
# mount --bind /dev /mnt/sda1/dev
5. После этого делаем смену корневой директории
# chroot /mnt/sda1/
Ошибку будет писать, если директорией опять же ошиблись.
6. Монтируем процессы
# mount proc
И всё, Вы в системе..
7. Можно попробовать попросить lilo самому исправить ошибку (мне помогло):
# lilo
Перегружаемся и смотрим помогло ли. Если нет, то выполняем шаги 1-6 и редактируем конфигурацию загрузчика:
# mcedit /etc/lilo.conf
но предварительно лучше сделайте резервную копию
# cp /etc/lilo.conf /etc/lilo.conf.safe

Если ничто не помогает, то можно сменить загрузчик на Grub, правда я этого не пробовал, но инструкцию получил вот какую:
Запуститесь с liveCD. После запуска откройте консоль с правами рута. В приложенном мной архиве лежит образ grub.iso . Создайте две папки
/mnt/mnt1
/mnt/mnt2
Выполните сделующие команды
mount -o loop /путь к образу/grub.iso /mnt/mnt1
mount -o loop /mnt/mnt1/grub.iso /mnt/mnt2   #{это вложенный 2 образ grub}
cp /mnt/mnt2/boot /mnt/путь к разделу вашего линкуса/boot
Последяя команда должна скопировать файлы граба из второго образа на раздел вашего установленного линукса.
Далее проверьте скопировались ли файлы(появилась ли папка /boot/grub в вашем разделе) ЗАПОМНИТЕ ИМЯ ВАШЕГО РАЗДЕЛА. Например sda1.
Далее замените файл на вашем разделе /boot/grub/menu.lst на тот menu.lst, что я приложил к данному письму и измените данный файл под вашу систему - как менять я написал в самом файле menu.lst менять нужно только номера разделов на ваш sdaX и (hd0,0) на Ваш (hd0,X-1).
После того как Вы скопировали (заменили старый файл) на новый в /boot/grub/menu.lst перезагружайтесь и загружайтесь с 1ого образа grub, который лежит прямо в архиве. После того как Grub загрузился в нем можно будет выполнить команды.
Вам нужно выполнить в нем 2 команды:
root (hd0,X-1)  
setup (hd0)
hd0 здесь и везде потому как Ваш диск виден как первый.

Вот вложенные файлы: grub.iso.bz2, menu.lst


Midnight Commander

- В редакторе mc , для того, чтобы при вставке текста не запоминался отступ:
убрать крестик с опции: Options -> General -> Return does autoindent
- Скопировать(переместить) файл в тотже каталог с другим именем Shift+F5(F6)
- Открыть на смежной панели текущий каталог Alt+o
- Чтобы в mc работали клавиши "*","-","+" как в Far, нужно провести обучение: Options -> learn Keys. Обучение также порой бывает необходимо сделать и для функциональных клавиш.
- Функциональные клавиши можно заменить комбинацией Esc+Цифра, т.е F3 = Esc + 3
- Чтобы открыть на одной из панелей каталог удалённого компьютера, можно в меню Left или Right выбрать Ftp link или Shell link в зависимости от желаемого протокола. Или набрать в командной строке mc (в командрой строке без mc это не сработает):
# cd /#ftp:user@server
# cd /#sh:user@server
можно сразу с паролем и директорией:
# cd /#sh:user:password@server/home/user


MySQL

- Если работу с MySQL планируется вести постоянно, то полезно будет установить phpMyAdmin (http://php-myadmin.ru)

- Проверить целостность базы данных можно командой:
# /usr/bin/mysqlcheck -a DBName

- Выгрузить базу MySQL можно командой:
# mysqldump -u root -p DBName > mydb.sql
Если mysqldump не запускается, то нужно указать полный путь до этого файла, который можно узнать командой:
# find / -name mysqldump
/usr/local/mysql-3.23.54a-pc-linux-i686/bin/mysqldump
Сами базы MySQL хранит в /var/lib/mysql/db/, здесь можно посмотреть какие базы созданы.
Чтобы загрузить базу, нужно сначала создать пустую, а для надёжности предварительно удалить старую:
# mysql -u root -p
mysql> drop database if exists DBName;
mysql> create database DBName;
mysql> quit
а затем в неё загрузить данные:
# mysql -u root -p DBName < mydb.sql
Если для пользователя root в MySQL нет пароля, то параметр -p не нужен, также можно задать пароль явным образом, только без пробела, например -pPassWord. Далее нужно убедиться, что в новой базе есть тот пользователь, от имени которого происходило обращение к базе. Если пользователя нет, то чтоб создать в точности такого пользователя с соответствующими правами, выгружаем базу mysql и выбираем все строки, касающиеся этого пользователя:
# mysqldump -u root -p mysql > mysqldb.sql
В файле mysqldb.sql останется приблизительно следующее:

INSERT INTO db VALUES ('%','DBName','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO host VALUES ('localhost','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES ('localhost', 'UserName', '','N','N','N','N','N','N','N','N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0);

При переходе с одной версии MySQL на другую нужно учитывать, что количество параметров скорее всего будет разным, поэтому команду INSERT придётся подредактировать. Также может изменится алгоритм шифрования паролей. Сколько именно параметров можно узнать выполнив:
mysql> SHOW COLUMNS FROM db;
Можно указать только интересующие поля, а остальные примут значение по умолчанию:
INSERT INTO `user` (`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`) VALUES ('localhost','stacc','Y','Y','Y','Y');

Загружаем базу командой:
# mysql -u root -p mysql < mysqldb.sql

- Внести запись в базу данных из bash можно таким образом (определив, конечно, переменные):

echo "INSERT INTO table_name (\`in\`,\`out\`) VALUES ('$delta_in', '$delta_out');" > $tmp_dir/temp.sql
`mysql -u$db_user -p$db_pass $db_name < $tmp_dir/temp.sql`




Несколько полезных команд:
SHOW TABLES; # показать таблицы в БД
SHOW COLUMNS FROM db; # показать поля таблицы db
USE mysql; # перейти в БД mysql
SELECT host,user FROM user; # показать поля host, user таблицы user
DROP TABLE transport; # удалить таблицу transport
DELETE FROM user WHERE user='acct' AND host='%'; # удалить конкретную запись
UPDATE db SET Delete_priv='Y' WHERE user='acct'; # изменить значение поля в записи
FLUSH PRIVILEGES; # применить внесённые изменения
mysql -u root -p12345 postfix < DB.sql # пакетное выполнение SQL выражений для базы данных postfix
 ALTER TABLE mailbox ADD (uid int(10) unsigned DEFAULT '107' NOT NULL);  # добавляем в таблицу mailbox обязательное поле uid со значением по умолчанию = 107
ALTER TABLE mailbox DROP uid; # удаляем поле uid из  таблицы mailbox
GRANT ALL PRIVILEGES ON DBName.* TO UserName@localhost IDENTIFIED BY '12345'; # дать все права на базу DBName пользователю UserName, подключающемуся с localhost с паролем 12345
CHECK TABLE TableName; проверить целостность таблицы TableName
REPAIR TABLE TableName; исправить целостность таблицы TableName

Полезные ссылки:
www.opennet.ru/docs/RUS/mysqlrus - Документация на MySQL


PHP

- Если проблемы с насройкой php, то можно включить лог и посмотреть, что не работает. Редактируем /etc/php/4.4.7/apache2-mod_php/php.ini:

display_errors = On
display_startup_errors = On
log_errors = On
error_log = /var/log/php.log

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

default_charset = "windows-1251"

- Информацию о самом php можно получить, открыв в браузере предварительно созданный файл info.php:

<?php
  phpinfo();
?>

если есть проблемы с доступом к скрипту info.php через браузер, то то же самое получим, выполнив команду:
# php -i > info.html

- Чтобы не получать предупреждения PHP вроде Undefined variable и Undefined index, нужно изменить уровень оповещения в /etc/php/.../php.ini:

error_reporting  =  E_ALL & ~E_NOTICE



RPM


Команды пакета rpm Описание
rpm2cpio file.rpm | cpio -idmuv --no-absolute-filenames вручную распаковать rpm файл
rpm -i <пакеты> Установка пакетов
rpm -e <пакеты> Деинсталляция пакета
rpm -Uvh <пакеты> Обновление или установка пакетов
rpm -q <пакет> Информация о пакете
rpm -qf <файл> Узнать какому пакету принадлежит файл
Полезно:
-qi - более полное описание пакета,
-ql - список файлов в пакете,
-qc - список конфигов в пакете,
-qd - список документации,
-qR - список зависимостей пакета.
rpm --recompile <srpm> Установка из исходников
rpm --rebuild <srpm> собрать бинарный пакет
rpm --rebuilddb Перестроить базу
rpm -Va Проверить все установленные пакеты на зависимости


Squid

Смотреть также статьи:
Статистика прокси сервера Squid
Статистика использования Интернет трафика клиентом

Squid хранит свои журналы в формате:
Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Host  Content_Type
Довольно подробно про журналы можно почитать на русском  здесь www.bog.pp.ru/work/squid.html#logs



Чтобы объединить несколько проски-серверов squid для обмена кэшами между собой, нужно в squid.conf на каждом из них указать соседей:

icp_port 3130
cache_peer 10.0.0.2 sibling 3128 3130
cache_peer 10.0.0.3 sibling 3128 3130

Если мы хотем завернуть весь трафик на соседний прокси, т.е. заставить наш прокси 10.0.0.1 выходить в Интернет только через соседний прокси-сервер 10.0.0.2, то в squid.conf прописываем:

icp_port 3130
cache_peer 10.0.0.2 parent 3128 3130
never_direct allow all

и на 10.0.0.2 даём доступ для 10.0.0.1. Теперь все пользователи, подключенные к 10.0.0.1 будут выходить в Интернет через прокси 10.0.0.2 как один большой пользователь


Решить проблемы со squid могут помочь журналы /var/log/messages и /var/log/squid/cache.log
Если squid перестал работать, а в журнале появились записи:

(squid): storeUfsDirOpenSwapLog: Failed to open swap log.
squid[8293]: Squid Parent: child process 8317 exited due to signal 6
squid[8293]: Exiting due to repeated, frequent failures

значит squid потерял доступ к каталогу со своим кэшем. Проверить это можно установив полный доступ к каталогу. Предварительно запомним кому он принадлежит и с какими правами:
# chmod 777 /var/spool/squid
Если после этого squid запустился нормально, то стоит выяснить почему он потерял свои права.


Чтобы позволить клиентам подключаться через прокси сервер к серверам в Интеренет по определённому порту, скажем 3900 и 3901, добавляем в /etc/squid/squid.conf правило:

acl Special_ports port 3900 3901
...
http_access deny CONNECT ... !Special_ports




zypper

Zypper - менеджер пакетов в Suse

Комманды  Описание
zypper update обновление базы данных пакетов
zypper install mc установка пакета mc
zypper search perl искать все пакеты Perl



Полезные команды

Команда

Описание

cd - Вернуться в предыдущий каталог
rm -rf <DirName> удалить сразу всю директорию без лишних запросов
split [-b кол-во_байт] [-l кол-во_линий] имя_файла разбить файл на несколько частей
perl -pi -e 's/oneword/anotherword/g' *. заменить одно слово на другое во многих файлах, если в одном файле,то поставить его имя вместо " * "
perl -e '@time=localtime(time()-84600); print $time[3]' Вчерашнее число
perl -e '$time=localtime(time()-84600); print $time' Вчерашняя дата
grep -R "текст" /where/to/search/* искать текст во всех файлах указанного каталога и его подкаталогов
cat /etc/squid/squid.conf | grep -v ^# отобразить все строки не начинающиеся с #
tail -15 /var/log/messages показать последние 15 строк файла
tail -15 /var/log/messages > /dev/tty2 послать данные на желаемый терминал
tail -f /var/log/messages | grep login показывать вновь записываемые в журнал события, содержащие слово "login"
ls | /usr/bin/mailx -s "`uname -n` ls by mail " webmaster@mynet.ru отправить вывод команды ls по почте. Используется пакет mailx. Для RedHat 9 вызов программы: /bin/mail
LANG=C сбросить языковые настройки. Включится английский.
(полезно при неправильном отображении в mc)
mailq показать какие письма находятся в очереди на отправку
postqueue -f попытаться доставить все письма из очереди
chkconfig squid onвключить демон в автозапуск, off - выключить
update-rc.d squid defaults 19 В Debian запускает squid на уровнях 2345 и останавливает на 016. Аргумент '19' позволяет запускать сценарий squid до сценариев с номерами 20 и выше. (аналог команды
chkconfig в других дистрибутивах)
update-rc.d -f samba remove В Debian удалить все ссылки из /etc/rcN.d для демона samba (как для запуска так и для останова)
date --set='2007-8-03 13:44' установить системные дату и время
iptables -t nat -A POSTROUTING -s 10.0.3.41 -d 217.217.217.217 -o eth1 -p tcp --dport 25 -j SNAT --to 116.116.116.116
Разрешаем прямой доступ к внешней почте. Подробнее: разрешаем доступ хосту 10.0.3.41 из внутренней сети обращаться к хосту 217.217.217.217 на 25 порт (smtp) протокола tcp; такие обращения пропускаем через интерфейс eth1, который имеет адрес 116.116.116.116
Для доступа к РОР добавляем такое же правило для порта 110
iptables -t nat -A POSTROUTING -s 10.0.3.41 -p tcp --dport 25 -j MASQUERADE
Более короткое правило, аналогичное вышеприведённому, только здесь пользователь с ip 10.0.3.41 имеет доступ к любому почтовому серверу в Интернете.
ps axo euid,ruid,tty,pid,comm | grep apache2 узнать от имени какого пользователя работает Apache
export EDITOR=mcedit поменять текстовый редактор по умолчанию на 'mcedit'
alsamixer настройка звука в текстовом режиме
host -t mx mail.ruпроверить какой сервер отвечает за приём почты в этом домене

 

Информация о системе
Команда Информация о...
uname -a системе (ОС, процессор, имя компьютера и т.д.)
cat /proc/cpuinfo процессоре
cat /etc/redhat-release версии Red Hat
df HDD
du -c /home/        или
ls -R -s -1
размер каталога /home с размером каждого подкаталога, ключ "-s" показывает только общий размер каталога, так 'du -s /*' покажет размеры всех каталогов в корне.
find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn размер всех подкаталогов в данном каталоге
top процессах, RAM
cat /etc/passwd всех пользователях
cat /etc/group всех группах
id oracle пользователе oracle
finger      или
w
пользователях, зарегистрированных сейчас в системе (на каком терминале, откуда и т.д.)
cat /proc/mdstat состоянии RAID массива (софтверного)
cat /proc/megaraid/hba0/raiddrives-0-9 состоянии RAID массива (на контроллере megaraid)
cat /proc/megaraid/hba0/diskdrives-ch0 состоянии дисков на канале 0 в RAID массиве
ip route show Откуда взялся маршрут
uptime как долго система запущена
lsmod загруженных модулях ядра
netstat -a просмотр всех открытых tcp и udp портов
netstat -apn | grep 80 что прослушивает 80 порт (http)
dmesg процесе загрузки системы
lspci список всех устройств PCI, в их число попадают и USB
lspci | grep Audio драйвере аудио карты
ps axo euid,ruid,tty,pid,comm процессах, от кого запущены, на каком TTY и с каким PID



Комманды (раз)архивирования Описание
tar -cvf - * | gzip -c > arc.tar.gz заархивировать всё содержимое текущего каталога (включая подкаталоги)
tar -zxvf arc.tar.gz разархивировать всё в текущий каталог
gzip -cd arc.tar.gz | tar -xvf -  
gzip -cd Fname | cpio -imd#  
bzip2 -cd arc.tar.bz2 | tar -xvf -  

 

Комманды less,
просмотр руководств (мануалов)
Описание
g на начало текста
G на конец текста
/слово поиск подстроки "слово"
/ продолжение поиска
F постоянно обновлять просматриваемый файл



Сетевой интерфейс

Смотреть также статью "Отчёты о нагрузке сетевой карты"

Если нужно изменить ip адреса сетевых карт, то

в AltLinux 2.4 Master и 2.3 Compact правим:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
# /etc/init.d/network restart
либо используем утилиту "draknet"

В AltLinux >3.0 используется новый набор скриптов для сетевых настроек - etcnet. Подробно можно узнать на www.freesource.info/wiki/AltLinux
Настройки интерфейсов лежать одельно по каталогам в /etc/net/ifaces/. Настройка интуитивно понятна. Не забудем перегрузить службу network

В Debian редактируем файл /etc/network/interfaces, после чего перезапускаем интерфейсы
# /etc/init.d/networking restart
Интерфейсы не поднимутся, если нет физического соединения!



Чтобы сетевая карта откликалась более чем на один IP адрес нужно создать алиасы (alias) на интерфейс. Создать алиас на интерфейс eth0 можно скопировав файл /etc/sysconfig/network-scripts/ifcfg-eth0 в файл ifcfg-eth0:0. В новом файле указываем настройки желаемого IP адреса, не забывая указать параметр DEVICE=eth0:0
Запускаем команду
# /etc/sysconfig/network-scripts/ifup-aliases eth0:0
либо
# /etc/init.d/network reload
если указать параметр restart, то оборвуться все соединения

Если заменили сетевую карту, а система пытается её использовать со старыми драйверами, то нужно указать новое соответствие в /etc/modules.conf. Так, если используем сетевую карту Realtek RTL-8139, то указываем драйвер:

alias eth0 8139too



Разное

- Если что-то не работает, то первым делом нужно посмотреть, что написано в журнале сбоящего приложения. Большинство приложений в linux хранят свои журналы в каталоге /var/log/
Сообщения системы можно посмотреть в /var/log/messages,
Некоторые сообщения об ошибках приходят на почтовый ящик пользователя root (в alt linux первому пользователю созданному после root), который находится в /var/mail/
В Debian системные журналы ведутся в /var/log/syslog, messages



- Если нужно изменить имя компьютера (hostname), то правим:
# vi /etc/hosts
# hostname <new_host_name>
но лучше использовать специальные утилиты. Для Alt Linux:
# draknet
Для Debian:
# dpkg-reconfigure etherconf
иначе при перезагрузке она затрёт все исправления. При этом нужно не забыть поменять имя и во всех прикладных программах, где есть соответствующая ссылка. Для Courier-IMAP: /etc/courier-authlib/authdaemon-mysql.conf: DEFAULT_DOMAIN
- Пересоздать сертификаты, изменив настройки в /etc/courier-imap/
- Перенастроить DNS
- Чтобы найти все файлы где упоминается имя хоста можно выполнить:
# grep -R <old_host_name> /etc

Если не работает какая-нибудь программа обмена данными с внешним миром (например почта, ftp, web, удалённый рабочий стол и т.д.), а команды ping  и traceroute отрабатывают без проблем, то, возможно, нужно уменьшить максимальный размер пакетов (MTU) на сет карте. Это особенно актуально, если организован vpn канал.
Проверяем какой размер проходит и меняем настройки сет карты:
# ping -s 1500 ya.ru
# ping -s 1350 ya.ru

PING ya.ru (213.180.204.8) 1350(1378) bytes of data.
1358 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=54 time=82.8 ms
1358 bytes from ya.ru (213.180.204.8): icmp_seq=2 ttl=54 time=83.4 ms
1358 bytes from ya.ru (213.180.204.8): icmp_seq=3 ttl=54 time=83.1 ms

# ifconfig eth1 mtu 1350
Чтобы это сохранилось и при перезагрузке, добавляем эту команду в конец файла /etc/rc.d/rc либо /etc/rc.d/rc.local

- Если есть подозрения на почтовый вирус, смотрим кто заражён, просматривая отфильтрованный по порту трафик на сет. карте:
# tcpdump port 25
чтобы просмотреть трафик пользователя:
# tcpdump host 10.0.0.10
по умолчанию прослушивается интерфейс eth0. Для прослушивания дргого интерфейса указываем его в параметре i:
# tcpdump host 10.0.0.10 -i eth1

- Чтобы обнаружить кто сканирует сеть icmp пакетами, запускаем:
# tcpdump ip proto \\icmp -nn
Ловим весь трафик на внешнем сетевом интерфейсе (у нас это eth1), исключая трафик генерируемый нашей SSH-сессией (здесь 94.94.94.94 - внешний адрес сервера, 10.0.0.10 - адрес компьютера с которого мы подключились к нему)
# tcpdump -i eth1 -n -nn -ttt 'dst host 94.94.94.94 and not ( src host 10.0.0.10 and dst port 22 )'

Командная строка

Описание

TAB + scroll-lock   или  
TAB + TAB
список всех исполняемых файлов в системе, которые присутствуют в $PATH
Ctrl + u очистить командную строку от курсора до начала, в том числе при вводе пароля.
Ctrl + a перевести курсор на начало строки
Ctrl + e перевести курсор на конец строки
Alt + c сделать заглавную букву у текущего слова
Alt + t поменять местами слова
Alt + u перевести слово в верхний регистр
Alt + d удалить конец слова


Формат записей crontab можно посмотреть в /etc/crontab.template:

 minute (0-59),
  |    hour (0-23),
  |    |    day of the month (1-31),
  |    |    |    month of the year (1-12),
  |    |    |    |    day of the week (0-6 with 0=Sunday).
  |    |    |    |    |    user  commands

Чтобы получать результаты работы crontab по почте (полезно при отладке) указываем /etc/crontab:

MAILTO=admin@mynetwork.ru

Если же не хотим получать ничего, то там же указываем:

MAILTO=/dev/null

Файлы crontab пользователей находятся в каталоге /var/spool/cron, системный - в файле /etc/crontab
Также демон cron запускает команды из каталогов /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly


Для того, чтобы создать образы дисков и иметь к ним постоянный доступ, что удобно, например, с apt, выполняем:
# mkdir /dvd
# cd /dvd
# dd if=/dev/cdrom of=имя_образа
# mount -o loop /dvd/имя_образа.iso /mnt/имя_dvd

Для выполнения sudo в Alt Linux 4.0 нужно чтобы пользователь был в группе wheel.


Для удаления раздела в Linux можно использовать пакет parted. Так для удаления 3 раздела на диске sda, т.е. удалить раздел sda3:
# parted /dev/sda
(parted) rm 3
Для работы с диском можно использовать команду fdisk.
easylinux.ru/node/176 - статья по parted
www.linuxrsp.ru/docs/fdisk.html - статья по fdisk


Если не загружается графическая оболочка (иксы), например, после переустановки видеокарты, то можно указать в конфигурации стандартный драйвер vesa. В этом режиме будет работать, думаю, любая видекарта. Для Debian драйвер указывается в файле /etc/X11/xorg.conf:

Section "Device"
   ...
   Driver   "vesa"
   ...



При компиляции (точнее при конфигурации перед компиляцией) samba3 в Debian 4 (etch) получил ошибку:

configure: error: C++ compiler cannot create executables

Помогла доустановка двух пакетов:

# apt-get install build-essential g++

Полезная ссылка: http://www.linuxquestions.org/questions/linux-newbie-8/configure-error-c-compiler-cannot-create-executables-354485/

Обсудить, спросить
на форуме
Новую версию этого документа можно получить на одном из зеркал сайта:
pm4u.opennet.ru, pm4u.narod.ru