Skip to content

Instantly share code, notes, and snippets.

@codedokode
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codedokode/420c8c12a1edae25f0ec to your computer and use it in GitHub Desktop.
Save codedokode/420c8c12a1edae25f0ec to your computer and use it in GitHub Desktop.
Советы по Линукс

Советую Debian 8. Он хорошо тем, что:

  • простой
  • минималистиный: в отличие от той же Убунты туда не понапихано куча лишних вещей
  • распространенный

Естественно, это если ты его будешь ставить в виртуалку. Ставить надо версию с консолью, никаких GUI, иксов, desktop environments устанавливать не нужно.

Можно брать образ netinstall, он весит всего 300 Мб и все остальное сам скачивает из сети (только выставь зеркало которое к тебе ближе, если в России то mirror.yandex.ru подойдет).

Качать надо с официального сайта: https://www.debian.org/CD/netinst/

Если есть возможность, используй torrent для скачивания. Это снижает нагрузку

на сервера проекта, ну и заодно доказывает что торрент не только для пиратства используется (я проверил — сидов и пиров много, скорость скачивания упирается только в ограничения провайдера, на 25 Мбит/с качать где-то минуту-две).

Обрати внимание, что нужно выбрать правильную архитектуру:

  • если ты 32-битный, бери i386
  • если ты 64-битный, у тебя процессор поддерживает аппаратную виртуализацию и она не отключена в БИОСЕ, можешь попробовать amd64 (даже если у тебя интеловский процессор)
  • если ты 64-битный но виртуализация отключена или заблокирована, то i386

Ни в коем случае не бери ia64 — это для Intel Itanium, у тебя не пойдет. И arm64 тоже не то.

Вот официальный большой мануал по установке на русском: https://www.debian.org/releases/stable/installmanual

Алсо, если ты ставишь линукс в виртуалке в Oracle Virtual Box, то наткнешься на проблемку: линукс может лезть в интернет, а ты к нему подсоединиться не можешь. Это по той причине, что Vbox подсоединяет сетевую карту твоей виртуалки к NAT. Чтобы в нее коннектиться, надо будет добавить вторую сетевую карту, выставить ей примерно такие настройки как на пикрелейтед (обрати внимание на слово host-only network).

Ну и потом в самом дебиане перенастроить эту карточку, естественно, сама она себя не настроит. Вот что надо дописать в /etc/network/interfaces:

auto eth1
iface eth1 inet static
        address 192.168.56.2
        netmask 255.255.255.0
        gateway 192.168.56.1
        metric 100

Скриншот настроек VBox

Скриншот VBox

Ну надеюсь ты понимаешь, что тут указан Ip-адрес и шлюз.

После этого, перезапусти сеть через sudo service networking restart

Если все ок, то ты сможешь пинговать виртуалку с хоста через ping 192.168.56.2 .Если не ок — читай записи в /var/log/messages

Возможно, твой фаерволл или антивирус может заблокировать пинг или попытку соединиться с виртуалкой. Придется его перенастроить.

Чтобы обращаться к виртуалке через имя, пропиши его в файл hosts.

Работать через консоль виртуалки неудобно, так что включи ssh и коннекться через программу вроде putty. По ssh можно также передавать файлы (например программой WinSCP) так что все это тебе пригодится.

Проблемы? Смотри логи командой tail -30 /var/log/messages (понядобятся права админа или надо добавить себя в группу adm).

Как в дебиане искать нужную программу? Набери apt-cache search имя

Много результатов? Добавь less: apt-cache search имя | less (для выхода жми q)

Как установить пакет? Очень просто, sudo apt-get install mc если ты хочешь установить mc например.

Чтобы нормально работал графический режим (если вдруг захочешь его поставить) нужно установить в вируталку Virtual Box Extensions через меню вируталбокса + какие-то команды набрать.

Помощь по командной строке.

Гайд для начинающих https://gist.github.com/codedokode/10539568

В консоли работает автодополнение имен файлов и команд по Tab. Пользуйся им.

Справка по команде. Краткую справку можно получить набрав

команда --help

версию можно узнать либо добавив ключ --version либо -v:

php --version

Список установленных модулей: php -m Вывести конфигурацию PHP: php -i

Подробная справка по команде: man ls. Используй стрелки, PgUp/PgDn, / для поиска, q для выхода. Alt + Shift + < и > переходят в начало и конец текста.

Потоки и перенаправления. В мире Линукс у каждой программы обычно есть 3 потока (они имеют номера):

#0 - стандартный ввод — это поток из которого программа читает данные. По умолчанию в него поступает то, что ты набираешь на клавиатуре в консоли. Т.е. по умолчанию программы читают данные с клавиатуры.

#1 — стандартный вывод. В этот поток программа выводит результат работы, по умолчанию он подключен к консоли (т.е. результаты пишутся в консоль). Например, команда ls выводит список файлов в текущем каталоге на стандартный вывод

#2 — поток ошибок. Сюда правильно написанная программа пишет сообщения об ошибках. Для них специально преудсмотрен отдельный поток, но по умолчанию так же как и #1 он подклюен к консоли.

