Solaris 命令大全

pentium發表於2009-05-17
From: [@more@]Solaris 命令大全
終端控制
ctrl+s :終止螢幕輸出,如用cat命令輸出時,要停一下
ctrl+q :恢復ctrl+q的輸出
ctrl+c :中斷當前的活動,返回命令提示符
ctrl+d :表示檔案的結束或退出,如退出終端視窗
ctrl+u :擦除整個命令列
ctrl+w :擦除命令列最後一個單詞
ctrl+h :擦除命令列最後一個字元
bc :計算器
#ksh 切換到k shell
命令: .................................................................
# uname
SunOS
NAME
#man uname
uname - print name of current system
SYNOPSIS
uname [-aimnprsvX]
uname [-S system_name]
# date
2004年05月19日 星期三 21時57分49秒 CST
#
stings
$stings /usr/bin/cat
能夠用來列印可執行檔案或二進位制檔案中的可讀字元。
cat
#cat -n test.txt //顯示行號
more
鍵值 目的
空格 滾動到下一屏
回車 一次滾動一行
b 向後移動一屏
f 向前移動一屏
h 顯示更多特性的幫助選單
q 退出,返回shell提示符
/string 向前搜尋字串string
n 查詢下一處匹配
less
#less test.txt //前移動一屏F,後B ,/string 查詢字元
head
#head -5 /export/home/wing/test.txt //顯示開始的5行
#head chap*|more //顯示所有以chap開頭的檔案的頭部
用來顯示一個或多個檔案的前n行,預設省略-n引數將顯示檔案的前10行。
tail
#tail -5 /export/home/wing/test.txt //顯示最後5行
#tail +5 /export/home/wing/test.txt //顯示第5行開始到結束
用來顯示一個檔案的最後n行,預設省略-n引數將顯示檔案的最後10行。
# tail -f /var/adm/messages //實時自動瀏覽syslog入口
wc
#wc /export/home/wing/test.txt //顯示檔案的行、單詞、位元組數
#wc -l /export/home/wing/test.txt //顯示檔案的行數
選項 功能
-l 統計行數
-w 統計單詞數
-c 統計位元組數
-m 統計字元數
diff
#diff -i test.txt test2.txt //忽略文章中的大小寫
#diff -c test.txt test2.txt //進行細緻的比較生成一個差別表
touch
#touch test1.txt test2.txt test3.txt //可以一次建立多個檔案
mkdir
#mkdir /export/home/wing
#mkdir -p /export/home/wing //在路徑中名中不存在的目錄將被建立
#rmdir dir //所要刪除的目錄必須是空的
rm
rm -i test.txt test2.txt //互動式刪除檔案
rm -r /tem/testd //刪除目錄和目錄下的檔案
rm -ir /tem/testd //互動式的刪除目錄和目錄下的檔案
cp
cp -i oldfilename newfilename //互動式複製
cp /export/home/keven/ok.txt /export/home/wing/test.txt
cp -ri /export/home/keven /export/home/wing 整個目錄一起拷
cp -rp 檔案屬性一起複製
crontab
直接登陸視窗介面
# crontab -l root //檢視作業
/etc/init.d/cron stop //停止程式
crontab -e root //編輯加入要執行的程式碼
0-59 * * * * date >> /export/home/keven/keven.txt //加入次行在末尾,每分鐘執行一次
“格式如下:
   (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   date >> /export/home/keven/keven.txt
       1. 分鐘 (0-60)
       2. 小時 (0-23)
       3. 日 (1-31)
       4. 月 (1-12)
       5. 星期 (0-6)
       6. 所要執行的程式
如1-59分鐘,1-24 小時
0 18-23 0 0 0-6 //每天的18-23點執行,0-6為週日到週六
/etc/init.d/cron start //啟動程式
# crontab -l root 檢視作業是否加入執行佇列。
直接編輯使用者的cron檔案 是不會馬上執行的,
cron demon是在啟動的時候才讀一次配置檔案.
如果你是後加的JOB 要用crontab -e來編輯使用者的cron.
要不你 kill -HUP cron的程式ID.
重新啟動這個程式.
每5分鐘做一次必須寫成5,15,20,25,30,35,40,45,50,55 * * * *
===================================
“格式如下:
   (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
       1. 分鐘 (0-60)
       2. 小時 (0-23)
       3. 日 (1-31)
       4. 月 (1-12)
       5. 星期 (1-7)
       6. 所要執行的程式
但是我設成 1 0 0 0 0 /usr/bin/ps
希望能自動在一分鐘之後顯示程式。但是沒有成功。
HELP ME
===============================================
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null
此處>/dev/null 必須用嗎? 何意思?
輸出重定向到/dev/null, 否則會mail到你的郵箱
dev/null 是一個特殊檔案,所有輸入到該檔案的資料都會被丟棄。
> /dev/null 的意思就是丟棄所有的輸出內容
這種寫法只能把標準輸出送到/dev/null中,如果有錯誤產生的話,還是會送到信箱裡的。
下面的寫法才可以丟棄所有的輸出內容:
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null 2>&1
0 14 * * 0-6 //每天的下午14點執行
ls
$ ls -n
# ls -ld using_samba //檢視目錄的許可權
drwxr-xr-x 2 root other 512 5月 8 22:23 using_samba
$ ls -a
$ ls -l
$ ls -F //列出目錄名
$ ls -R //遞迴顯示
$ ls . //顯示當前目錄
$ ls .. //顯示當前目錄的父目錄,支援路徑表示符如~
$ ls -i test.txt test1.txt //節點檢查
$ ls -ld //只顯示目錄
file
$ file passwd.txt
passwd.txt: ascii文字
lp
$lp ok.txt myfile test.txt
$lp -p evans1 test.txt //-p後為印表機evans1
$lpstat // 列印佇列狀態
ln
#ln file1 newfile
#ln file1 directory/newfilename 硬連結
#ln ~/book/chap* /home/brad
為每個chap檔案都建立了連結,把這些連結指向/home/brad目錄
如果檔案有多個指向它的硬碟連結,只是刪除該檔案並不能有效的釋放磁碟空間,你將不得不刪除掉所有指向它的硬連結。
#ln -s src target
是軟連結,儲存的只是路徑,用ls -l 可以看到,如果原檔案已移走或刪除,該名,則target就沒有用了,刪除和該名連結同樣用rm
如果檔案有多個指向它的硬碟連結,只是刪除該檔案並不能有效的釋放磁碟空間,你將不得不刪除掉所有指向它的硬連結。
# ln -s /export/home/ddd /var 既把/export/home/ddd目錄連結到/var下面
在var下面生成ddd 連結符號。當/var滿了是時候用
mv
#mv -i oldfilename newfilename 改名檔案或資料夾
#mv -i source_file(s) target_directory 移動檔案到其它目錄
swap
# swap -s //列出一個系統虛擬交換空間的摘要。
total: 25728k bytes allocated + 6140k reserved = 31868k used,56496k
available
# swap -l //列出系統物理交換空間的詳細說明。
swapfile dev swaplo blocks free
/dev/dsk/c0t3d0s1 32,28 8 98792 90384
vmstat //檢視虛擬記憶體狀態
# vmstat -s
mpstat //系統負載cpu等資訊
# mpstat 5 //每隔5秒重新整理一次
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 32 2 0 114 68 181 5 0 1 0 263 0 1 1 98
0 2 0 0 101 55 160 1 0 0 0 58 0 0 0 100
0 0 0 0 101 55 164 1 0 0 0 70 0 0 0 100
0 0 0 0 99 52 158 1 0 0 0 48 0 0 0 100
0 22 0 0 102 56 164 1 0 0 0 136 0 0 0 100
cal 日曆
# cal 12 2002 //顯示2002年10月的日曆
# date;uname //組合命令,中間用;隔開
2004年05月19日 星期三 22時05分23秒 CST
SunOS
重定向輸入/輸出
#command >filename //如果檔名存在,它將被覆蓋,不存在將被建立
#command >>filename //向一個存在的檔案追加(新增到檔案的末尾)內容,而不是覆蓋它,如果不存在就建立。
#command 2>filename //重定向標準錯誤,會建立檔案或覆蓋原有檔案
#commanf 2>>filename //重定向標準錯誤,向一個存在的檔案追加(新增到檔案的末尾)內容,而不是覆蓋它,如果不存在就建立。
建ok檔案 寫入:cole how are you
$ write colecole會收到這段話:
在 wing (pts/2) [ 10月 3 五 22:41:08 ] 上面的 wing 中的訊息 ...
how are you my baby
<結束>
find
#find . -name test.txt //搜尋當前目錄
#find dir -name test.txt
#find / -name test.txt
#find /export/home -name test.txt
#find ~ -name ‘*tif' //使用者的主目錄
#find /export -name core -exec rm {} //搜尋core檔案並刪除它們
#find dir -type d //檔案型別
#find /export -type d -name test //資料夾名為test
#find /export -size +400 //檔案大於400塊的512byte =1 blocks
#find /export -name test.txt -exec rm {} ; //查詢並刪除
#find /export -name test.txt -ok rm {} ; //互動模式刪除 y
#find /export -user keven //按使用者查詢
#find / -user UID -exec rm{} ; //查詢該使用者的檔案並刪除
#find / -name pfile -print>find.txt 2>null.txt&
//找到則放入find.txt,否則就放到null.txt 程式在後臺執行
# find /export -name tex.txt -exec rm {} ; //{} 中間有一個空格
$ find ~ -name '*es' //es的前面為任意字元
搜尋表示式 意義 定義
name filename 檔名 搜尋所有匹配的給定的檔案,可以接受元字元(如? *)
type filetype 檔案型別 搜尋匹配給定檔案型別的檔案(d為目錄)
mtime [+|-]n 修改的時間 搜尋所有修改時間或者大於,或小於給定時間的檔案
atime[+|-]n 訪問的時間 搜尋所有訪問時間或者大於,或者小於給定時間的檔案
user loginid -group groupid 使用者ID和屬組ID 搜尋所有匹配登陸ID的所有者或屬組ID的檔案
perm mode 許可權 搜尋所有匹配給定許可權的檔案(只允許八進位制模式)
size[+|-]n[c] 搜尋所有大小或者大於,小於n的檔案,n以512位元組每塊計算,如果後面有ac,則以字元(位元組)計算
-print 基將搜尋結果輸出到標準輸出。該結果是一個全路徑名的檔名 列表
-exec command{}; exec選項必須透過;來終止;這樣使得find命令可以應用於指定命令中搜尋準則中給出的每個檔案
-ok command{}; -exec的互動格式.這個選項用於要求來自使用者的輸入命令.如 rm -i
-ls 使用長列表格式列印當前路徑.這個表示式最常用於連結一個輸出,把它重定向到一個檔案中,以便稍後進行檢查
grep
#grep root /etc/passwd //在passwd中查詢root
#grep -i root /etc/passwd //忽略大小寫
#grep -v root /etc/passwd //顯示除了含有root的行
# grep -c root group //統計有多少行
10
# grep -l root passwd group hosts //查詢檔案中包含root的檔案
passwd
group
正規表示式 功能 例子 結果
.(dot) 匹配任意字元可以多次使用,類似ls命令 grep chap.. file 顯示所有包含chap,且之後還有兩個字元的行
*(asterisk) 在模式上匹配0個或多個字元 grep chap* file 顯示所有包含chap,且之後可以是任意字元
(back slash) 告訴shell按照字面意思理解之後的特殊字元 grep dollar* file 顯示所有包含dollar*的行./告訴shell按照字面意思理解*,而不是萬用字元
^ (caret) 匹配所有以指定模式打頭的所有行 grep ^name file 顯示所有以Name開頭的行
$ 匹配所有以指定模式結尾的行 grep 0 file 顯示所有以800結尾的行
[] 匹配模式中的一個字元 grep [64.128] 顯示所有包含64MB或128MB的行
-i 忽略大小寫
-v 反包含.除了該字串之外的行
egrep
# egrep 'N(e|o)' /etc/passwd //查詢以字母大N開頭後面接e 或者o
listen:x:37:4:Network Admin:/usr/net/nls:
nobody:x:60001:60001:Nobody:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x Nobody:/:
$ egrep '(Network|uucp) Admin' /etc/passwd
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:
sort
#cat test.txt
oggg
aaa
ddkk
ddgfg
kk
11
34
22
#sort test.txt
11
22
34
aaa
ddgfg
ddkk
kk
oggg
# ls -ld t* >list
# cat list
-rw-r--r-- 1 keven user 32 10月 2 07:51 test.txt
-rw-r--r-- 1 keven user 0 9月 30 08:54 test1
-rw-r--r-- 1 keven user 0 9月 30 08:54 test2
-rw-r--r-- 1 keven user 0 9月 30 08:54 test3
# sort -rn +4 list -o tt.txt //翻轉排序 頭4個字元
# ls
list ok.txt ss test.txt test1 test2 test3 tt.txt
# cat tt.txt
-rw-r--r-- 1 keven user 32 10月 2 07:51 test.txt
-rw-r--r-- 1 keven user 0 9月 30 08:54 test3
-rw-r--r-- 1 keven user 0 9月 30 08:54 test2
-rw-r--r-- 1 keven user 0 9月 30 08:54 test1
#sort +5M +6n list -o up.txt
選項 描述
-n 進行數字排序,n可以單獨和短橫線連線,或者可以跟著一個區域引數
(+|-)n 以第n個分隔符的區域開始或結束。預設的分割符是空格
-r 翻轉排序的順序。r可以單獨與短橫線連用,或者可以跟著一個區域引數
-f 在排列中忽略大小寫
+nM 把開始的三個字元做為月份名稱的簡寫來排序
-d 使用字典排序,只用字母和空格排序,其它的符號忽略
-o filename 把所有輸出放到檔名中
who
# who
root console 10月 2 19:23 (:0) (本地登陸)
wing pts/2 10月 2 19:22 (192.168.0.1)(遠端登陸)
# who -q //登陸使用者統計
root wing
# users=2
# who -r //執行級別
. run-level 3 10月 2 19:20 3 0 S
$ who -Hu
NAME LINE TIME IDLE PID COMMENTS
keven pts/2 10月 12 10:57 . 389 (192.168.0.1)
user pts/3 10月 12 10:16 0:52 368 (192.168.0.1)
PID為使用者登陸上來的程式,#kill -9 368 把此使用者踢出
$ who
root console 10月 3 19:21 (:0)
keven pts/6 10月 3 22:11 (192.168.0.1)
wing pts/2 10月 3 22:11 (192.168.0.1)
cole pts/3 10月 3 22:11 (192.168.0.1)
w
$w
下午11點01分 執行 3:43, 4 users, 平均負載:0.00, 0.00, 0.02
使用者名稱 終端號 登入時間 閒置 JCPU PCPU 執行命令
root console 下午 7點21分 3:40 10 1 /usr/dt/bin/dtscreen -mode blank
keven pts/6 下午10點11分 -csh
wing pts/2 下午10點11分 5 w
cole pts/3 下午10點11分 50 -ksh
$ w keven
下午11點10分 執行 3:52, 4 users, 平均負載:0.00, 0.00, 0.02
使用者名稱 終端號 登入時間 閒置 JCPU PCPU 執行命令
keven pts/6 下午10點11分 9 -csh
logins
# logins
root 0 other 1 Super-User
daemon 1 other 1
bin 2 bin 2
sys 3 sys 3
adm 4 adm 4 Admin
uucp 5 uucp 5 uucp Admin
nuucp 9 nuucp 9 uucp Admin
smmsp 25 smmsp 25 SendMail Message Submission Program
listen 37 adm 4 Network Admin
lp 71 lp 8 Line Printer Admin
wing 1001 adm 4 my wife
keven 1002 user 100
user1 1003 adm 4
user2 1004 adm 4
cole 1005 adm 4
nobody 60001 nobody 60001 Nobody
noaccess 60002 noaccess 60002 No Access User
nobody4 65534 nogroup 65534 SunOS 4.x Nobody
last
$ last //當前系統的使用歷史使用模式
keven pts/2 192.168.0.1 Mon Oct 6 00:55 仍在登入狀態
cole pts/6 192.168.0.1 Mon Oct 6 00:52 仍在登入狀態
root console :0 Mon Oct 6 00:44 仍在登入狀態
wing pts/3 192.168.0.1 Mon Oct 6 00:21 仍在登入狀態
keven pts/2 192.168.0.1 Mon Oct 6 00:21 - 00:55 (00:34)
reboot system boot Mon Oct 6 00:20
keven pts/2 192.168.0.1 Sun Oct 5 19:47 - 20:02 (00:14)
reboot system boot Sun Oct 5 19:46
wing pts/1 192.168.0.1 Sun Oct 5 07:47 - 07:48 (00:00)
keven pts/1 192.168.0.1 Sun Oct 5 06:24 - 07:47 (01:23)
root console :0 Sun Oct 5 06:22 - 07:48 (01:25)
keven pts/1 192.168.0.1 Sun Oct 5 06:21 - 06:24 (00:02)
reboot system boot Sun Oct 5 06:21
cole pts/6 192.168.0.1 Sun Oct 5 01:58 - 03:09 (01:11)
wing pts/5 192.168.0.1 Sun Oct 5 01:58 - 03:10 (01:11)
finger
# finger
Login Name TTY Idle When Where
root Super-User console Thu 19:23 :0
wing my wife pts/2 Thu 19:22 192.168.0.1
$ finger -s keven //指定檢視的使用者
Login Name TTY Idle When Where
keven admin pts/6 11 Fri 22:11 192.168.0.1
$ finger @www //檢視一臺主機的登陸使用者狀況www為主機名
[www]
Login Name TTY Idle When Where
root Super-User console 1 Fri 19:21 :0
keven admin pts/6 13 Fri 22:11 192.168.0.1
#finger -s username@hostname
#finger @webserver.com
#finger username@webserver.com
$ finger -l keven //長格式顯示
Login name: keven In real life: admin
Directory: /export/home/keven Shell: /bin/ksh
On since Oct 12 10:16:41 on pts/2 from 192.168.0.1
24 seconds Idle Time
No unread mail
No Plan.
# finger user1
Login name: user1 In real life:
Directory: /export/home/wing Shell: /bin/sh
On since Oct 12 11:11:33 on pts/3 from 192.168.0.1
4 minutes 8 seconds Idle Time
No unread mail
No Plan.
$ finger -m //只搜尋登陸的使用者名稱
# man -l uname //輸出該命令的地址
uname (1) -M /usr/share/man
uname (2) -M /usr/share/man
id
# id
uid=0(root) gid=1(other) //為當前使用者的ID,而不是原始登陸ID
who i am
# who i am //真實的UID
root console Oct 2 19:23 (:0)
wing pts/2 Oct 2 19:41 (192.168.0.1)
vi
vi(文字輸入模式)
命令 功能
a 在游標後追加文字
A 在行末追加文字
i 在游標前追加文字
o 在游標下插入新的一行
vi(末行模式)
命令 功能
:w 寫緩衝區,儲存更改繼續在vi中工作
:w new_filename 把緩衝區寫如new_filename
:wq 或 ZZ 寫緩衝區,儲存修改,然後退出vi
:q! 不儲存修改而退出
:wq! 寫緩衝區儲存修改然後推出vi,如果你是檔案的所有者將忽略只讀屬性
e! 取消自上次儲存以來所做的修改
:x 等價於:wq! wq
u 取消最近的一次編輯
vi(命令模式)
命令 功能
j(或向下箭頭) 向下移動一行
k(或向上箭頭) 向上移動一行
h(或向左箭頭) 向後移動一個字元
l(或向右箭頭) 向前移動一個字元
空格 向右移動一個字元
w 向前移動一個單詞(包括標點)
b 向後移動一個單詞(包括標點)
$ 移動到行末
0(零)或 ^ 移動到行首
回車 移動到下一行首
vi(命令模式和末行模式)
命令 功能
x (小寫) 刪除游標處字元
dw 刪除單詞
3dw 刪除三個單詞
dd 刪除游標所在的行
3dd 刪除三行
yy 拉出一行複製,放到剪貼簿中
p(小寫) 把拉出行放到當前之下
P(大寫) 把拉出行放到當前之上
:set nu 顯示行號
:set nonu 隱藏行號
:set showmode 顯示當前操作模式(如用vedit將自動開啟)
:set noshowmode 關閉模式顯示
:set 顯示所有vi變數
:set all 顯示所有可能的vi變數和它們的當前的值
G 到達檔案的最後一行
:21 到達第21行
/string 向前搜尋字串string
?string 向後搜尋字串string
n 查詢匹配的下一個字串
cpio
#cpio -idcmv tar
# tar cvf backup.tar list ok.txt test.txt //備份生成backup.tar
a list 1K
a ok.txt 1K
a test.txt 1K
#tar rvf backup.tar tt.txt //追加tt.txt到backu.tar中去
# tar cvf backup.tar tt.txt //注意會覆蓋backup.tar原有的檔案
a tt.txt 1K
# tar cvf /export/home/wing/mywife.tar ok2.txt ss // 備份到另一個目錄
# tar xvf backup.tar //全部還原出來
# tar xvf backup.tar tt.txt //把指定的檔案還原出來
tar: 塊大小 = 4
x tt.txt, 290 bytes, 1 tape blocks
# tar tvf backup.tar //檢視裡面被壓縮了的檔名,並沒有解壓出來
tar: 塊大小 = 4
-rw-rw-rw- 1002/1 290 2003 10月 3 02:10 tt.txt
$tar uf myarch mydir //t a r將比較每個存檔檔案和使用者目錄中檔案的最近更新時間,然後將任何自從上次存檔以來所改變的檔案複製到檔案中
引數 說明
c 建立一個新的tar檔案
t 列出tar檔案的內容
x 從tar檔案中解壓出指定的檔案
r 向已有的tar檔案追加一個新檔案進去
f 指定檔名
v 詳細模式
m 將在從一個檔案中抽取檔案時,不要給它新的時戳
compress
# compress -v kk.txt mm.txt
kk.txt: 壓縮:58.18% -- 用kk.txt.Z替換 //注意原來的檔案將被.Z所替代
mm.txt: 壓縮:1.33% -- 用mm.txt.Z替換
# ls
err.txt kk.txt.Z mm.txt.Z tt.txt
# uncompress -v ok2.txt.Z //解壓縮,注意原來的.Z檔案將被ok2.txt替代
# uncompress -c test1.Z|more //只是檢視檔案的內容,沒有解壓出來
zip
#zip winzip test1.txt test2.txt //生成winzip.zip檔案
#unzip winzip.zip //解壓縮
gzip
# gzip -v test2 test3
test2: 0.0% -- replaced with test2.gz//注意把原來的給替換了
test3: 0.0% -- replaced with test3.gz
# ls
test2.gz test3.gz
gunzip
#gunzip test2.gz
gzcat
#gzcat tt.txt.gz
-rw-r--r-- 1 keven user 32 10月 2 07:51 test.txt
-rw-r--r-- 1 keven user 0 9月 30 08:54 test3
-rw-r--r-- 1 keven user 0 9月 30 08:54 test2
-rw-r--r-- 1 keven user 0 9月 30 08:54 test1
使用者和許可權
chmod
#chmod u+r test.txt
#chmod go+rw test.txt
#chmod o-w test.txt
#chmod 555 test.txt
#chmod +t dir //粘帶位許可權
#chmod g+s file.txt //setuid
#chmod u+s file.txt //setgid
chown
#chown new_owner filename
#chown -R new_owner directoryname
chgrp
#chgrp new_group filename
#chgrp -R new_group filename
nice
#nice -20 dtterm //優先順序增加到20 數值越大優先順序越高
#nice --20 dtterm //優先順序減少到20
groups
$ groups //顯示自己所在的組
adm
$ groups root //顯示該使用者屬於什麼組
other root bin sys adm uucp mail tty lp nuucp daemon
newgrp
$newgrp adm //切換到其它的組
umask
% umask
22
起始許可權-想得到的許可權=umask值
useradd
#useradd user3
#useradd -u 1006 -g 4 -d /export/home/user3 -s /bin/sh -c “web user” user3 //完整的新增使用者
#useradd -u 1006 -g 4 -d /export/home/user3 -m -s /bin/sh -c “web user” user3 //建立使用者的同時建立主目錄檔案
引數 說明
-c 對每個使用者的註釋,記錄每個使用者的個人資訊
-d 使用者主目錄路徑
-m 用來建立使用者的主目錄,通常與-d路徑名一起用
-g 使用者的預設組
-g 使用者的預設gid
-e 帳號不再有效,通常在建立臨時帳號用
-f 許可使用者的最大閒置天數,在建立臨時帳號時用到
-u 使用者的uid
-s 使用者的shell路徑
userdel
#userdel user7 //把user7刪除,但是不刪住目錄
#userdel -r username //把主目錄一起刪除
usermod
# usermod -u 1005 -c adminisrator cole //修改使用者的一些資訊
#usermod -G group1 ,group2 username //把使用者新增到多個組
# usermod -G sys,sysadmin cole
# groups cole
mail sys sysadmin
# usermod -g apache cole //主要組
# groups cole
apache
passwd
#passwd -f user //下次登陸時強制其改變密碼
#passwd user //修改其密碼
#passwd -l user //鎖住使用者不能登陸
#passwd -x 30 user //口令有效期為30天
#passwd -w 3 user //口令失效的前3天提醒使用者修改
groupadd
# groupadd -g 2000 usergroup
groupdel
#groupdel groupname
groupmod
#groupmod -n newname oldname
#groupmod -g gid groupname //修改其gid
#groupmod -g gid -n newname oldname
程式管理
ps
欄位概述:
F十六進位制標誌,它們加起來表示程式的當前狀態。
如下所述:00 程式終止,而且它們在程式表中的空間已釋放。01 系統程式,長駐記憶體02 程式被父程式跟蹤04 程式被父程式跟蹤而且已被停止08 該程式無法被訊號量喚醒10 該程式當前在記憶體中,而且被鎖定直到一個事件完成20 程式不能被交換出
S 程式當前狀態,由以下字母之一顯示:
O 當前正在處理器上執行
S 睡眠;等待I/O事件完成
R 執行結束I 空閒;程式被建立
Z 僵死。程式已終止
T由於父程式跟蹤而停止
X 等待更多的記憶體
UID程式所有者的使用者ID
PID程式ID
PPID父程式ID
C 程式的CPU使用情況(即程式佔CPU時間的百分比)
PRI 程式優先權方案。較大的數表示較低的優先權
NI 程式的nice值,該值與優先權方案相關聯。使一個程式“nicer”意指降低該程式的優先權,以使它不會用盡CPU的時間
SZ程式請求的虛擬記憶體量。這是該系統對記憶體需求的一個好的指標。
TTY 啟動程式(或者父程式)的終端。帶問號的程式無控制終端(通常為系統程式)
TIME自程式啟動以來佔CPU時間總量
COMD產生程式的命令
# ps -f
UID PID PPID C STIME TTY TIME CMD
keven 360 358 0 19:19:19 pts/2 0:00 -csh
keven 477 360 0 19:28:14 pts/2 0:00 ps -f
# ps -u wing //特定使用者
PID TTY TIME CMD
368 pts/3 0:00 sh
# ps
PID TTY TIME CMD
360 pts/2 0:00 csh
475 pts/2 0:00 ps
# ps -e
PID TTY TIME CMD
0 ? 0:01 sched
1 ? 0:00 init
2 ? 0:00 pageout
3 ? 0:00 fsflush
328 ? 0:00 sac
331 ? 0:00 ttymon
153 ? 0:00 rpcbind
# ps -ecl //PRI為程式優先權,這裡98為最高
F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 SYS 96 fec287cc 0 ? 0:00 sched
8 S 0 1 0 TS 59 de7a8808 319 dea06e16 ? 0:00 init
19 S 0 2 0 SYS 98 de7a8108 0 fec4d4b8 ? 0:00 pageout
19 S 0 3 0 SYS 60 de7a7a08 0 fecea0bc ? 0:01 fsflush
8 S 0 329 1 TS 59 de7a7308 448 deac8d68 ? 0:00 sac
8 S 0 256 1 TS 59 de7a6c08 1084 deeb7f02 ? 0:00 sendmail
$ ps -eaf
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 19:18:44 ? 0:01 sched
root 1 0 0 19:18:44 ? 0:00 /etc/init -
root 2 0 0 19:18:44 ? 0:00 pageout
root 3 0 0 19:18:44 ? 0:00 fsflush
root 328 1 0 19:19:10 ? 0:00 /usr/lib/saf/sac -t 300
root 331 328 0 19:19:10 ? 0:00 /usr/lib/saf/ttymon
root 153 1 0 19:18:53 ? 0:00 /usr/sbin/rpcbind
#ps -eaf |grep wing
root 317 1 0 19:19:10 ? 0:00 /usr/lib/dmi/snmpXdmid -s wing
root 329 1 0 19:19:10 console 0:00 /usr/lib/saf/ttymon -g -h -p wing
console login: -T sun-color -d /dev/console
wing 368 366 0 19:19:47 pts/3 0:00 -sh
用法:ps [ -aAdeflcjLPy ] [ -o 格式 ] [ -t 項列表 ]
[ -u 使用者列表 ] [ -U 使用者列表 ] [ -G 組列表 ]
[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]
選項 意義 功能
ps 無選項 顯示在當前shell和終端視窗中的使用者程式資訊
ps -e every 顯示系統中每一個程式的資訊
ps -f full 生成一個長列表,顯示每個程式的所有可用資訊
ps -u userid user 顯示特定使用者的所有程式資訊
$ ps -u wing //wing為使用者名稱
PID TTY TIME CMD
368 pts/3 0:00 sh
494 pts/3 0:00 ps
$ ps -U wing
PID TTY TIME CMD
368 pts/3 0:00 sh
495 pts/3 0:00 ps
$ ps -G user //user為組名
PID TTY TIME CMD
360 pts/2 0:00 csh
# priocntl -l
CONFIGURED CLASSES
==================
SYS (System Class) 系統
TS (Time Sharing) 分式共享
Configured TS User Priority Range: -60 through 60
FX (Fixed priority)
Configured FX User Priority Range: 0 through 60
IA (Interactive) 互動
Configured IA User Priority Range: -60 through 60
對於分式共享級,使用者提供的優先權範圍為:-20~+20
# ps -ecl
F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 SYS 96 fec287cc 0 ? 0:00 sched
8 S 0 1 0 TS 59 de7a8808 319 dea06e16 ? 0:00 init
pgrep //檢視程式
# pgrep -lf inetd
616 /usr/sbin/inetd -s -t
$ pgrep -l lp
217 lpsched
kill
signal:
1 暫停
2 中斷
3 退出
4 非法指令
5 跟蹤中斷
6 Abort
7 EMT指令(Emulation競爭trap)
8 浮點格式的異常情況
9 kill(不能被捕獲或忽略)
10 通道錯誤
11不合法的記憶體區段
12 錯誤系統呼叫
13 寫入不可讀的連通管道
14 alarm clock
15 軟體結束訊號
16 使用者定義的訊號1
17使用者定義的訊號2
18 子程式狀態被改變
19 電源壞掉
20視窗(Window)的大小被改變
21Urgent(緊急的)Socket Condition
22 Pollable(可查詢的)event
23 停止
24 由使用者終止
25 繼續執行
26 停止終端輸入
27 停止終端輸出
28 virtual Timer expired
29 Profiling time expired
30 超過CPU時間
31 超過檔案大小限制
32 Socket I/O possible
#kill -9 368 //強行殺死一個程式
#kill 368 //殺死一個程式,使用15為預設值,為軟殺死
kill -HUP ID //重啟一個程式
$sleep 500&
$jobs
[1]+Running sleep 500
$sleep 500
^z
[1]+stopped sleep 00
$jobs
[1]+stopped sleep 500
$bg%1
[1]+Running sleep 500
$kill %1
[1]+ Terminated sleep 500
$jobs
$
java
# java -version
java version "1.4.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0
Java HotSpot(TM) Client VM (build 1.4.0_03-b04, mixed mode)
proc工具
$ ps
PID TTY TIME CMD
806 pts/3 0:00 ps
368 pts/3 0:00 sh
$ pflags 368
368: -sh
data model = _ILP32 flags = PR_ORPHAN
/1: flags = PR_PCINVAL
% pmap 823 //程式的地址空間分配,和需要執行的庫
823: -csh
08043000 20K rw--- [ stack ]
08050000 128K r-x-- /usr/bin/csh
08070000 12K rwx-- /usr/bin/csh
08073000 68K rwx-- [ heap ]
DD9C0000 8K r-x-- /usr/lib/locale/zh_CN.GB18030/methods_zh_CN.GB18030.so.2
DD9D1000 4K rwx-- /usr/lib/locale/zh_CN.GB18030/methods_zh_CN.GB18030.so.2
DD9E0000 324K r-x-- /usr/lib/locale/zh_CN.GB18030/zh_CN.GB18030.so.2
DDA40000 8K rwx-- /usr/lib/locale/zh_CN.GB18030/zh_CN.GB18030.so.2
DDA60000 4K rwx-- [ anon ]
DDA70000 628K r-x-- /usr/lib/libc.so.1
DDB1D000 24K rwx-- /usr/lib/libc.so.1
DDB23000 4K rwx-- /usr/lib/libc.so.1
DDB30000 152K r-x-- /usr/lib/libcurses.so.1
DDB66000 28K rwx-- /usr/lib/libcurses.so.1
DDB6D000 8K rwx-- /usr/lib/libcurses.so.1
DDB80000 4K r-x-- /usr/lib/libdl.so.1
DDB90000 292K r-x-- /usr/lib/ld.so.1
DDBE9000 16K rwx-- /usr/lib/ld.so.1
DDBED000 8K rwx-- /usr/lib/ld.so.1
total 1740K
$ pldd 830 //與每個程式連結的動態庫列表
830: -sh
/usr/lib/libgen.so.1
/usr/lib/libc.so.1
/usr/lib/libdl.so.1
/usr/lib/locale/zh_CN.GB18030/zh_CN.GB18030.so.2
/usr/lib/locale/zh_CN.GB18030/methods_zh_CN.GB18030.so.2
$ psig 830 //與程式相關的的訊號列表
830: -sh
HUP caught done 0
INT caught 0x8059a30 0
QUIT caught 0x8059a30 0
ILL caught done 0
TRAP caught done 0
ABRT caught done 0
EMT caught done 0
FPE caught done 0
KILL default
BUS caught done 0
SEGV caught 0x8059f70 ONSTACK,SIGINFO
$ pstack 830 //以十六進位制格式檢視程式堆疊跟蹤
830: -sh
ddacedf7 waitid (0, 353, 8047d40, 83)
ddaeeea7 _waitpid (353, 8047df8, 80) + 66
ddb30581 waitpid (353, 8047df8, 80) + 21
08062319 ???????? (8078c44)
08062cef postjob (353, 1) + ce
0805d1e9 execute (8079374, 0, 0) + 801
08055b61 ???????? (0)
080559b5 main (1, 8047eb4, 8047ebc) + 4d9
08055427 ???????? ()
$ pfiles 830 //每個程式所開啟的所有檔案
830: -sh
Current rlimit: 256 file descriptors
0: S_IFCHR mode:0620 dev:102,0 ino:853 uid:1001 gid:7 rdev:24,2
O_RDWR
1: S_IFCHR mode:0620 dev:102,0 ino:853 uid:1001 gid:7 rdev:24,2
O_RDWR
2: S_IFCHR mode:0620 dev:102,0 ino:853 uid:1001 gid:7 rdev:24,2
O_RDWR
$ pwdx 830 //獲取該程式當前的工作目錄
830: /export/home/wing
$ ptree 830 //獲父程式與子程式的關係
179 /usr/sbin/inetd -s
828 in.telnetd
830 -sh
854 ptree 830
lsof 工具-需下載安裝,本身沒有自帶
軟體管理
pkgadd
#pkgadd -d /tem softwarename
軟體名gpw-6.94-sol8-intel-local.gz
#gunzip gpw-6.94-sol8-intel-local.gz
#head gpw-6.94-sol8-intel-local.gz //檢視檔案的版本資訊
#pkgadd -d gpw-6.94-sol8-intel-local.gz
install
#install -c /opt/scripts -m 0755 -u bin -g sysadmin /tmp/setup_script
//目標路徑 許可權 使用者 組 源路徑
pkginfo
#pkginfo //安裝了的軟體包
pkgchk
#pkgchk pkginst //檢查軟體包的完整性
#pkgchk -f pkginst //處理軟體包問題
#pkgchk -n pkginst //忽略包的不穩定性
#pkgchk -l -p /usr/bin/mydir //獲取已安裝檔案的包屬性
pkgrm
#pkgrm pkginst //刪除軟體包
#pkgrm pkginst1 pkginst2 //同時刪除多個包
showrev
#showrev -p //顯示已安裝的補丁
patchadd
#patchadd patchname //安裝補丁
#patchadd -M patch1 patch2 //同時安裝多個補丁
#patchadd -d -R /export/mars /var/spool/patch/11102-12
//目的 源路徑
//不允許對補丁安裝進行現場恢復
補丁安裝例項
2.6_Recommended.tar.z 補丁名
1
#df -k dir //檢視該目錄的大小
#tar xvf 2.6_Recommended.tar.z
#./install
引數 功能
-B 指定儲存恢復現場資訊的目錄,而不是預設目錄
-C 如果需要,指定需要打補丁的網路安裝映象的路徑
-d 不接受可恢復現場的補丁安裝
-M 指定定位補丁的可選目錄
-p 列印所有已安裝的補丁列表
-u 不讓檔案安裝生效
-R 為客戶安裝指定可選根目錄
-S 從伺服器為客戶端安裝補丁,客戶機共享伺服器作業系統目錄
patchrm
#patchrm patchname // 刪除補丁
#patchrm -C /export/solaris_2.9/tools/1065-15
//從客戶端系統刪除補丁
引導和啟動過程、ok模式
#shutdown
#reboot
#init 0
#boot -r
ok setenv boot-device disk //將預設的啟動裝置改為disk
boot-device = disk
ok printenv boot-device //驗正啟動裝置
boot-device disk disk
ok reset
ok test net //測試迴路網路裝置
ok watch-clock //測試時鐘裝置
ok boot -r //重新引導系統
ok boot net //從網路啟動
ok boot cdrom //從光碟啟動
ok boot floppy //從軟盤啟動
ok boot tape //從磁帶引導系統
ok watch-net //檢查網路是否聯通
ok probe-scsi //檢查系統檢測出的所有磁碟裝置,並得到可用的裝置列表
ok banner //檢測記憶體、系統韌體的openboot版本資訊
ok boot -s //進入單使用者模式
#reboot -l -- -r //重新引導不在系統日記裡記錄
#shutdown - i 0 -g 120 -y
#sync;init 0
#traceroute
wall
#wall
init
#init q //重新初始化執行級別
#init 0 //硬體維護模式
#init 1 //單使用者模式
#init 2 //NFS不可用
#init 3 //NFS可用
#init 4 //使用者定義狀態
#init 5 //關閉系統電源
#init 6 //掛起作業系統
#init s //進入管理狀態
網路配置
/etc/hostname.interface //是這塊網路卡的名字或機器的名字
# cat hostname.pcn0
wing
# cat hosts
#
# Internet host table
#
127.0.0.1 localhost
192.168.0.11 wing
# hostname
wing
# cat netmasks
192.168.0.0 255.255.255.0
#ifconfig le0 172.16.255.1 netmask 255.255.255.0
配置網路埠狀態
#ifconfig le0 up/down
配置網路埠是否可用
#ifconfig le0 plumb/unplumb
#ifconfig -a 這個地址只有root使用者使用時才顯示。如果一個非root使用者使用ifconfig命令,那麼只有IP地址
# ifconfig -a
lo0: flags=1000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843 mtu 1500 index 2
inet 192.168.10.25 netmask ffffff00 broadcast 192.168.10.255
ether 8:0:20:a2:11:de
#
#ifconfig le0 192.168.0.3 netmask 255.255.255.0 broadcast 192.168.0.255 up
banner
你也可以在系統還沒有啟動時在ok提示符下敲入banner來找到MAC地址,CPU 型號和頻率。
ok banner
un Ultra 5/10 UPA/PCI (UltraSPARC-IIi 300MHz), Keyboard Present
OpenBoot 3.1.1 64 MB memory installed, Serial #9361102.
Ethernet address 8:0:20:8e:d6:ce, HostID: 808ed6ce.
# arp -a //登陸使用者
Net to Media Table: IPv4
Device IP Address Mask Flags Phys Addr
------ -------------------- --------------- ----- ---------------
pcn0 192.168.0.1 255.255.255.255 00:03:0f:fd:6d:0c
pcn0 wing 255.255.255.255 SP 00:0c:29:19:a1:54
pcn0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
# netstat // 網路狀態
TCP: IPv4
Local Address Remote Address Swind Send-Q Rwind Recv-Q State
-------------------- -------------------- ----- ------ ----- ------ -------
wing.telnet 192.168.0.1.1030 7168 0 66608 0 ESTABLISHED
wing.telnet 192.168.0.1.1032 6253 1 66608 0 ESTABLISHED
Active UNIX domain sockets
Address Type Vnode Conn Local Addr Remote Addr
df187cc0 stream-ord dee4c1c0 00000000 /tmp/.X11-unix/X0
df187de8 stream-ord 00000000 00000000
#
# netstat -r //檢視路由表
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ ---------
192.168.0.0 wing U 1 3 pcn0
224.0.0.0 wing U 1 0 pcn0
default wing UG 1 0
localhost localhost UH 2 6 lo0
# netstat -g
Group Memberships: IPv4
Interface Group RefCnt
--------- -------------------- ------
lo0 224.0.0.1 1
pcn0 224.0.0.1 1
# netstat -p
Net to Media Table: IPv4
Device IP Address Mask Flags Phys Addr
------ -------------------- --------------- ----- ---------------
pcn0 192.168.0.1 255.255.255.255 00:03:0f:fd:6d:0c
pcn0 solaris9 255.255.255.255 SP 00:0c:29:80:4c:0a
pcn0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
#
# netstat -s
# netstat -M
Virtual Interface Table is empty
Multicast Forwarding Cache is empty
#
# netstat -r //網路介面狀態
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ ---------
192.168.0.0 solaris9 U 1 1 pcn0
192.168.0.0 address2 U 1 0 pcn0:1
224.0.0.0 solaris9 U 1 0 pcn0
default 192.168.0.1 UG 1 0
localhost localhost UH 2 6 lo0
# netstat -rn
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ ---------
192.168.0.0 192.168.0.3 U 1 1 pcn0
192.168.0.0 192.168.0.5 U 1 0 pcn0:1
224.0.0.0 192.168.0.3 U 1 0 pcn0
default 192.168.0.1 UG 1 0
127.0.0.1 127.0.0.1 UH 2 6 lo0
#
# netstat -i 1 5
input pcn0 output input (Total) output
packets errs packets errs colls packets errs packets errs colls
1187 0 1318 0 0 3699 0 3830 0 0
4 0 4 0 0 4 0 4 0 0
3 0 3 0 0 5 0 5 0 0
4 0 4 0 0 4 0 4 0 0
3 0 4 0 0 5 0 6 0 0
#
snoop
# snoop -c 3 //抓取3IP包
Using device /dev/pcn0 (promiscuous mode)
192.168.0.1 -> solaris9 TELNET C port=3013
solaris9 -> 192.168.0.1 TELNET R port=3013 Using device /dev/pc
192.168.0.1 -> solaris9 TELNET C port=3013
3 packets captured
#
# snoop -v -c 2 //抓取兩個詳細的IP包。
Using device /dev/pcn0 (promiscuous mode)
ETHER: ----- Ether Header -----
ETHER:
ETHER: Packet 1 arrived at 1:43:41.42
ETHER: Packet size = 60 bytes
ETHER: Destination = 0:c:29:80:4c:a,
ETHER: Source = 0:3:f:fd:6d:c,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: ----- IP Header -----
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. .... = 0 (precedence)
IP: ...0 .... = normal delay
IP: .... 0... = normal throughput
IP: .... .0.. = normal reliability
IP: .... ..0. = not ECN capable transport
IP: .... ...0 = no ECN congestion experienced
IP: Total length = 40 bytes
IP: Identification = 1627
IP: Flags = 0x4
IP: .1.. .... = do not fragment
IP: ..0. .... = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 128 seconds/hops
IP: Protocol = 6 (TCP)
IP: Header checksum = 7320
IP: Source address = 192.168.0.1, 192.168.0.1
IP: Destination address = 192.168.0.3, solaris9
IP: No options
IP:
TCP: ----- TCP Header -----
TCP:
TCP: Source port = 3013
TCP: Destination port = 23 (TELNET)
TCP: Sequence number = 769864152
TCP: Acknowledgement number = 52297913
TCP: Data offset = 20 bytes
TCP: Flags = 0x10
TCP: 0... .... = No ECN congestion window reduced
TCP: .0.. .... = No ECN echo
TCP: ..0. .... = No urgent pointer
TCP: ...1 .... = Acknowledgement
TCP: .... 0... = No push
TCP: .... .0.. = No reset
TCP: .... ..0. = No Syn
TCP: .... ...0 = No Fin
TCP: Window = 17292
TCP: Checksum = 0x7b85
TCP: Urgent pointer = 0
TCP: No options
TCP:
TELNET: ----- TELNET: -----
TELNET:
TELNET: ""
TELNET:
ETHER: ----- Ether Header -----
ETHER:
ETHER: Packet 2 arrived at 1:43:41.42
ETHER: Packet size = 97 bytes
ETHER: Destination = 0:3:f:fd:6d:c,
ETHER: Source = 0:c:29:80:4c:a,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: ----- IP Header -----
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. .... = 0 (precedence)
IP: ...0 .... = normal delay
IP: .... 0... = normal throughput
IP: .... .0.. = normal reliability
IP: .... ..0. = not ECN capable transport
IP: .... ...0 = no ECN congestion experienced
IP: Total length = 83 bytes
IP: Identification = 50744
IP: Flags = 0x4
IP: .1.. .... = do not fragment
IP: ..0. .... = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 60 seconds/hops
IP: Protocol = 6 (TCP)
IP: Header checksum = f717
IP: Source address = 192.168.0.3, solaris9
IP: Destination address = 192.168.0.1, 192.168.0.1
IP: No options
IP:
TCP: ----- TCP Header -----
TCP:
TCP: Source port = 23
TCP: Destination port = 3013
TCP: Sequence number = 52297913
TCP: Acknowledgement number = 769864152
TCP: Data offset = 20 bytes
TCP: Flags = 0x18
TCP: 0... .... = No ECN congestion window reduced
TCP: .0.. .... = No ECN echo
TCP: ..0. .... = No urgent pointer
TCP: ...1 .... = Acknowledgement
TCP: .... 1... = Push
TCP: .... .0.. = No reset
TCP: .... ..0. = No Syn
TCP: .... ...0 = No Fin
TCP: Window = 64240
TCP: Checksum = 0xd1f6
TCP: Urgent pointer = 0
TCP: No options
TCP:
TELNET: ----- TELNET: -----
TELNET:
TELNET: "Using device /dev/pcn0 (promiscuous mode)rn"
TELNET:
2 packets captured
#
# snoop host1 host2
host1 -> host2 ICMP Echo request
host2 -> host1 ICMP Echo reply
使用snoop實用程式判定系統間實際上傳送的什麼信,判斷網路暢通
# snoop -a dhcp
Snoop 的使用
Snoop 是Solaris 系統中自帶的工具, 是一個用於顯示網路通訊的程式, 它
可捕獲IP 包並將其顯示或儲存到指定檔案. (限超級使用者使用snoop)
Snoop 可將捕獲的包以一行的形式加以總結或用多行加以詳細的描述(有
呼叫不同的引數-v -V來實現). 在總結方式下(-V ) , 將僅顯示最高層的相關協
議, 例如一個NFS 包將僅顯示NFS 資訊, 其低層的RPC, UDP, IP, Ethernet 幀資訊將不會顯示, 但是當加上相應的引數(-v ), 這些資訊都能被顯示出來.
引數簡介:
[ -a ] # Listen to packets on audio
[ -d device ] # settable to le?, ie?, bf?, tr?
[ -s snaplen ] # Truncate packets
[ -c count ] # Quit after count packets
[ -P ] # Turn OFF promiscuous mode
[ -D ] # Report dropped packets
[ -S ] # Report packet size
[ -i file ] # Read previously captured packets
[ -o file ] # Capture packets in file
[ -n file ] # Load addr-to-name table from file
[ -N ] # Create addr-to-name table
[ -t r|a|d ] # Time: Relative, Absolute or Delta
[ -v ] # Verbose packet display
[ -V ] # Show all summary lines
[ -p first[,last] ] # Select packet(s) to display
[ -x offset[,length] ] # Hex dump from offset for length
[ -C ] # Print packet filter code
由於snoop 的使用非常靈活, 希望能透過下面一些例子的學習來其常見用法.
1. 監聽所有以本機為源和目的的包並將其顯示出來.
# snoop
2. 監聽所有以主機A為源和目的的包並將其顯示出來. ( A為主機名, 下同)
- 2 -
# snoop A
3. 監聽所有A和B之間的包並將其儲存到檔案file.
# snoop -o file A B
4. 顯示檔案file 中指定的包(99-108)
# snoop - i file -p 99,108
99 0.0027 boutique -> sunroof NFS C GETATTR FH=8E6C
100 0.0046 sunroof -> boutique NFS R GETATTR OK
101 0.0080 boutique -> sunroof NFS C RENAME FH=8E6C MTra00192
to .nfs08
102 0.0102 marmot -> viper NFS C LOOKUP FH=561E screen.r.13.i386
103 0.0072 viper -> marmot NFS R LOOKUP No such file or directory
104 0.0085 bugbomb -> sunroof RLOGIN C PORT=1023 h
105 0.0005 kandinsky -> sparky RSTAT C Get Statistics
106 0.0004 beeblebrox -> sunroof NFS C GETATTR FH=0307
107 0.0021 sparky -> kandinsky RSTAT R
108 0.0073 office -> jeremiah NFS C READ FH=2584 at 40960 for 8192
5. 詳細檢視檔案file 中第101 個包:
# snoop - i file - v -p101
ETHER: ----- Ether Header -----
ETHER:
ETHER: Packet 101 arrived at 16:09:53.59
ETHER: Packet size = 210 bytes
ETHER: Destination = 8:0:20:1:3d:94, Sun
ETHER: Source = 8:0:69:1:5f:e, Silicon Graphics
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: ----- IP Header -----
IP:
IP: Version = 4, header length = 20 bytes
IP: Type of service = 00
IP: ..0. .... = routine
IP: ...0 .... = normal delay
IP: .... 0... = normal throughput
IP: .... .0.. = normal reliability
IP: Total length = 196 bytes
IP: Identification 19846
IP: Flags = 0X
IP: .0.. .... = may fragment
IP: ..0. .... = more fragments
?
- 3 -
?
6. 檢視主機A和主機B之間的NFS 包(命令中的and 和or 為相應的邏輯運
算)
# snoop - i file rpc nfs and A and B
1 0.0000 A -> B NFS C GETATTR FH=8E6C
2 0.0046 B -> A NFS R GETATTR OK
3 0.0080 A -> B NFS C RENAME FH=8E6C MTra00192 to .nfs08
7. 將這些符合條件的包儲存到另一檔案file2 中:
# snoop - i file -o file2 rpc nfs A B
8. 監聽主機A和主機B間所有TCP 80 埠或UDP80埠的包
# snoop A and B and (tcp or udp) and port 80
9. 監聽所有的廣播包
# snoop broadcast
Using device /dev/hme (promiscuous mode)
10.10.10.50 -> BROADCAST UDP D=177 S=2541 LEN=35
10.10.10.50 -> BROADCAST UDP D=177 S=2541 LEN=35
10.10.10.50 -> BROADCAST UDP D=177 S=2541 LEN=35
10. 監聽所有的多播包, 並顯示詳細內容.
#snoop -v multicast
ETHER: ----- Ether Header -----
ETHER:
ETHER: Packet 1 arrived at 12:33:2.16
ETHER: Packet size = 69 bytes
ETHER: Destination = ff:ff:ff:ff:ff:ff, (broadcast)
ETHER: Source = 0:4:76:46:8f:50,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: ----- IP Header -----
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. .... = 0 (precedence)
IP: ...0 .... = normal delay
- 4 -
IP: .... 0... = normal throughput
IP: .... .0.. = normal reliability
IP: Total length = 55 bytes
IP: Identification = 14658
IP: Flags = 0x0
IP: .0.. .... = may fragment
IP: ..0. .... = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 128 seconds/hops
IP: Protocol = 17 (UDP)
IP: Header checksum = ed38
IP: Source address = 10.10.10.50, 10.10.10.50
IP: Destination address = 255.255.255.255, BROADCAST
IP: No options
IP:
UDP: ----- UDP Header -----
UDP:
UDP: Source port = 2541
UDP: Destination port = 177
UDP: Length = 35
UDP: Checksum = 8E35
UDP:
ETHER: ----- Ether Header -----
ETHER:
ETHER: Packet 2 arrived at 12:33:12.16
ETHER: Packet size = 69 bytes
ETHER: Destination = ff:ff:ff:ff:ff:ff, (broadcast)
ETHER: Source = 0:4:76:46:8f:50,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: ----- IP Header -----
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. .... = 0 (precedence)
IP: ...0 .... = normal delay
IP: .... 0... = normal throughput
IP: .... .0.. = normal reliability
IP: Total length = 55 bytes
IP: Identification = 14985
IP: Flags = 0x0
IP: .0.. .... = may fragment
IP: ..0. .... = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 128 seconds/hops
IP: Protocol = 17 (UDP)
IP: Header checksum = ebf1
IP: Source address = 10.10.10.50, 10.10.10.50
- 5 -
IP: Destination address = 255.255.255.255, BROADCAST
IP: No options
IP:
UDP: ----- UDP Header -----
UDP:
UDP: Source port = 2541
UDP: Destination port = 177
UDP: Length = 35
UDP: Checksum = 8E35
UDP:
11.監聽所有的NTP 協議包
# snoop |grep - i NTP
Using device /dev/hme (promiscuous mode)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:48:50 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:49:54 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:50:58 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:52:02 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:53:06 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:54:10 2002)
這裡我們也可看到NTP server 每隔約一分鐘即向多播地址廣播一次.
date
# date
2003年10月12日 星期日 10時04分16秒 CST
(CST是Chinese Standard Time的縮寫)
# date 10121003 設定時間為10月12日10時03分

裝置管理
軟盤
#volcheck
fdformat [-dDeEfHlLmMUqvx] [-b label] [-B filename] [-t dos-
type] [devname] //格式化
prtconf
# prtconf //配置資訊
System Configuration: Sun Microsystems i86pc
# prtconf | grep Memory //檢視記憶體
Memory size: 128 Megabytes
arch
# arch -k //瞭解體系結構
i86pc
uname
# uname -m
i86pc
# uname
SunOS
# uname -a
SunOS wing 5.9 Generic_112234-03 i86pc i386 i86pc
eject
#eject floppy
eeprom
#eeprom selftest -#megs=64 //修改系統自檢到的記憶體數
sysdef
#sysdef //更詳細的體系機構
df
# df -k //顯示當前所有已安裝的檔案系統上的檔案數目和空閒塊的數目
# df -a //列印所有檔案系統的資訊
du -k
#du -k /export //遞迴顯示資料夾中的檔案或資料夾
# du -sk /etc    檢視目錄的使用情況 總樹統計
# du -k /etc 逐個檢視
# du -k /export | sort -n 可以迅速發現那個目錄是最大的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14377/viewspace-1022176/,如需轉載,請註明出處,否則將追究法律責任。