---
title: Мини-шпаргалка по Unix
date: 2011-09-11T10:00
tags: [ai, go, mysql, php, server]
---

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

Итак, есть [много основанных на unix](http://bhami.com/rosetta.html) систем - Solaris, MacOSX, FreeBSD и в частности Linux, у которого основные дистрибутивы: Debian - Ubuntu, Fedora - Red Hat, Slackware - Suse, Gentoo, Mandriva


![](../img/Pasted%20image%2020241020175519.png)

![](../img/Pasted%20image%2020241020175524.png)

![](../img/Pasted%20image%2020241020175529.png)

![](../img/Pasted%20image%2020241020175534.png)

![](../img/Pasted%20image%2020241020175539.png)

Первое с чем столкнётся пользователь терминала это его интерфейс, 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 ...|Гляньте также на [возможные репозитории](http://rpmfind.net/linux/RPM/index.html)|
|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](http://ru.wikipedia.org/wiki/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|

См. также

- [Unix Toolbox](http://cb.vu/unixtoolbox.xhtml)
- [Работа с ключами](http://kimmo.suominen.com/docs/ssh/)

## Related

- [Crontab](/ru/blog/tech/server/vagrant/)
- [Crontab](/ru/blog/tech/server/crontab/)
- [Аутентификация с ID-card](/ru/blog/tech/server/autentifikatsiya-s-id-card/)
