This software is provided without support and without any obligation on the part of Silicon Graphics, Inc. to assist in its use, correction, modification or enhancement. THIS SOFTWARE IS PROVIDED "AS IS" WITH NO WARRANTIES OF ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. Note: This is for IRIX 4.0.x. rfind is included in IRIX 5.x. Description: Rfind is a fast client-server adaption of the find(1) command. It has been in heavy use inside Silicon Graphics since August, 1991. The rfind(1) command allows rapid search of network accessible file systems using a streamlined find(1) like syntax. Typical searches over multi-GByte filesystems take a few seconds, or less! The server side utility fsdump collects data (inode contents and pathnames) from all the specified file systems on a server, typically once an hour. It uses internal knowledge of the EFS file system layout to collect and update a separate database quickly and with minimum load on the server, at typical rates of roughly 1 GByte of inuse space per minute. The executable fsdump must be installed with setuid or setgid permissions sufficient to allow it to open the raw disk slices under the specified file systems read-only. Typically, this means that fsdump must be setuid root. Fsdump is invoked via the crontab entry for a synthetic user called "rfindd". It gathers inode contents using its setuid/gid priviledges, but it gathers pathnames using whatever priviledges are granted to the user "rfindd". This for example, keeps my boss for noticing that I have a file named "resume" under a mode 700 directory. The collected data resides in /usr/lib/rfindd (which can be a symbolic link to a directory on some other disk), and typically requires 100 to 140 bytes per inuse inode, or perhaps 1% to 2% of the inuse space on the specified file systems. The rfind daemon also runs on the server, and answers requests from clients received via RPC, using the data collected. The small rfind client (102K) is installed on each client workstation. It uses an improved find(1) like syntax to issue requests to any rfind daemon available on the network. Multiple clients can efficiently search large server file systems in seconds for files matching a Boolean expression. The most common request, to find a file by name, for example: rfind serverx foobar completes in 1 to 3 seconds, listing all files named "foobar" on the system called "serverx". The rfind command uses a find(1) like syntax, and the above example could also have been entered as: rfind serverx -name foobar -print But rfind supports various defaults to make entering such commands easier. Difficult requests on multi-GByte file systems sometimes take 30 seconds or a minute. The first argument to rfind is always a specifier of the file-system (machine name and pathname, or equivalent) to be searched, and each invocation of rfind will only search a single file system. Comparison to find(1) The rfind(1) command has the following new options that are not available in the find(1) command: -root, -ls, -printf, -none, -ncheck, -showdots, -stcount, -stsize, -sttotal, -changed and -exit. The following find(1) options are not available in rfind(1): -cpio, -ok, -exec, -local and -mount. Since the preferred way to create cpio archives is to use the cpio(1) command itself, perhaps receiving filenames via a pipe from the find(1) command, it did not seem worthwhile to maintain the obsolete variant of cpio that is embedded in the find(1) command. Since the rfind(1) uses rpc(3R) with minimal authentication, the -ok and -exec options would have presented unacceptable security compromises. Since the rfind(1) command only works on a single file-system, the -local and -mount options are effectively always on. The find(1) searches in realtime on multiple file systems, whereas rfind(1) searches the previously created data file of a single file system. The find(1) command is a single process utility, whereas the rfind(1) command is the frontend of client-server utility. Searching a large file system is many times faster with rfind(1) than with find(1). The -name file option of rfind(1) supports multiple components in the pattern file. The command line defaults simplify the use of rfind(1). Distribution: rfind.tar.Z - Client and server commands and configuration Compiled and intended to be used on IRIX 4.0.5 based systems. Installation: As super-user, unpack the binaries and data files from rfind.tar.Z, using the following command: zcat rfind.tar.Z | tar xvf - This will create a directory ./rfind, and unpack the rfind.tar.Z archive into that subdirectory, resulting in files using an additional 405 KBytes. Then add the following line to your /etc/passwd (if installing the server) rfindd:*LK*:66:1:Rfind Daemon and Fsdump:/usr/lib/rfindd:/bin/sh Next run the Makefile to install the files in the appropriate location: su make both # installs both client and server OR make client # to just install the small client OR make server # to just install the large server Files installed: (showing: type, mode, uid, gid, installed path, local path) d 755 rfindd daemon usr/lib/rfindd f 4111 root sys usr/lib/rfindd/fsdump rfind/fsdump/fsdump f 644 rfindd daemon usr/spool/cron/crontabs/rfindd rfind/fsdump/crontab f 755 bin bin usr/lib/rfindd/fslist.build rfind/fsdump/fslist.build f 755 rfindd daemon usr/lib/rfindd/runfsdump rfind/fsdump/runfsdump f 644 rfindd daemon usr/lib/rfindd/fslist rfind/fsdump/fslist f 644 rfindd daemon usr/lib/rfindd/fsoptions rfind/fsdump/fsoptions f 755 bin bin usr/local/bin/rfind rfind/rfind/rfind f 644 bin bin usr/lib/rfind.aliases rfind/rfind/rfind.aliases f 755 rfindd daemon usr/lib/rfindd/rfindd rfind/rfindd/rfindd f 755 bin bin usr/lib/rfindd/start.server rfind/rfindd/start.server f 644 rfindd daemon usr/lib/rfindd/.forward rfind/rfindd/forward f 644 rfindd daemon usr/lib/rfindd/README rfind/rfindd/README f 644 bin bin usr/man/u_man/man1/rfind.1 rfind/man/rfind.1 f 644 bin bin usr/man/u_man/man1/rfindd.1m rfind/man/rfindd.1m f 644 bin bin usr/man/u_man/man1/fsdump.1m rfind/man/fsdump.1m f 644 bin bin usr/cat/u_man/cat1/rfind.z rfind/man/rfind.z f 644 bin bin usr/cat/u_man/cat1/rfindd.z rfind/man/rfindd.z f 644 bin bin usr/cat/u_man/cat1/fsdump.z rfind/man/fsdump.z f 644 root sys etc/config/rfindd rfind/config/rfindd f 755 rfindd daemon etc/init.d/rfindd rfind/init.d/rfindd l 0 root sys etc/rc2.d/S98rfindd rfind/init.d/rfindd l 0 root sys etc/rc0.d/K98rfindd rfind/init.d/rfindd f 755 rfindd daemon usr/lib/rfindd/rotatelogs rfind/rotatelogs/rotatelogs (showing: local path, comment) rfind/fsdump/fsdump setuid root: main data collector rfind/fsdump/crontab invokes "runfsdump" script periodically rfind/fsdump/fslist.build first time setup of /usr/lib/rfindd/fslist rfind/fsdump/runfsdump runs fsdump from cron on filesystems in fslist rfind/fsdump/fslist list of local efs file systems to run fsdump on rfind/fsdump/fsoptions options to specify on each fsdump invocation rfind/rfind/rfind client command - put on each clients $PATH rfind/rfind/rfind.aliases maps server nicknames to network host names rfind/rfindd/rfindd daemon on server to answer queries rfind/rfindd/start.server script to start rfindd and fsdump rfind/rfindd/forward causes email to rfindd to go to postmaster rfind/rfindd/README little roadmap, goes in /usr/lib/rfindd rfind/man/rfind.1 end user man page (long) rfind/man/rfindd.1m simply identifies rfindd rfind/man/fsdump.1m server installation/configuration rfind/man/rfind.z (packed) end user man page (long) rfind/man/rfindd.z (packed) simply identifies rfindd rfind/man/fsdump.z (packed) server installation/configuration rfind/config/rfindd /etc/chkconfig control of rfindd/fsdump rfind/init.d/rfindd system startup/shutdown for rfindd/fsdump rfind/rotatelogs/rotatelogs utility to rotate /usr/lib/rfindd/*.log files Comments: email to pj@sgi.com