| rassanov.ru | ||||
|
||||
Web toolsСкрипты
|
Скрипт "командной строки" или "шелла" на хостингеСвоя командная строка может быть нужна для прежде всего для запуска однократно или редкоиспользующихся программ (команд), например для получения информации о хостинге: настройках 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 определили рабочую папку нашего скрипта:
![]() Приведем небольшой список команд и программ, позволяющих протестировать и получить характеристики как хостинга, так и нашего сайта:
Список многих программ (команд) доступных Вам на хостинге можно получить с помощью простого скрипта.
PS. Оставлять скрипт командной строки у себя на хостинге небезопасно, поэтому имеет смысл после например проверки (тестирования) хостинга, скрипт удалить. |
|||
Дмитрий Рассанов 2010 |