Перенаправления

Эти потоки можно легко перенаправить (для чего они и придуманы). Вот как можно перенаправить стандартный ввод, чтобы команда читала данные не с клавиатуры а из файла:

команда < file.txt

Пайп (вертикальная черта) позволяет перенаправить выход одной программы на вход другой. Программа ls выводит список файлов в каталоге. Программа head -10 читает строки с клавиатуры и выводит только первые 10 из них. Вот, как можно вывести имена первых 10 файлов:

ls | head -10

В линуксе есть и другие команды фильтры, которые можно применять вместе с пайпом. Это sort (сортирует результаты), grep слово (отбирает строки, в которых встречается заданное слово), head -N (выводит первые N строк), tail -N (выводит последние N строк) и другие.

Перенаправить стандартный вывод в файл можно так:

ls > file.txt

В этом случае результат работы ls запишется в файл. При этом поток ошибок останется неперенаправленным и они будут выводиться в консоль — именно для этого эти потоки разделены.

Перенаправить поток ошибок в файл можно так:

команда 2> file.txt

Перенаправить и вывод, и ошибки в файл можно так:

команда 2>&1 > file.txt

Когда вывод перенаправлен в файл, ты не видишь ничего в консоли. Для болрьбы с этим есть команда tee, которая расщепляет поток: одна копия идет в файл. другая выводится в консоль:

команда 2>&1 | tee file.txt

Прогресс

Если установить команду pv то можно выводить шкалу прогресса. Допустим мы подаем огромный файл на вход команды и хотим следить сколько байт уже передано. Команда pv перекачивает данные со своего входа на выход, при этом считая их и выводя полоску прогресса:

cat file.txt | pv | другая команда

Сеть

Скачать файл можно командой wget: wget -O file.txt 'http://exanple.com/download/file' Кавычки нужны.

Можно отправлять POST- и GET-запросы, например, для тестирования твоего приложения, командой curl:

curl -F name=Username -F 'comment=Hello World' 'http://example.com/post/comment'

пейджер

Если команда выводит очень много данных, удобно направить ее вывод в программу-пейджер less. Она позволяет прокручивать результат стрелками, искать по регулярке командой / (n — перейти к следующему резултату). Для выхода жми q, escape не работает. Во как направить вывод в less:

ls | less

Если надо туда же направить и поток ошибок то пиши так:

ls 2>&1 | less

Переменные окружения

Некоторые настройки хранятся в переменных окружения. Например, путь к домашнему каталогу хранится в $HOME и вывести ее можно так:

echo $HOME

Поменять переменную можно так: export VAR=value. Обрати внимание, у каждого процесса свой набор переменных, и они наследуются от родителя при создании процесса так что поменять переменные ты можешь только у программ, которые будут запускаться в этой консоли в дальнейшем, а у уже запущенных не поменяешь. Также, можно поменять переменную только для одной запускаемой команды, так:

VAR=value команда

Пакетный менеджер

Линуксоиды — суровые занятые люди и меньше всего им хочется ради установки программы что-то искать, скачивать, проверять на вирусы, запускать, жать далее, обнаружить что надо снаала поставить NET framework и так далее, а потом отвеать на вопросы типа «Не хотите ли проверить обновления?». Они придумали другой способ: на сервере создается репозиторий пакетов с программами, а пользователь несколькими командами может найти и установить нужный. В Debian используются пакеты формата deb и программа apt-get.

Для начала надо скачать свежий список пакетов:

sudo apt-get update

Эту команду стоит делать если ты давно ее не делал. Теперь список пакетов скачан и можно воспользоваться поиском. попробуем найти Апач:

apt-cache search apache | sort

Заметь, этой команде права рута не нужны. Команда sort сортирует результаты. Среди кучи результатов видим:

apache2 - Apache HTTP Server metapackage

Попробуем его установить. Это делается командой apt-get install (имена пакетов):

sudo apt-get install apache2

Готово! При этом команда install автоматически обновит имеющиеся у тебя программы и библиотеки, если для них вышла более новая версия. Заметь, что ты можешь указать много пакетов сразу:

sudo apt-get install apache2 php5-common php5-curl

С помощью apt-get и заготовленного списка пакетов можно одной командой установить на сервер весь нужный софт. Так-то! Просмотреть установленные пакеты можно командой dpkg-query -l

Все пакеты подписаны цифровой подписью и она проверяется при установке, так что вирусов можно не бояться, если только ты не установил в систему ключи из других источников, в этом случае ты должен доверять автору ключа так как он может установить тебе в систему что угодно и выполнить любой код. По умолчанию установлены только официальные дебиановские ключи.

Пакеты, которые стоит установить сразу:

apache2 apache2-mpm-prefork php5 php5-cli php5-curl php5-dev php5-gd php5-gmp php5-imap php5-intl php5-mcrypt php5-mysqlnd php5-xdebug php5-xsl — думаю понятно что это.

