Unix File System Organization
Every Unix has a similar organization of the file system. a
listing of the root directory ("/") will show a list of
directories similar to those shown below:
|
[loriotg@l-dl-asac31601 xcd] cd /
[loriotg@l-dl-asac31601 /] ls -F
bin/ etc/ lib32/ opt/ selinux/ usr/
boot/ home/ lib64/ proc/ software/ var/
cdrom/ initrd.img@ lost+found/ root/ srv/ vmlinuz@
data/ initrd.img.old@ media/ run/ sys/ vmlinuz.old@
dev/ lib/ mnt/ sbin/ tmp/
[loriotg@l-dl-asac31601 /]
|
bin - contains system binary executables
boot - contains files necessary for the system to boot up
dev - contains device files which function as an interface to the
various hardware drivers. These will vary greatly depending on
the version of Unix.
etc - contains system configuration settings
home - contains the user's home directories (often but not at LSC/ATM Linux network)
mnt/homes - contains the user's home directories at the LSC/ATM network)
lib - contains system libraries for 32- bit applications
lib64 - contains system libraries for 64- bit applications
lost+found - ignore
mnt - used to hold mount point directories for removable storage
opt - contains optional applications
proc - contains a virtual file system which holds information about
running processes and the state of the system.
root - the root (administrator) user's home directory
sbin - contains static binary executables needed for the system
software - contains site-specific software
tmp - temporary directory used by many applications
usr - contains binaries, data and settings for various applications.
The structure of /usr mimics the root file system organization.
var - stores logs, data for services and other transient data.
The actual organization for each version will be slightly different
depending on the version of Unix but the general layout will be
similar.
Your home directory
The home directory is unique for each user account on the system.
This directory can be managed completely by the user and will not
be accessible to other users. All user specific settings for
various applications are stored in the home directory usually in hidden
files. It is intended for the user to store their personal data
files in this location.
When a user logs into a Unix system their shell will have its
working directory set to the home directory by default.
The home directory can be referenced by the "~"
character.
|
[loriotg@l-dl-asac31601 /] echo $HOME
/mnt/homes/loriotg
[loriotg@l-dl-asac31601 /] cd
[loriotg@l-dl-asac31601 ~] pwd
/mnt/homes/loriotg
[loriotg@l-dl-asac31601 ~]
|
Symbolic links
Symbolic links are part of the Unix file system. They function
merely as a pointer to another file or directory on the file
system.
Symbolic links have not permissions of their own. The target file
or directory permissions will determine the access priveledges.
The link itself has a name on the file system which does not have
to be the same as the target it points to. For all practical
purposes the link can be operated on with all unix commands just
as any other file. Deleting a symbolic link will only delete the
link, not the file that the link points to.
Below is a long listing of the file ~/.bashrc which is a symbolic
link.
|
[loriotg@l-dl-asac31601 ~] ls -la .bashrc
lrwxrwxrwx 1 root root 26 Jul 15 2008 .bashrc -> /mnt/homes/00links/.bashrc*
[loriotg@l-dl-asac31601 ~]
|
Symbolic links are created with the ln
command with
the "-s" option.:
|
[loriotg@l-dl-asac31601 ~] ln -s /mnt/homes/CLASSES/CIS2101 ./unix-class
[loriotg@l-dl-asac31601 ~] ls -l unix-class
lrwxrwxrwx 1 loriotg loriotg 26 Sep 17 20:05 unix-class -> /mnt/homes/CLASSES/CIS2101/
[loriotg@l-dl-asac31601 ~]
|
The ln command takes two arguments: the first is the name of the
target file or directory that the link will point to. The second
argument is the name of the link.
You must use the "-s" option to create symbolic links. ln
by itself will create a hard link which creates a second name for
the file. These can be very difficult to manage and generally
should not be created unless you know what you are doing.
Hidden Files
In Unix files whose names begin with the dot character, ".", are
considered hidden. Most commands will not display these files by
default. The ls
command with the "-a" option will
display all hidden files.
|
tuckerm@apollo:~> ls
BG/ TEST/ files/ mcidas/ test/
Desktop/ btvnws_id_dsa.pub fish/ public_html/ unix/
GNUstep/ docs/ foo/ scripts/ web/
OpenOffice.org1.1/ dotfiles/ html/ src/ z-drive@
PERL/ elisp/ mail/ start-vnc.sh*
tuckerm@apollo:~> ls -a
./ .gconfd/ .mysql_history .xscreensaver
../ .gimp-1.2/ .nautilus/ .xsession*
.ICEauthority .gimp-1.3/ .nedit/ .xsession-errors
.Trash/ .gkrellm2/ .netscape/ .xvpics/
.Xauthority .gnome/ .netscape6/ BG/
.Xresources .gnome2/ .nfs074bc1b600000005 Desktop/
.acrobat/ .gnome2_private/ .phoenix/ GNUstep/
.adobe/ .gstreamer-0.8/ .pinerc OpenOffice.org1.1/
.bash_history .gtkrc-1.2-gnome2 .profile PERL/
.bash_profile@ .gxine/ .qt/ TEST/
.bashrc@ .history .recently-used btvnws_id_dsa.pub
.cache/ .home_pw .rhosts docs/
.config/ .htaccess .sane/ dotfiles/
.cshrc@ .icons/ .screen/ elisp/
.dmrc .java/ .screenrc files/
.elinks/ .kde/ .scribus/ fish/
.emacs .kderc .sh_history foo/
.emacs.d/ .links/ .shrc html/
.emacs.mark .local/ .ssh/ mail/
.emacs_backups/ .login_conf .sversionrc* mcidas/
.esd_auth .mail_aliases .themes/ public_html/
.eshell/ .mailcap .thumbnails/ scripts/
.fishsrv.pl .mailrc .tramp_history src/
.fluxbox/ .mcidasrc@ .user.cshrc start-vnc.sh*
.fonts.cache-1 .mcop/ .vmware/ test/
.fonts.conf .mcoprc .vnc/ unix/
.forward .mctmp/ .xcdroast/ web/
.fte-history .metacity/ .xfce4/ z-drive@
.fullcircle/ .metapps/ .xine/
.gaim/ .mime.types .xinitrc@
.gconf/ .mozilla/ .xmms/
tuckerm@apollo:~>
|
An important hidden file worth mentioning is the .bashrc file found in the user's home directory. .basrc sets the
default environment variables for that particular user's shell. You
may view the contents of .bashrc with the command:
less ~/.bashrc
In our lab configuration this file contains many export commands
and some conditionals that determine how the shell should be
configured.
The "." and ".." Directories
Two special hidden directories listed within each directory are
named "." and "..". The "." directory refers to the working
directory.
|
tuckerm@apollo:~> ls
BG/ TEST/ files/ mcidas/ test/
Desktop/ btvnws_id_dsa.pub fish/ public_html/ unix/
GNUstep/ docs/ foo/ scripts/ web/
OpenOffice.org1.1/ dotfiles/ html/ src/ z-drive@
PERL/ elisp/ mail/ start-vnc.sh*
tuckerm@apollo:~> ls .
BG/ TEST/ files/ mcidas/ test/
Desktop/ btvnws_id_dsa.pub fish/ public_html/ unix/
GNUstep/ docs/ foo/ scripts/ web/
OpenOffice.org1.1/ dotfiles/ html/ src/ z-drive@
PERL/ elisp/ mail/ start-vnc.sh*
tuckerm@apollo:~>
|
Items within the working directory can be specified explicitly with
a relative path as shown below:
|
tuckerm@apollo:~> ls -lh start-vnc.sh
-rwxr-x--- 1 tuckerm tuckerm 777 Nov 7 14:09 start-vnc.sh*
tuckerm@apollo:~> ls -lh ./start-vnc.sh
-rwxr-x--- 1 tuckerm tuckerm 777 Nov 7 14:09 ./start-vnc.sh*
tuckerm@apollo:~>
|
The ".." directory always refers to the directory above the
working directory. An example of how this can be used:
|
tuckerm@apollo:~> pwd
/mnt/homes/tuckerm
tuckerm@apollo:~> cd ..
tuckerm@apollo:/mnt/homes> pwd
/mnt/homes
tuckerm@apollo:/mnt/homes> cd ../..
tuckerm@apollo:/> pwd
/
tuckerm@apollo:/>
|
Local Versus Remote File Systems
Unix has the capability of accessing data on other networked
hosts. The files and directories stored on another Unix host are
referred to as a remote file system. Files and directories
physically located on the same machine as the user logged in on
are considered local. In normal use the difference is seldom
noticed. When dealing with large volumes of data a remote file
system will often be slower to work with.
The df command
The df
command is used to report how much of the file
systems are in use. With no arguments the it will output the
usage statistics for each file system currently mounted on the
host. An example:
|
[loriotg@l-dl-asac31601 ~] df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 19228276 8672928 9578600 48% /
udev 1523544 4 1523540 1% /dev
tmpfs 612940 820 612120 1% /run
none 5120 0 5120 0% /run/lock
none 1532344 372 1531972 1% /run/shm
/dev/sda7 96924872 192176 91809128 1% /data
vertex:/export/software64 1865855488 1384274432 481581056 75% /software
vertex:/export/homes 1865855488 1384274432 481581056 75% /mnt/homes
vertex:/export/metadmin 1865855488 1384274432 481581056 75% /mnt/metadmin
vertex:/export/facdata 1865855488 1384274432 481581056 75% /mnt/facdata
vortex00:/export/data1 3612428800 2385511424 1043416576 70% /mnt/data1
vortex00:/export/data4 3612428800 2385511424 1043416576 70% /mnt/data4
omega:/var/data/ldm 442382848 236278784 183632384 57% /mnt/data
vortex00:/export/vortex2 3612428800 2385511424 1043416576 70% /mnt/vortex2
vertex:/export/arch 1865855488 1384274432 481581056 75% /mnt/arch
vortex00:/export/data5 3612428800 2385511424 1043416576 70% /mnt/data5
vortex00:/export/wrfdata 3612428800 2385511424 1043416576 70% /mnt/wrfdata
vortex00:/export/data3 3612428800 2385511424 1043416576 70% /mnt/data3
vortex00:/export/data2 3612428800 2385511424 1043416576 70% /mnt/data2
vortex00:/export/data6 3612428800 2385511424 1043416576 70% /mnt/data6
vortex00:/export/data7 3612428800 2385511424 1043416576 70% /mnt/data7
[loriotg@l-dl-asac31601 ~]
|
The first column of output lists the device that the file system
is on. This can be a local file system (the items beginning with
/dev/) or a remote file system. Remote filesystems will list the
name or network address of the host where they are served from.
The second column lists the total size of the file system. The
third column is a total of the disk space being used by files on
the file system. The fourth column displays how much space is
available or free on the file system. The fifth column shows the
used disk space as a percentage value. The final column shows the
directory where the file system is mounted, or attached, to the
Unix file system.
df
can also take an argument of which file systems to
report on rather than listing all file systems. Here is a list of the current file system (with the human-readable option):
|
[loriotg@l-dl-asac31601 ~] df -h .
Filesystem Size Used Avail Use% Mounted on
vertex:/export/homes 1.8T 1.3T 460G 75% /mnt/homes
[loriotg@l-dl-asac31601 ~]
|
Below are a few commonly used options (on Linux) which can modify
the output of df
:
-k, --kilobytes
Print sizes in 1024-byte blocks.
-h, --human-readable
Append a size letter such as M for binary megabytes
(`mebibytes') to each size.
-l, --local
Limit the output to local filesystems only. (New
in fileutils-4.0.)
The du command
The du
command is used to report approximately how
much disk space a directory uses. With no arguments
du
will report usage for the current directory.
Perhaps more commonly a directory is specified.
|
[loriotg@l-dl-asac31601 ~] du ~/temp/RIP4
2238 /mnt/homes/loriotg/temp/RIP4/Doc
13880 /mnt/homes/loriotg/temp/RIP4/src
65 /mnt/homes/loriotg/temp/RIP4/sample_infiles
17700 /mnt/homes/loriotg/temp/RIP4
[loriotg@l-dl-asac31601 ~]
|
Note that usage for each subdirectory will be listed. A
total for the specified directory will be listed last in the
output. The summary output can be specified by adding the "-s"
option to the command:
|
[loriotg@l-dl-asac31601 ~] du -s ~/temp/RIP4
17700 /mnt/homes/loriotg/temp/RIP4
[loriotg@l-dl-asac31601 ~]
|
See the man page for more options to modify the output from
du
.
The mount and umount commands
Unix does not use drive letters or names to identify file
systems. New storage devices must be attached to the Unix file
system with the mount
command. mount will
"attach", or mount, the device to a directory on the
file system. This directory is called the "mount point"
and must exist before attempting to mount a file system.
Typically only the super-user (AKA: administrator, root) has the
ability to mount file systems. Below is the command an
administrator would use to mount a cdrom on a linux host:
|
root@vertex:~# mount -t iso9660 /dev/cdrom -o ro /mnt/cdrom
root@vertex:~#
|
Some hosts have the system configured so that a user can mount
certain file systems as defined by the file /etc/fstab. (The name
and location of this file may vary depending on the version of
Unix). In our lab the command to mount a cdrom would be as follows:
|
tuckerm@annex05:~> df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 4.7G 3.0G 1.8G 63% /
/dev/hda2 4.7G 33M 4.7G 1% /mnt/upgrade
/dev/hda6 28G 13G 15G 46% /software
tuckerm@annex05:~> mount /mnt/cdrom
tuckerm@annex05:~> df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 4.7G 3.0G 1.8G 63% /
/dev/hda2 4.7G 33M 4.7G 1% /mnt/upgrade
/dev/hda6 28G 13G 15G 46% /software
/dev/hdc 696M 696M 0 100% /mnt/cdrom
tuckerm@annex05:~>
|
The mount
command only needs the argument of what
directory to mount. To remove a mounted file system the
umount
command is used:
|
tuckerm@annex05:~> df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 4.7G 3.0G 1.8G 63% /
/dev/hda2 4.7G 33M 4.7G 1% /mnt/upgrade
/dev/hda6 28G 13G 15G 46% /software
/dev/hdc 696M 696M 0 100% /mnt/cdrom
tuckerm@annex05:~> umount /mnt/cdrom
tuckerm@annex05:~> df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 4.7G 3.0G 1.8G 63% /
/dev/hda2 4.7G 33M 4.7G 1% /mnt/upgrade
/dev/hda6 28G 13G 15G 46% /software
tuckerm@annex05:~>
|