Unix File System

Preview:

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

Recommended