Мини-шпаргалка по 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 user@example.com: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 |
См. также