You are on page 1of 95

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 wont 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 mannerbut 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 owners 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 links inode is the same number as the linked files 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 softlinks 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 owners 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 inlinefunctions 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 accesseda 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 ORd 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 doesnt 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 files 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)


dynamic libraries

grows

Heap

unitialized data area (BSS) NULLed out initialized data segment (loaded from object file on disk) Text Segment (YCGH)

grows

Stack

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

DATA SEGMENT

C Language Allocation
dynamic libraries

grows

Heap

char * p = malloc(1024);

unitialized data area (BSS) NULLed out initialized data segment (loaded from object file on disk) Text Segment (YCGH)

DATA SEGMENT

int iarray[20]; int iarray2[] = { 1,2,3 }; int main() { ... } int myfunc(int x, float y) { int z; }

grows

Stack

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 Browns Top 6 List of Things to Do with a Signal Once You Trap It
1. 2. 3. 4. 5. 6. Ignore a signal Clean up and terminate Handle Dynamic Configuration (SIGHUP) Report status, dump internal tables Toggle debugging on/off 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 werent 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
/ /sbin

Description
root - kernel 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 cron access files and FIFO

/etc/cron.d

Names & Contents of Important UNIX Directories Cont


/etc/default Default system configuration Distributed file sharing configuration Static file system specific mount commands

/etc/dfs

/etc/fs

Names & Contents of Important UNIX Directories Cont


/etc/fdmns File domain names and devices, symbolic links to the file volumes Internet services configuration

/etc/inet

/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 Libraries of object files, sendmail SunOS 4.1 libraries required for binary compatibility

/usr/lib

/usr/4lib

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. Databases maintained by package administration utilities Database maintained by inst utility Service access facility log and account files

/var/sadm

/var/inst

/var/saf

Names & Contents of Important UNIX Directories Cont


/dev /dev/dsk devices directory Block disk devices directory

Names & Contents of Important UNIX Directories Cont


/dev/rdsk /dev/pts /dev/rmt /dev/term /dev/sad Raw disk devices directory Pseudo terminal (pty) devices directory Raw tape device directory Terminal devices directory Entry points for STREAMS administrative drivers

Names & Contents of Important UNIX Directories Cont


/devices Physical devices directory User directories /home/usr/people/usr/users

Client boot programs /tftpboot/usr/local/boot /tmp Temporary files

Names & Contents of Important UNIX Directories Cont


/usr/local Locally installed files

/opt

Locally installed packages and files Contains the kernel and drivers for the kernel Hardware specific files for kernel support

/kernel

/platform

Names & Contents of Important UNIX Directories Cont


/stand Standalone environment programs, can be accessed from the PROM For process access file system, it provides access to all current processes Object files to reconfigure the kernel Vold mount points

/proc

/sys

/vol