Inferno man pages -1 - fs / Руководство по ОС Inferno - раздел 1 - fs: Chapter 1

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

ИМЯ
fs - просмотр файловой иерархии

rapidfx 24.05.09 в 13:00

0

РЕЗЮМЕ
fs команда аргументы

rapidfx 24.05.09 в 13:01

0

ОПИСАНИЕ
Fs вычисляет выражение чьи значения представлют содержимое иерархической файловой системы. Существует шесть типов значений:

rapidfx 24.05.09 в 13:02

0

fs
Полное содежимое файловой системы.
entries
Информация о записях в файловой системе без их содержимого.
gate
Логическое условие которое будет использовано в логическом выражениим команды. Гейт открыт для записей удовлетворяющих некоторому условию.
selector
Компаратор который сравнивает две записи и выбирает одну, обе или никакую из них.
string
Простая строковая константа, представленная сама по себе, либо заключенная в кавычки в соответствии с обычными правилами командного интерпретатора.
command
Команда интерпретатора, представленная символом "@" и с последующим блоком команд интерпретатора заключенных в фигурные скобки.
void
Без значения. Выражение этого типа не может быть использовано в качестве аргумента любой команды.

rapidfx 25.05.09 в 06:54

0

Значение представляется или как константа (строка или команда интерпретатора), или как блок в скобках, {команда [аргумент...]}, чье значение является результатом выполнения команды с указанными аргументами.

rapidfx 25.05.09 в 06:58

0

В следующем описании представленной команды entry, такой как:

rapidfx 25.05.09 в 07:01

0

print entries -> void

rapidfx 25.05.09 в 07:01

0

описывает команду print, которая принимает один аргумент типа entries, и результатом которой является тип void. Если тип не подходит ни под один из описанных, он должен быть строковым типом.

rapidfx 25.05.09 в 07:04

0

Если fs выполняется без аргументов, она напечатает список доступных команд. Команды которые понимает fs включают в себя:

rapidfx 25.05.09 в 07:07

0

and gate gate [gate...] -> gate
And это гейт который открывает запись если все все аргументы открыты.
bundle fs -> void
Bundle конвертирует fs в архивный формат и пишет его на стандартный вывод.
compose [-d] op -> selector
Compose создает операторы "композитного/состовного"-типа, полезных в случае объединенных файловых систем. Op определяет оператор, беря имена из графического алгоритма Porter-Duff: AinB, AinB, BinA, AoutB, BoutA, A, AoverB, AatopB, AxorB, B, BoverA, or BatopA. Например, AinB дает пересечение множеств A и B; AatopB дает A если оба и A и B существуют, и B в противном случае. Когда используется как selector для объединения, операторы которые исключают объединение A и B не очень полезны, поскольку они исключают все общие директории верхнего уровня. Задание опции -d, позволяет compose проходить через директории которые в противном случае были бы исключены, делая операторы такие как AxorB (все А что не удовлетворяют равенства с B) более полезными, хотя правильно работает только с обычными файлами.
depth n -> gate
Depth это гейт открытый только для записей которые нахотяся в пределах n уровня от корня файловой системы.
entries fs -> entries
Entries выдает все записи содержащиеся в fs.
eval expr -> any
Eval вычисляет fs выражение и возвражает его результат.
filter [-d]gate fs -> fs
Результатом фильтра является файловая система из которой были удалены записи и их потомки не прошедшие гейт. Если был установлен флаг -d, будут фильтроваться только файлы, а директории продуйт через гейт.
ls [-um] entries -> void
Напечатает каждую запись в стиле ls -l (смотри ls(1)). Если задан флаг -d, то вместо времени модификации файла будет напечатано время последнего доступа к файлу. Если задан флаг -m, будет также напечатано имя пользователя модифицировавшего файл.
exec [-pP] [-t command] [-n n] command entries -> void
Запускает команду принимающую в качестве аргумента каждую запись из списка. Если указан флаг -n exec попытается собрать вместе n записей перед вызовом команды (по умолчанию - 1). Переменная окружения $file устанавливается в имена записей которые были собраны. Если задан флаг-p, переменным окружения присваивается информация о правах доступа, владельце, времени модификации и рамере записи (они называются аналогичными именами полей структуры Dir; смотри sys-stat(2)). Эта опция действует только в случае n равного 1. Флаг -P включает все другие поля из структуры Dir. Обратите внимание, что команда запускается каждый раз в том же самом контектсе интерпретатора, так что переменные окружения установленные для одного выполнения могут быть извлечены в следующий раз. Флаг -t может быть использован для указания команды которая будет выполнена перед завершением работы.
exec [-pP] [-t command] [-n n] command entries -> void
Запускает команду принимающую в качестве аргумента каждую запись из списка. Если указан флаг -n exec попытается собрать вместе n записей перед вызовом команды (по умолчанию - 1). Переменная окружения $file устанавливается в имена записей которые были собраны. Если задан флаг-p, переменным окружения присваивается информация о правах доступа, владельце, времени модификации и рамере записи (они называются аналогичными именами полей структуры Dir; смотри sys-stat(2)). Эта опция действует только в случае n равного 1. Флаг -P включает все другие поля из структуры Dir. Обратите внимание, что команда запускается каждый раз в том же самом контектсе интерпретатора, так что переменные окружения установленные для одного выполнения могут быть извлечены в следующий раз. Флаг -t может быть использован для указания команды которая будет выполнена перед завершением работы.
merge [-1] [-c selector] fs fs [fs...] -> fs
Рекурсивное объединение содержимого файловых систем указанных как аргументы. Selector задает правила отбора записей, в случае если он не задан, записи отбираются из предпочтений первой фалойвой системы (аналогично {compose AoverB}). Если указан флаг -1, объединение осуществляется только у директорий верхнего уровня.
mode spec -> gate
Mode это гейт который отбирает записи, чьи права удовлетворяют указанным, они записываются как строка в стиле chmod(1). если оператор поля является +, права должны быть представлены; если -, они должны отсутствовать, и если =, они должны в точности соответствовать заданным. Директории и режим аутентификации указываются символами d'' и A'' соответственно.
not gate -> gate
Not это гейт открытый для записей НЕ аргументов.
or gate gate [gate...] -> gate
Or это гейт открытый для записей если один из аргументов открыт.
path [-x] path... -> gate
Path это гейт открытый для записи чей полный путь является предком или потомком любого пути. Если указан -x, то гейт открыт для любого пути за исключением заданного.
pipe [-1pP] command fs -> void
Pipe похожа на exec, за исключением того, что содержимое всех файлов в fs пропускается через команду. Пока не задана опция -1, команда запускается один раз для каждого файла, с переменной $file содержащей имя файла, и другими переменными окружения установленными в соответствии с опциями -p или -P, как для exec. Если указана опция -1, команда выполняется всего один раз - все содержимое файлов пропускается через нее.
print entries -> void
Печатает путь каждой записи.
proto [-r root] protofile -> fs
Evaluate protofile as a mkfs(8) proto file. If root is specified, it will be used as the root of the resulting fs.
Вычисляет protofile как прото-файл mkfs(8). Если указан корень, он будет использован как корень результуирующей fs.

