The following paper is my preparing the exam 311-011 for Solaris. There are parts that have no explanation, while there are parts that have more or less details, or extra information, not required by the test objects. There are parts that I feel easy or not interesting, they will have no explanation. In this case, I read the manpage & do practise ( of course )
The documents and books that help me a lot are:
A Practical Guide to Solaris - Mark G. Sobell
Solaris 7 System Administrator Exam Cram - Derrell L. Ambro
Solaris 8 Document Answer Book - http://docs.sun.com or Solaris Documentation CD
The Solaris On Intel group: the questions and answers of this group may or may not directly
relate to the exam objectives, but that's have helped me to have more much experience and skills with Solaris.
And this is what a Solaris adminstator must have.
# man -k print | more accept accept (1m) - accept or reject print requests acctcom acctcom (1) - search and print process accounting files asa asa (1) - convert FORTRAN carriage-control output to printable form auths auths (1) - print authorizations granted to a user ber_printf ber_encode (3ldap) - simplified Basic Encoding Rules library encoding functions cancel cancel (1) - cancel print request curs_printw curs_printw (3curses) - print formatted output in curses windows devinfo devinfo (1m) - print device specific information digestp mailp (1) - frontends to the mp PostScript pretty printer disable enable (1) - enable/disable LP printers dmi_error dmi_error (3dmi) - print error in string form dpost dpost (1) - troff postprocessor for PostScript printers enable enable (1) - enable/disable LP printers errno perror (3c) - print system error messages filep mailp (1) - frontends to the mp PostScript pretty printer filofaxp mailp (1) - frontends to the mp PostScript pretty printer fncreate_printer fncreate_printer (1m) - create new printers in the FNS namespace fprintf printf (3c) - print formatted output fprintf printf (3ucb) - formatted output conversion franklinp mailp (1) - frontends to the mp PostScript pretty printer fwprintf fwprintf (3c) - print formatted wide-character output groups groups (1) - print group membership of user --More--
# man -f print print print (1) - shell built-in function to output characters to the screen or window print print (9e) - display a driver message on system console #
$ man -a print Reformatting page. Please Wait... done Reformatting page. Please Wait... done :::::::::::::: /tmp/mpZ6a4yb :::::::::::::: User Commands print(1) NAME print - shell built-in function to output characters to the screen or window ...... ...... ...... :::::::::::::: /tmp/mp06a4yb :::::::::::::: Driver Entry Points print(9E) NAME print - display a driver message on system console ...... ...... ......option -F for searching all directory specifying by MANPATH or man.cf without using windex.
Restricted monitor allows admininstrators to boot by using command b ( for boot ) ,
continue a operating system ( that was interrupted by Stop-A command ) by using
command c ( for continue ), or to start the Forth Monitor( using command n).
Forth monitor allows to boot the OS, run diagnostics, modify NVRAM
parameters ... The functions b and c of Restricted Monitor is boot and go
respectively on Forth Monitor. We can go back to Restricted Monitor from Forth Monitor by suing command old-mode
at the ok prompt.
OpenBoot commands for displaying system configuration parameters:
banner, devalias, .enet-addr, .idprom, module-info ( display CPU speed, 2.x only
), printenv, show-devs, .speed ( display cpu speed and bus speed, 3.x only ), .traps,
.version, show-disks, show-displays, show-nets, show-sbus, show-tapes, show-ttys.
OpenBoot commands for hardware testing
pcia-probe-list, probe-scsi, probe-scsi-all, test-all, test floopy, test /memory,
test net, watch-clock, watch-net
OpenBoot commands for selecting different boot devices
boot disk, boot net, boot cdrom
Some handy commands
To change from Restricted monitor to Forth monitor
> n
ok
To change default boot device
# init 0
> n
ok setenv boot-device device[n]
ok reset
# init 0
> n
ok setenv boot-device net
ok reset
Stop : bypass the POST.
Stop-A: abort the current operation or boot process, return to ok prompt.
Stop-D: enter diagnostic mode ( set diag-switch? nvram parm to true ).
Diagnostic will be run and the meesages
will be display via system serial port A.
Stop-F: enter Forth monitor on TTYA
Stop-N: cause NVRAM parms reset to default value.
This command stores the command 'devalias alias device-path' in NVRAMRC. The alias persists until the nvunalias or set-defaults commands are executed.( NVRAMRC is a part of the NVRAM. It is used to save Forth commands.The commands will be executed each time the system is reset, as long as use-nvramrc? has been set to true )
Auto Boot Settings can be used to set options for Set Default Boot Device, Set Auto Boot Timeout and
Set Auto Boot (ON/OFF).
Set Default Boot Device will choose the default device to boot the system. For example, my Solaris box will ask for which one
from the following devices Harddisk, CDROM, Network card is used to boot.
Set Auto Boot Timout will set the time interval that the secondary boot menu for DCA will wait for ESC
Remember that these settings can be set by eeprom command of Solaris OS too.
Set Network Configuration Strategy specifies the network boot and install protocol to use for booting the Solaris system. It will display options of DHCP and RARP
Property Settings enables to set values for many system options such as auto-boot?, auto-boot-cfg-num, auto-boot-timeout, output-device ...
# pwd /export/home/vu/test # ls -l total 594 -r--r--r-- 1 root other 291328 Nov 5 17:21 gzip-1.2.local drwxr-xr-x 2 root other 512 Nov 5 17:21 packages # pkgtrans gzip-1.2.local packages The following packages are available: 1 SMCgzip gzip (i86pc) 1.2.4a Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: Transferringpackage instance # # ls -l packages total 2 drwxr-xr-x 3 root other 512 Nov 5 17:24 SMCgzip #
# pkgtrans -s packages /export/home/vu/test/gzip-pkg The following packages are available: 1 SMCgzip gzip (i86pc) 1.2.4a Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: Transferringpackage instance # ls -l total 1186 -r--r--r-- 1 root other 291328 Nov 5 17:21 gzip-1.2.local -rw-r--r-- 1 root other 291328 Nov 5 17:26 gzip-pkg drwxr-xr-x 3 root other 512 Nov 5 17:24 packages #
The following example is adding Netscape which package is in directory format
# pwd
/export/home/vu
# ls -l | grep NSCPcom
drwxr-xr-x 4 vu staff 512 Nov 7 11:49 NSCPcom
# pkgadd -d . NSCPcom
Processing package instance NSCPcom from /export/home/vu
Netscape Communicator
(i386) 10.4.76,REV=2000.11.07.08.55
Copyright 2000 Sun Microsystems, Inc. All rights reserved.
Copyright 1994-1999 Netscape Communications Corporation. All rights reserved.
This appears to be an attempt to install the same architecture and
version of a package which is already installed. This installation
will attempt to overwrite this package.
Using as the package base directory.
...
# pkginfo | more
system AMImega MEGA Family SCSI Host Bus Adapter
system CPQcnft Compaq NetFlex Family NIC
system CPQncr Compaq Family SCSI HBA
system CPQsmii Compaq SMART-2/E Family of Array Controller
...
# pkginfo -l SMCgzip
PKGINST: SMCgzip
NAME: gzip
CATEGORY: application
ARCH: i86pc
VERSION: 1.2.4a
BASEDIR: /usr/local
VENDOR: Free Software Foundation
PSTAMP: Steve Christensen
INSTDATE: Nov 05 2000 17:07
EMAIL: steve@smc.vnet.net
STATUS: completely installed
FILES: 39 installed pathnames
6 linked files
7 directories
7 executables
564 blocks used (approx)
3.2.5 pkgchk
pkgchk pkgname
pkgchk -l pkgname ---> list information of files of the package
pkgchk -a pkgname ---> check attributes only
pkgadd -c pkgname ---> check contents only
pkginfo -i ---> full installed package only
# showrev -p Patch: 109138-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsu Patch: 109155-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsr, SUNWcar Patch: 108978-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsr, SUNWvolu, SUNWhea # patchadd -p Patch: 109138-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsu Patch: 109155-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcar SUNWcsr Patch: 108978-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsr SUNWhea SUNWvolu #
3.3.2 Apply patches :
patchadd -p : shows installed patches
patchadd -d : does not back up files to be patched. The patche will not able to be
removed.
3.3.3 Remove patches
patchrm patch-number
# patchrm 109155-01
Checking installed patches...
Patch 109155-01 was installed without backing up the original files.
It cannot be backed out.
# patchrm 108978-01
Checking installed patches...
Backing out patch 108978-01...
Patch 108978-01 has been backed out.
#
Action can be one of the following values:
initdefault
the run level of the system. The corresponding entry will not have command component.
respawn
If the process does not exist, then start the process; do not wait for its termination
(continue scanning the inittab file), and when the process dies, restart the process.
If the process currently exists, do nothing and continue scanning the inittab file.
wait
When init enters the run level that matches the entry's rstate, start the process and wait for
its termination. All subsequent reads of the inittab file while init is in the same run
level cause init to ignore this entry.
once
When init enters a run level that matches the entry's rstate, start the process, do not wait
for its termination. When it dies, do not restart the process. If init enters a new run
level and the process is still running from a previous run level change, the program is not
restarted.
boot
The entry is to be processed only at init's boot-time read of the inittab file. init is to
start the process and not wait for its termination; when it dies, it does not restart the process.
In order for this instruction to be meaningful, the rstate should be the default or it must match
init's run level at boot time. This action is useful for an initialization function following a
hardware reboot of the system.
bootwait
The entry is to be processed the first time init goes from single-user to multi-user state after
the system is booted. (If initdefault is set to 2, the process runs right after the boot.)
init starts the process, waits for its termination and, when it dies, does not restart
the process.
powerfail
Execute the process associated with this entry
only when init receives a power fail signal,
SIGPWR.
powerwait
Execute the process associated with this entry
only when init receives a power fail signal,
SIGPWR, and wait until it terminates before con-
tinuing any processing of inittab.
off
If the process associated with this entry is
currently running, send the warning signal
SIGTERM and wait 5 seconds before forcibly ter-
minating the process with the kill signal SIG-
KILL. If the process is nonexistent, ignore the
entry.
ondemand
This instruction is really a synonym for the
respawn action. It is functionally identical to
respawn but is given a different keyword in
order to divorce its association with run lev-
els. This instruction is used only with the a,
b or c values described in the rstate field.
sysinit
Entries of this type are executed before init
tries to access the console (that is, before the
Console Login: prompt). It is expected that this
entry will be used only to initialize devices
that init might try to ask the run level ques-
tion. These entries are executed and init waits
for their completion before continuing.
For user that use CDE, ~/.dtprofile will be processed by /usr/dt/bin/Xsession and in that file, there is a line being DTSOURCEPROFILE=true. This means that ~/.login or ~/.profile will be sourced when Xsession starts. Setting this value to false will cause the corresponding file not to be sourced.
loginlog
After five unsuccessful login attempts, all the attempts are logged in the file
/var/adm/loginlog.
This file contains one
record for each failed attempt. Each record contains the login name, tty
specification, and time.
This is an ASCII file. Each field within each entry is separated from the
next by a colon.
Each entry is separated from the next by a new-line.
By default, loginlog does not exist, so no logging is done.To enable logging, the log file must be created with read and write permission for owner only. Owner must be root and group must be sys.
Sticky bit
Only root can set sticky bit on executable file
Both user and root can set sticky bit on directory
$ find /export/home/vu/test -type f -exec grep -i vu {} \; This is a file, containing vu This is a file containg vu nghia khoaThe parens {} will be replaced by filename found by find
$ find /export/home/vu/test -type f -exec grep -i vu {} /dev/null \;
/home/vu/test/file1:This is a file, containing vu
/home/vu/test/file4:This is a file containg vu nghia khoa
In case that we want to find {} in files, we need to escape them so that these parens ( of -i ) will not be
translated to filenames
$ find /export/home/vu/test -type f -exec grep -i {\\} {} /dev/null \;
/export/home/vu/test/file1:{} aha i find it in file1
/export/home/vu/test/fil5:{} 1
/export/home/vu/test/fil5:{} 2
$ find /export/home/vu/test -type f | xargs grep -i vu /dev/null
/export/home/vu/test/file1:This is a file, containing vu
/export/home/vu/test/file4:This is a file containg vu nghia khoa
$ find /export/home/vu/test -type f | xargs grep -i {\\}
/export/home/vu/test/file1:{} aha i find it in file1
/export/home/vu/test/fil5:{} 1
/export/home/vu/test/fil5:{} 2
$ grep -i vu /export/home/vu/test/* /export/home/vu/test/file1:This is a file, containing vu /export/home/vu/test/file4:This is a file containg vu nghia khoaRemember that find will be more useful if we need to search files with different conditions such as modified time, access time, types
Other usefule options
-ctime : time that status changed
-mtime: time that file modified
/etc/system contains an option that affects chown. If this file contains a line of set rstchown = 1, then only super-user can change owner of this file. If this line is set to set rstchown = 0, then owner of this file can change the file owner, too.
If chown is not run by super-user, setuid bit will be cleared ( for security's sake ).
If /etc/system sets set rstchown = 1 then the owner of the file will be restricted to change group if he/she belongs to new group.Super-user is not affected by this option
If chgrp is not set by super-user, setuid bit and setgid bit will be clear.
$ chmod 777 thisis
$ ls -l thisis
-rwxrwxrwx 1 vu staff 20 Dec 10 21:25 thisis
$ setfacl -s u::rw-,g::r--,o:--- thisis
$ ls -l thisis
-rw-r----- 1 vu staff 20 Dec 10 21:25 thisis
$
Note that the first syntax of setting ACL is another way of chmod. But it is more pwerful than chmod in the
folloing example:
$ setfacl -s u::rw-,g::---,o:---,m:r--,u:nghia:rw- thisis
$ getfacl thisis
# file: thisis
# owner: vu
# group: staff
user::rw-
user:nghia:rw- #effective:r--
group::--- #effective:---
mask:r--
other:---
In this case - having special rights for any person, we need to have user entry for that person ( u:user-id:perms )
and mask entry ( m:perms ), besides owner permissions ( u::perms ), group permissions ( g::perms)
and other permissions ( o:perms ).
Note that although we specify that user nghia has read/write permission, but mask has only read permission. This leads
to effective right for nghia is read permission.
$ setfacl -m u:nghia:---,u:khoa:rwx thisis
$ getfacl thisis
# file: thisis
# owner: vu
# group: staff
user::rw-
user:khoa:rwx #effective:r--
user:nghia:--- #effective:---
group::r-- #effective:r--
mask:r--
other:---
$ getfacl thisis # file: thisis # owner: vu # group: staff user::rw- user:khoa:rwx #effective:r-- user:nghia:rw- #effective:r-- user:pa:rwx #effective:r-- user:oracle:rw- #effective:r-- group::r-- #effective:r-- mask:r-- other:--- $ setfacl -d u:nghia,u:khoa thisis $ getfacl thisis # file: thisis # owner: vu # group: staff user::rw- user:pa:rwx #effective:r-- user:oracle:rw- #effective:r-- group::r-- #effective:r-- mask:r-- other:--- $
/etc/mnttab becomes of type MNTFS that provides read-only information getting directly from the kernel about mounted file systems of local system.
mount -p will print a table of currently-mounted file systems. mount -v is similar -p, but more verbose
General-options can be:
/etc/default/fs contains line of LOCAL=filesystem type.
$ cat /etc/default/fs
LOCAL=ufs
$
/etc/dfs/fstypes lists distributed file system utility package installed in the system, each package
per line. The first line is for the default distributed file system if this value can not be found from
-F option or /etc/vfstab.
$ cat /etc/dfs/fstypes
nfs NFS Utilities
autofs AUTOFS Utilities
cachefs CACHEFS Utilities
$
For diskettes, they will be
directories diskette0 and rdiskette0 for first floopy drive, diskette1 & rdiskette1 for second one.
Under these directories are block device and character device for the diskette ( not diskette drive:
diskette drive is the directory dieskettn under volume management ).
# pwd
/vol/dev/diskette0
# ls -l
total 0
brw-rw-rw- 1 nobody nobody 93, 4 Dec 15 04:41 noname
# cd ../rdiskette0
# pwd
/vol/dev/rdiskette0
# ls -l
total 0
crw-rw-rw- 1 nobody nobody 93, 4 Dec 15 04:41 noname
#
noname is the label of the diskette mounted by volume management
For cdrom, the corresponding directories will be /vol/dev/dsk/device and
/vol/dev/rdsk/device.
# pwd
/vol/dev/dsk/c1t0d0
# ls -l
total 0
brw-rw-rw- 1 nobody nobody 93, 3 Dec 15 04:36 nui2000tech
# cd ../../rdsk/c1t0d0
# pwd
/vol/dev/rdsk/c1t0d0
# ls -l
total 0
crw-rw-rw- 1 nobody nobody 93, 3 Dec 15 04:36 nui2000tech
# pwd /floppy # ls -l total 16 lrwxrwxrwx 1 root nobody 8 Dec 15 04:41 floppy0 -> ./noname drwxrwxrwx 1 root other 7168 Dec 31 1969 nonameThe content of these directories is the ones of the diskette.
For cdrom, it will be /cdrom and /cdrom/cdrom0 for first cddrive.
# pwd
/cdrom
# ls -l
total 10
lrwxrwxrwx 1 root nobody 13 Dec 15 04:37 cdrom0 -> ./nui2000tech
drwxr-xr-x 2 root nobody 512 Dec 2 06:17 games
dr-xr-xr-x 2 root sys 2048 Oct 13 11:03 nui2000tech
drwxr-xr-x 2 root other 512 Dec 13 23:14 oracle8i
Find out if a CD is in use:
fuser -u [ -k ] /cdrom/cdrom0
-u displays the user of the CD
-k kills the process using the CD
- pack ( -f force compression )
- unpack
- pcat display the content of the packed file
# ufsdump -S /dev/rdsk/c0d0s0 87367680 #ufsdump -S /export/home 665805824
ufsdump 3f /dev/rmt/1 /dev/rdsk/c0d0s6
The following example is to backup /dev/rdsk/c0d0s3 to /dev/rdsk/c0d0s4.
ufsdump 0f 192.168.2.200:/dev/rmt/2 /export/home/vu
ufsdump 0f - /dev/rdsk/c0t0d0s7 | (cd /home; ufsrestore xf -)
This is just for
practise when I don't have the real tape drive. Remember that tape devices are character devices so
I must use disk device as raw device ( rdsk )
# ufsdump -3uf /dev/rdsk/c0d0s4 /dev/rdsk/c0d0s3
DUMP: Writing 32 Kilobyte records
DUMP: Date of this level 3 dump: Sun Dec 17 08:59:43 2000
DUMP: Date of last level 0 dump: the epoch
DUMP: Dumping /dev/rdsk/c0d0s3 (esmeralda:/data2) to /dev/rdsk/c0d0s4.
DUMP: Mapping (Pass I) [regular files]
DUMP: Mapping (Pass II) [directories]
DUMP: Estimated 146928 blocks (71.74MB).
DUMP: Dumping (Pass III) [directories]
DUMP: Dumping (Pass IV) [regular files]
DUMP: 146878 blocks (71.72MB) on 1 volume at 2138 KB/sec
DUMP: DUMP IS DONE
DUMP: Level 3 dump on Sun Dec 17 08:59:43 2000
# cat /etc/dumpdates
/dev/rdsk/c0d0s3 3 Sun Dec 17 08:59:43 2000
The 2nd dump as incremental backup right after the first dump without any modidication on /dev/dskc0d0s3 gives
the following result:
# ufsdump -4uf /dev/rdsk/c0d0s4 /dev/rdsk/c0d0s3
DUMP: Writing 32 Kilobyte records
DUMP: Date of this level 4 dump: Sun Dec 17 09:07:52 2000
DUMP: Date of last level 3 dump: Sun Dec 17 08:59:43 2000
DUMP: Dumping /dev/rdsk/c0d0s3 (esmeralda:/data2) to /dev/rdsk/c0d0s4.
DUMP: Mapping (Pass I) [regular files]
DUMP: Mapping (Pass II) [directories]
DUMP: Estimated 266 blocks (133KB).
DUMP: Dumping (Pass III) [directories]
DUMP: Dumping (Pass IV) [regular files]
DUMP: 126 blocks (63KB) on 1 volume at 863 KB/sec
DUMP: DUMP IS DONE
DUMP: Level 4 dump on Sun Dec 17 09:07:52 2000
ufsrestore uses option x o extract the named files, or t to list table of contents, or r for the entire contents, or i for interactive mode.
# ufsrestore -tf file1
2 .
472913 ./nghia
472914 ./nghia/.profile
472915 ./nghia/local.cshrc
472916 ./nghia/local.login
472917 ./nghia/local.profile
#
# ufsrestore -if file1
ufsrestore > ls
.:
nghia/
ufsrestore > cd nghia
ufsrestore > ls
./nghia:
.profile local.cshrc local.login local.profile
ufsrestore >
How to restore /( root ) and /usr
- Add a new disk to the system where / and /usr will be restored.
- Mount the new file system on a temporary directory
- Change to the mount directory
- restore the / directory from tape. Restore level 0 first, the other levels from low to high ( ufsrestore rvf /dev/rmt/0 )
- remove restoresymtable
- umount the mount directory
- check the new file system with fsck
- create the boot blocks on the root partition by using the following command:
# installboot /usr/platform/`uname-i`/lib/fs/ufs/bootblk /dev/rdsk/devicename
Copy-In mode ( -i ): extracts files from the standard input, which is assumed to be a product of a previous cpio -o. If option d is used, the destination directory is the current directory.
To view the content of the tape:
#cpio -icvt < /dev/rmt/0
-c reads file in ASCII format
-v display output in format similar to the output of ls command
-t list the table of contents
To extract the content of the tape into current directory:
#cpio -icvd < /dev/rmt/0
-d creates directory as needed
# cpio -ivt < testcpio -rw-r--r-- 1 root other 34 Dec 17 07:06 2000, test/test1 -rw-r--r-- 1 root other 36 Dec 17 07:06 2000, test/test2 -rw-r--r-- 1 root other 51 Dec 17 07:31 2000, test/level2/level2file1 -rw-r--r-- 1 root other 50 Dec 17 07:31 2000, test/level2/level2file2 -rw-r--r-- 1 root other 9 Dec 17 07:52 2000, test/level2/level3/x1 -rw-r--r-- 1 root other 13 Dec 17 07:52 2000, test/level2/level3/x2 -rw-r--r-- 1 root other 11 Dec 17 07:52 2000, test/level2/level3/x3 16 blocks #
Copy-Out mode( -o ): reads a list of files from the standard input and write those files to the standard output.
ls | cpio -oc > /dev/rmt/n
# find test -type f | cpio -ocv > testcpio
test/test1
test/test2
test/level2/level2file1
test/level2/level2file2
test/level2/level3/x1
test/level2/level3/x2
test/level2/level3/x3
16 blocks
Pass mode ( -p ): reads the standard input to obtain a list of path names of files that are conditionally created ( by find command, for example ) and copied into the destination directory tree. So this mode is used to copy files/directories structure from one point to another point.
# find . -print -depth | cpio -pdm existing-directory
From command mode to last-line mode : colon (;)
From last-line to command mode : Enter
From command mode to input mode : i ( insert before cursor) , a ( append at
end of line) , o ( new line , lower the current line ), O ( new line, above the
current line )
From input mode to command mode : ESC
15.3.2 Search & Substitute
:[address]s/search-string/replacement-string
:1,$s/exmaple/example
Search from the beginning to the end of the work buffer, replace exmaple with
example.
Note: the above syntax will replace only the first occurence of matched text on each line.
To be able to replace all matches on a line, append the g at the end of the command
:1,$s/exmaple/example/g
15.3.3 Replace
R and r are replace commands.
The single character you enter following the r overwrites the current character, and
after that vi returns to command mode.
The R command causes all subsequent characters overwrite existing text, until ESC is pressed.
For example, if /etc/host.equiv of host esmeralda contains
quasimodo.inet.sivell.com
then user vu can do the following command
#rcp some-file esmeralda:/export/home/vu
But if /etc/host.equiv of host esmeralda contains
quasimodo.inet.sivell.com vu
then user vu can do the following command
#rcp some-file khoa@esmeralda:/export/home/khoa
- vi ( replace in entire buffer, replace from cursor end of line ... )
- devfsadm
- ls options to display permission, mandatory locking
- pgrep, pkill option
- format menu explanation
- contents of /etc/default/fs, /etc/dfs/fstypes
- symbolic link, hard link
- if a process don't reveive any signal, kill its parent ?
- where is csh, sh, csh
- command usage of : type and file
- regular exporession: grep & egrep
- the shortest password length that a normal user must support when using passwd.
- restricted shell ( /usr/lib/rsh ) and remote shell ( /usr/sbin/rsh )
- how rsh works