rassanov.ru
 Web tools & services   

Веб инструменты

Скрипты

Скрипт "командной строки" или "шелла" на хостинге

 
Своя командная строка может быть нужна для прежде всего для запуска однократно или редкоиспользующихся программ (команд), например для получения информации о хостинге: настройках DNS своего домена, об использовании памяти и т.д. или например для архивации (разархивации) своих файлов… да и для запуска всех программ, предоставляемых хостером.
Особенно удобно из командной строки запускать свои небольшие скрипты, например для обработки всех файлов в папке и т.д.
Скрипт «шелла» (shell):
#!/usr/bin/perl
use CGI qw/-no_xhtml :standard/;
use CGI::Carp qw(fatalsToBrowser);
print header(-charset => 'windows-1251'),
start_html(-lang => 'ru', -title => 'My shell',
# установим курсор в поле ввода команд
-onLoad => "document.forms[0].vvod.focus()");
if ( param() ) { # если мы ввели команду
my $vvod = param('vvod');
# покажем нашу команду для самоконтроля
print $vvod, "<br>\n";
# установим таймаут в секундах для выхода из нашей команды,
# если она задержалась с ответом
my $timeout = 30;
# анонимная подпрограммочка для обработки таймаута
local $SIG{ALRM} = sub { close KAN;
print 'Процесс прерван по таймауту</pre>';
die "timeout"; };
# вот и сам «шелл»
$pid = open(KAN, "$vvod 2>&1 |");
die "Cannot run program: $!.\n" unless ($pid);
eval {
alarm($timeout);
print '<pre>';
# читаем вывод команды и направляем его на дисплей
while( <KAN> ) { print; }
print '</pre>';
alarm(0);
close KAN;
}
}
# генерируем форму ввода команды
print start_form,
textfield(-name=>'vvod', -size=> 80, -value=> ''), submit('удачи!'),
endform, end_html;
exit(0);

Сам «шелл» или «командная строка» реализуется передачей функции open вместо имени файла нашей команды с вертикальной чертой (символом конвейризации). Тем самым запускается дочерний процесс для команды, позволяющий принимать ее вывод (читать) основному скрипту. Поскольку функция open вызывается с двумя аргументами (манипулятором и нашей командой), то командный интерпретатор на хостинге может обнаруживать и «понимать» метасимволы в командной строке, что практически и является полноценным шеллом (shell) в пределах наших прав доступа. Для перенаправления ошибок команды на дисплей используется 2>&1, проще говоря STDERR в STDOUT.
На примере (ниже) мы командой pwd определили рабочую папку нашего скрипта:
Пример работы шелла

Приведем небольшой список команд и программ, позволяющих протестировать и получить характеристики как хостинга, так и нашего сайта:
  • Список команд и программ командного интерпретатора Linux (*nix): info;
  • Подробное описание командного интерпретатора Bash: info Bash;
  • Некоторые полезные команды шелла:
    • сведения о смонтированных файловых системах: df;
    • сведения о занимаемом дисковом пространстве в каталоге и вложенных подкаталогах. Если каталог не указан, то по умолчанию выводятся сведения о текущем каталоге: du или Ваш сайт: du /home/Ваш_логин;
    • информация о заданном файле (каталоге или файле устройства) или наборе файлов: stat (путь)файл;
    • данные об объеме и распределении оперативной памяти и swap: free;
    • идентификатор пользователя реальный и эффективный: id;
    • список запущенных процессов с массой данных о них: ps aux или в виде дерева: pstree -p;
    • список наиболее активных процессов: top -b;
    • список всех пакетов в системе: rpm -qa;
    • информация о виртуальной памяти: vmstat;
    • информация о последних входах/выходах пользователей в систему: last;
    • трассировка команд: strace команда, например: strace df;
  • Полезные утилиты:
    • полная информация о системе: dmesg;
    • открытые файлы в системе: lsof (lsof может быть в папке sbin);
    • список активных интернет соединений: netstat;
    • записи DNS сервера о Вашем домене: dig ANY Ваш_домен или host -a Ваш_домен или nslookup -type=ANY Ваш_домен;
    • список скомпилированных и доступных модулей Apache на хостинге: httpd -l (httpd может быть в папке sbin);
    • список открытых портов с указанием служб (сервисов) на них: nmap Ваш_домен;
Список многих программ (команд) доступных Вам на хостинге можно получить с помощью простого скрипта.
PS. Оставлять скрипт командной строки у себя на хостинге небезопасно, поэтому имеет смысл после например проверки (тестирования) хостинга, скрипт удалить.
Скачать скрипт шелла (командной строки) в zip 1,18 KB
 

 
Дмитрий Рассанов 2014