Permalink
Find file
28d53e8 Jul 28, 2016
@codedokode @w3lifer
executable file 412 lines (246 sloc) 37.4 KB

Как начать пользоваться командной строкой

Командная строка - это способ взаимодействия с компьютером, когда ты печатаешь команды, а он их исполняет. Она может использоваться для запуска программ (например на языке PHP) и для настройки некоторых программ.

Для начала, надо знать что командная строка реализована немного по-разному в разных ОС: в линуксе и маке один вариант, в windows другой. На андроиде и iOS тоже есть линуксоподобная командная строка, но чтобы в нее попасть, тебе надо установить какую-нибудь программу-терминал.

Краткий мануал чайника по командной строке:

Как попасть в командную строку?

  • Windows XP: Пуск — Выполнить — набрать cmd — нажать [enter]
  • Windows7: Пуск — набрать cmd - нажать [enter]
  • MacOS: Запустить приложение Терминал (его можно найти поиском в той штуке которая справа вверху экрана)
  • Ubuntu: Запустить приложение Терминал или нажать Alt + Ctrl + F1 (вернуться назад в графический режим - Alt + Ctrl + F7)
  • Другие дистрибутивы Linux: если ты линуксоид, ты и так знаешь

Клавиши, работающие во всех операционных системах

↑,↓ — стрелки вверх и вниз в командной строке позволяют смотреть предыдущие введенные команды, чтобы 2 раза не набирать. В Windows при закрытии окошка консоли вся история теряется, в других ОС — сохраняется.

[tab] — автодополняет имена файлов и команды. Если в текущем каталоге есть файл file.txt, ты наберешь fi и нажмешь [tab] то он автодополнит имя файла (или предложит варианты, если таких файлов несколько).

[ctrl+c] — прерывает выполнение команды, например, если она долго тупит

Важно: клавиша Esc, как и многие привычные клавиши, не работает в командной строке. Клавиши Ctrl + C, V, X обычно не работают как «копировать/вырезать/вставить» (иногда для вставки можно использовать Shift + Ins). Клавиша Ctrl + Q не работает как «выход».

Особенности линукса и мака

В линуксе и маке, [ctrl+l] очищает экран, [ctrl+k] и [ctrl+u] удаляют все перед или после курсора, [ctrl+w] удаляет слово перед курсором, [ctrl+r] делает поиск по истории команд (для отмены поиска нажми [ctrl+c], escape в командной строке не работает, для завершения поиска нажми стрелку вправо/влево), [ctrl+d] завершает работу и закрывает консоль.

Еще в линуксе и маке иногда не работают Home и End, используй [ctrl+a], чтобы перейти в начало строки и [ctrl+e], чтобы в конец. [alt + b] (back) и [alt + f] (forward) двигают курсор на 1 слово назад/вперед.

В линуксовой и маковской файловой системе нет букв дисков. Пути к файлам там начинаются из единого корня, и используют прямой слеш (например /home/ivan/file.txt), а дополнительные диски (например USB-носители) монтируются в одну из папок внутри файловой системы (например /mnt/flash). В линуксе регистр букв в имени файла имеет значение.

Особенности Windows

По умолчанию в Windows в консоли очень маленький и нечитаемый шрифт. Нажми правой кнопкой мыши на заголовок, зайди в настройки и поставь нормальный размер шрифта.

Пути к файлу в Windows используют бекслеш (например d:\tmp\file.txt), а регистр букв в них не имеет значения.

Буфер обмена

В командной строке обычно не работает ctrl+v,c,x для вставки, копирования и вырезания текста. Иногда (зависит от настроек системы) вставить текст можно через [shift+ins], иногда правой кнопкой мыши. Погугли, как это делается в твоей ОС.

Скопировать текст обычно можно, выделив мышью (в Windows надо разрешить выделение текста, нажав правой кнопкой на заголовок, зайдя в настройки окна, и также нажать Enter после выделения).

Текущий каталог

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

Какой каталог текущий, в Windows написано в подсказке, а в linux можно узнать командой pwd (print working directory)

Чтобы перейти в другой каталог, в линуксе используют команду cd:

cd /  — перейти в корневой каталог (в линукс нет букв дисков, и корневой каталог один на всю систему)
cd /etc/apache — перейти в каталог /etc/apache
cd files — переходит в каталог files внутри текущего
cd .. — переходит в родительский каталог
cd ../.. — переходит на 2 уровня выше
cd ~ — перейти в свой домашний каталог (/home/anon например)
cd ~/test — перейти в /home/anon/test

В Windows, сначала надо перейти на нужный диск командой c:, d:, e: и так далее. Потом использовать cd или chdir:

d:   - перейти на диск d:
cd \ — перейти в корневой каталог
cd \windows\system32
cd ..
cd ..\..

Обрати внимание, windows и linux используют разные виды слешей. Обрати внимание, .. обозначает «родительский каталог». Обрати внимание, только в линукс и мак ~ обозначает «домашний каталог» (это /home/username или /Users/username). . (одна точка) обозначает текущий каталог и cd . никуда не перейдет. / (линукс) или \ (Windows) обозначает корневой каталог.

В Windows 7 и выше можно открыть окно консоли с заданной текущей папкой. Есть 2 способа, как это сделать:

  1. зажав shift, щелкнуть правой кнопкой по пустому месту в открытом окне папки, из появившегося меню выбрать пункт «command line here» («открыть командную строку»)
  2. поставить курсор в адресную строку в окне папки, ввести cmd и нажать Enter

Если тебе часто в windows приходится открывать консоль в какой-то папке (например папке с твоими программами), ты можешь создать на рабочем столе ярлык (правой кнопкой на рабочем столе → создать ярлык → ввести cmd, нажать "Далее" → ввести название, нажать "Готово" → зайти в свойства ярлыка → указать рабочую папку, нажать "ОК"). При запуске ярлыка будет открываться командная строка с выбранной текущей папкой.

В линуксе/маке, чтобы быстро перейти в нужную папку, можно набрать cd и перетащить в консоль иконку папки - должен вставиться полный путь к ней. Не гарантирую что это работает во всех дистрибутивах линукса, на маке работает.

Очистка экрана

В linux — команда clear или клавиша [ctrl+L], в windows — команда cls (clear screen).

Список файлов

Посмотреть, какие файлы есть в текущем каталоге, можно командой dir в Windows и командой ls в линуксе (ls -a — показывает все файлы, включая скрытые, ls -l — показывает не только имена, но и размер, дату создания файла, права на него).

Посмотреть права на файл в Линукс можно либо командой ls -l, либо stat file.txt

Команды и оболочка

Оболочка — это cmd.exe в Windows и bash в линукс, это та программа, которая собственно мигает курсором и выполняет твои команды. Ты набираешь команды, а она их выполняет. Команда обычно состоит из имени команды, и, иногда, дополнительных параметров, отделенных пробелом, вроде:

ls — показать список файлов в линукс
ls -l — показать файлы с подробностями
dir — показать список файлов в windows с подробностями
dir /b — показать только имена файлов, без подробностей

Подсказка

Почти у любой команды есть подсказки. Чтобы их увидеть, добавь к имени команды параметр (--help или /?):

В линукс: ls --help — выведет справку по команде ls

В линукс: man bash — выведет подробную длинную справку по команде bash (для выхода жми q, для прокрутки используй стрелки и PgUp/PgDn)

В Windows: dir /? — выведет справку по команде dir

В Windows: help выведет подсказку по основным командам

Виды команд

Команды бывают внутренние (это маленький список команд, встроенных в оболочку). Встроенные команды — это, например, cd в линукс или exit в Windows. Их мало.

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

В линуксе: echo $PATH

В windows: echo %PATH%

В linux PATH — это папки /bin, /usr/bin, /usr/local/bin, /sbin, /usr/sbin, именно в них в Линуксе хранятся почти все программы. В текущем каталоге программы не ищутся, если это не указать явно, набрав ./command.

