本文中所用的shell指令及作均基於Linux ord 2.4.29,即DreamHost現在採用的系統。指南因此會比較死板,只針對想要使用shell又苦於不知如何下手的新手,如果你也是DreamHost的用戶,那本文或許對你有所幫助。
) X# Z$ _/ z0 Q% n8 J d
0 O# y- y5 X5 d& t- v: W1 `1. Basic Instructions /基本指令# a# N8 x; ~6 _0 F* S
2. wget /下載玩具5 ^# _! I. O$ l' V* j
3. Crontab /定時任務5 @' {3 \, E9 g+ W& w% s* V
4. tar/tar.gz /壓縮文件
" y; w* X$ ^7 X# N$ B4 v3 s5. vi /編輯器
0 K: v# @5 z6 R
0 |: ~4 z, b/ _: k4 I1. Basic Instructions基本作命令
. R2 I/ m- H4 s" D通常來說,使用"$[Instructions] --help"可以獲得以下各個命令[instructions]的幫助,包含其參數列表的定義。4 d7 {5 R# H' k/ N1 g) U
-ls 列出當前文件夾下所有內容/ ^' P; t0 S& V) F0 t) I) y. D
$ls -o 列出當前文件夾中所有內容,含詳細信息,但不列出group0 T$ U! S$ \3 d1 }0 {
$ls -l 同上,含group信息
6 z) V: e( ?3 Y/ C M5 a$ls -a 列出當前文件夾中所有內容,包含以"."開頭的文件5 t3 c" A) F8 v' D) r
$ls -t 按更改時間排序
z- _+ T) w# e; a% P" j$ls -v 按版本先後排序" w5 u2 m- T0 s6 q2 G
-cd [dir] 進入文件夾! u& b, Z2 c7 L, U3 A: S! `+ j
-pwd 顯示當前路徑
9 W( j; t& l& X7 q; P8 i- d0 [-mkdir [dir] 新建文件夾
+ E; {$ c4 o6 Y$ _' H. }- h p-chmod 更改文件/文件夾權限
( k( y1 N# A8 M2 G$chmod [Mode] [dir],其中Mode形如"755"或"777"等。
( n' V$ }$ A2 K2 d( [5 T$chmod [Mode] [file]
8 l# B" T+ t" i& N) B$chmod -R [Mode] [dir],遞歸形式,即將目標文件夾內所有文件均改變權限% _! ]& J6 ^$ l. I5 @
Mode還有另一種表達方式,"755"即為"-rwxr-xr-x",不列舉了。2 y' b: Y l" ]. B" w1 X! ~
-rm [file] 刪除文件/文件夾
8 m2 z5 y4 W4 }$rm -f [file] 強行刪除,忽略不存在的文件,無提示( w. w8 S7 L$ r% \( d% j
$rm -r [file] 遞歸刪除所有內容
8 e1 [4 Z1 l. N0 w% g6 v4 H-cp 拷貝5 l6 b7 w2 a3 h# S. t
$cp [options] [source] [destination]/ Q- v4 c( u' }( M, |8 R2 y/ s
其中[options]可以為-f(強行拷貝)或-r(遞歸拷貝)
, }2 F3 G! E1 q- |' _. i-mv 重命名或移動
2 K" n% V2 m4 L6 N& W2 N0 I6 g$mv [options] [source] [destination]& Q' z! `6 K" f2 C
[options]常用:-f(強行移動/重命名), -i(移動/重命名前嘗試), -u(更新)
3 y* A$ y$ e4 @. o4 u$ r) w例如
% |. G. Y2 p" u, A) Q$mv wwwroot/cgi-bin . 將/cgi-bin目錄移動到當前目錄下
' Z0 @0 c6 {3 p' B' q5 c' @$mv cronfile.txt myfile.txt 將cronfile.txt重命名為myfile.txt
) t I6 [8 M8 i% F: T2. wget下載玩具
* j( a8 {# ^; }) `6 q3 ]wget是一種非交互式的網絡文件下載玩具,在linux下可以使用該玩具快速地從網絡上下載所需要的文件而不需要經由本地硬盤中轉,而且速度極快。以下是一些使用方法:0 \4 w! \& J% w" O+ N# j0 c
wget [參數列表] URL# b( d& N/ J( X1 \7 P
最簡單的用法:8 Z) f. X: i+ d
$wget http://targetdomain.com/file.tar wget的常用參數:
7 ]3 h1 ]4 W/ x1 O7 o· -t [nuber of times]:嘗試次數,當wget無法與服務器建立連接時,嘗試連接多少次。比如"-t120"表示嘗試120次。當這一項為"0"的時候,指定嘗試無窮多次直到連接成功為止,這個設置非常有用,當對方服務器突然關機或者網絡突然中斷的時候,可以在恢復正常後繼續下載沒有傳完的文件;
0 Q& Q% x% |% e9 o1 k· -c:斷點續傳,這也是個非常有用的設置,特別當下載比較大的文件的時候,如果中途意外中斷,那麼連接恢復的時候會從上次沒傳完的地方接著傳,而不是又從頭開始,使用這一項需要遠程服務器也支持斷點續傳,一般來講,基於UNIX/linux的Web/FTP服務器都支持斷點續傳; % X! }+ Z- n. p. O; ]' c
· -T [number of seconds]:超時時間,指定多長時間遠程服務器沒有響應就中斷連接,開始下一次嘗試。比如"-T120"表示如果120秒以後遠程服務器沒有發過來數據,就重新嘗試連接。如果網絡速度比較快,這個時間可以設置的短些,相反,可以設置的長一些,一般最多不超過900,通常也不少於60,一般設置在120左右比較合適; ! `/ }; K; f; g
· -w [number of seconds]:在兩次嘗試之間等待多少秒,比如"-w 100"表示兩次嘗試之間等待100秒; # X" t% {5 X3 E1 F3 l8 V9 n1 ^$ F. ?
· -nd:不下載目錄結構,把從服務器所有指定目錄下載的文件都堆到當前目錄裡;( \# V: `8 m/ H. C& q0 u
· -x:與"-nd"設置剛好相反,創建完整的目錄結構,例如"wget -nd http://www.gnu.org/ ",實際的目錄結構一級一級建下去,直到所有的文件都傳完為止;
, \: X7 l8 a7 e! |9 G, O· -nH:不創建以目標主機域名為目錄名的目錄,將目標主機的目錄結構直接下到當前目錄下; $ ^2 J8 Z7 j: o5 @& k+ \5 F
· -r:遞歸下載,在本機建立服務器端目錄結構;
# Y6 L7 x9 ^0 s8 q· -l [depth]:下載遠程服務器目錄結構的深度,例如"-l 5"下載目錄深度小於或者等於5以內的目錄結構或者文件;
* p* H7 O. O7 O& T· -m:做站點鏡像時的選項,如果你想做一個站點的鏡像,使用這個選項,它將自動設定其他合適的選項以便於站點鏡像;
3 E5 M; I, `8 J+ T' H· -np:只下載目標站點指定目錄及其子目錄的內容。這也是一個非常有用的選項,我們假設某個人的個人主頁裡面有一個指向這個站點其他人個人主頁的連接,而我們只想下載這個人的個人主頁,如果不設置這個選項,甚至--有可能把整個站點給抓下來,這顯然是我們通常不希望的; ! Z( X; F* e4 z' [
· --http-user=username , k1 @3 O* H1 I8 Z: l) ^
· --http-passwd=password:如果Web服務器需要指定用戶名和口令,用這兩項來設定;
4 r- ?( S" Y P9 r· -O 將數據寫入文件中。
2 f, C+ l5 }9 J) Y7 {3. Crontab 定時執行任務# M9 s8 l9 K4 f5 {
在DreamHost系統下, 通過Shell可以建立自己的crontab. 具體使用如下:; r8 ]; e0 i# c; Q
使用支持shell登錄的終端(如fterm或putty), 地址欄輸入[email protected]:22即可以SSH方式登錄至服務器.9 j) S* t+ g9 ^ G8 U& y
常用的crontab命令:
/ ~: l: t+ o& Kcrontab -l 顯示所有現存cron job.1 e7 X: y, L) n$ w! k
crontab -r 刪除當前cron jobs." U( u/ c: V& f8 r/ ~" R8 | |
crontab -e 編輯當前 "crontab file". DH推薦使用nano
$ O! y3 {, Z3 i s ?0 k3 @, C# n注意你的crontab包含所有的cron jobs, 每個cron一行, 斷行結尾. 一個正常的cron如下所示:
0 c" `7 A; F2 c, K6 K# J45 2 * * * /home/user/script.pl 第一個數字是每小時的第幾分鐘,
. j5 m# u, M3 }" V9 `( T第二個數字是每天的第幾小時,# E4 i3 u3 ~/ {5 v' W0 |1 e3 ~
第三個數字是每月的第幾天,
& b: I8 s+ M, E1 O- F第四個數字是每年的第幾月,1 e" A5 J7 r% g( P3 Y& }8 j* @- ~
第五個數字是每週的第幾天. . V* F a7 j" x
使用方式例如:
% L f' V: M0 j1 g& m+ h: R32 * * * * : 表示每小時的第32分鐘. $ q, A# Y0 o" a5 Y5 Y
12,42 * * * * : 表示每小時的第12及第42分鐘兩次
8 s, z- ?+ D& d3 l) U+ ?( m7 s, `*/15 */2 * * *: 表示0:00, 0:15, 0:30, 0:45, 2:00, 2:15, 2:30, ... 7 o- N0 \( Y8 Q6 T8 V: P
43 18 * * 7: 表示每個週日的6:43pm運行命令行.
# k1 _3 a! ?$ ^% e在DreamHost下使用nano編輯完文件後,使用ctrl+o保存,ctrl+x退出編輯。
# h. J, `2 k5 [ u; p7 C4. tar命令# w, q g8 N5 _" a. d
tar命令的使用方法如下:8 `! i, A+ X5 i3 O6 }/ C5 w
* Q/ Q; G* [; a9 h4 Z/ ~8 x b
tar [參數列表] [文件名]+ X5 D! ?$ N* b3 s4 k
參數列表:5 U1 V* q% H7 ]6 R" ~
-c 生成新的備份,並同時覆蓋舊的備份文件6 I4 N' B8 }# n
-x 從備份文件中解壓縮
) h$ }, ]) ]/ R( n: {-t 列出備份文件內的文件目錄 I- ^3 K3 g i" S" H
-v 顯示所有被作文件列表; r4 {; F/ U! B* m8 o
-f 在指定位置生成備份
# r4 G7 \( |" X5 |3 L9 H, |1 i-u 將不存在於備份中的文件,或將已經被更改的文件加入該備份中。
) t9 t u6 t3 M! r舉例說明:, }0 _+ `9 T: o* k
tar cvf filename.tar /*製作備份*/
, U9 i: q: v+ t; C: h6 Y4 a% w" Ltar cvf tarfile.tar ./filename /*將filename的文件備份到tarfile.tar裡面*/
& L7 v% ^7 h6 u4 l* B; a* Otar tvf filename.tar /*列出tar文檔的內容*/4 x' i; y6 O& V( w7 m5 y
tar xvf filename.tar /*從tar文檔中導出文件*/+ K& E* s. F+ D0 S B; ~% d! t
tar zxpvf filename.tar.gz /*從tar.gz文檔中導出文件*/, w4 E( @6 R; G( U
tar zxvf filename.tar.gz /*同上*/- q5 y; E/ a( G5 \; ^. ^
tar xvf tarfile.tar ./filename /*導出tar文件中的單個文件*// \. D: m, S5 Z- M3 N/ H
5. vi編輯器
, ]+ i/ g+ v5 N$ i1 ILinux下很易用的一種編輯器,只需要稍微知道幾個指令即可應用。
2 I: R6 b7 C$ e$ i# h8 U1 i6 u打開vi:
) ^2 [3 |& i( {$vi [filename]:打開或新建文件,並將光標置於第一行首3 k5 X7 r# x. c" E
$vi +n [filename] :打開文件,並將光標置於第n行首
2 s9 j `9 m5 x6 r6 E$vi + [filename] :打開文件,並將光標置於最後一行首" h; P% U2 Q! \1 }, }* M" _" T
$vi +/pattern [filename]:打開文件,並將光標置於第一個與pattern匹配的串處+ ]! k. T4 P2 g* P7 V
$vi -r [filename] :在上次正用vi編輯時發生系統崩潰,恢復filename _% q5 ~# Z; I1 |: x% L
$vi [filename]....[filename] :打開多個文件,依次編輯" a( k+ x5 ^! j/ V" |" t
如果filename不存在,則自動生成一個名字filename的新文件。# g0 Y8 r. ]$ c6 t' x3 m: S
vi共有兩種狀態:命令狀態/編輯狀態1 P: u& V' V Z, e/ j' \6 N! @5 D
編輯狀態下:, ~# E0 t& y4 W& j4 D
第一次按下insert鍵為"insert"模式,再按一下為"replace"模式,使用ESC返回命令狀態;- w7 l/ w7 a8 `, T( x
在此狀態下鍵盤的PgUp/PgDn/Insert/Delete/Home/End/方向鍵,均處於正常功能狀態。+ U/ o Q/ i. F; @
命令狀態下:
- h m5 ~2 m: m$ ?輸入的字符串作為命令處理,使用"insert"鍵切換到編輯狀態;0 U1 q9 A' i3 E3 R3 |
以下是命令狀態下的命令清單:* V' l# R$ m: g+ E2 k
移動光標類命令
8 P/ N& C0 G, |; O5 j' l4 uh :光標左移一個字符1 m6 h3 [. k: o, ~ O8 Y9 v
l :光標右移一個字符& x! c% ]1 d' A. g/ I/ b j2 a6 u* j2 u
space:光標右移一個字符" j2 ?8 o) m, @. q2 [" m4 H
Backspace:光標左移一個字符5 o; W: A# l$ U, z. q9 q$ l7 F
k或Ctrl+p:光標上移一行
' S. v" k/ q7 U, X2 g2 s5 ~* h" G, zj或Ctrl+n :光標下移一行
! Z, a/ J& _% R0 J2 T7 B8 k hEnter :光標下移一行
F9 ~# `2 y/ J& q. V8 {w或W :光標右移一個字至字首
. m( y/ O2 Z6 p2 n- K. D8 cb或B :光標左移一個字至字首6 K9 j* b# L. b9 Z
e或E :光標右移一個字j至字尾9 `( k" Y& X. g
) :光標移至句尾6 |- J) U9 ]! Q# {$ M
( :光標移至句首
. _* ^9 H; i; k2 Q+ F3 h# a2 }}:光標移至段落開頭' V( G& C2 l8 ? J
{:光標移至段落結尾
/ y# }( n0 z$ ]nG:光標移至第n行首# p0 |) u4 q1 A, B
n+:光標下移n行; F4 U- A0 a8 ] Z4 c
n-:光標上移n行! O* g7 b9 v3 _9 {7 n# i
n$:光標移至第n行尾
5 p- S1 L6 X5 B ~, n k, E8 N3 ?7 XH :光標移至屏幕頂行" I8 Q3 T1 y) K! R6 W) O7 u. g
M :光標移至屏幕中間行
! c9 c0 H- j9 n' KL :光標移至屏幕最後行* J8 U$ y0 U* o7 T9 E
0:(注意是數字零)光標移至當前行首
# X( z8 q* g$ j, n4 b A' a$:光標移至當前行尾9 x, A5 u4 m; [3 U3 z
屏幕翻滾類命令, r Y* t, K0 K+ h: ]
Ctrl+u:向文件首翻半屏 b7 D: c( h8 l: `; m& f2 r
Ctrl+d:向文件尾翻半屏
- f) K. T. I: ECtrl+f:向文件尾翻一屏3 l; e O% r! p& P
Ctrl+b;向文件首翻一屏; c% f5 W. X+ |
nz:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。
7 @/ v O3 W0 W插入文本類命令
% X8 Q5 s& z3 e. U# e! ni :在光標前
' J3 G* ~7 I, D; dI :在當前行首" M) K0 C+ k; ^2 U) Y
a:光標後5 v* x6 |1 c$ |8 d4 U: K
A:在當前行尾
: M5 `/ M: ~$ \" }o:在當前行之下新開一行5 p. N3 |- o6 ^
O:在當前行之上新開一行% K* l, S0 t" Z8 \
r:替換當前字符 k5 Y" i" D" ]1 ^% a3 C
R:替換當前字符及其後的字符,直至按ESC鍵$ w, k0 f/ M! {6 d& g; ^7 F
s:從當前光標位置處開始,以輸入的文本替代指定數目的字符/ h+ |' P( a* V" ]
S:刪除指定數目的行,並以所輸入文本代替之
$ f( n; Z0 e' k5 Oncw或nCW:修改指定數目的字
4 k# |4 h: v1 C8 `nCC:修改指定數目的行* A! I& R. H3 I- g( T' @& T1 M
刪除命令 X$ E4 O1 W0 J6 w$ Q: |/ f
ndw或ndW:刪除光標處開始及其後的n-1個字
0 ?6 Q" f# o9 Q2 r# X( W# hdo:刪至行首; B' X9 p; z6 Y# ^# |
d$:刪至行尾
1 b1 R- q) {& O0 n, q3 ]& rndd:刪除當前行及其後n-1行
5 E: [& b* L6 \) T/ x/ @# @x或X:刪除一個字符,x刪除光標後的,而X刪除光標前的
6 m9 ?8 w8 f/ U) Q, J3 ACtrl+u:刪除輸入方式下所輸入的文本
" E6 j% E( G! Z; I6 H搜索及替換命令 :) T7 |8 {- [7 _3 M4 {! H% K; m
/pattern:從光標開始處向文件尾搜索pattern) y6 j6 Z* l; W0 \' k" Y
?pattern:從光標開始處向文件首搜索pattern H, i; l9 T% B9 [
n:在同一方向重複上一次搜索命令
$ F! y4 ]7 d. wN:在反方向上重複上一次搜索命令5 e7 J4 H. Q. {! M& r4 X
:s/p1/p2/g:將當前行中所有p1均用p2替代$ M% ^0 a4 c& O7 w8 Q
:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代; ]+ T: c/ n& L) r* ~1 b
:g/p1/s//p2/g:將文件中所有p1均用p2替換
7 H9 ]6 X$ h# |& m2 ]: y' F選項設置
( v+ \) C* k5 c! z- v" d+ \( uall:列出所有選項設置情況
p/ j; Y) Z8 h* D7 N5 e0 I s# e) sterm:設置終端類型
1 B% ]9 f# e7 D2 z1 D% yignorance:在搜索中忽略大小寫% r- `6 n) v; K# h
list:顯示製表位(Ctrl+I)和行尾標誌($). V2 Z! }! s# a+ k) t i9 |, |0 e+ P
number:顯示行號
3 _) r) ]! u- ~report:顯示由面向行的命令修改過的數目
: w: E) h( i! Aterse:顯示簡短的警告信息
" `6 j% m; ~8 Gwarn:在轉到別的文件時若沒保存當前文件則顯示NO write信息
( n4 K/ O+ p! _( k. Q' _3 Tnomagic:允許在搜索模式中,使用前面不帶「\」的特殊字符0 _" o0 W e* R0 ^& b
nowrapscan:禁止vi在搜索到達文件兩端時,又從另一端開始4 ^# d. E m, l9 b0 s* V
mesg:允許vi顯示其他用戶用write寫到自己終端上的信息
4 x0 y! R& r% I! U$ j最後行方式命令
0 X0 S% \, l6 b$ b:n1,n2 co n3:將n1行到n2行之間的內容拷貝到第n3行下' m- v( w5 P$ b- A2 j5 }( s& [7 f
:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下8 o1 \( }& n/ U, c6 A+ x
:n1,n2 d :將n1行到n2行之間的內容刪除9 S$ o: n) ]9 M9 v5 V( [
:w :保存當前文件
$ V5 ?( s; j3 k9 I3 b- B:e filename:打開文件filename進行編輯0 k1 m( {; J/ `4 {
:x:保存當前文件並退出: q+ g" z0 a {6 U D4 E
:q:退出vi! M7 R# r3 t- i( `9 w
:q!:不保存文件並退出vi
# E- a+ s i3 ]! B4 }' M( R$ ]:!command:執行shell命令command
5 U% y( u) [+ V: w* b* H/ Y:n1,n2 w!command:將文件中n1行至n2行的內容作為command的輸入並執行之,若不指8 G' U4 @ d. R' P% Q& s3 |/ K3 p
定n1,n2,則表示將整個文件內容作為command的輸入: g4 q ^5 S7 m2 a
:r!command:將命令command的輸出結果放到當前行 。 |
|