git — система управления версиями, она тебе понадобится чтобы коммитить код на гитхаб. htop (динуксовый цветной диспетчер задач, попробуй его запустить, q = выход) iftop (показывает какая программа куда соединяется и сколько трафика качает) iotop (показывает кто мучает диск) mc (файловый менеджер и редактор mcedit) nano (простой текстовый редактор) sysv-rc-conf (включает и выключает службы в автозапуск)

Чем править конфиги

удобно использовать редактор mcedit, который входит в состав mc. Пиши например sudo mcedit /etc/apache2/httpd.conf и редактируй. Кнопки: F2 — сохранить, F10 — выйти, F7 − искать, Shift + F7 — искать еще, Esc + Tab — автодополнение. Escape как «отмена» работает, но надо жать 2 раза.

Просмотр логов

sudo less /var/log/apache2/error.log sudo tail /var/log/messages

Отслеживать лог в реальном времени (попробуй): sudo tail -f /var/log/error.log

Поиск в логе через grep:

cat /var/log/messages | grep -i word

Для доступа к логам не нужны будут права админа если ты добавишь себя в группу adm.

Управление службами (апач. mysql): sudo service mysql действие

Где действие — это:

start = запустить stop = остановить restart = перезапустить reload = обновить настройки из конфига (если ты его правил например) без остановки работы службы. То есть сайт ни на секунду не перестанет работать (в слуае с restart — перестанет на несколько секунд). Не все службы это умеют, но если умеют то это удобно.

Выбор какие службы будут запускаться при загрузке: sudo sysc-rc-conf, для выхода жми q.

Попробуй все это освоить и запомнить. Пригодится.

Хост - это твой компьютер. Гость — это система в виртуалке.

Вот описание как работает сеть в виртуалбокс:

https://www.virtualbox.org/manual/ch06.html (англ) http://rus-linux.net/MyLDP/vm/VirtualBox-networking.html (перевод)

У виртуалки по умолчанию создается один (тоже виртуальный) сетевой интерфейс, в режиме nat. Все пакеты с него перехватываются сетевой подсистемой VirtualBox на хосте и отправляются в интернет от его имени. А то, что придет в ответ, передается на сетевую карту виртуалки. При этом хост переписывает IP-адреса в пакетах как требуется. То есть VirtualBox работает как роутер для гостя.

Но с использованием NAT извне нельзя никак установить соединение с гостем. Все соединения инициируются только им.

Ты не можешь в таком режиме соединиться с Апачом в госте. Или залогиниться по ssh.

Отключить NAT тоже нельзя так как тогда гость потеряет выход в интернет.

Что делать? Надо добавить гостю вторую сетевую карту, в режиме Host-only networking. В этом режиме на хосте создается виртуальный сетевой интерфейс, и он соединяется в вирутальную локальную сеть с сетевой картой гостя. У этой карты есть IP-адрес, с помощью которого ты можешь соединиться с сервером на госте. Через эту сеть хост и гость могут соединяться друг с другом (но пи этом эта сеть не имеет связи с интернетом потому NAT тоже должен быть включен).

Создать виртуальную сетевую карту мало. Ты еще должен объяснить ОС гостя что ее надо задействовать и пакеты на Ip-адрес твоего компьютера должны идти через нее, а все остальные через NAT. Для этого надо настроить гостевую ОС.

Вот ссылка на мануал: http://eugenioz.blogspot.ru/2011/01/ssh-virtualbox.html

Там как раз создается сначала вторая сетевая карта для гостя, а потом она настраивается в ОС гостя.

Если все верно то у виртуалки будет адрес вроде 192.168.56... по которому ты можешь с ней соединиться с хоста. Ты также можешь прописать имя для этого адреса в hosts, например

192.168.56.XX neko.dev


Добавлю еще комментарий про то как работает NAT. Вот смотри, ты подключен в интернет через провайдера. Вряд ли у тебя есть белый внешний IP, скорее у тебя приватный IP типа 10.x.x.x.

Сеть выглядит так:

(ты 10.x.x.x) <-- локалка провайдера --> (10.y.y.y шлюз с NAT a.b.c.d) <-- интернет

Шлюз, как ты видишь имеет 2 сетевых карты с 2 IP адресами, одна карта в локальной сети с приватным IP, другая в интернете c публичным. Таким образом, вся сеть снаружи видна как 1 узел с 1 IP адресом.

В этом случае твои пакеты идут по локалке до шлюза провайдера, он их перехватывает, заменяет в них обратный IP адрес с твоего на a.b.c.d и отправляет в интернет. А с приходящими пакетами делает обратную операцию.

Извне из интернета ты никак не можешь соединиться с твоим компьютером в локалке так как она не имеет прямого соединения и локальные компьютеры в интернете не видны.

Так вот, между хостом и гостем организован такой же NAT.

(гостевая ос 10.x.x.x.) <-- --> (10.y.y.y Сетевая подсистема VirtualBox) <-- --> (локалка)

И гость для тебя находится за НАТом и не виден так же как ты не виден из интернета.

Потому для тебя и для гостя 10.x.x.x — это разные Ip адреса, соответствующие разным узлам.

Потому и надо настраивать вторую карту которая соединеняет тебя и гостевую систему в мини-локалку из 2 узлов.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment