Помощь по командной строке.
Гайд для начинающих 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.
Попробуй все это освоить и запомнить. Пригодится.