Итак, почему * NIX и почему вам нужно перейти на консоль?
Согласно статистике W3Techs , Unix используется 68% всех сайтов, операционную систему которых они знают. Это означает, что если вы веб-разработчик, ваш код, скорее всего, работает на сервере Linux. И, по крайней мере, вам нужно знать, как настроить и отладить ваш код в системах Unix и Linux. Давайте выясним, что вам нужно знать, чтобы чувствовать себя комфортно в командной строке.
Основы
Основная команда * NIX состоит из трех компонентов:
- команда или программа для запуска
- параметры для изменения или определения поведения команды
- аргументы или входные данные, необходимые для запуска команды
Например, если вам нужно получить список файлов в каталоге /var/www
, вам нужно запустить команду ls
с аргументом /var/www
. Чтобы добавить размер файла в вывод, вам нужно добавить опцию -s
, и последняя команда будет выглядеть так:
1
|
ls -s /var/www
|
Перенаправление ввода / вывода и конвейеры
Многие команды * NIX используют ввод и вывод текста, с которыми вы можете работать, и отличительной особенностью этого является то, что вы можете отправлять результаты вывода команды в файл с помощью перенаправления или даже передавать выходные данные одной команды на вход другая команда, использующая конвейеры. Например, мы можем вывести команду из предыдущего примера в файл:
1
|
ls -s /var/www > /var/www/files.txt
|
Эта команда создаст или сотрет файл /var/www/files.txt
и выведет список файлов в каталоге /var/www
. Вот список стандартных перенаправлений ввода / вывода и конвейеров:
-
>
Перенаправить вывод команды в файл на диске. Файл будет удален и перезаписан. -
>>
Тот же редирект, но добавление выходного файла. -
<
Получить ввод для команды из файла. -
|
Передать вывод одной команды на вход другой команды. -
tee
оба перенаправляют вывод в файл и передают его следующей команде в конвейере.
Основные команды
Чтобы получить справочные страницы для команды, запустите man
. Страницы руководства имеют общий макет и могут включать имя, синопсис, описание и примеры использования. Это покажет документацию для команды chmod
:
1
|
man chmod
|
Для выполнения некоторых команд, таких как сохранение конфигураций или перезагрузка процессов, вам нужно запускать их от имени суперпользователя. Для этого вам нужно добавить sudo
к вашей команде:
1
2
3
4
|
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
или переключить команду пользователя.
1
2
3
|
user@server:/var/www$ su
Password:
root@server:/var/www#
|
Примечание. Чтобы сохранить уровень безопасности и избежать случайного выполнения нежелательных команд, не используйте sudo
и su
без какой-либо цели.
В реальный мир
Базовая навигация
В дереве файлов есть три основные команды для навигации:
-
pwd
для печати названия текущего рабочего каталога -
cd
чтобы изменить каталог -
ls
для просмотра содержимого каталога
Вот пример использования этих команд с выводом терминала:
01
02
03
04
05
06
07
08
09
10
|
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
:
1
|
find /var/www -type d -name logs
|
Для поиска файлов PHP в текущем каталоге добавьте опцию -name
:
1
|
find .
|
Найдите файлы с определенными разрешениями, используя опцию -perm
:
1
|
find .
|
Найдите все файлы размером более 500 МБ:
1
|
find / -size +500M
|
Конечно, вы можете объединить все эти опции в одной команде, и это только основы команды find
, которая является очень мощным инструментом для поиска файлов. Используйте справочные страницы, чтобы получить больше информации.
Управление файлами и папками
В системе * NIX есть пять основных команд для управления файлами и папками:
-
touch
используется для изменения временных меток существующих файлов и каталогов, но также это самый простой способ создания нового файла -
mkdir
сделать каталоги -
cp
копировать файлы и каталоги -
mv
для перемещения или переименования файлов и каталогов -
rm
удалять файлы и папки
В следующем примере будет создан файл index.html
, скопируйте этот файл в новый каталог в /var/www
и удалите исходный файл.
1
2
3
4
|
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
часто используется для создания символической ссылки для включения виртуального хоста:
1
|
sudo ln -s /etc/apache2/sites-available/newvirtualhost.com.conf /etc/apache/sites-enabled/ newvirtualhost.com.conf
|
Изменить права доступа
Чтобы изменить владельца файла и группу, используйте chown
. Не забудьте предоставить право собственности пользователю apache при создании нового виртуального хоста вашего веб-приложения:
1
|
sudo chown -R www-data:www-data /var/www/newvirtualhost.com
|
Иногда каталоги кэша или журнала вашего приложения должны быть доступны для записи всем пользователям, поэтому вам нужно изменить режим доступа на 777 с помощью команды chmod
. Добавьте параметр -R
чтобы добавить разрешение для всех вложенных файлов и папок.
1
|
sudo chmod -R 777 /var/www/private/cache
|
Если вы просто хотите сделать файл исполняемым, используйте chmod
с опцией +x
.
1
|
sudo chmod +x /var/www/private/backup.sh
|
Чтение файлов
Для просмотра файлов в консоли вы можете использовать команду cat
. С помощью cat
вы можете объединять содержимое файлов, используя дополнительные параметры, а также можете использовать маску в именах файлов.
1
2
3
|
cat /etc/apache2/apache2.conf
cat /etc/apache2/apache2.conf /etc/apache2/ports.conf
cat /etc/apache2/mods-enabled/*
|
Но команда cat
очень быстро запутает вас, потому что она показывает вывод в необработанном формате без подкачки страниц, поэтому неудобно использовать с выводом журнала. Чтобы получить фильтр для постраничного просмотра текста по одному экрану за раз, вы должны использовать more
или less
команды, которые являются довольно много.
1
2
|
less /etc/apache2/apache2.conf
cat /etc/apache2/mods-enabled/* |
|
Еще одна полезная команда — это tail
, который создается для вывода последней части файлов. Эта команда идеально подходит для просмотра истории журналов. По умолчанию эта команда tail выводит последние 10 строк, и вы можете изменить это число с помощью параметра -n
.
1
2
|
tail /var/log/apache2/error.log
tail -n 25 /var/log/apache2/error.log
|
Но если у вас есть, например, куча файлов журналов, вам нужно что-то более мощное для правильного поиска. Что-то вроде grep
— программа, которая читает из стандартного ввода, проверяет каждую строку на соответствие шаблону и записывает на стандартный вывод строки, соответствующие этому шаблону. Используя его в сочетании с cat
и pipelines, вы получите то, что хотите.
Если вы хотите фильтровать текстовые строки вывода, вы можете использовать команду grep
:
1
2
|
grep notice /var/log/apache2/error.log
cat /var/log/apache2/*.log |
|
Как видите, grep
хорош для использования в конвейерах. В этом примере последняя команда выведет все строки, содержащие строку «завершение работы» из лог-файлов.
Редактирование файлов
Если вы хотите редактировать текстовые файлы в режиме консоли, вы можете использовать один из трех самых популярных текстовых редакторов:
- GNU nano , небольшой и удобный текстовый редактор по умолчанию, который является идеальным выбором для основных задач
- Vim , улучшенный текстовый редактор для программистов, самый мощный, но сложный для начинающих
- mcedit , полнофункциональный оконный редактор от Midnight Commander, который прост в использовании, но не устанавливается по умолчанию в системах * NIX
Сравните их и сделайте свой выбор:
1
2
3
|
nano /var/log/apache2/error.log
vim /var/log/apache2/error.log
mcedit /var/log/apache2/error.log
|
Архивирование
Иногда вам нужно сделать резервную копию или сжать некоторые данные на вашем сервере.
Наиболее распространенными утилитами архивирования являются tar
и zip
. Обратите внимание, что команда zip
может быть не установлена на вашем сервере по умолчанию.
Вы можете создать архив с помощью следующих команд:
1
2
3
|
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
:
1
2
3
|
tar -ztvf archive-name.tar.gz
tar -jtvf archive-name.tbz2
unzip -l archive-name.zip
|
Или распакуйте несколько исходных файлов:
1
2
3
|
tar -zxvf archive-name.tar.gz
tar -jxvf archive-name.tbz2
zip archive-name.zip
|
Расписание задач
Если вы хотите запланировать периодическое выполнение ваших сценариев, вам нужно использовать утилиту Cron, которая управляется таблицей cron — файлом конфигурации, который задает команды оболочки для периодического запуска по заданному расписанию. И команда для поддержки таблиц cron — это crontab
.
Вызов crontab с опцией -l
покажет вашу таблицу cron.
Также предоставляется опция -u
для указания имени пользователя, чей crontab используется. Если вы собираетесь запускать задачи своего веб-приложения, лучше отредактировать crontab для пользовательских www-данных.
1
2
3
4
|
user@server:~$ sudo crontab -lu www-data
# mh 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.
Чтобы отредактировать этот список, запустите crontab с ключом -e
вместо -l
. Список cron будет открыт в вашем редакторе по умолчанию. Используйте опцию -r
чтобы очистить список cron.
Мониторинг производительности
Команда top показывает сводную информацию о системе и предоставляет динамическое представление в реальном времени запущенных системных процессов. Нажмите Shift-M
чтобы отсортировать процессы по использованию памяти, или Shift-P
чтобы отсортировать по использованию процессора.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
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.
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
для отображения полей вывода в удобочитаемом формате.
1
2
3
4
5
|
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
для удобочитаемого формата.
1
2
3
4
5
|
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
.
1
2
3
4
|
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
и другие, чтобы найти именно то, что вы хотите.
1
2
3
|
history |
history |
history |
|
Вывод
Использование консоли не ракетостроение. Системы Unix и Linux легко понять и использовать благодаря их простому дизайну и хорошей документации. Я надеюсь, что эта статья поможет вам освоиться с командной строкой и выведет вас на новый уровень управления веб-приложениями с помощью командной строки.
Если у вас есть какие-либо вопросы или вы хотите поделиться своими любимыми консольными командами, не стесняйтесь оставлять комментарии под статьей.