FREESCO на Украине Официальный сайт FREESCO

FREESCO router

(программный маршрутизатор на основе Линукс)
Главная/Main -> Документация/Documentation -> Статьи/Articles -> Введение в шелл/Intro of shell

Введение в шелл/Intro of shell

Начало

Так как основным шеллом в Фриско являеться ash 0.2a - очень маленький интерпретатор и потому немного урезанный. Также большинство команд которые в больших дистрибутивах есть бинарными исполняемыми файлами, в Фриско являются шелл-скиптами, реализующими большинство основного функционала своих полновесных собратьев, Но в тоже время могут быть не реализованы некоторые второстепенные возможности, или к примеру порядок параметров может немного отличаться от общепринятого.

Основной инструмент это командная строка, и без ее знания у Вас постоянно будут возникать вопросы. Вот ссылки на две великолепных статьи А.Соловьева, которых мне хватило для большинства случаев:
ПРОГРАММИРОВАНИЕ НА shell (UNIX)
sed и awk

В дополнение добавлю от себя. По началу некоторое необычное поведение консоли, может приводить в замешательство. Просто примите к сведению, что ваша консоль пошла от терминала, отдельно стоящей клавиатуры и монитора, практически без никакой внутренней начинки, которые только и могли что отсылать вводимые символы на удаленный компьютер по комуникационному порту, и выводить на экран символы которые были получены от удаленной системы. В связи с некоторым разнообразием стандартов, могут возникнуть несоответствия, и некоторая аскетичность доступных средств. То символ выведется на экран левый или вывод какой-нибудь программы запущенной в фоновом режиме. Также учтите, даже если выполняется какая-либо задача, ввод с клавиатуры работает и буферизируется, поэтому не удивляйтесь что символы появляются сами по себе :) и не стучите бездумно по клавиатуре.

Также есть у *nix терминалов и приятные особенности. Учитывая что весь ввод вывод идет сплошным потоком, то у большинства терминалов буферизируется вывод. Аппаратно, либо програмно. Объем сохраняемой информации зависит от настроек и доступных ресурсов, но как правило это минимум 2-3 экрана. Доступ к этой информации можно получить используя Shift-PgUp Shift-PgDown. Эти комбинации доступны практически на всех консолях.

История командой строки является очень удобным инструментом если вы постоянно работаете в шелл но не используете файловые менеджеры. В ash она отсутствует, но присутствует дополнительная утилита, которая реализует этот функцонал 'ile'. Для ее включения по умолчанию нужно включить пункт 13 Do you want to enable extra programs (y/n) [n]?.
Теперь можете вызывать историю команд стрелками управления курсором вверх-вниз. Также становиться доступным более удобное редактирование.Но она может мешать работе некоторых полноекранных програм. Поэтому я ее постоянно загруженной не держу, а запускаю по мере необходимости. Кстати выход из текущего терминального сеанса производиться нажатием Ctrl+D. Это стандарт в *nix мире. Таким же образом можно выгрузить и 'ile'. Завершить многие програмы можно по Ctrl-C.

Так как *nix не только многозадачная среда, но еще и многопользовательская. Хотя обычного для виндузятника оконного переключения задач нет, но зато есть фоновые задачи и несколько консолей доступных пользователю. В *nix по дефолту как правило создаются 6 консолей, хотя это и не обязательно. Также способы переключения в некоторых системах могут отличатся. По умолчанию это Alt+функциональная клавиша. Сначала вы находитесь на первой консоли Alt+F1. На каждой из консолей вы можете работать под другим именем.
В фриске для работы пользователя доступны две консоли:
Alt+F1 - основная
Alt+F2 - дополнительная
Также доступны консоли на которых выводится отладочная информация.
Alt+F3 - отображается системный лог
Alt+F4 - отображается лог безопасности
В версии 3.5 появилась дополнительная консоль
Alt+F5 - отображается сетевая активность

Но при этом как правило за самой консолью у фриски редко сидит оператор. Чаще она стоит гдето в углу и управление производиться удаленно через ssh, или еще каким способом.

Наверх

Редактирование файлов

