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

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

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

Debian 5 / Linux 2.6.26 Fedora 2.6.35 Slackware 2.6.33 Ubuntu 11.10 / Linux 3.0 Mandriva / Linux 2.6.38

Первое с чем столкнётся пользователь терминала это его интерфейс, hotkeys для быстрой работы
Tab Автодополнение пути (для папок и файлов) при навигации
Предыдущая комманда
CtrlC Убить исполняемую программу (Cancel)
CtrlZ Временно выйти из программы. Комманда fg восстанавливает работу.
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  запущенные процессы  
netstat открытые соединения (например открытые порты в линуксе: netstat -atp | grep -i "listen" или netstat -tupl)
lsof открытые файлы (например открытые порты в маке: sudo lsof -i -P|grep -i "listen")
killall убить процесс по имени
whereis подсказка где находятся файлы процесса
df -h отчёт о свободной памяти (в читаемой форме)
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) - прямое сокет-соединение
Apache

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

  Linux Mac OSX
Запуск  /etc/init.d/httpd restart/etc/init.d/apache2 restart  /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

См. также

RSS