Вся работа в коммандной строке Linux, другими словами работа в Linux консоли производится либо напрямую с клавиатуры, либо через удаленный к серверу доступ по SSH, кстати чтобы подключится к серверу удаленно по SSH через программу Putty, у меня написана подробная инструкция: Инструкция по программе Putty и PSCP
В данной статье записаны самые распростроненные консольные команды, сгрупированные по категориям:
pinfo bash - Удобная замена info.
chmod -R 741 /var/www/files – Сменить права рекурсивно во всей папке files на rwx r-- --x, где: 4 – чтение (r), 2 – запись (w), 1 – исполнение (x).
find /usr/bin -type f -mtime -10 - Найти все файлы в '/usr/bin', созданные или изменённые в течении последних 10 дней.
find /usr/uplifto \( -name *.htm -o -name '*.html' \) -exec enconv -V --convert-to=UTF-8 {} \; - Конвертировать найденные файлы в правильную кодировку.
Настройка
~/.bashrc - Глобальная настройка (alias pya='ping -c4 ya.ru') и запуск програм при первичном входе, и при каждом открытии консоли.
~/.bash_profile - Применяется только при входе в систему, автозапуск пользовательских приложений.
~/.bash_logout - Выполнение сценариев при выходе.
Горячие клавиши
«Esc+.» - Вставка последнего аргумента предыдущей команды (здорово жизнь упрощает). "Alt+." - то же.
«Shift+PgUP» - Просмотреть вывод выходящий за границы экрана.
«Ctrl+Z» - Перевести текущую задачу в фоновый режим $ fg x вернуть процесс (где x=1-…), а $ xxx & запуск программы в фоновом режиме.
«Ctrl+R» - Поиск по истории, для поиска нажимать несколько раз «Ctrl+N» - в обратную сторону.
«Ctrl-U» - Вырезает все слева от курсора, а «CTRL+Y» вставляет.
«Ctrl-K» - Удаляет все что справа от курсора.
«ALT-B» - Перейти на слово назад, а «ALT-F» вперед.
Скриптинг
'' - Стогие кавычки, передать не интерпретируемое значение.
` - Обратная кавычка, выполнить содержание скобок, то же что и $().
” - Двойные кавычки, подстановка переменных и предотвращение разбиение на слова.
ping -с1 ya.ru ; echo «host» - Пропинговать ya.ru, затем просто вывести сообщение.
ping ya.ru || echo «bad host» - Пропинговать ya.ru, в случае неудачи вывести сообщение.
ping ya.ru && echo «ok host» - Пропинговать ya.ru, в случае успеха вывести сообщение.
& - (Амперсанд).
| - Прямая черта.
> - Перенаправить вывод в файл.
>> - Дописать в конец фала.
&> - Оба вывода в один файл.
2> - Вывод только ошибок в файл.
echo $? - Просмотр статус вывода комманды (не 0 = ошибка).
$! - PID последнего запущенного процесса в фоновом режиме.
$1, $2, $3 - Првый, второй и тетий аргументы переданные программе.
$@ - Каждый из аргументов переданных программе.
$# - Число аргументов.
Работа с жестким диском
Производительность жесткого диска ограничена "средним времем доступа" обычно 8 мс, а предел производительности считается P=1000/8*0,85=106 обращений к диску, если в системе этот параметр завышен, создается очередь к диску, и производительность дисковой подсистемы начинает падать по экспоненте. Посмотреть iostat, столбец tps. Скорость чтения: RAID10 = RAID5 NxP > RAID0 = RAID1 NxP> HDD, где N - количество дисков. 3х106=318 > 2x106=212 > 106 Скорость записи: RAID0 NxP > RAID10 N/2xP > RAID1 = HDD = RAID5 подробнее.
/boot — здесь хранится файл ядра — обычно имеет имя vmlinuz (обычно настраивается grub и удаляется из /etc/fstab)
/bin — программы минимальной работоспособности системы;
/lib — библиотеки C;
/opt — вспомогательные программы;
/proc — образы выполняющихся процессов;
/root — начальный каталог root'а;
/mnt — сюда монтируются сменные носители (floppy, cd-rom, flash и др.);
/dev — каталог устройств;
/etc — каталог конфигурационных файлов
/tmp — каталог временных файлов;
/usr — каталог большинства стандартных программ и компонентов;
/var — каталог хранения логов, буферные каталоги;
/var/log — логи;
/home — каталог домашних директорий пользователей.
Сотояние дисковой подсистемы
df -h - Показывает занятость всех дисков (включая подмонтированные).
du -smc --exclude={proc,sys,dev} /* | sort -g - Получаем отсортированный список самых "тяжелых" каталогов в мегабайтах.
du -hs /xxx - Определение места занимаемого файлом/папкой на жестком диске.
du -hs /var/* - А так можно быстро найти виновника переполненного диска (буду рад, если подскажете способ поизящнее):
hdparm -tT /dev/sda Тестирование производительности диска, ей же можно тонко настроить производительность (обычно не нужно, т.к. современные системы корректно определяют параметры, если очень хочется то на Opennet.ru)
dd if=/dev/sdx of=/dev/null bs=1m - Вроде как выявление проблем с диском.
hddtemp /dev/sd[a-z] - Температура жестких дисков в системе (раб.<60°C)
Разметка диска
Разметка диска, по сути - запись (в самом начале диска), о том где и какие разделы расположены физически на диске. Т.е. редактируя таблицу разделов, данные (находящиеся на жестком диске) остаются нетронутыми.
sfdisk -uM -l /dev/sda - Информация о разделах на диске (-uM) в мегабайтах.
partprobe - Информирует ось об изменениях таблицы разделов.
cat /proc/partitions - Tаблица разделов, с которыми работает ядро.
mkfs.ext3 -L fsroot /dev/sda6 - Создать раздел ext3 c лайблом "fsroot".
tune2fs -L fsroot /dev/sda6 - Присвоить лайбл "fsroot" диску, для удобства монтирования или e2label /dev/sda6 fsroot.
blkid - Отображает атрибуты (лайбл) блочных устройств.
mount LABEL=fsroot /mnt/data - Монтрирование по лейблу.
sfdisk -d /dev/sda | sfdisk /dev/sdb - Копирование таблицы разделов с sda на sdb.
sfdisk -d /dev/sda > sda.mbr.bak - Копирование mbr в файл (файл можно редактировать).
sfdisk /dev/sda < sda.mbr.bak - Восстановление mbr из файла.
dd if=/dev/sda of=/root/sda.mbr.img bs=512 count=1 - Копирование mbr в файл, самый надежный способ.
dd if=/dev/zero of=/dev/hda bs=512 count=1 - Очищаем mbr (внимательно!). Если без таблицы разделов, то bs=446
Swap
Создаем своп-файл вместо раздела. Дает гибкость в управлении дисковыми ресурсами (при LVM, RAID, XEN). Обычно своп равен объему ОЗУ, после 2GB не актуально. Сначала создаем файл заполненый нулями необходимиого размера (у нас 1Гб), файл размечаем как своп, включаем:
dd if=/dev/zero of=/swapfile bs=1024 count=1048576 mkswap /swapfile swapon /swapfile
Проверяем:
free -m total used free sharedbuffers cached Mem: 520510 10 0 1372 -/+ buffers/cache:136384 Swap: 1023 0 1023
Где 1023 объем свопа, доступного системе. Таким образом можно добавить еще один своп-файл, объем которого приплюсуется к текущему, или отключить (swapoff). Осталось только добавить строку в файл /etc/fstab:
/swapfile swap swap defaults 0 0
Образ диска
Побитное копирование раздела с последующей упаковкой, я использую для бэкапа свеже настроенных систем:
dd if=/dev/sda2 conv=sync,noerror bs=16M | gzip -c > /mnt/bak/sda1.img.gz
Монтирование
mount -t cifs //192.168.0.122/data /mnt/amigoglobal/data -o user=USER,pass=PASSWORD -монтирование виндовых разделов
mount -o loop /mnt/bak/disk/LiveCD/newcd/live.iso /mnt/cdrom/
mount.nfs 192.168.0.1:/mnt/raid0/date5 $BAKTARGET -n -o ro
mount -a - Монтировать все из fstab, при добавлении ресурсов, напр.
cat /proc/mounts - подробная инфа о примонтированных устройствах. Елси нужно коротко, то df -h.
fuser -v /opt - Узнать, кто занимает ресурс. Напр., если не дает размонтировать.
fuser -km /opt - Принудительное размонтирование раздела.
mount -o remount,rw /dev/sda1 / - Перемонтировать. Напр., при изменении опций.
umount -l /dev/sdb1 - Размонтировать, когда ресурс освободится.
LVM
pvcreate /dev/md1 - Размечем диск как "физический том".
vgcreate -s 128M VG /dev/md1 - Создаем "группу томов".
lvcreate -l 100%FREE -n bak VG - Создаем "логический том" на все доступное пространство.
mkfs.ext3 /dev/VG/bak - Создаем файловую систему.
lvresize -L +10G /dev/VG/date1 - Добавляет в логический том 10Гб, при их наличии в физическом томе.
resize2fs /dev/VG/date1 - Расширяем раздел находу на все доступное пространство (для ext3).
Образ диска
dd if=/dev/zero of=/null bs=1024 ; rm -f /null забиваем свободное место на диске нулями, чтобы dd мусор не сохранял, и сразу удаляем.
dd if=/dev/sda2 bs=16M | gzip -c > /mnt/bak/sda2.img.gz - где bs=16M - размер кэша на винчестере. Побитное копирование раздела с последующей упаковкой, я использую для бэкапа свеже настроенных систем (копирует вместе с файловым мусором, зато надежно).
gunzip -с /mnt/bak/sda2.img.gz | dd of=/dev/sda2 bs=16M - Восстановление из сжатого образа.
dd if=/dev/hda bs=64K | gzip -c | ssh user@hostname "dd of=hda.img.gz bs=64k"
dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k"
RAID
Для начала реализуем RAID 1, то есть дисковую подсистему со 100% избыточностью и удвоенной скоростью чтения, для SOHO лучше не придумаешь.
Установка
Реализовать лучше на этапе установки системы, если система уже функционирует, то вам сюда. Берем два винта, желательно одинаковых, но не критично, важнее на них создать одинаковые разделы. Во время установки системы создаем (внимание!) первичный sda1 раздел ext2 объемом 100Мб (более чем достаточно), далее создаем RAID-раздел для системы 4000Мб обычно достаточно, на оставшемся диске так же создаем RAID-раздел. То же делаем для второго винта (если это Fedora 9, то во нажимая кнопку RAID есть функция клонирования разметки). Получаем два винта с одинаковой разметкой такого вида:
100M 4GB54Gb
sda1 sda1 sda2
sda[-ext2-|----RAID----|----------RAID----------]
sdb1 sdb1 sdb2
sdb[-ext2-|----RAID----|----------RAID----------]
Далее создаем RAID-устртойства: md0 = sda1+sdb1 > RAID1 > ext3 > / (корневая файловая система) и md1 = sda2+sdb2 > RAID1 > ext3 > /mnt/foo Устанавливаем на все это добро нужную нам систему (рекомендую CentOS в минимальной конфигурации без X-ов, нужное потом доставим). После первой загрузки правим grub'a и вобщем все что лежит в /boot, и делаем копию на второй винчестер:
dd if=/dev/sda1 of=/dev/sdb1
Копируем MBR командой:
dd if=/dev/sda of=/dev/sdb bs=512 count=1
Все, получаем безотказную систему.
Тестирование
Проверяем. Не выключая ПК отключаем питание (не дата кабель, возможен вред) sdb. Наблюдаем, все работает как ни в чем не бывало. Перезагружаемся, грузится биос, MBR, /boot, RAID 1 (наполовину умерший), система. В таком режиме система проработать может долго, но сохранность информации уже не гарантируется.
Восстановление
Сакральный смысл восстановления RAID'а заключается в подключении к md0 недостающего sdb1 (раздела равного по размеру sda1). Выключаем ПК (без перезагрузки не определится новый винчестер), подключаем новый винчестер, включаем, создаем нужный раздел как RAID. Запускаем процесс восстановления и наблюдаем (возможно очень долго):
mdadm -a /dev/md0 /dev/sdb1 watch cat /proc/mdstat
Теоретически в процессе восстановления с системой работать можно, но не желательно (тупит жутко). После завершения можно спокойно работать.
Система
Работа с файлами
tar -cjvf /root/etc_`date '+%Y-%m-%d'`.tar.bz2 /etc - (с)Запаковать в (f)tar-архив и (j)сжать bzip2 папку /etc c текущей датой в имени файла, с (v)подробным выводом.
tar -xzvf /home/user/Downloads/centerim-4.22.6.tar.gz -С /opt/ - (x)Распаковать (z)gzip-архив в /opt
cat /etc/c-icap.conf | grep -v "#" | sed -e '/^ *$/d' - Показать файл без комментариев и пустых строк.
chattr +Sai - (S)Добавление атрибутов к файлу, синхронное изменение всех данных на диск, без кэширования; (a)только добавление данных, удаление и переименование запрещено; (i)запрещено удаление, изменение или переименование (immutable);
ls -f1 /var/log/packages/ | wc -l - Вывести количество строк.
diff -y httpd.conf httpd.con.new - Сравнение в две колонки.
diff -u httpd.conf httpd.con.new - Унифицированное cравнение (в один столбец, но читаемо). Рекомендую colordiff.
Управление программами
0-59 20,22 * * 1-5 root bak.sh - Запись в /etc/crontab означает, что bak.sh будет выполняться каждую минуту с 20:00 по 20:59 и с 22:00 по 22:59 каждый день с понедельника по пятницу.
yum install xxx -y - Установка программы из репозитория.
yum list - Вывод всех пакетов (проверка работоспособности репозитория).
yum search foo - Ищет в названии пакета и его описании указанную строку.
yum check-update - Просмотр доступных обновлений.
yum update foo fi - Обновит только пакеты foo и fi.
rpm -iv xxx - Установка из пакета.
yum whatprovides /usr/sbin/epstopdf - поиск навзвания покета, по файлу.
yum localinstall foo - Установка пакета из файла, а не репозитория; зависимости разрешаются из репозитория.
Управление пользователями
adduser -r munin - Добавить системного пользователя.
vipw - редактор блокирует файл /etc/passwd, так, чтобы другие команды не пробовали модифицировать его в то же самое время.
Сети
Уровень стека протоколов Протоколы Заголовок 3
Прикладной DHCP, SSH, SMTP, HTTP, FTP, DNS строка 1, ячейка 3
Транспортный TCP (сегмент), UDP, RTP, SCTP, DCCP строка 2, ячейка 3
Межсетевой (сетевой) Для TCP/IP это IP (IPv6) (вспомогательные протоколы, вроде ICMP(пинги) и IGMP работают поверх IP, но являются частью сетевого уровня; ARP не работает поверх IP) строка 2, ячейка 3
Канальный (уровня доступа) Ethernet(фрейм), Token ring, PPP, IEEE 802.11 Wi-Fi, ISDN строка 2, ячейка 3
Физический Физическая среда и принципы кодирования информации, электричество, радио, лазер строка 2, ячейка 3
Установка
neat-tui - Текстовый мастер установки сети RHEL-like (рекомендую).
system-config-network-tui - Он же.
ethtool ethX - Информация/настройка о сетевой карте (скорость и тип соединения).
ifconfig ethX hw ether xx:xx:xx:xx - Смена мак-адреса сетевой карты (до перезагрузки)
Файлы конфигурации
RedHat и его клоны:
/etc/sysctl.conf - Для маршрутизации пакетов в системе net.ipv4.ip_forward = 1
/etc/sysconfig/networking/devices/ifcfg-eth0 - Файл конфигурации интерфейса (/etc/sysconfig/network-scripts/ifcfg-eth0 - жесткая ссылка на него же)
/etc/resolv.conf - DNS-сервера провайдера (можно также указать в конфиге выше DNS{1,2}=ddress>, он приоритетней).
/etc/network - Прописываем имя машины.
/etc/sysconfig/network-scripts/route-eth0 - Файл статической маршрутизации, с синтаксисом: 192.168.124.0/24 via 192.168.0.220 dev eth0 или:
ADDRESS0=192.168.124.0 NETMASK0=255.255.255.0 GATEWAY0=192.168.0.220
Debian и его клоны:
/etc/hostname - Прописываем имя машины.
/etc/network/interfaces - Файл сетевых настроек
Интерфейс локальный:
auto lo iface lo inet loopback
Сетевая карта со статическим IP:
auto eth0 iface eth0 inet static address 192.168.1.5 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1
Сетевая карта получает IP по dhcp:
auto eth1 iface eth1 inet dhcp
Мониторинг
ifconfig - Вывод всех конфигураций сети.
netstat -nnnl - Выводит список открытых сокетов (портов) в локальной системе.
netstat -ta - Список установленных соединений.
lsof -i -n - Список открытых портов и соединений.
arp - Вывод arp-таблицы (нужно для выяснения физической доступности в сети, или выяснения МАС-адреса соседа). Кошерней ip neigh (или ip n).
tcpdump -vvvnnni eth0 not port ssh and not 3389 and not 80 and not 5191 and not 443 and not 53 and not 2222 and not 5223 and not udp port 5001 - Ищем незнакомый трафик в сети.
ip route add 192.168.124.0/24 via 192.168.0.220 - Добавить маршрут (до перезагрузки).
ip addr add 192.168.0.100/24 dev eth0 - Добавить IP-адрес интерфейсу (до перезагрузки).
tracert -i eth3 ya.ru - Трассировать через определенный интерфейс (для отладки маршрута).
Сетевые сервисы
rdesktop 192.168.0.1 -u admin -p 'pass' -fzPa8 -k ru - Подключение к-RDP серверу со сжатием, кэшированием, на полный экран, с русской раскладкой. Выход из терминала
ssh -L5555:192.168.0.10:80 [email protected] - После установки соединения локальный порт 5555 будет проброшен на 192.168.0.10:80
pdsh -w root@host-0[1-7,10] uptime - Выполнить команду uptime на хостах с 1 по 7 и на 10ом. Предварительно должен быть настроен вход ssh по ключам.
pdcp -w root@host-0[1-7,10],root@otherhost /home/user/.vimrc /root/ - Копировать локальный файл .vimrc в папку /root на удаленных хостах. pdsh должен быть установлен на всех хостах.
Тестирование
Запуск сервера в UDP с выводом раз в секунду, на порту 65005:
iperf -us -i1 -p 65005
Тестирование UDP c длиной 100b с пропускной способностью 20к в течении 180 сек.:
iperf -uc 83.239.146.78 -l100 -b20k -t180
Послать 10 мегабайт, на порт 65005:
iperf -n 10m -p 65005 -c 192.168.0.254
С Вами был Сергей Лазаренко
Отдохнем от работы и просмотрим полезное видео о SEO - Как работают ссылки с блогов:
Add new comment