В Windows PATH — это всякие системные папки вроде c:\windows, c:\windows\system32 и так далее + текущий каталог, в котором ты находишься. Заметь, что папки вроде c:\program files\autocad в PATH не добавлены и в Windows таким образом, из командной строки обычные программы, установленные в Program Files, не запустить. Только то, что положено в системные папки.

Таким образом: если ты под линуксом, и ты набираешь команду php, то скорее всего файл php лежит в одной из *bin папок и эта команда запустит php. Если ты под Windows установил php допустим в c:\php, и не прописал этот путь в PATH, то набрав php, оболочка не найдет файл php.exe и ничего не запустит. И ты скажешь «что за кривой мануал, ничего не работает».

Печалька.

Что же делать? Есть 2 варианта:

  1. добавить папку с php в PATH через мой компьютер — свойства и перезалогиниться в систему
  2. писать вместо php полный путь c:\php\php.exe

Продолжаем. Допустим, ты хочешь запустить в командной строке файл my.php , который находится в текущем каталоге:

Линукс: php my.php
Windows: c:\php\php.exe my.php

Допустим, ты хочешь запустить php-файл не из текущего каталога. Тогда надо написать путь к нему:

Линукс: php /some/dir/my.php
Windows: c:\php\php.exe d:\files\my.php

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

Больше команд — linux

Попрактиковаться в линукс в командной строке можно на таких командах:

  • Создать текстовый файл: cat > file.txt [enter] ввести текст [enter][ctrl+d] — и файл создан
  • Создать текстовый файл содержащий данную строку: echo Hello World > file.txt
  • Просмотреть текстовый файл: cat file.txt
  • Просмотреть огромный текстовый файл, который не влезает на экран: cat file.txt | less или less file.txt. В просмотрщике работают стрелки и q для выхода (escape не работает).
  • Удалить файл: rm file.txt
  • Скопировать файл: cp file.txt copy.txt
  • Переместить/переименовать файл: mv file.txt copy.txt
  • Скопировать в другую папку: cp file.txt /some/other/directory
  • Запустить команду и сохранить ее вывод в файл, не выводя на экран: ls -la > file.txt (эта команда выведет список файлов, но не на экран, а сохранит в файл. Бывает иногда полезно).
  • Запустить команду, вывести результат на экран и сохранить в файл: ls | tee -a file.txt
  • Вывести файл, но не весь, а только первые 10 строк: cat file.txt | head -10
  • Вывести последние 10 строк файла: cat file.txt | tail -10
  • Следить за обновлением файлов и выводить в консоль новые строки, которые в них дописывают: tail -f file1.txt file2.txt (удобно так мониторить логи)
  • Вывести только строки файла, содержащие слово «dog»: cat file.txt | grep -i dog (-i значит игнорировать регистр букв)
  • Найти файлы, в имени которых есть «dog», в каталоге /tmp: find /tmp -iname '*dog*'
  • Узнать текущее время: date
  • Создать папку: mkdir folder
  • Удалить папку: rm -r folder
  • Померять, сколько времени выполнялась команда: time [команда]
  • Узнать свой id пользователя: id
  • Показать список запущенных процессов: ps -lax
  • Показать что-то вроде диспетчера задач: top (для выхода q)
  • Запустить редактор, из которого хрен выйдешь, так как никакие привычные кнопки не работают: vi (попробуй :q! если все-таки в него попал)
  • Запустить нормальный редактор файла: nano file.txt

Подробнее о работе команд можно узнать с помощью параметра --help, дописанного после команды.

Больше команд - Windows

