Статьи

Полезные * командные оболочки NIX для веб-разработчиков

Итак, почему * 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 легко понять и использовать благодаря их простому дизайну и хорошей документации. Я надеюсь, что эта статья поможет вам освоиться с командной строкой и выведет вас на новый уровень управления веб-приложениями с помощью командной строки.

Если у вас есть какие-либо вопросы или вы хотите поделиться своими любимыми консольными командами, не стесняйтесь оставлять комментарии под статьей.