-
- 3d - execute a command with nDFS filesystem services enabled
-
- 3d [ options ] [ command [ arg ... ] ]
-
- 3d executes a dynamically linked command with nDFS filesystem services enabled. It
intercepts pathname system calls and applies the nDFS operations specified by the VPATH
environment variable, the command line mounts, and the vpath command. If command is omitted then an
interactive sh(1) is started. All processes executed by command
also have nDFS enabled.
- The main 3d service is viewpathing. A viewpath mounts one directory tree on top of another.
Files in the top level (directory tree) obscure files in the lower level. Lower level files have copy-on-write
semantics to the top level. i.e., files in the lower level are readonly; if a lower level file is modified it is first
copied to the top level before modification. Viewpath mounted directories can be chained. All levels but the top in a
chain are readonly. The traditional VPATH=d1:d2:d3 viewpathing is specified by the two 3d mounts
"d1 d2" and "d2 d3".
- The following service mounts are initialized by default:
- /dev/fd
- /dev/fd/n refers to the open file descriptor n in the
current process.
- /dev/fdp
- /dev/fdp/local/service opens a 2-way stream to service
on the local host. The stream supports file descriptor exchange.
- /dev/tcp
- /dev/tcp/host/service opens a 2-way
connection to service on host. inetd(8) services are
named either by inet.service or by port number.
- /dev/udp
- /dev/udb/host/service opens a datagram
connection to service on host. inetd(8) services are
named either by inet.service or by port number.
-
- -c, --command
- Ignored; allows 3d to be invoked like sh(1).
- -d, --debug=level
- Set the debug trace level to level. Higher levels produce more
output.
- -l, --lite
- Disable the default service mounts.
- -m, --mount="top bottom"
- Mount the path top onto the path bottom. If bottom
is a directory then the directory top is viewpathed on top of bottom. Otherwise bottom must
match a 3d fs path of the form /#special.
- -n, --exec
- Execute command. --noexec shows how command would be invoked but
does not execute. On by default; -n means --noexec.
- -o, --output=file
- --trace and --debug output is written to file
instead of the standard error.
- -s, --shell=file
- Sets the sh(1)
executable path to file. The default value is ksh.
- -t, --trace=id
- If id is 1 then intercepted system calls for all child
processes will be traced. If id is greater than 1 then intercepted system calls for the current process
and all children will be traced.
- -v, --version=major.minor
- Use 3d version major.minor instead of the latest
version.
- -x
- Passed to the 3d sh(1).
-
- 3d fs paths of the form /#special[/...] control the semantics of 3d and
allow services to be attached to the file namespace. Unsupported fs paths are silently ignored. The supported fs
paths are:
- /#fd
- /#fs/name[/option/...]
- /#map
- /#null
- /#option
- 2d
- 3d
- boundary
- call=value
- count=value
- debug=level
- dump=[value]
- call=value
- file=value
- fs=value
- map=value
- mount=value
- safe=value
- state=value
- view=value
- file=value
- fork
- init
- license=path
- mount=value
- table=value
- test=bitmask
- timeout=value
- timestamp
- trace=value
- version=1
- /#pwd
- /#safe
- /#view
-
- nDFS semantics are applied by intercepting system calls with a dll that is preloaded at process
startup before main() is called. The interception mechanism may involve the environment on some systems; in
those cases commands like env(1) that clear the enviroment before
execution may defeat the 3d intercepts. The intercepted system calls are listed by vpath -
/#option/dump=call. Note that implementation system call names may differ from those listed in section 2 of the
manual; stat(2) is especially vulnerbale to mangling.
- 3d ignores calls not present in a particular host system. In addition, 3d only works on dynamically
linked executables that have neither set-uid nor set-gid permissions. It may not have the intended effect on programs
written in a language or linked with a language runtime that hides or mangles system call library symbols, or that
directly emit system call instruction sequences rather than using the corresponding library functions, or that
dynamically link libraries outside of the scope of the 3d intercepts.
- Multi-process client-server applications may misbehave if the 3d environment between the related processes
is not kept in sync.
-
- 3d is implemented by four components: the 3d script, located on $PATH; the 3d dll
(shared library), located either on $PATH or in one of the ../lib* directories on $PATH, depending
on local compilation system conventions; and the 2d sh(1)
alias and _2d sh(1) function that allow commands to be run
with nDFS semantics disabled. Systems like sgi.mips3 that support multiple a.out formats may have
multiple versions of the 3d dll. In all cases the 3d script handles the dll search.
-
- $ 3d
- $ VPATH=$INSTALLROOT:$PACKAGEROOT 3d
- $ 3d ls -l
- $ 2d ls -l
-
- env(1), ie(1),
sh(1), trace(1),
warp(1), stat(2)
-
- version
- 3d (AT&T Labs Research) 2006-10-01
- author
- Glenn Fowler <gsf@research.att.com
>
- author
- David Korn <dgk@research.att.com>
- author
- Eduardo Krell <ekrell@adexus.cl>
- copyright
- Copyright © 1989-2009 AT&T Intellectual Property
- license
- http://www.opensource.org/licenses/cpl1.0.txt