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