Russian (Pусский) translation by Anton Lisovsky (you can also view the original English article)
Зачем *NIX и зачем вообще нужно открывать консоль?
Согласно статистике W3Techs, 68% веб-сайтов используют Unix, веб-сайтов операционную систему, которых удалось определить. Это значит, что будучи веб-разработчиком, ваш код скорее всего работает на одном из Linux серверов. И вам не помешает знать, как настраивать и отлаживать ваш код на Unix и Linux системах. Давайте же разберёмся, что вам понадобиться для комфортного использования командной строки.
Основы
Стандартная *NIX команда состоит из трёх частей:
- команда или программа для запуска
- опции для изменения или указания определённого поведения команде
- аргументы или вводимые данные необходимые для запуска команды
К примеру, если вам нужен список файлов в директории /var/www
, воспользуетесь командой ls
с соответствующим аргументом /var/www
. Чтобы увидеть размер файлов в выводе команды, добавьте опцию -s
, в итоге наша команда будет выглядеть следующим образом:
ls -s /var/www
Перенаправление Ввода/Вывода (I/O) и пайплайны (Pipelines)
Большинство *NIX команд для взаимодействия используют текстовый ввод и вывод, посредством перенаправления вывода вы можете добавить результат команды в файл, а также передать вывод одной команды, как ввод другой, используя пайплайны. К примеру, мы можем добавить результат команды ls в текстовый файл:
ls -s /var/www > /var/www/files.txt
Данная команда создаст или перезапишет файл /var/www/files.txt
, после чего содержанием этого файла будет список папок и файлов директории /var/www
. Ниже список стандартных перенаправлений ввода/вывода и пайплайнов:
-
>
Перенаправляет вывод команды в файл на жёстком диске. Если данный файл существует, контент в нём будет удалён и перезаписан. -
>>
Похожее перенаправление, но в данном случая вывод будет добавлен в конец файла, уже существующий в файле контент не удаляется. -
<
Передаём контент файла команде, как ввод. -
|
Передаём вывод одной команды, как ввод другой. -
tee
Записывает вывод команды в файл, а затем передаёт его следующей команде в пайплайне.
Основные команды
Чтобы открыть страницы с описанием команды, используйте man
. Страницы мануала с описанием имеют схожую структуру и могут включать в себя имя, краткое описание, подробное описание и примеры использования. Команда ниже покажет документацию для команды chmod
:
man chmod
Чтобы запустить такие команды, как сохранение конфигурации и перезагрузка процесса, вам нужно выполнить их от имени супер пользователя. Для этого перед командой укажете sudo
:
user@server:/var/www$ chmod 777 log chmod: changing permissions of ‘log’: Operation not permitted user@server:/var/www$ sudo chmod 777 log sudo chmod 777 log
Если вы хотите выполнить несколько команд от имени супер пользователя, используйте команду su
для переключения пользователей.
user@server:/var/www$ su Password: root@server:/var/www#
Обратите внимание: Ради безопасности и для предотвращения случайного выполнения значимых команд, которые могут повлиять на работу системы, не используйте sudo
и su
без веской на то причины.
К более реальным примерам
Основы навигации
Ниже, три основные команды для навигации по файловой системе:
-
pwd
выводит имя текущей директории -
cd
перемещение в директорию -
ls
выводит список контента в директории
Вот пример использования этих команд с итоговым результатом в терминале:
user@server:~$ pwd /home/user user@server:~$ cd /var/www user@server:/var/www$ ls -alF total 16 drwxr-xr-x 5 root root 4096 Jan 22 09:45 ./ drwxr-xr-x 14 root root 4096 Jan 22 09:38 ../ drwxr-xr-x 2 root root 4096 Jan 22 09:45 html/ drwxr-xr-x 3 root root 4096 Jan 22 09:45 log/ drwxrwxrwx 1 user user 442 Mar 24 12:22 testing/
Поиск файлов
Для поиска файлов в иерархии директорий мы можем воспользоваться командой find
. Данная команда очень мощная и может искать не только файлы, но и имена директорий, дату, размер и права доступа.
Найти все директории с именем “logs” в /var/www/
, можно с помощью флага -type
:
find /var/www -type d -name logs
Для поиска PHP файлов в текущей директории, добавьте -name
:
find . -type f -name "*.php"
Найдите файлы с указанным правом доступа, используя опцию -perm
:
find . -type f -perm 0777 -print
Найти все файлы с размером больше 500-от мегабайт:
find / -size +500M
Конечно вы можете комбинировать эти опции для одной команды, и это только основы find
, которая будет незаменимым помощником для поиска нужных файлов. Используйте мануал для получения большей информации.
Управление файлами и папками
Есть пять основных команд для управления папками и файлами в *NIX системах:
-
touch
используется для изменения временной метки уже существующих файлов и директорий, также является самым простым способом создать новый файл. -
mkdir
для создания директорий -
cp
для копирования файлов и директорий -
mv
для перемещения файла или директории -
rm
для удаления файлов и директорий
Следующий пример создаст файл index.html
, скопирует файл в новую директорию /var/www
, и удалит исходник.
root@localserver:~# touch index.html root@localserver:~# mkdir /var/www/newdir root@localserver:~# cp index.html /var/www/newdir/ root@localserver:~# rm index.html
Другая замечательная команда - ln
, которая предназначена для назначения ссылок между файлами. Команда ln
чаще всего используется для создания символической ссылки для виртуального хоста:
sudo ln -s /etc/apache2/sites-available/newvirtualhost.com.conf /etc/apache/sites-enabled/ newvirtualhost.com.conf
Изменение прав доступа
Для изменения владельца файла или группы, воспользуйтесь chown
. Не забудьте дать привилегии владельца пользователю apache, когда создаёте новый виртуальный хост для вашего веб-приложения:
sudo chown -R www-data:www-data /var/www/newvirtualhost.com
Иногда директории кэша или логов в приложении должны быть доступны всем пользователям для записи файлов, с помощью команды chmod
вы можете добавить права доступа 777. Опция -R
предназначена для рекурсивного изменения прав, всех вложенных файлов и папок.
sudo chmod -R 777 /var/www/private/cache
Если вы хотите сделать файл исполняемым, воспользуйтесь chmod
с опцией +x
.
sudo chmod +x /var/www/private/backup.sh
Чтение файлов
Для просмотра файлов в консоли, пригодится команда cat
. Кроме этого cat
, может объединить файлы при указании дополнительных параметров, а также знак звёздочки поможет вам вывести контент всех файлов в определённой директории.
cat /etc/apache2/apache2.conf cat /etc/apache2/apache2.conf /etc/apache2/ports.conf cat /etc/apache2/mods-enabled/*
Но команда cat
показывает вывод в неудобном формате, у вас не будет возможности прокрутки вывода после использования данной команды. Чтобы получить такую возможность, используйте команды more
или less
, по своему принципу они работают вполне одинаково.
less /etc/apache2/apache2.conf cat /etc/apache2/mods-enabled/* | less
Другая полезная команда - tail
, предназначена для вывода последних строк файла. Она отлично подходит для просмотра логов. По умолчанию данная команда выведет последние 10-ять строк, количество строк можно контролировать посредством параметра -n
.
tail /var/log/apache2/error.log tail -n 25 /var/log/apache2/error.log
Вам понадобится более надёжный инструмент для просмотра нескольких файлов с логами и поиска по ним. Для этого нам подойдёт grep
- программа, читающая стандартный ввод, проверяет каждую строку не совпадает-ли она с указанным паттерном, после чего показывает, интересующие нас строки, посредством стандартного вывода. Используя её в комбинации с cat
и пайплайнами, вам не составит труда добиться желаемого результата.
Если вы хотите выбрать необходимые строки при выводе результата в консоль, воспользуйтесь grep
:
grep notice /var/log/apache2/error.log cat /var/log/apache2/*.log | grep "shutting down"
Как вы можете заметить, grep
отлично сочетается с пайплайнами. Последняя команда в примере выше, выведет все строки содержащие слова “shutting down” из файлов с логами.
Редактирование файлов
Ниже будут перечислены три самых популярных текстовых редактора, с которыми можно взаимодействовать в консоли:
- GNU nano, небольшой, легкий в использовании текстовый редактор, отлично подойдёт для решения простых задач
- Vim, редактор для продвинутых пользователей, обладает мощным функционалом, сложен в освоении для новичка
- mcedit, полнофункциональный редактор с поддержкой окон, используется в Midnight Commander, простой в использовании файловый менеджер не установленный по умолчанию на *NIX системах.
Сравните их и выберете редактор, который подходит вам:
nano /var/log/apache2/error.log vim /var/log/apache2/error.log mcedit /var/log/apache2/error.log
Архивы
Иногда есть необходимость создать резервную копию и сжать некоторые данные на сервере.
Чаще всего для подобных задач применяют инструменты для архивации tar
и zip
. Обратите внимание, что zip
обычно не установлен на некоторых серверах по умолчанию.
Для создания архива используйте следующие команды:
tar -zcvf archive-name.tar.gz directory-or-file-name tar -jcvf archive-name.tbz2 directory-or-file-name zip archive-name.zip directory-or-file-name
Если вы хотите увидеть список файлов в архиве, используйте опцию -l
, работает как с tar
, так и с unzip
:
tar -ztvf archive-name.tar.gz tar -jtvf archive-name.tbz2 unzip -l archive-name.zip
Разархивировать интересующие вас файлы, можно следующими командами:
tar -zxvf archive-name.tar.gz tar -jxvf archive-name.tbz2 zip archive-name.zip
Периодическое выполнение задач
Если вы хотите периодически запускать какие-либо скрипты в определённое время, поможет вам в этом программа под названием Cron, для конфигурации данной программы используется файл под названием crontab (cron таблица), в нём можно указать команды, которые будут выполнятся в зависимости от расписания. Команда для работы с cron таблицами также носит название crontab
.
Вызов crontab с опцией -l
покажет вам cron таблицу.
Также у нас в распоряжении имеется опция -u
, применяя её мы можем указать имя определённого crontab-пользователя. Если вы будете запускать задачи для веб-приложения, лучше редактировать их от имени www-data пользователя.
user@server:~$ sudo crontab -lu www-data # m h dom mon dow command */5 * * * * php5 /var/www/yii do/tasks >> /var/www/tasks.log 00 15 * * 1-5 /var/www/backuper.sh
В выводе выше, нам показан пример cron таблицы. Можно заметить, что каждая строчка относится к времени выполнения: минута, час, день месяца, месяц и день недели. В каждом поле может находиться значок звёздочки, являющийся значением для данного поля. Также есть возможность указать множества и временные промежутки, используя запятые и дефисы. Указав после временного промежутка слэш, вы тем самым пропускаете числовые значения в этом промежутке. В данном примере, первая команда будет запускаться каждые пять минут, вторая команда запустится с понедельника по пятницу в 15:00.
Для редактирования этого списка, вместо опции -l
, передайте команде crontab -е
. Файл конфигурации откроется в вашем текстовом редакторе. Используйте опцию -r
для очищения cron списка.
Мониторинг Производительности
Команда top показывает информацию о системе, а также предоставляет мониторинг запущенных процессов в реальном времени. Нажмите Shift-M
для сортировки процессов по потреблению памяти, Shift-P
для сортировки программ в зависимости от нагрузки на процессор.
top - 21:33:02 up 308 days, 21:24, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 501800 total, 471348 used, 30452 free, 49672 buffers KiB Swap: 4194300 total, 56192 used, 4138108 free. 149488 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16269 www-data 20 0 348592 38884 12044 S 0.0 7.7 0:02.42 php5 26533 www-data 20 0 409516 38488 24312 S 0.0 7.7 1:00.04 php5-fpm 1076 mysql 20 0 887824 32748 1616 S 0.0 6.5 276:46.59 mysqld 862 syslog 20 0 256612 31428 368 S 0.0 6.3 32:45.88 rsyslogd 18901 root 20 0 105632 4316 3248 S 0.0 0.9 0:00.04 sshd 25393 www-data 20 0 87356 4312 1564 S 0.0 0.9 4:46.92 nginx 27846 memcache 20 0 328464 3828 252 S 0.0 0.8 1:04.30 memcached
Чтобы узнать размер свободной и используемой системой памяти, запустите команду free
. Добавьте опцию -h
, для вывода полей в удобном формате.
user@server:~$ free -h total used free shared buffers cached Mem: 490M 453M 36M 23M 46M 140M -/+ buffers/cache: 265M 224M Swap: 4.0G 54M 3.9G
Другая полезная команда - df
, показывающая нам информацию о использовании жёсткого диска. Вы можете вызвать её с опцией -a
, тем самым будут показаны все файловые системы на вашем сервере. И не забудьте добавить опцию -h
для вывода удобочитаемого формата.
user@server:~$ df -ah Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 6.3G 13G 34% / udev 235M 4.0K 235M 1% /dev tmpfs 50M 344K 49M 1% /run
История Командной Строки
Вы можете использовать !!
, чтобы повторить предыдущую команду или, если вы забыли sudo
, запустите sudo !!
.
user@server:/var/www$ chmod 777 log chmod: changing permissions of ‘log’: Operation not permitted user@server:/var/www$ sudo !! sudo chmod 777 log
Команда history
покажет вам историю всех, вводимых ранее команд, довольно удобно, на тот случай если вы забыли синтаксис или не хотите печатать большую команду вручную. В комбинации с grep
, tail
и другими командами для фильтрации вывода, вы без труда найдёте интересующую вас строку в списке history.
history | tail history | grep crontab history | egrep -i 'ssh|ftp'
Заключение
Использование консоли не такой сложный процесс, как вы можете подумать. Принципы работы Unix и Linux систем довольно легко понять, благодаря простому дизайну и замечательной документации. Надеюсь эта статья поможет вам почувствовать себя комфортно при работе с командной строкой и вы открыли для себя новые команды, которые пригодятся при создании и поддержке веб-приложений.
Если хотите поделиться своей любимой командой или у вас имеются вопросы, воспользуйтесь комментариями расположенными под этой статьёй.
Для Дальнейшего Чтения
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post