Мини-шпаргалка по Unix

С  юниксом я до некоторых пор был в достаточно прохладных отношениях — мы встречались довольно редко, каждый раз у него были новые дистрибутивы и формы. То в университете Солярис удивлял своим UI, то на хостинге каком-то надо покопаться через ssh. В какой-то момент я стал пристальней посматривать за его возможностями, удивляясь популярности. Наконец я поставил все основные дистрибутивы на виртуальные машины. Ленивый Slackware сопротивлялся больше всех. На этом казалось можно было бы и поставить точку в нашем романе. Но теперь я работаю на маке и приходится разбираться основательней. Основное преимущество *никсов это конечно консоль и гибкая обработка файлов и текста из неё.

Итак, есть много основанных на unix систем — Solaris, MacOSX, FreeBSD и в частности Linux, у которого основные дистрибутивы: Debian — Ubuntu, Fedora — Red Hat, Slackware — Suse, Gentoo, Mandriva

Первое с чем столкнётся пользователь терминала это его интерфейс, hotkeys для быстрой работы

Tab Автодополнение пути (для папок и файлов) при навигации
Предыдущая комманда
CtrlC Убить исполняемую программу (Cancel)
CtrlZ Переключить вид из программы. Комманды fg, jobs, bg помогают управлять контекстом
Q Выход из некоторых программ (как например man — помощи)

Навигация

Теперь основная часть — ходить по файловой системе, будь то локальной или удалённой.

ls список файлов и папок
cd перейти в папку
pwd узнать в какой папке я нахожусь
tail быстрый просмотр конца файла (полезно для логов)
cat быстрый просмотр содержимого файла
tree -d -L 2 двух уровневое дерево папок
find . -name *txt поиск файла по имени
grep «needle» file.txt поиск по паттерну
whoami узнать какой я пользователь
uname -a узнать что за ядро (и может дистрибутив)

Файловая структура

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

FSSTND Стандарт Suse 11 Mac OS 10.7 Описание
boot mach_kernel Файлы загрузчика. Lilo и образ ядра
tmp private/tmp Временные фейлы для бута. Остальным — в /var/tmp
sbin Системные комманды нужные при буте
bin Пользовательские комманды нужные при буте
proc Виртуальная папка настроек и процессов ядра
dev Подключённые устройства
mnt Volumes Доступные через файловую систему устройства
lib Общедоступные библиотеки root-уровня
etc private/etc Конфигурационные файлы, зависящие от машины
root private/var/root Домашняя папка главного пользователя
home Домашние папки остальных пользователей, в том числе ftp, httpd, samba-сервисов
usr Cтатичные файлы программ, библиотек, игр, документации, утилит не используемых при загрузке
var private/var Часто меняющиеся файлы — почтовые сообщения, логи, временные файлы
cdrom
opt +
image
lost+found
media
selinux
srv Папка для апача, корень документов вместо htdocs
net маунт для NFS дисков
private сюда сгруппированы разные папки для ограничения доступа
cores место для сохранения дампов памяти при падении.. можно почистить при недостатке места
Applications Все установленные пользователем приложения
Developer
Library Общедоступные файлы (например шрифты) межпрограммного уровя
Network
System
Users домашние папки настоящих пользователей, расширение home

Комбинирование

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

| труба — передача данных от одной комманды в другую, например ls -F | grep /
; последовательный запуск комманд, например date;cal
> перенаправление стандартного вывода в файл с перезаписью, например ls / -F > list.txt
>> перенаправление вывода в файл с добавлением в конец

Обработка файлов

mv переименовывание
rm удаление
rm -rf рекурсивное удаление
cat объединить файлы и выдать в поток
paste объекдинить строки файла(-ов)
ln ссылка на файл или папку
split бинарное разделение файла
join построчно объединяет два файла по общему слову
cut построчно (и/или) поколоночное вырезание текста из файла как из матрицы символов
cat последовательное объединение двух файлов и вывод в терминал (или файл)
sort отсортировать строчки по алфавиту
uniq оставить уникальные строчки

Установка программ

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

