Solaris系統上Shell腳本學習。
文件系統
/sbin主要放置一些系統管理的必備程序,例如fdisk,ifconfig,mount等
/usr/sbin主要存放一些並不是必備的系統管理工具。例如df,host,ping,swap,tar等。
/bin主要放置一些用戶必備程序。
/usr/bin主要存放一些並不是必備的用戶程序。
不少程序都在/bin和/usr/bin下面存放了2份拷貝,例如bash,cd,cat,cp,df,du,mv等。
/usr/sfw/bin/: sfw是sunfreeware的縮寫,這個目錄下有不少有用的工具,例如gcc,g++,mysql,snmpwalk等。
sfw下的程序列表在http://sunfreeware.com/網站上有着詳細的說明。
另一個網站也能下載不少free applications -> http://unixpackages.com/.
/usr/lib:包含庫文件。
/usr/include:頭文件。
/usr/X11R6:X Window系統目錄。
/usr/share/doc和/usr/share/man 應用程序的文檔和手冊。html
/etc/passwd: password文件
/etc/motd: message of today,每次用戶成功登陸後,其中的內容會顯示在控制檯。
/etc/issue: 遠程登陸時,文件的內容顯示在login提示符以前。
/etc/release: 系統release信息
/etc/syslog.conf: /usr/sbin/syslogd進程利用本配置文件來定義記錄syslog的行爲
/etc/init.d和/etc/rc*.d
1) 每一個運行級別被運行控制腳本控制,稱做/sbin/rc#,#是運行級別0-6中的一個或是s或S。
這些腳本能夠認爲是元腳本,他們的主要做用是運行其餘腳本。/etc/rc#是這些腳本的一個軟連接.
2) /sbin/rc#運行的腳本是服務控制腳本,這些服務控制腳本能夠在目錄/etc/rc#.d下找到。
/etc/init.d目錄這些服務控制腳本的真正位置,硬連接到/etc/rc#.d目錄並被命名爲K##service或S##sevice。
啓動的腳本用S打頭,終止的用K打頭,至關於運行/etc/init.d/service start和/etc/init.d/service stop.
##是數字,表示運行順序.
要運行某一運行級別,就是說用/sbin/rc#運行與之級別相對應的/etc/rc#.d下的腳本時,
kill腳本先運行,再運行start腳本。lowest-numbered 腳本首先運行。例如:S20foo 在S30bar以前運行。
例如,
$find *.d -name "*apache*" -ls
10157 3 -rwxr--r-- 6 root sys 2452 Apr 15 2011 init.d/apache
10157 3 -rwxr--r-- 6 root sys 2452 Apr 15 2011 rc0.d/K16apache
10157 3 -rwxr--r-- 6 root sys 2452 Apr 15 2011 rc1.d/K16apache
10157 3 -rwxr--r-- 6 root sys 2452 Apr 15 2011 rc2.d/K16apache
10157 3 -rwxr--r-- 6 root sys 2452 Apr 15 2011 rc3.d/S50apache
10157 3 -rwxr--r-- 6 root sys 2452 Apr 15 2011 rcS.d/K16apache
能夠看到這些文件的inode是相同的,是硬連接.
3) A服務的運行若是須要B服務的支持,A必定要等B先開始運行,因此要命名爲:
S18B,S19A
關閉的時候,要先關A,因此要命名爲:
K18A,K19Bnode
/var: 此目錄下存放使用過程當中可更改的數據
/var/run/:用以跟蹤系統從啓動以來使用的全部進程,並讓您在更改系統運行級別的時候可以操縱它們。
/var/tmp/:與/tmp相比,/tmp目錄開機就會清除,通常映射到swap裏面(可用df /tmp查看); /var/tmp則不會被清除
/var/spool/:此目錄包含系統中等待處理的工做文件
/var/adm/sulog: 跟蹤su使用記錄
/var/log/:此目錄包含系統的日誌文件,由/etc/syslog.conf配置
/var/adm/messages*: 系統日誌文件,由/etc/syslog.conf配置mysql
/dev/console: 系統控制檯,
/dev/pts/n: 遠程登錄(telnet,ssh等)後建立的控制終端。
/dev/tty: 當前會話的控制終端(=某一個/dev/pts/n或者/dev/console)
可使用tty命令查看當前的控制終端。
修改/etc/default/login, 添加CONSOLE=/dev/console, 禁止root賬戶遠程登錄。
/dev/null和/dev/zero
把/dev/null 看做"黑洞" . 它很是等價於一個只寫文件.
全部寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什麼也讀不到.
/dev /zero也是一個僞文件. 它實際上產生接二連三的二進制的零流.
寫入它的輸出會丟失不見, 而從/dev/zero 讀出一連串的null也比較困難,
主要的用處是用來建立一個指定長度用於初始化的空文件,就像臨時交換文件.
因此能夠執行cat /dev/null>out, 由於null是沒有,因此就清空out文件,
可是若是執行cat /dev/zero > out 的話,很快分區就out文件填滿了.
產生1個1M的空文件:dd if=/dev/zero of=out count=1024 bs=1024
/dev/random和/dev/urandom 僞隨機設備,提供2進制隨機字節流.
/dev/random提供更高品質隨機數,可是也更慢.能夠用下面的命令比較一下花費的時間
time dd if=/dev/random of=random.file count=10 bs=1024
time dd if=/dev/urandom of=urandom.file count=10 bs=1024sql
系統管理
$shutdown -g10 -y -i state: 關機。-g 等待時間,默認60s; -y 不須要確認; -i 指定系統運行狀態,默認爲s
1 administrative state.
s, S single-user state. All user processes are stopped on transitions to this state.
5 Shut the machine down so that it is safe to remove the power. Have the machine remove power, if possible.
6 Stop the operating system and reboot to the state defined by the init default entry in /etc/inittab.
$init [1~6]: 5 關機; 6 重啓
2: multi-user mode; 3: extend multi-user mode by making local resources available over network.
$isainfo:識別系統架構信息;-b :32位or64位系統; -v verbose output
$psrinfo:處理器信息
$prtdiag: print system diagnostic information. -v verbose mode
$uname -a:顯示系統信息
$showrev: 打印系統軟硬件版本信息; -a 輸出window系統和patch的版本; -p patch的版本
$df -h: 察看磁盤使用情況
$du -sh *: 察看文件/目錄大小 s:summary, h:human readable format
$ifconfig
$ifconfig -a:查看網絡配置,interface name,IP address, MAC address等
$ifconfig <interface name> dhcp drop|start:啓動或者禁止DHCP。
$ifconfig <interface name> ether <mac address(x:y:z:...)>:設置網卡MAC地址。
$ifconfig <interface name> up/down:啓用/禁用網卡
Mount ISO文件:
# lofiadm -a /path/sol_10.iso /dev/lofi/1
# lofiadm
# mkdir /sol10
# mount -F hsfs -o ro /dev/lofi/1 /sol10
# df -h /sol10
# umount /sol10
# lofiadm -d /dev/lofi/1
# lofiadm
shell
$svcs:報告Service狀態
$svcadm:管理Service
$useradd -m -d <dir> <login>:建立用戶(-m 建立folder; dir例 /export/home/tony)
$userdel -r <login>:刪除用戶(-r 同時刪除用戶folder)
$passwd [<login>]:修改密碼;-h修改用戶目錄;-e修改login shell; 可查看/etc/passwd文件apache
$env:顯示環境變量
$type/which <command>:顯示命令路徑
$pwd: 顯示工做目錄
$id: 用戶id,所屬group的id
$su [- <login>] :切換用戶
$who :登陸的用戶列表, -r 顯示系統運行級別; finger,比who信息更詳細;rusers [host]: 顯示網絡中全部登錄用戶;
$write <login> [terminal]: 發送消息給某個用戶,輸入消息後ctrl+d結束。
$wall: write all 發送給登錄到本機的全部用戶; rwall: 發送到局域網上的全部用戶, rwall -n netgroup, rwall -h host
crontab
crontab file 安裝一個新的crontab文件(覆蓋原來的設定)
-l [username] 查看用戶的crontab文件
-e [username] 編輯用戶的crontab文件,使用EDITOR環境變量指定的編輯器,例如
export EDITOR=vi; crontab -e
-r [username] 刪除用戶的crontab文件,只有root用戶才能夠刪除其它用戶的crontab文件
只有root用戶才能夠查看/刪除/編輯其它用戶的crontab文件;
crontab文件位於/var/spool/cron/crontabs目錄下,每一個用戶有本身的文件;
/etc/cron.d目錄下面的cron.allow和cron.deny文件能夠控制那些用戶可使用crontab:
若是cron.allow存在,只有其中列出的用戶才能使用該命令;
若是cron.allow不存在但cron.deny文件存在,只有未列在該文件中的用戶才能使用該命令;
crontab文件的格式
mm hh dd mon weekday command
weekday的表示0-6 0表示週日;
"*"表示全部取值;"-"表示範圍;","隔開來指定多個取值;
command字段的第一行做爲命令,其它行做爲命令的輸入.%解釋爲換行,因此若是須要使用%要加轉義符\;
cron從$HOME啓動command,提供如下的環境變量SHELL HOME LOGNAME TZ PATH,
SHELL設置爲/bin/sh;PATH設置爲/usr/bin(root用戶爲/usr/bin:/usr/sbin)
因此要麼在command中設置完整路徑,要麼顯式指定PATH變量;
例如: 6-10 20,22 * * 0 $HOME/test.sh >> $HOME/logs/cron.log
at time < commandfile 延遲到指定時間運行命令文件.
atq列出隊列裏的全部任務; atrm刪除隊列裏的任務;
/var/spool/cron/atjobs目錄下保存當前未完成的任務;
/etc/cron.d目錄下面的at.allow和at.deny文件能夠控制那些用戶可使用at:
郵件
列出本地郵箱(/var/mail/$USER)中的消息:
mailx
讀取文件內容做爲郵件正文發送:
mailx -s "hello" tony@hotmail.com < filename
把srcfile做爲附件(附件名pathname)發送:
uencode srcfile pathname | mailx -s "hello" tony@hotmail.com
同時發送正文(內容在文件filename中)和附件srcfile(附件名pathname)
uuencode srcfile pathname > mailatt.tmp
cat filename mailatt.tmp > mail.tmp
mailx -s "hello" tony@hotmail.com < mail.tmpc#