2018-05-23

UEFI Shell: Описание командной оболочки

UEFI Shell, или командная оболочка UEFI - это часть системы UEFI, предназначенная для выполнения запуска исполняемых *.efi файлов и UEFI-загрузчиков. Кроме этого, UEFI Shell позволяет: осуществлять загрузку UEFI-драйверов, выполнять файловые операции на поддерживаемых файловых системах (поддержка которых может быть добавлена загрузкой соответствующих драйверов), управлять загрузочным списком, работать с сетью (есть поддержка TCP/IP), выполнять сценарии *.nsh состоящие из команд данной оболочки.



Содержание


1. Командная оболочка UEFI Shell
1.4 Перенаправления
1.4.1 Перенаправление Вывода
1.4.2 Перенаправление Ввода
1.4.3 Конвейер Команд
1.5 Комментарии
1.6 Переменные
1.6.1 Переменные Окружения
1.6.2 Позиционные Переменные
1.6.3 Псевдонимы
1.6.4 Файловые Маски
1.7 Интерактивные Возможности
1.7.1 Клавиши Истории Команд
1.7.2 Прерывание Выполнения
1.7.3 Контроль Выходного Потока
1.7.4 Поддержка Прокрутки Буфера
1.8 Справка Командной Строки



1. Командная оболочка UEFI Shell


Основные возможности похожи на оные у других командных оболочек. Если вам знакомы какие нибудь из них (bash, cmd и т. д.), то многие моменты будут вам знакомы.


1.1 Специальные Cимволы


Представленные далее символы являются специальными - #, >, <, |, %, *, ?, ^, , пробел, [, ] и символ_новой_строки. То есть, эти символы предназначены для выполнения определенных действий при наличии их в выполняемой команде или скрипте.

#    - Начало комментария, можно использовать как в скриптах, так и в интерактивном режиме.
>    - Исходящее перенаправление вывода.
<    - Входящее перенаправление вывода.
|    - Используется для организации конвейера команд.
%    - Используется для обозначения переменных.
*, ?, [, ]    - Используются для составления файловых масок.
^    - Предназначен для экранирования специальных символов.
"    - Предназначены для объединения нескольких слов в одно выражение.
пробел    - Используется для отделения аргументов выполняемой команды.
символ_новой_строки    - завершает введенную команду.


1.2 Экранирование Символов


Символом выполняющим роль экранирования является ^. Экранирование позволяет воспринимать введенный символ после символа экранирования, просто как текст. Это может потребоваться когда необходимо ввести один из специальных символов.


1.3 Кавычки