Дистрибутив Установщик пакетов
Gentoo emerge
Debian apt-get update
apt-get install …
dpkg —install
Fedora rpm -ivh …
yum -y install …
Гляньте также на возможные репозитории
Mandriva urpm
Slackware yast, zypper
gzip, lzma

Кроме системных общих установщиков, есть и специфичные под конкретные нужды установщики

  • port install mongodb —  Установщик macports
  • pear install phpunit/PHPUnit
  • pecl install mongo
  • gem

Текстовые редакторы

Vi Vim Nano Gedit Mate Pico  Emacs
Ubuntu  + +  +  —
Mac OS Lion  + +  —  +  +  +
Debian 5  +  +  +  —  +  —
Suse 11  +  —  —  —  —  —

vi readme.txt
i — режим редактирования
esc — выход в общий режим
ZZ — сохранить и выйти
» — режим консоли
!q — выход без сохранения
wq — выход с записью

Архиваторы

 gunzip распаковать .gz
 bunzip2 распаковать .bz2
 tar -jxvf распаковать .tar

Процессы и диагностика

top запущенные процессы. См. также htop, pstree
netstat открытые соединения
например открытые порты в линуксе: netstat -atp | grep -i «listen» или netstat -tupl
на маке: lsof -n -i4TCP | grep LISTEN 
lsof открытые файлы (например открытые порты в маке: sudo lsof -i -P|grep -i «listen»)
killall убить процесс по имени. Иногда приходится убивать точечно (например подвисший mysql) по PID:
kill -9 1566
whereis подсказка где находятся файлы процесса
df -h отчёт о свободной HDD-памяти (в читаемой форме). Что-бы найти большие файлы на сервере:
find . -type f -size +50000k -exec ls -lh {} ; | awk ‘{ print $9 «: » $5 }’ 
w список пользователей в данный момент
opensnoop слежка за доступом к файловым указателям

Работа с серверами

Практически все постоянно работающие программы — демоны находятся в /etc/init.d/ и имеют комманды start, stop, restart. Необходимы права рута для их управления. В некоторых случаях (Fedora) может прийдётся использовать /sbin/service для доступа к ним

ssh Удалённое соединение
scp Безопасное сетевое копирование через SSH с одного сервера на другой. Флаг -r делает рекурсивное копирование папок. Например:
scp -r root@example.com:/srv/htdocs/ /home/html_sources/
ab (Apache Bench) — нагрузочное тестирование (например с параметрами -r -c 100 -n 1000)
nc (netcat) — прямое сокет-соединение
rsync Синхронизация файловrsync -av -e ssh --progress /local/source [email protected]:remote/target
Apache

На маке апач2 встроен (включается в настройках sharing) и в нём имеет смысл включить .htaccess (см. директиву AllowOverride)

Linux Mac OSX
Запуск /etc/init.d/httpd restart/etc/init.d/apache2 restart /etc/apache2/
/usr/sbin/apachectl restart
/private/etc/apache2/httpd.conf/private/var/log/httpd/access_log
 Логи /private/var/log/apache2/access_log
/private/var/log/httpd/access_log
PHP
Suse 11 Mac OSX
/etc/php5/apache2/php.ini
/usr/share/php5/
/usr/lib64/php5/
/private/etc/php.ini
/usr/local/php5/lib/php/extensions/
MySQL

Настройки MySQL по умолчанию используются зашитые (их можно спросить у mysqladmin посмотреть), для перезаписи на свои, надо в /etc положить my.cnf файлик (образец есть в папке support-files). Самые полезные утилиты в bin папке это mysql (прямой консольный доступ к серверу) и mysqldump (для миграции больших баз).

Если вы сидите на маке, но хочется через виртуалку использовать sqlyog, можно расшарить соединение..

CREATE USER 'your_user_id'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL ON your_database_name.* TO your_user_id@'%' IDENTIFIED BY 'your_password';

При быстрой работе с самим сервером наиболее востребованы комманды

SHOW PROCESSLIST;
SHOW DATABASES;
CHECK TABLE;
REPAIR TABLE;

Управление демоном

Linux Mac OSX
/etc/init.d/mysql restart /usr/local/mysql/bin/mysqld_safe
/usr/local/mysql/bin/mysqladmin shutdown