Попрактиковаться в командной строке в Windows можно так:

  • help — выводит список полезных команд
  • dir — выводит файлы в каталоге
  • Создать текстовый файл: copy con file.txt[enter]ввести текст[enter][ctrl+z][enter] — файл создан
  • Просмотреть текстовый файл: type file.txt
  • Просмотреть огромный текстовый файл: type file.txt | more (enter — прокрутка, q — выход)
  • Удалить файл: del file.txt
  • Скопировать файл: copy /b file.txt copy.txt
  • Переименовать файл: ren file.txt copy.txt
  • Запустить команду и сохранить вывод в файл: dir /? > file.txt
  • Создать текстовый файл с одной строкой текста: echo lalala lololo > file.txt
  • Дописать строчку в конец файла: echo boom >> file.txt
  • Создать папку: mkdir folder
  • Удалить папку: rmdir folder
  • Узнать текущее время: time и date (ctrl+с для выхода)

Подробнее о работе команд можно узнать с помощью параметра /?, дописанного после команды.

Команды для работы с сетью Интернет

В линукс: показать информацию о настройке сети: ifconfig (или /sbin/ifconfig если у тебя в PATH нет /sbin)

В Windows показать информацию о сети: ipconfig

Пропинговать (проверить связь) с сервером: ping google.com

Узнать IP по имени домена: nslookup yandex.ru

Показать список открытых с компьютера сетевых соединений: netstat -an (в подсказке по команде указаны также параметры, с помощью которых, например, можно вывести какая программа установила это соединение).

Проверить путь до какого-то сервера или узла сети:

  • в Windows: tracert google.com
  • в linux: traceroute google.com (не работает? пиши /usr/sbin/traceroute или пропиши уже себе sbin в PATH)

Больше информации

Используй ключи --help и /?

Гугли мануал по командной строке windows/linux в интернете.

Продвинутые возможности командной строки линукса

Этот раздел читать необязательно, но если ты хочешь знать больше, то пожалуйста.

  • версию php можно узнать либо добавив ключ --version, либо -v: php --version
  • список установленных модулей: php -m
  • вывести конфигурацию (список текущих настроек) PHP: php -i

Потоки и перенаправления.

В мире Линукс (да и в Windows тоже) у каждой программы обычно есть 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

Команда tee по умолчанию при запуске очищает файл, если там что-то было, можно добавить параметр -a, чтобы она этого не делала, а дописывала строки в конец файла.

Программы-фильтры

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

  • grep, egrep - отбирает только строки, соответствующие (или не соответствующие) регулярному
  • sort - сортирует поданные на вход строки
  • cat -n - нумерует поданные на вход строки
  • head, tail - берут первые или последние строки
  • tac - читает строки с входа, переворачивает их и выдает в обратном порядке
  • tr - заменяет указанные символы
  • sed - позволяет делать более сложные замены, например sed -rn 's!value=(\d+)!\1\n!gp' найдет во входном тексте строки вида value=123, выделит из них числа и выведет их каждое на своей строке
  • gzip/gunzip - архивируют/разархивируют данные
  • wc - считает число строк, слов и символов во входном файле
  • cut - разбивает каждую строку на куски по символу-разделителю и вырезает указанные куски

Подробнее:

Сравнение файлов

Команда diff file1 file2 сравнивает 2 файла и выдает список различий в них. Она также умеет сравнивать папки с вложенными в них файлами рекурсивно.

Прогресс

Если установить команду 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'

Архивация

С помощью программы gzip/gunzip можно сжимать файлы. По умолчанию она берет данные, поступающие на стандартный вход, сжимает и выдает на выход. Степень сжатия задается параметрами от -1 (минимальная) до -9 (максимальная).

  • сжать файл на диске: cat file.txt | gzip -9 > file.txt.gz
  • разжать файл и вывести на экран: cat file.txt.gz | gunzip
  • выполнить команду, сжать и сохранить в файл ее результат: команда | gzip -9 > file.txt.gz

Пейджер

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

ls | less

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

ls 2>&1 | less

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

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

echo $HOME

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

VAR=value команда, например SOME_VAR=1 OTHER_VAR=2 php file.php

Пакетный менеджер в Дебиан/Убунту

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

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

Удобно использовать редактор nano, который часто предустановлен в линуксе. Горячие клавиши в нем подписаны внизу экрана.

Или же 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.