ФЭНДОМ


mntgenПравить

Mntgen - это простая программа, которая создает (в действительности, делает вид что создает) каталог во время перехода в него. Обычно она применяется для каталога /n, куда монтируются все виды сетевых сервисов. Из-за того что серивсов и сетей может быть огромное множество, не очень удобно создавать каталоги для всех этих сервисов. С помощью mntgen, вы можете получить пустой каталог /n и иметь возможность монтировать сервисы как подкаталоги. Следующий пример иллюстрирует применение mntgen. Во-первых, исследуем /n без mntgen:

% cd /n
% ls -l
%

% ls -ld test
ls: stat test: 'test' file does not exist
%

% cd test
cd: test: 'test' file does not exist
%

% bind '#m' /n/mouse
bind: /n/mouse: '/n/mouse' does not exist
% 

Как вы видите, /n пуст. Теперь то же самое, но без mntgen:

% mount {mntgen} /n
%

% cd /n/
%

% ls -ld test
d-r-xr-xr-x M 2 me me 0 Jan 01  1970 test
%

% ls -ld another
d-r-xr-xr-x M 2 me me 0 Jan 01  1970 another
%

% cd more
% pwd
/n/more
%

% bind '#m' /n/mouse
% ls -l /n/mouse
---w--w--w- m 0 mjl mjl 0 Apr 15 20:37 /n/mouse/cursor
--rw-rw-rw- m 0 mjl mjl 0 Apr 15 20:37 /n/mouse/pointer
% 

ftpfsПравить

Ftpfs - это ftp-клиент, реализованный в виде файлового сервера. Он просто представляет файлы ftp-сервера в виде файловой системы. Пример должен говорить сам за себя:

% ftpfs -a none@example.org -m /n/ftp ftp.openbsd.org
220 openbsd.srv.ualberta.ca FTP server ready.
331 Guest login ok, send your email address as password.
%
% cd /n/ftp
% cd pub/OpenBSD
% ls -l
d-rwxr-xr-x M 6 0     0       1024 Sep 28  2008 4.2
d-rwxr-xr-x M 6 0     0       1024 Sep 28  2008 4.3
d-rwxr-xr-x M 6 0     0       1024 Sep 04  2008 4.4
d-rwx------ M 6 0     0        512 Mar 09 17:04 4.5
d-rwxr-xr-x M 6 318   0        512 Feb 19 23:24 OpenBGPD
d-rwxr-xr-x M 6 318   0        512 Jan 16 06:05 OpenNTPD
d-rwxrwxr-x M 6 0     122     4608 Feb 22 17:34 OpenSSH
--rw-r--r-- M 6 0     121      238 Feb 07  1997 README
d-rwxr-xr-x M 6 20001 20001 454144 Apr 17 01:03 distfiles
d-rwxr-xr-x M 6 308   0       2048 Jan 12 04:20 doc
--rw-r--r-- M 6 0     0       8741 Sep 03  2008 ftplist
d-rwxr-xr-x M 6 0     100     1024 Apr 07 03:59 patches
d-rwxr-xr-x M 6 0     122      512 Aug 31  2008 snapshots
d-rwxr-xr-x M 6 0     100     1024 Apr 07 21:07 songs
d-rwxr-xr-x M 6 0     121      512 Jun 28  2008 tmp
d-rwxr-xr-x M 6 0     100      512 Jan 07  2005 tools
%

tarfsПравить

Tarfs монтирует tar-файл (в режиме только-чтение). Tar является простым файловым форматом, однако традиционная дисковая "файловая система" в действительности программа такого же типа, только с другим форматом файла (плюс к этому она реализуют запись).

% tarfs gps.tar /n/tar
% cd /n/tar
% ls -l
d-rwxrwxr-x M 16 0 0 0 Jul 07  2006 gps
% cd gps
% ls -l
--rw-rw-r-- M 16 0 0   287 Mar 04  2006 dat.h
--rw-rw-r-- M 16 0 0  4501 Mar 04  2006 gpsevermore.c
--rw-rw-r-- M 16 0 0 18924 Apr 09  2006 gpsfs.c
--rw-rw-r-- M 16 0 0   219 Mar 04  2006 mkfile
--rw-rw-r-- M 16 0 0  2795 Mar 04  2006 util.c
% wc gpsfs.c
   1010    2713   18920 gpsfs.c
% cd
% unmount /n/tar

memfsПравить

Memfs - это файловая система, которая хранит файлы в оперативной памяти. Идельна для монтирования к /tmp:

% ls -l /tmp/test
ls: stat /tmp/test: '/tmp/test' does not exist
%

% mount -bc {memfs -s} /tmp
%

% echo test >/tmp/test
% ls -l /tmp/test
--rw-r--r-- M 20 mjl memfs 5 Apr 17 22:43 /tmp/test
%

% unmount /tmp
% ls -l /tmp/test
ls: stat /tmp/test: '/tmp/test' does not exist
%

/net, or #IПравить

Сетевой стек предоставляется драйвером устройства "#I". У него имеется по каталогу на каждый протокол, например, tcp. Когда "#I" монтируется по умолчанию в /net, tcp-стек становится доступен в /net/tcp. Библиотечные функции, которые имеют дело сетевыми соединениями (такие как dial и announce, для соединения и обслуживания) могут быть реализованы при помощи обычных вызовов open/read/write к файлам в каталоге /net/tcp. Чтобы продемонстрировать легкость, с которой может быть использован /net/tcp, давайте рассмотрим следующий шелл-скрипт, который осуществляет HTTP-запрос:

<>[3]/net/tcp/clone {
        dir=/net/tcp/^`{cat <[0=3]}
        echo connect 74.125.77.99!80 >$dir/ctl &&
        {
                echo 'GET /search?q=inferno-os&btnI=I''m+Feeling+Lucky HTTP/1.1' &&
                echo 'connection: close' &&
                echo 'host: www.google.com' &&
                echo ''
        }>$dir/data
        cat $dir/data
}

И результат его работы:

HTTP/1.1 302 Found
Location: http://www.vitanuova.com/inferno/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Date: Sat, 18 Apr 2009 19:57:52 GMT
Server: gws
Content-Length: 230
Connection: close

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.vitanuova.com/inferno/">here</A>.
</BODY></HTML>

Это демонстрация мощи хорошо спроектированной абстракции, и такого превосходного инструмента как командный интерпретатор Inferno. В подобной манере, можно сделать dns-запрос при помощи /net/dns, и более общее преобразование сетевых адресов посредством /net/cs.