query command -> gate
Query это гейт который запускает команду для определения который из них открыт; пустой статус выхода команды считаеся окрытым гейтом. Пременная окружения $file устанавливается командой в путь к записи к которой произведено обращение.

run command -> string
Run runs command and substitutes the value of the environment variable $s after its invocation. $s must have exactly one element.
Run запускает команду и заменяет значение переменной окружения $s после ее вызова. $s должна быть точно лдним элементом.

select gate entries -> entries
Select отбирает только те записи которые проходят через гейт. На потомков это не распространяется.

setroot [-c] path fs -> fs
Setroot задает имя корневой директории fs. Если задан флаг -c, элементы корневой директории созданы явно в иерархии (например, имя верхней директории не будет содержать ни одного символа /).

size entries -> void
Выводит суммарный размер всех записей в байтах.

unbundle file -> fs
Unbundle читает архив созданный bundle из файла; его результатом будет содержимое оригинальной файловой системы помещенной в архив. Если файл является "-", считывается стандартный поток ввода.

walk path -> fs
Walk производит файловую систему являющуюся результатом обхода всех файлов и каталогов ниже заданного пути.

write dir fs -> void
Write записывает содержимое fs в файловую систему с корнем в dir. Если dir пуста, fs запишет корневую директорию первоначально ассоциированную с fs.

rapidfx 25.05.09 в 07:11

0

По соглашению, fs выполняет автоматическое преобразование типов (преобразования выполняются рекрсивно, так например, fs выражение верхнего уровня будет сконвертировано в void путем {print {entries fs}).

rapidfx 26.05.09 в 08:27

0

string->fs
Результат {walk string}.
fs->entries
Результат {entries fs}.
string->gate
Результат {match string}.
entries->void
Результат {print entries}.
command->string
Результат {run command}.

rapidfx 26.05.09 в 08:32

0

ПРИМЕРЫ
Печать размеров всех файлов в текущей директории и ниже:

rapidfx 25.05.09 в 19:13

0

fs size .

rapidfx 25.05.09 в 19:12

0

Показывает имена всех файлов x не являющиеся y:

rapidfx 26.05.09 в 09:26

0

fs select {mode -d} {merge -c {compose -d AoutB} x y}

rapidfx 26.05.09 в 09:27

0

Удаляет все файлы заканчивающиеся на .dis из /appl:

rapidfx 26.05.09 в 09:27

0

fs exec @{rm $file} {select *.dis /appl}

rapidfx 26.05.09 в 09:27

0

Рекурсивно копирует текущую директорию в /tmp/foo:

rapidfx 26.05.09 в 09:28

0

fs bundle . | fs write /tmp/foo {unbundle -}

rapidfx 26.05.09 в 09:28

0

Упрощенный случай предыдущего:

rapidfx 26.05.09 в 09:29

0

fs write /tmp/foo .

rapidfx 26.05.09 в 09:29

0

Интерактивно удаляет все обычные файлы одного уровня теукщей директории:

rapidfx 26.05.09 в 09:29

0

fs exec @{rm $file} {select {query
@{echo -n $file:; ~ {read} y yes}}
{select {mode -d} {filter {depth 1} .}}}

rapidfx 26.05.09 в 09:30

0

Создает новый архив содержащий файлы ниже текущей директории которые хранились в старом архиве:

rapidfx 26.05.09 в 09:31

0

fs bundle {merge -c {compose AinB} . {unbundle old.bundle}} > new.bundle

rapidfx 26.05.09 в 09:31

0

ИСХОДНЫЕ ФАЙЛЫ
/appl/cmd/fs.b
/appl/cmd/fs/*.b
/appl/lib/fslib.b

rapidfx 24.05.09 в 13:03

0

СМОТРИ ТАКЖЕ
sh(1)

rapidfx 24.05.09 в 13:03

0
Минутку...