Кавычки (") предназначены для объединение нескольких слов в единую строку. Командная оболочка воспринимает слова разделенные знаком пробел, как отдельные аргументы. Чтобы избежать такого восприятия, необходимую последовательность слов заключат в кавычки. К примеру, это бывает необходимо, когда в качестве аргументов используются полные пути до файла содержащие пробел.

Чтобы в строке заключенной в кавычки вставить сам знак кавычек, его необходимо экранировать ^". То же самое касается и самого знака экранирования. Для использования его в строке, вводить его нужно так ^^.


1.4 Перенаправления


1.4.1 Перенаправление Вывода


Вывод любой команды может быть перенаправлен в файл. Например:

command > file.log #перезапись unicode файла
command >> file.log #дозапись unicode файла

В первом случае, результат выполненной команды command будет сохранен в файл file.log, с перезаписью (файл создается заново).
Во втором случае, результат выполненной команды command будет сохранен в конец файла file.log (если файла не существовало, то он создается).

У команды перенаправления существуют два модификатора (вывод происходит в кодировке ASCII), (вывод происходит в переменную). Например:

command >a file.log #перезапись ascii файла
command >>a file.log #дозапись ascii файла
command >v variable #перезапись в переменную
command >>v variable #дозапись в переменную

Специальные файлы перенаправлений NUL и NULL предназначены для подавления вывода. То есть, весь вывод направленный в эти файлы будет просто отброшен без сохранения. Пример:

command > NUL
command > NULL


1.4.2 Перенаправление Ввода


Данные из существующего файла или переменной могут быть направлены на входной поток любой команды. Например:

command < file #получение входящих данных из unicode файла
command <a file #получение входящих данных из ascii файла
command <v variable #получение входящих данных из переменной

1.4.3 Конвейер Команд


Данные из выходного потока одной команды можно направить на входящий поток другой, образуя при этом конвейер команд. Например:

command1 | command2
command1 |a command2


В первом случае происходит перенаправление вывода команды command1 во входящий поток команды command2. Во втором случае все тоже самое но в кодировке ASCII.


1.5 Комментарии


Начинается комментарий с символа #. Весь текст который расположен после символа # и до конца строки, является комментарием. Комментарии предназначены просто для информативности. Командная оболочка игнорирует комментарии.


1.6 Переменные


Переменные создаются с помощью команды set либо с помощью перенаправления вывода в переменную. Так же существую переменные окружения, речь о которых пойдет ниже.
Доступ к переменным в командной строке, или скриптах, осуществляется путем заключения ее имени  между символами процента %.


1.6.1 Переменные Окружения


Переменные окружения создаются самой командной оболочкой при ее инициализации. Некоторые из них можно изменять а некоторые нет. Каждый новый сеанс командной оболочки содержит свой независимый список переменных окружения. Ниже представлен список переменных окружения UEFI Shell:


cwd - Текущая рабочая директория. Доступна только для чтения.

lasterror - Код ошибки последней выполненной команды. Доступна только для чтения.

path - Содержит пути до директорий, перечисленных через точку с запятой, по которым UEFI Shell производит поиск запрошенных исполняемых файлов. Можно перезаписывать.

profiles - Список профилей UEFI Shell которые поддерживаются командной оболочкой. Доступна только для чтения.

uefishellsupport - Текущий уровень поддержки UEFI Shell. Всего их 4 (0, 1, 2, 3). Доступна только для чтения.


uefishellversion - Версия оболочки UEFI Shell. Доступна только для чтения.

uefiversion - Версия системы UEFI. Доступна только для чтения.

nonesting - Определяет возможность запуска вложенных копий оболочки. Доступна только для чтения.


1.6.2 Позиционные Переменные


Позиционные параметры используются в скирптах. Всего их десять, имеют вид %0 - %9. Переменная %0 содержит в себе полный путь и имя исполняемого скрипта. Остальные переменные %1 - %9 содержат переданные аргументы.


1.6.3 Псевдонимы


Псевдонимы представляют собой дополнительное имя уже имеющейся команды или приложения. Возможны два варианта псевдонимов, на основе переменных, и созданные с помощью команды alias.


Для создания псевдонима с помощью переменной, необходимо создать переменную содержащую текст выполняемой команды. После чего вызвать созданную переменную.



1.6.4 Файловые Маски


Файловые маски в данной оболочке используют следующие символы *, ?, [].

* - Любые символы в количестве от нуля и более.
? - Любой один символ.
[] - Один из указанных символов в квадратных скобках.

Пример использования файловых масок:

ls *.efi #вывод только файлов заканчивающихся суффиксом .efi
ls ????? #вывод файлов чьи имена состоят из 5 символов
ls [abc]* #вывод файлов начинающихся с символа a, b или с


1.7 Интерактивные Возможности


1.7.1 Клавиши Истории Команд


Командная оболочка UEFI Shell запоминает последние выполненные команды. Нажатием на клавиши стрелок вверх или вниз, можно выводить в командную строку последние выполненные команды. Нажатием на клавишу F7 можно посмотреть список последних 24 команд, с возможностью повтора необходимой по ее номеру.


1.7.2 Прерывание Выполнения


В UEFI Shell присутствует возможность прерывать выполнение команды, исполняемого файла или скрипта. Осуществляется прерывание выполнения с помощью сочетания клавиш CTRL+C.


1.7.3 Контроль Выходного Потока


UEFI Shell поддерживает возможность останавливать вывод (ставить на паузу), и продолжать его с остановленного места. Остановить вывод можно сочетанием клавиш CTRL+S. Нажатием на любую клавишу исполняемая команда продолжит свое выполнение.


1.7.4 Поддержка Прокрутки Буфера


UEFI Shell позволяет прокручивать буфер вывода на 3 экрана назад. Осуществляется такая прокрутка клавишами PgUp и PgDown.


1.8 Справка Командной Строки


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


Каждая команда из help списка обладает своей справочной информацией. Вызвать данную информацию можно выполнив необходимую команду с параметром -?, либо передав команде help название команды по которой необходимо получить справку. Пример:

ls -? #вывод справки команды ls
help ls #тоже самое
for -? -b #вывод справки по команде for в постраничном режиме


2. Список команд UEFI Shell


В данном разделе будут кратко описаны стандартные команды оболочки UEFI Shell. Более подробное описание каждой команды на данный момент отсутствует. Если вы считаете, что подробное описание на русском все же необходимо, напишите об этом в комментариях.

Напомню, что справку по каждой команде можно получить запустив ее с ключом -?.

Применение основных команд данной командной оболочки можно посмотреть по этой ссылкеПрименение команд загрузки драйверов можно посмотреть тут.


alias - Отображает, создает, или удаляет псевдонимы UEFI Shell.

attrib - Отображает или изменяет атрибуты файлов или директорий.

bcfg - Управляет загрузочными записями и настройками драйверов сохраненных в NVRAM (энергонезависимой памяти).

cd - Отображает или меняет текущий рабочий каталог.

cls - Очищает окно консоли, а так же позволяет задать цвета фона и текста.

comp - Сравнивает содержимое двух файлов побайтово.

connect - Привязывает драйвер к определенному устройству и запускает драйвер.

cp - Копирует один или несколько файлов или каталогов в указанное место.

date - Отображает и устанавливает текущую дату для системы.

dblk - Отображает один или несколько блоков с блочного устройства.

devices - Отображает список устройств, управляемых драйверами UEFI.

devtree - Отображает дерево устройств, совместимых с драйверами модели UEFI.

dh - Отображает дескрипторы устройств в UEFI окружении.

disconnect - Отключает один или несколько драйверов от указанных устройств.

dmem - Отображает содержимое системной памяти или памяти устройства.

dmpstore - Управляет всеми переменными UEFI.

drivers - Отображает список драйверов UEFI.

drvcfg - Настройка драйверов UEFI.

drvdiag - Диагностика драйверов UEFI.

echo - Контролирует режим отображение вывода команд в скриптах, или выводит сообщение.

edit - Вызывает полноэкранный текстовый редактор для файлов ASCII или UCS-2.

eficompress - Архивирует файл с использованием алгоритма сжатия UEFI.

efidecompress - Разархивирует файл сжатый алгоритмом сжатия UEFI.

else - Определяет код, выполняемый, когда if имеет значение FALSE.

endfor - Заканчивает цикл for.

endif - Заканчивает блок кода, управляемый оператором if.

exit - Выход из оболочки UEFI или текущего скрипта.

for - Начинает цикл, основанный на синтаксисе for.

getmtc - Выводит счетчик MTC.

goto - Переходит к указанной точке в выполняемом скрипте.

help - Отображает список команд UEFI Shell или справку по конкретной команде.

hexedit - Вызывает полноэкранный шестнадцатеричный редактор для файлов, блочных устройств или памяти.

if - Выполняет команды в заданных условиях.

ifconfig - Отображает или изменяет настройки протокола IPv4 для указанного сетевого интерфейса.

ifconfig6 - Отображает или изменяет настройки протокола IPv6 для указанного сетевого интерфейса.

load - Загружает драйвер UEFI в память.

loadpcirom - Загружает в память файл образ PCI Option ROM.

ls - Выводит содержимое директории или информацию о файле.

map - Отображает или определяет сопоставления файловой системы.

memmap - Отображает карту памяти, поддерживаемую средой UEFI.

mkdir - Создает одну или несколько новых директорий.

mm - Отображает или изменяет адресное пространство MEM/MMIO/IO/PCI/PCIE.

mode - Отображает или изменяет режим выходного устройства консоли.

mv - Перемещает один или несколько файлов в указанное местоположение или между файловыми системами.

openinfo - Отображает протоколы и агенты, связанные с дескриптором.

parse - Извлекает значение соответствующее заданному условию из указанного текстового файла.

pause - Останавливает выполнение скрипта и ожидает нажатия любой клавиши.

pci - Отображает список устройств PCI или информацию о них.

ping - Пингует указанный хост или IP-адрес по протоколу IPv4.

ping6 - Пингует указанный хост или IP-адрес по протоколу IPv6.

reconnect - Повторное подключение драйверов к определенному устройству.

reset - Перезагружает систему.

rm - Удаляет один или несколько файлов или каталогов.

sermode - Устанавливает атрибуты последовательного порта.

set - Отображает или изменяет переменные среды UEFI Shell.

setsize - Приводит файл к указанному размеру.

setvar - Отображает или изменяет переменную UEFI.

shift - Сдвигает позиции позиционных параметров в скрипте.

smbiosview - Отображает информацию о SMBIOS.

stall - Останавливает выполнение (ожидает) на указанное количество микросекунд (1 сек = 1000000 мксек).

time - Отображает или устанавливает текущее время для системы.

timezone - Отображает или задает информацию о часовом поясе.

touch - Обновляет временную метку указанного файла или файлов до текущей системной даты и времени.

type - Выводит содержимое указанного файла на стандартное устройство вывода (экран).

unload - Выгружает загруженные ранее драйвера.

ver - Отображает информацию о версии встроенного ПО UEFI.

vol - Отображает или изменяет информацию о разделе диска.

Комментариев нет :

Отправить комментарий