С юниксом я до некоторых пор был в достаточно прохладных отношениях — мы встречались довольно редко, каждый раз у него были новые дистрибутивы и формы. То в университете Солярис удивлял своим 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 |