Upload
bindumishra
View
30
Download
1
Tags:
Embed Size (px)
Citation preview
Lecture On“Unix File System and Other Issues”
M M Gore CSED MNNIT
Introduction• “Technically, Unix is a simple, coherent system which
pushes a few good ideas to the limit.”—Sunil Das• “The greatest virtues of Unix, in my opinion, are those that
emerged as a result of the way that it developed.”—Peter Salus
• “The growth and development of Unix is an exciting sociological tale. . . . The nature of the individuals and their interactions is what made Unix vital.”—Peter Salus
• “UNIX is simple and coherent, but it takes a genius (or at any rate, a programmer) to understand and appreciate its simplicity.”—Dennis Ritchie
• The history of Unix is a story of intrigue, adaptability, desire, cunning, intellectual honesty, and the pursuit of freedom and happiness.—Mark Shacklette
Unix Core Philosophy Summary I
• Each program should do one thing and do it well. If you need something new, add a new simple program rather than bloat existing programs with new features.
• Allow the output of every program to be the input to another independent program. Don't clutter output with extraneous information. Avoid columnar and binary formats for I/O. Don't insist on interactive input.
• Design and build software, even operating systems, to be tested early on in the development cycle. Throw away the clumsy parts and rewrite them.
Unix Core Philosophy Summary II• Favor general-purpose software tools, even if you have to
take the time to stop and write the tools yourself.• Honesty: Admit your bugs, even advertise them so that
others won’t trip over them• Do not assume, a priori, that your users are idiots• When forced to decide between portability and speed,
always opt for portability (speed will come, Grasshopper)• Give users choice (as in shell, editor, etc.)• Provide online help (from Multics)• Provide source code for freedom and empowerment(cf. McIlroy, Pinson, Tague, "Unix Time-Sharing System Forward", The Bell System Technical Jounal, July -Aug 1978;
57.6.2, p. 1902)
The Unix File System
• Unix is Pro-Family (Hierarchical)– Parent, child, current directories
• Absolute pathnames (start at root)• Relative pathnames (start where you are)• Important standard directories:
– / /home /usr /usr/bin– /sbin /usr/sbin /etc /var– /dev /tmp /usr/ucb
The Home Directory
• Your home directory is defined in /etc/passwd
• You can use any of the following commands to get home:
– cd
– cd ~
– cd $HOME
– cd /full/path/to/your/home/dir
• Change to the previous (last) directory:
– cd -
Man Pages
• Man man
• Sections:
– user
– system calls
– C library functions/X Windows functions
– devices and network interfaces
– file formats
– games and demos
– environments/miscellaneous
– system administration/maintenance
• whatis keyword
• man [1,2] write (1 is user command, 2 is system call)
• man -k keyword (or apropos keyword)
“Everything in Unix is a File”• A file has a name and an associated inode, which contains
detailed information about the file • What is a directory?
– A file containing a list of other files, some of which may be other directories
– A file whose contents is a list of name + inode pairs• The directory structure is an abstraction that presents
files on a file system in a hierarchical manner—but the files’ contents remain littered across the physical file system.
• A file is a stream of bytes• A file is referenced by a user via a filename. A filename
can be up to 255 bytes.• A file is referenced by the system via the inode
inode details• Every file is associated with a potentially unique inode. In fact, early
Unix systems refered to filenames as “links”, that is, names “linked” to an inode.
• The inode contains information about the file and the inode itself, like:– File type (regular, link, directory, etc.)– Number of Hard Links to the inode– Associated file byte stream length in bytes– Device ID where the file is located (/dev/hda1)– Inode number of this file– File owner’s userid and groupid– mtime, atime, and ctime– permissions (rwx)
• ls -i (ls -1iF)• The stat command
File Permissions
• Files have three categories of permissions:– user (owner)– group– other (everyone else NOT in one of the above)
• r (4): Read permission (can open the file)• w(2): Write permission (can modify it)• x (1): Execute permission (can run it)
Directory Permissions
• Directories have three categories of permissions:– user (owner)
– group
– other (everyone else NOT in one of the above)
• r (4): Read permission (can ls the filenames)• w(2): Write permission (can modify the dir)• x (1): Execute permission (can cd into dir)• t (sticky bit): individual ownership only
Links• Hard Links
– ln origfile linkfile– a directory entry with a unique name referencing a particular inode– ls -i will list out inodes for files (ls -1iF)– Only superuser can hard link to a directory– Hard links are only meaningful within a single filesystem, not across
mount points– A hard link’s inode is the same number as the linked file’s inode
• Soft (Symbolic) Links:– ln -s origfile linkfile– Anyone can create a soft link to a directory– A softlink can refer to another file on another filesystem– ls -[l]F will reveal softlinks (noted by -> pointer and @ notation)– A softlink’s contents is the name of the file pointed to.
Redirection
• Unix has three default file handles (defined in /usr/include/unistd.h):– Standard Output (stdio, 1)– Standard Error (stderr, 2)– Standard Input (stdin, 0)
• By default, standard output is sent to the current process owner’s terminal
• Redirection causes the standard output of the current process to go to some other designated file:– ls -la >/tmp/some.other.file– cat /tmp/some.other.file
Job Control
• & puts current process in background
• jobs prints out current jobs in shell
• kill %n terminates a given job
• fg [%n] moves a job to the foreground
• bg [%n] moves a job to the background
Filters• Filters are programs that are written to accept input from STDIN in
addition to any other forms of input.• Filters send output to STDOUT.• The list of Unix Filters includes:
– cat– cut– less– grep– sort– tr– uniq– wc– tail, head– lpr
The Four Stages of Compilation
• preprocessing• compilation• assembly• linking
gcc driver program (toplev.c)
• cpp: C PreProcessor• cc1: RTL (Register Transfer Language) processor• as: assembler• ld: loader (linker)
The GNU CC Compilation Process
• GCC is portable:– multiplatform (intel, MIPS, RISC, Sparc,
Motorola, etc.)– multiOS (BSD,AIX, Linux, HPUX, mach,
IRIX, minix, msdos, Solaris, Windoze, etc.)– Multilingual (C, Objective C, C++, Fortran,
etc.)• Single first parsing pass that generates a parsing
tree
The GNU CC Compilation Process• Register Transfer Language generation
– close to 30 additional passes operate on RTL Expressions (RTXs), constructed from partial syntax trees
– gcc –c –dr filename.c– RTL is Lisp-like
• cond(if_then_else cond then else)• (eq: m x y)• (set lval x)• (call function numargs)• (parallel [x0 x1 x2 xn])
• Final output is assembly language, obtained by mapping RTX to a machine dependency dictionary– ~/mark/pub/51081/compiler/i386.md
Assembler Tasks
• converts assembly source code into machine instructions, producing an “object” file (called “.o”)
Loader (Linker) tasks
• The Loader (linker) creates an executable process image within a file, and makes sure that any functions or subprocesses needed are available or known. Library functions that are used by the code are linked in, either statically or dynamically.
Preprocessor Options
• -E preprocess only: send preprocessed output to standard out--no compile
– output file: file.c -> file.i file.cpp -> file.ii
• -M produce dependencies for make to stdout (voluble)
• -C keep comments in output (used with -E above):– -E -C
• -H printer Header dependency tree
• -dM Tell preprocessor to output only a list of macro defs in effect at end of preprocessing. (used with -E above)
– gcc -E -dM funcs.c |grep MAX
Compiler Options
• -c compile only• -S send assembler output source to *.s
– output file: file.c -> file.s • -w Suppress All Warnings
– gcc warnings.c– gcc -w warnings.c
• -W Produce warnings about side-effects (falling out of a function)– gcc -W warnings.c
Compiler Options (cont)
• -I Specify additional include file paths• -Wall Produce many warnings about questionable
practices; implicit declarations, newlines in comments, questionable lack of parentheses, uninitialized variable usage, unused variables, etc.– gcc -Wall warnings.c
• -pedantic Warn on violations from ANSI compatibility (only reports violations required by ANSI spec).– gcc -pedantic warnings.c
Compiler Options (cont)
• -O optimize (1,2,3,0)– -O,-O1 base optimizations, no auto inlines, no loops– -O2 performs additional optimizations except inline-
functions optimization and loop optimization– -O3 also turns on inline-functions and loop
optimization– -O1 default
• -g include debug info (can tell it what debugger):– -gcoff COFF format for sdb (System V < Release 4)– -gstabs for dbx on BSD– -gxcoff for dbx on IBM RS/6000 systems– -gdwarf for sdb on System V Release 4
Compiler Options (cont)
• -save-temps save temp files (foo.i, foo.s, foo.o)• -print-search-dirs print the install, program, and
libraries paths• -gprof create profiling output for gprof• -v verbose output (useful at times)• -nostartfiles skip linking of standard start files,
like /usr/lib/crt[0,1].o, /usr/lib/crti.o, etc.• -static link only to static (.a=archive) libraries• -shared if possible, prefer shared libraries over
static
Assembler Options (use gcc -Wa,-options to pass options to assembler)
• -ahl generate high level assembly language source – gcc -Wa,-ahl warnings.c
• -as generate a listing of the symbol table– gcc -Wa,-as warnings.c
Linker Options (use gcc -Wl,-options to pass options to the loader)
• gcc passes any unknown options to the linker• -l lib (default naming convention liblib.a)• -L lib path (in addition to default /usr/lib and /lib)• -s strip final executable code of symbol and
relocation tables– gcc -w –g warnings.c ; ls -l a.out ; gcc -w -
Wl,-s warnings.c ; ls -l a.out• -M create load Map to stdout
How do Shared Libraries Work?
• When a program runs that depends on a shared library (discover with ldd progname), the dynamic linker will attempt to find the shared library referenced by the soname
• Once all libraries are found, the dependent code is dynamically linked to your program, which is then executed
• Reference: The Linux Program-Library HOWTO
Unix File I/O
Unix System Calls
• System calls are low level functions the operating system makes available to applications via a defined API (Application Programming Interface)
• System calls represent the interface the kernel presents to user applications
A File is a File is a File--Gertrude Stein
• Remember, “Everything in Unix is a File”• This means that all low-level I/O is done by
reading and writing file handles, regardless of what particular peripheral device is being accessed—a tape, a socket, even your terminal, they are all files.
• Low level I/O is performed by making system calls
User and Kernel Space
• System memory is divided into two parts:– user space
• a process executing in user space is executing in user mode
• each user process is protected (isolated) from another (except for shared memory segments and mmapings in IPC)
– kernel space• a process executing in kernel space is executing in kernel
mode• Kernel space is the area wherein the kernel executes• User space is the area where a user program normally executes,
except when it performs a system call.
Anatomy of a System Call
• A System Call is an explicit request to the kernel made via a software interrupt
• The standard C Library (libc) provides wrapper routines, which basically provide a user space API for all system calls, thus facilitating the context switch from user to kernel mode
• The wrapper routine (in Linux) makes an interrupt call 0x80 (vector 128 in the Interrupt Descriptor Table)
• The wrapper routine makes a call to a system call handler (sometimes called the “call gate”), which executes in kernel mode
• The system call handler in turns calls the system call interrupt service routine (ISR), which also executes in kernel mode.
Regardless…
• Regardless of the type of file you are reading or writing, the general strategy remains the same:– creat() a file– open() a file– read() a file– write() a file– close() a file
• These functions constitute Unix Unbuffered I/O• ALL files are referenced by an integer file
descriptor (0 == STDIN, 1 == STDOUT, 2 == STDERR)
read() and write()
• Low level system calls return a count of the number of bytes processed (read or written)
• This count may be less than the amount requested• A value of 0 indicates EOF• A value of –1 indicates ERROR• The BUFSIZ #define (8192, 512)
read()
#include <unistd.h>
ssize_t read(int fd, void * buf, size_t count);
• If read() is successful, it returns the number of bytes read
• If it returns 0, it indicates EOF• If unsuccessful, it returns –1 and sets errno
write()
#include <unistd.h>
ssize_t write(int fd, void * buf, size_t count);
• If write() is successful, it returns the number of bytes written to the file descriptor, this will usually equal count
• If it returns 0, it indicates 0 bytes were written• If unsuccessful, it returns –1 and sets errno
open()
#include <fcntl.h>int open(const char * path, int flags[, mode_t
mode]);
• flags may be OR’d together:– O_RDONLY open for reading only– O_WRONLY open for writing only– O_RDRW open for both reading and writing– O_APPEND open for appending to the end of file– O_TRUNC truncate to 0 length if file exists– O_CREAT create the file if it doesn’t exist
• path is the pathname of the file to open/create• file descriptor is returned on success, -1 on error
creat()
• Dennis Ritchie was once asked what was the single biggest thing he regretted about the C language. He said “leaving off the ‘e’ on creat()”.
• The creat() system call creates a file with certain permissions:int creat(const char * filename, mode_t mode);
• The mode lets you specifiy the permissions assigned to the file after creation
• The file is opened for writing only
open() (create file)
• When we use the O_CREAT flag with open(), we need to define the mode (rights mask from sys/stat.h):– S_IRUSR read permission granted to OWNER– S_IWUSR write permission granted to OWNER– S_IXUSR execute permission granted to OWNER– S_IRGRP read permission granted to GROUP
• etc.– S_IROTH read permission granted to OTHERS
• etc.• Example:
int fd = open(“/path/to/file”, O_CREAT, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH);
close()
#include <unistd.h>
int close( int fd );
• close() closes a file descriptor (fd) that has been opened.
lseek()
#include <sys/types.h>#include <unistd.h>long lseek(int fd, long offset, int startingpoint)• lseek moves the current file pointer of the file associated
with file descriptor fd to a new position for the next read/write call
• offset is given in number of bytes, either positive or negative from startingpoint
• startingpoint may be one of:– SEEK_SET move from beginning of the file– SEEK_CUR move from current position– SEEK_END move from the end of the file
Error Handling
• System calls set a global integer called errno on error:– extern int errno; /* defined in /usr/include/errno.h */
• The constants that errno may be set to are defined in </usr/include/asm/errno.h>. For example:– EPERM operation not permitted– ENOENT no such file or directory (not there)– EIO I/O error– EEXIST file already exists– ENODEV no such device exists– EINVAL invalid argument passed
#include <stdio.h>void perror(const char * s);
stat():int stat(const char * pathname; struct stat *buf);
• The stat() system call returns a structure (into a buffer you pass in) representing all the stat values for a given filename. This information includes:– the file’s mode (permissions)– inode number– number of hard links– user id of owner of file– group id of owner of file– file size– last access, modification, change times– less /usr/include/sys/stat.h => /usr/include/bits/stat.h– less /usr/include/sys/types.h (S_IFMT, S_IFCHR, etc.)
• Example: ~/UofC/51081/pub/51081/stat/mystat.c
Introduction to make
Debugging with gdb and ddd
Introduction to Systems Programming:
Processes and Signals
make
What is make?
• make is used to:
– save time by not recompiling files that haven't changed
– make sure all files that have changed do get recompiled
The Concept
• make is a program that will update targets on the basis of changes in dependencies.
• Although it is mostly used to build software by compiling and linking, it can be used to manage any construction project that involves creating something based on something else (e.g., using nroff over a series of book chapters).
• A makefile is nothing more than dependencies and rules. A rule describes HOW to create the target from the dependencies.
Calling Convention and Options
• -n don't make, but print out what would be done
• -k keep going, don't stop on errors, which is the default
• -f run makefile specified by filename• Default makefile naming convention
– makefile– Makefile
Dependencies and Rules
• Dependencies and Syntax– target: dep1 dep2 depn– make will build the first target it finds– this target is commonly called "all"
• all: bigapp• Rules
– It is a rule that every rule must begin with a single TAB character!
• [TAB] gcc -c 1.c• make has several built-in rules
– make -p will show them to you
Macros and Multiple Targets• a MACRO is a substitutable syntax to give flexibility and
genericity to rules• Forms:
– MACRONAME=value– access with either:
• $(MACRONAME) or• ${MACRONAME} or (sometimes)
$MACRONAME– undefine a MACRO with:
• MACRONAME=• A macro can be redefined at the command line:
– make CC=aCC #for HP Ansi compiler• Examples: (make2, make3)
Suffix Rules• a Suffix Rule is a directive that applies rules and macros to generic
suffixes• tell make about a new suffix: SUFFIXES: .cpp• tell make how to compile it: .cpp.o:• then the rule: $(CC) -xc++ $(CFLAGS) -I$(INCLUDE) -c $<• Built in suffix macros:
– $@ The full name of the current target– $? A list of modified dependencies (a list of files newer than the
target on which the target depends)– $< The single file that is newer than the target on which the target
is dependent– $* The name of the target file, WITHOUT its suffix (i.e., without
the .c or .cpp, etc.)
Debugging with gdb and ddd
What is a bug?
• a bug exists when executable code returns or causes results that are unintended or undesirable.– You can only have a bug in code that's
compiled or a shell script that's executed by the shell (ie. the compiler or shell do not give errors about compilation).
• Don't confuse design errors with code bugs (don't confuse design with implementation)
Finding bugs
• Problem statement: Code runs fast and furious--we must find out "where" in the code the problem originates.
• Solution statement:– attempt to make bug repeatable--this is empirical
analysis, pure and simple.– printf's can help, displaying variables, but they're
limited.• gcc -o cinfo -DDEBUG cinfo.c• cinfo
– __DATE__, __TIME__, __LINE__
• Examples: (in ~mark/pub/51081/debug) cinfo.c
Interactive Debuggers• But interactive debuggers are MUCH better, because they
offer:– run time code stepping– variable analysis and modification– breakpoints (multiple forms)
• Compile for debugging: -g – Try to void optimizing when debugging
• remaining problems:– loop tracing (problem doesn't arise until loop has
executed 1M times)– Optimization problems– Intermittency
• Examples: debug3 (gdb); debug4 (ddd)
Introduction to Systems Programming
Processes
Signals
Introduction to Processes• Multiuser OS
– Ability of an OS to have multiple users using the system at the same time
• Multitasking OS– Ability of an OS to run multiple programs at the same
time– “Pay No Attention To The Man Behind the Screen”
• Concurrency versus Parallelism– timesharing quantums done by the system scheduler
(called swapper), which is a kernel thread and has process ID of 0
What is a Process?
• A process is an executable “cradle” in which a program may run
• This “cradle” provides an environment in which the program can run, offering memory resources, terminal IO, via access to kernel services.
• When a new process is created, a copy of the parent process’ environment variables is provided as a default to the new process
• A process is an address space married to a single default thread of control that executes on code within that address space
• ps -yal
Introduction to Processes• Other kernel threads are created to run the following
services (various Unix kernels vary, YMMV):
– initd (1): parent initializer of all processes
– keventd (2): kernel event handler
– kswapd (3): kernel memory manager
– kreclaimd (4): reclaims pages in vm when unused
– bdflush (5): cleans memory by flushing dirty buffers from disk cache
– kupdated (6): maintains sanity of filesystem buffers
User and Kernel Space• System memory is divided into two parts:
– user space• a process executing in user space is executing in
user mode• each user process is protected (isolated) from
another (except for shared memory segments and mmapings in IPC)
– kernel space• a process executing in kernel space is executing in
kernel mode• Kernel space is the area wherein the kernel executes• User space is the area where a user program normally
executes, except when it performs a system call.
Anatomy of a System Call• A System Call is an explicit request to the kernel made via a
software interrupt• The standard C Library (libc) provides wrapper routines,
which basically provide a user space API for all system calls, thus facilitating the context switch from user to kernel mode
• The wrapper routine (in Linux) makes an interrupt call 0x80 (vector 128 in the Interrupt Descriptor Table)
• The wrapper routine makes a call to a system call handler (sometimes called the “call gate), which executes in kernel mode
• The system call handler in turns calls the system call interrupt service routine (ISR), which also executes in kernel mode.
ELF (Executable and Linking Format)
• Heap is for dynamic memory demand (malloc())
• Stack is for function call storage and automatic variables
• BSS (Block Started by Symbol) stores uninitialized static data
int array[100];
• Data Segment stores initialized static data
char name[] = “bob”;
• Multiple processes can share the same code segment
dynamiclibraries
unitializeddata area
(BSS)NULLed out
initialized datasegment
(loaded from objectfile on disk)
DA
TA
SE
GM
EN
T
Heap
Stackgrows
grows
Text Segment(YCGH)
C Language Allocation
dynamiclibraries
unitializeddata area
(BSS)NULLed out
initialized datasegment
(loaded from objectfile on disk)
DA
TA
SE
GM
EN
T
Heap
Stackgrows
grows
Text Segment(YCGH)
char * p = malloc(1024);
int iarray[20];
int iarray2[] = { 1,2,3 };
int main() { ... }
int myfunc(int x, float y) { int z; }
The Linux Process Descriptor• Each Linux process is described by a task_struct structure
defined in include/linux/sched.h• This structure holds information on most aspects of a
process in memory, including, among other items:– process state– next and previous task pointers– next and previous runnable task pointers– Parent, Child, and Sibling pointers– tty information– current directory information– open file descriptors table– memory pointers– signals received
Task State• TASK_RUNNING: running or waiting to be executed
• TASK_INTERRUPTIBLE: a sleeping or suspended process, can be awakened by signal
• TASK_STOPPED: process is stopped (as by a debugger or SIGTSTP, Ctrl-Z)
• TASK_ZOMBIE: process is in “walking dead” state waiting for parent process to issue wait() call
• TASK_UNINTERRUPTIBLE: task is performing critical operation and should not be interrupted by a signal (usually used with device drivers)
Signal Processing
“Introduction to Interprocess Communication”
What is a Signal?• A signal is a software interrupt delivered to a process by
the OS because:– it did something (oops)– the user did something (pressed ^C)– another process wants to tell it something (SIGUSR?)
• A signal is asynchronous, it may be raised at any time (almost)
• Some signals are directly related to hardware (illegal instruction, arithmetic exception, such as attempt to divide by 0)
• Others are purely software signals (interrupt, bad system call, segmentation fault)
Common Signals
• SIGHUP (1): sent to a process when its controlling terminal has disconnected
• SIGINT (2): Ctrl-C (or DELETE key)• SIGQUIT (3): Ctrl-\ (default produces core)• SIGSEGV (11): Segmentation fault• SIGILL (4): Illegal instruction (default core)• SIGUSR[1,2]: User-defined signals (10,12)• kill –l will list all signals• SIGFPE (8):Floating Point Exception (divide by
0; integer overflow; floating-point underflow)
Chris Brown’s Top 6 List of Things to Do with a Signal Once You Trap It
1. Ignore a signal
2. Clean up and terminate
3. Handle Dynamic Configuration (SIGHUP)
4. Report status, dump internal tables
5. Toggle debugging on/off
6. Implement a timeout condition
(cf. Chris Brown, Unix Distributed Programming, Prentice Hall, 1994)
Reliable and Unreliable Signal APIs
• Signal model provided by AT&T Version 7 was “not reliable”, meaning that signals could get “lost” on the one hand, and programs could not turn signal delivery “off” during critical sections, on the other hand.
• BSD 4.3 and System V Release 3 delivered reliable signals, which solved many of the problems with signals present in Version 7.
• And if that weren’t enough, SVR4 introduced POSIX signals.
Signal Disposition
• Ignore the signal (most signals can simply be ignored, except SIGKILL and SIGSTOP)
• Handle the signal disposition via a signal handler routine. This allows us to gracefully shutdown a program when the user presses Ctrl-C (SIGINT).
• Block the signal. In this case, the OS queues signals for possible later delivery
• Let the default apply (usually process termination)
Names & Contents of Important UNIX Directories
Directory
Description
/ root - kernel
/sbin files required to start the system and scripts to control the boot process
Names & Contents of Important UNIX Directories Cont…
/etc
Files required to boot the system and communicate, and scripts to control the boot process
/etc/config System configuration option
files
/etc/cron.d cron access files and FIFO
Names & Contents of Important UNIX Directories Cont…
/etc/default Default system configuration
/etc/dfs Distributed file sharing configuration
/etc/fs Static file system specific mount commands
Names & Contents of Important UNIX Directories Cont…
/etc/fdmnsFile domain names and devices, symbolic links to the file volumes
/etc/inet Internet services configuration
/etc/init.d Internet service scripts run by init
Names & Contents of Important UNIX Directories Cont…
/etc/lib Shared libraries required for boot
/etc/lp Line printer system configuration
/etc/mail Mail configuration
Names & Contents of Important UNIX Directories Cont…
/etc/net Configuration for transport-independent network services
/etc/opt Optional software package configuration files
/etc/rc#.d Operations performed when entering run level # (S, 0, 1, 2, 3)
Names & Contents of Important UNIX Directories Cont…
/etc/saf Service access facility configuration
/etc/security Security audit configuration
/etc/sec Security audit configuration
Names & Contents of Important UNIX Directories Cont…
/usr Directories of system files
/usr/bin System binary files
/usr/etc Further system communication and administration programs
Names & Contents of Important UNIX Directories Cont…
/usr/sbin Further system communication and administration programs
/usr/lib Libraries of object files, sendmail
/usr/4lib SunOS 4.1 libraries required for binary compatibility
Names & Contents of Important UNIX Directories Cont…
/usr/5bin System V binaries
/usr/5include System V include files
/usr/5lib System V libraries
Names & Contents of Important UNIX Directories Cont…
/usr/aset Automated security enhancement tool files and programs
/usr/ucb BSD binaries
/usr/bsd BSD binaries
Names & Contents of Important UNIX Directories Cont…
/usr/ccs Compiler support system
/usr/dt CDE desktop hierarchy
/usr/lib/fs File system dependent modules
Names & Contents of Important UNIX Directories Cont…
/use/lib/lp Line printer database and programs
/usr/lib/netsvc Network service utilities
/usr/lib/nfs NFS daemons and programs
Names & Contents of Important UNIX Directories Cont…
/usr/lib/nis NIS+ programs and setup scripts
/usr/lib/saf SAF daemons and programs
/var Directories for administrative programs and logs
Names & Contents of Important UNIX Directories Cont…
/var/adm System log and account files
/var/log System log files
/var/spool/mail Mail spool directory
Names & Contents of Important UNIX Directories Cont…
/var/mail Mail spool directory
/var/yp NIS tables and Makefile for updating NIS
/var/nis NIS+ tables
Names & Contents of Important UNIX Directories Cont…
/var/spool Directories for corn, logs, etc.
/var/sadm Databases maintained by package administration utilities
/var/inst Database maintained by inst utility
/var/saf Service access facility log and account files
Names & Contents of Important UNIX Directories Cont…
/dev devices directory
/dev/dskBlock disk devices directory
Names & Contents of Important UNIX Directories Cont…
/dev/rdsk Raw disk devices directory
/dev/ptsPseudo terminal (pty) devices directory
/dev/rmt Raw tape device directory
/dev/term Terminal devices directory
/dev/sadEntry points for STREAMS administrative drivers
Names & Contents of Important UNIX Directories Cont…
/devices Physical devices directory
/home/usr/people/usr/users User directories
/tftpboot/usr/local/boot Client boot programs
/tmp Temporary files
Names & Contents of Important UNIX Directories Cont…
/usr/local Locally installed files
/opt Locally installed packages and files
/kernel Contains the kernel and drivers for the kernel
/platform Hardware specific files for kernel support
Names & Contents of Important UNIX Directories Cont…
/standStandalone environment programs, can be accessed from the PROM
/procFor process access file system, it provides access to all current processes
/sys Object files to reconfigure the
kernel
/vol Vold mount points