Основная команда редактирования это edit. Этот редактор является дефолтным и вызывается во всех случаях, когда требуется ручная правка.
Пример: edit /rc/rc_user Помощь вызывается F1, она очень короткая и надеюсь всем будет понятна. Есть один нюанс на котором обжигаются новички :(
Этот редактор очень специфически отображает спец символы вообще и символ табуляции в частности. Редактор отображает их как заглавные буквы но повышенной яркости. Символу табуляции соответствует 'I'.
В *nix символ табуляции является одним из самых распространенных при разделении полей или параметров в конфигурационных файлах. Не раз мне приходилось править файлы в которых народ вместо нажатия Tab ставил просто обычный символ 'I', ориентируясь на пример или на аналогичные строки в этом же файле.

Наверх

Инструменты управления

Из встроенных могу отметить утилиту remotelog которая появилась в версии 0.3.5. Для более старых версий можете воспользоваться моей утилитой viewlog, имеющей тотже функционал. Эта утилита позволяет вывести на текущую консоль системный лог, тот что по дефолту выводится на третью консоль. Очень сильно помогает в отладке. Когда я активно модернизирую фриску, то у меня в одном из окон putty постоянно выводился лог, а в другом я провожу различные манипуляции.

Еще немного полезных команд:

set
покажет переменные окружения которые определяют вашу среду обитания
uname
покажет версию ядра
pwd
покажет текущую директорию
free
покажет доступные ресурсы
netinfo
покажет информацию о сети, именно вывод этой команды отображается на веб-панели управления при выборе пункта Network, в секции Info
report
выведет всю системную информацию, а также создаст файл отчета /boot/report.txt, пригодный для отправки на форум. Он доступен и из DOS C:\router\report.txt. В некоторых случаях бывает полезно

также полезны будут утилиты:
minicom
это простой терминал к консоли, с ее помощью можно настроить модем, или еще какое устройство, у меня на пример к первому порту подключен шнур управления SDSL модемом. Пару раз выручал при зависаниях. Да и аппаратную статистику посмотреть могу
ping
проверка доступности удаленного узла
synctime
принудительно синхронизирует время
control
управляет сервером дозвона, работает только в режиме Dial-Up роутера
reboot
перезагрузит фриску
halt
остановка фриски, это если ее выключить вообще собираетесь

Две команды конвертирования:
fromdos <src >dst
todos <src >dst
Они конвертируют файлы из DOS формата и обратно соответственно. Конвертации можно подвергать только текстовые файлы, ни в коем случае не бинарные.

Утилита mode может изменить режим работы роутера, ethernet, dialup, leased или bridge. Для режима dialup можно указать имя профиля провайдера на который будем переключаться. К сожалению для VPN такого нельзя сделать:(
Вызов: mode default произведет холодный рестарт роутера, будут перезапущены все сервисы. Очень полезный режим когда сделаны не критическиен изменения в конфигурации. В этом режиме не будут выполнены только команды которые выполняются в секции boot, то есть при начальной загрузке и инициализации роутера и железа. Ну к примеру если вы изменили адреса на сетевухах, то вызов позволит применить изменения без перезагрузки роутера. Но тут все немного сложнее, нужно хорошо понимать что делаете.

В связи с ограниченностью места на дискете, полновесных архиватора и компрессора у фриски нет. Но учитывая что она вся очень сжатая и большинство пакетов были подвержены компрессии и архивированию, да и вообще без них никуда, то в составе есть разархиватор и декомпрессор star и zcat соответственно. Но самостоятельно сжимать они не умеют, для этого нужны сторонние утилиты.

snarf - утилита загрузки. Этот загрузчик умеет работать с протокалами http и ftp. Производит докачку если указать, и вообще вещь в хозяйстве незаменимая... :) Именно он используется при установке пакетов с удаленных узлов. Умеет использовать переменные окружения SNARF_PROXY, FTP_PROXY, GOPHER_PROXY, HTTP_PROXY, и PROXY. Поэтому если провайдер использует прокси, рекомендую указать его при конфигурировании...

Список запущенный процессов можно узнать командой ps. Она покажет также и номер процесса, объем потребляемой памяти, его состояние и много другой информации.

Команда kill посылает указанный сигнал процессу с определенным номером. Cписок сигналов. Cигнал с номером 9-SIGKILL всегда убивает процесс, и пользоваться им необходимо только в крайнем случае.

Команда killall посылает сигнал процессу по имени. Соответственно будут отосланы сигналы всем одноименным запущенным процессам. Если нужно какому то одному конкретному, то тут поможет связка команд ps и kill.

Запустить программу в фоновом режиме, к примеру загрузку чего нибудь большого, или проверку дисков, можно несколькими способами. С помощью команды fork можно выполнит команду вообще в другом окружении, и она вам больше докучать не будет :) Можно перевести программу в фон добавив амперсанд в конец команды: snarf http://freesco.org/index.html >/dev/null 2>/dev/null & элементы >/dev/null 2>/dev/null были добавлены, чтобы вывод этой команды не попадал на экран. Потому как она хоть и выполняеться в фоне, но ввод и вывод происходит на текущую консоль. И это будет просто мешать работать замусоривая экран. Кстати этого зачастую можно избежать средствами самой команды, к примеру у snarf аргумент -q глушит весь вывод на консоль. Также некоторые программы, сами могут становиться демонами, то есть уходить в фоновый режим. Просто внимательно почитайте справку к команде.

Наверх

Полный список встроенных команд фриски