.net網站自動化部署-致兩年前的遺留的問題
常用的基本命令
目錄管理
絕對路徑和相對路徑
我們知道Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。
其他目錄通過掛載可以將它們新增到樹中,通過解除掛載可以移除它們。
在開始本教程前我們需要先知道什麼是絕對路徑與相對路徑。
絕對路徑:
路徑的寫法,由根目錄 / 寫起,例如:/usr/share/doc 這個目錄。
相對路徑:
路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:cd ../man 這就是相對路徑的寫法啦!
處理目錄的常用命令
接下來我們就來看幾個常見的處理目錄的命令吧:
-
ls: 列出目錄
-
cd:切換目錄
-
pwd:顯示目前的目錄
-
mkdir:建立一個新的目錄
-
rmdir:刪除一個空的目錄
-
cp: 複製檔案或目錄
-
rm: 移除檔案或目錄
-
mv: 移動檔案與目錄,或修改檔案與目錄的名稱
你可以使用 man [命令] 來檢視各個命令的使用文件,如 :man cp。
ls (列出目錄)
在Linux系統當中, ls 命令可能是最常被執行的。
語法:
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱
選項與引數:
-
-a :全部的檔案,連同隱藏檔案( 開頭為 . 的檔案) 一起列出來(常用)
-
-l :長資料串列出,包含檔案的屬性與許可權等等資料;(常用)
將目錄下的所有檔案列出來(含屬性與隱藏檔)
[root@www ~]# ls -al ~
cd (切換目錄)
cd是Change Directory的縮寫,這是用來變換工作目錄的命令。
語法:
cd[相對路徑或絕對路徑]
測試:
# 切換到使用者目錄下
[root@kuangshen /]# cd home
# 使用 mkdir 命令建立 kuangstudy 目錄
[root@kuangshen home]# mkdir kuangstudy
# 進入 kuangstudy 目錄
[root@kuangshen home]# cd kuangstudy
# 回到上一級
[root@kuangshen kuangstudy]# cd ..
# 回到根目錄
[root@kuangshen kuangstudy]# cd /
# 表示回到自己的家目錄,亦即是 /root 這個目錄
[root@kuangshen kuangstudy]# cd ~
接下來大家多操作幾次應該就可以很好的理解 cd 命令的。
pwd ( 顯示目前所在的目錄 )
pwd 是 Print Working Directory 的縮寫,也就是顯示目前所在目錄的命令。
[root@kuangshen kuangstudy]#pwd [-P]
選項與引數:-P :顯示出確實的路徑,而非使用連線(link) 路徑。
測試:
# 單純顯示出目前的工作目錄
[root@kuangshen ~]# pwd
/root
# 如果是連結,要顯示真實地址,可以使用 -P引數
[root@kuangshen /]# cd bin
[root@kuangshen bin]# pwd -P
/usr/bin
mkdir (建立新目錄)
如果想要建立新的目錄的話,那麼就使用mkdir (make directory)吧。
mkdir[-mp] 目錄名稱
選項與引數:
-
-m :配置檔案的許可權喔!直接配置,不需要看預設許可權 (umask) 的臉色~
-
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞迴建立起來!
測試:
# 進入我們使用者目錄下
[root@kuangshen /]# cd /home
# 建立一個 test 資料夾
[root@kuangshen home]# mkdir test
# 建立多層級目錄
[root@kuangshen home]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’:
No such file or directory # <== 沒辦法直接建立此目錄啊!
# 加了這個 -p 的選項,可以自行幫你建立多層目錄!
[root@kuangshen home]# mkdir -p test1/test2/test3/test4
# 建立許可權為 rwx--x--x 的目錄。
[root@kuangshen home]# mkdir -m 711 test2
[root@kuangshen home]# ls -l
drwxr-xr-x2root root 4096Mar1221:55 test
drwxr-xr-x3root root 4096Mar1221:56 test1
drwx--x--x2root root 4096Mar1221:58 test2
rmdir ( 刪除空的目錄 )
語法:
rmdir[-p] 目錄名稱
選項與引數:-p :連同上一級『空的』目錄也一起刪除
測試:
# 看看有多少目錄存在?
[root@kuangshen home]# ls -l
drwxr-xr-x2root root 4096Mar1221:55 test
drwxr-xr-x3root root 4096Mar1221:56 test1
drwx--x--x2root root 4096Mar1221:58 test2
# 可直接刪除掉,沒問題
[root@kuangshen home]# rmdir test
# 因為尚有內容,所以無法刪除!
[root@kuangshen home]# rmdir test1
rmdir: failed to remove ‘test1’: Directory not empty
# 利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 依次刪除。
[root@kuangshen home]# rmdir -p test1/test2/test3/test4
注意:這個 rmdir 僅能刪除空的目錄,你可以使用 rm 命令來刪除非空目錄,後面我們會將!
cp ( 複製檔案或目錄 )
語法:
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
選項與引數:
-
-a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
-
-p:連同檔案的屬性一起復制過去,而非使用預設屬性(備份常用);
-
-d:若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;
-
-r:遞迴持續複製,用於目錄的複製行為;(常用)
-
-f:為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;
-
-i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
-
-l:進行硬式連結(hard link)的連結檔建立,而非複製檔案本身。
-
-s:複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案;
-
-u:若 destination 比 source 舊才升級 destination !
測試:
# 找一個有檔案的目錄,我這裡找到 root目錄
[root@kuangshen home]# cd /root
[root@kuangshen ~]# ls
install.sh
[root@kuangshen ~]# cd /home
# 複製 root目錄下的install.sh 到 home目錄下
[root@kuangshen home]# cp /root/install.sh /home
[root@kuangshen home]# ls
install.sh
# 再次複製,加上-i引數,增加覆蓋詢問?
[root@kuangshen home]# cp -i /root/install.sh /home
cp: overwrite ‘/home/install.sh’? y# n不覆蓋,y為覆蓋
rm ( 移除檔案或目錄 )
語法:
rm[-fir] 檔案或目錄
選項與引數:
-
-f :就是 force 的意思,忽略不存在的檔案,不會出現警告資訊;
-
-i :互動模式,在刪除前會詢問使用者是否動作
-
-r :遞迴刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!
測試:
# 將剛剛在 cp 的例項中建立的 install.sh刪除掉!
[root@kuangshen home]# rm -i install.sh
rm: remove regular file ‘install.sh’? y
# 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!
# 儘量不要在伺服器上使用 rm -rf /
mv ( 移動檔案與目錄,或修改名稱 )
語法:
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory
選項與引數:
-
-f :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;
-
-i :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋!
-
-u :若目標檔案已經存在,且 source 比較新,才會升級 (update)
測試:
# 複製一個檔案到當前目錄
[root@kuangshen home]# cp /root/install.sh /home
# 建立一個資料夾 test
[root@kuangshen home]# mkdir test
# 將複製過來的檔案移動到我們建立的目錄,並檢視
[root@kuangshen home]# mv install.sh test
[root@kuangshen home]# ls
test
[root@kuangshen home]# cd test
[root@kuangshen test]# ls
install.sh
# 將資料夾重新命名,然後再次檢視!
[root@kuangshen test]# cd ..
[root@kuangshen home]# mv test mvtest
[root@kuangshen home]# ls
mvtest
基本屬性
看懂檔案屬性
Linux系統是一種典型的多使用者系統,不同的使用者處於不同的地位,擁有不同的許可權。為了保護系統的安全性,Linux系統對不同的使用者訪問同一檔案(包括目錄檔案)的許可權做了不同的規定。
在Linux中我們可以使用ll
或者ls –l
命令來顯示一個檔案的屬性以及檔案所屬的使用者和組,如:
例項中,boot檔案的第一個屬性用"d"表示。"d"在Linux中代表該檔案是一個目錄檔案。
在Linux中第一個字元代表這個檔案是目錄、檔案或連結檔案等等:
-
當為[ d ]則是目錄
-
當為[ - ]則是檔案;
-
若是[ l ]則表示為連結文件 ( link file );
-
若是[ b ]則表示為裝置檔案裡面的可供儲存的介面裝置 ( 可隨機存取裝置 );
-
若是[ c ]則表示為裝置檔案裡面的串列埠裝置,例如鍵盤、滑鼠 ( 一次性讀取裝置 )。
接下來的字元中,以三個為一組,且均為『rwx』 的三個引數的組合。
其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。
要注意的是,這三個許可權的位置不會改變,如果沒有許可權,就會出現減號[ - ]而已。
每個檔案的屬性由左邊第一部分的10個字元來確定(如下圖):
從左至右用0-9這些數字來表示。
第0位確定檔案型別,第1-3位確定屬主(該檔案的所有者)擁有該檔案的許可權。第4-6位確定屬組(所有者的同組使用者)擁有該檔案的許可權,第7-9位確定其他使用者擁有該檔案的許可權。
其中:
第1、4、7位表示讀許可權,如果用"r"字元表示,則有讀許可權,如果用"-"字元表示,則沒有讀許可權;
第2、5、8位表示寫許可權,如果用"w"字元表示,則有寫許可權,如果用"-"字元表示沒有寫許可權;
第3、6、9位表示可執行許可權,如果用"x"字元表示,則有執行許可權,如果用"-"字元表示,則沒有執行許可權。
對於檔案來說,它都有一個特定的所有者,也就是對該檔案具有所有權的使用者。
同時,在Linux系統中,使用者是按組分類的,一個使用者屬於一個或多個組。
檔案所有者以外的使用者又可以分為檔案所有者的同組使用者和其他使用者。
因此,Linux系統按檔案所有者、檔案所有者同組使用者和其他使用者來規定了不同的檔案訪問許可權。
在以上例項中,boot 檔案是一個目錄檔案,屬主和屬組都為 root。
修改檔案屬性
1、chgrp:更改檔案屬組
chgrp [-R] 屬組名 檔名
-R:遞迴更改檔案屬組,就是在更改某個目錄檔案的屬組時,如果加上-R的引數,那麼該目錄下的所有檔案的屬組都會更改。
2、chown:更改檔案屬主,也可以同時更改檔案屬組
chown[–R] 屬主名 檔名
chown[-R] 屬主名:屬組名 檔名
3、chmod:更改檔案9個屬性
chmod[-R] xyz 檔案或目錄
Linux檔案屬性有兩種設定方法,一種是數字,一種是符號。
Linux檔案的基本許可權就有九個,分別是owner/group/others三種身份各有自己的read/write/execute許可權。
先複習一下剛剛上面提到的資料:檔案的許可權字元為:『-rwxrwxrwx』, 這九個許可權是三個三個一組的!其中,我們可以使用數字來代表各個許可權,各許可權的分數對照表如下:
r:4 w:2 x:1
每種身份(owner/group/others)各自的三個許可權(r/w/x)分數是需要累加的,例如當權限為:[-rwxrwx---] 分數則是:
-
owner = rwx = 4+2+1 = 7
-
group = rwx = 4+2+1 = 7
-
others= --- = 0+0+0 = 0
chmod770filename
可以自己下去多進行測試!
檔案內容檢視
概述
Linux系統中使用以下命令來檢視檔案的內容:
-
cat 由第一行開始顯示檔案內容
-
tac 從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!
-
nl 顯示的時候,順道輸出行號!
-
more 一頁一頁的顯示檔案內容
-
less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!
-
head 只看頭幾行
-
tail 只看尾巴幾行
你可以使用 man [命令]來檢視各個命令的使用文件,如 :man cp。
cat 由第一行開始顯示檔案內容
語法:
cat[-AbEnTv]
選項與引數:
-
-A :相當於 -vET 的整合選項,可列出一些特殊字元而不是空白而已;
-
-b :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
-
-E :將結尾的斷行位元組 $ 顯示出來;
-
-n :列印出行號,連同空白行也會有行號,與 -b 的選項不同;
-
-T :將 [tab] 按鍵以 ^I 顯示出來;
-
-v :列出一些看不出來的特殊字元
測試:
# 檢視網路配置: 檔案地址 /etc/sysconfig/network-scripts/
[root@kuangshen ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
tac
tac與cat命令剛好相反,檔案內容從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!如:
[root@kuangshen ~]# tac /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=dhcp
DEVICE=eth0
nl 顯示行號
語法:
nl [-bnw] 檔案
選項與引數:
-
-b :指定行號指定的方式,主要有兩種:-b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);-b t :如果有空行,空的那一行不要列出行號(預設值);
-
-n :列出行號表示的方法,主要有三種:-n ln :行號在熒幕的最左方顯示;-n rn :行號在自己欄位的最右方顯示,且不加 0 ;-n rz :行號在自己欄位的最右方顯示,且加 0 ;
-
-w :行號欄位的佔用的位數。
測試:
[root@kuangshen ~]# nl /etc/sysconfig/network-scripts/ifcfg-eth0
1DEVICE=eth0
2BOOTPROTO=dhcp
3ONBOOT=yes
more 一頁一頁翻動
在 more 這個程式的執行過程中,你有幾個按鍵可以按的:
-
空白鍵 (space):代表向下翻一頁;
-
Enter :代表向下翻『一行』;
-
/字串 :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
-
:f :立刻顯示出檔名以及目前顯示的行數;
-
q :代表立刻離開 more ,不再顯示該檔案內容。
-
b 或 [ctrl]-b :代表往回翻頁,不過這動作只對檔案有用,對管線無用。
[root@kuangshen etc]# more /etc/csh.login
....(中間省略)....
--More--(28%)# 重點在這一行喔!你的游標也會在這裡等待你的命令
less 一頁一頁翻動,以下例項輸出/etc/man.config檔案的內容:
less執行時可以輸入的命令有:
-
空白鍵 :向下翻動一頁;
-
[pagedown]:向下翻動一頁;
-
[pageup] :向上翻動一頁;
-
/字串 :向下搜尋『字串』的功能;
-
?字串 :向上搜尋『字串』的功能;
-
n :重複前一個搜尋 (與 / 或 ? 有關!)
-
N :反向的重複前一個搜尋 (與 / 或 ? 有關!)
-
q :離開 less 這個程式;
[root@kuangshen etc]# more /etc/csh.login
....(中間省略)....
: # 這裡可以等待你輸入命令!
head 取出檔案前面幾行
語法:
head [-n number] 檔案
選項與引數:-n 後面接數字,代表顯示幾行的意思!
預設的情況中,顯示前面 10 行!若要顯示前 20 行,就得要這樣:
[root@kuangshen etc]# head -n 20 /etc/csh.login
tail 取出檔案後面幾行
語法:
tail [-n number] 檔案
選項與引數:
-
-n :後面接數字,代表顯示幾行的意思
預設的情況中,顯示最後 10 行!若要顯示最後 20 行,就得要這樣:
[root@kuangshen etc]# tail -n 20 /etc/csh.login
拓展:Linux 連結概念
Linux 連結分兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。
情況下,ln 命令產生硬連結。
硬連線
硬連線指通過索引節點來進行連線。在 Linux 的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號(Inode Index)。在 Linux 中,多個檔名指向同一索引節點是存在的。比如:A 是 B 的硬連結(A 和 B 都是檔名),則 A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號相同,即一個 inode 節點對應兩個不同的檔名,兩個檔名指向同一個檔案,A 和 B 對檔案系統來說是完全平等的。刪除其中任何一個都不會影響另外一個的訪問。
硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。
軟連線
另外一種連線稱之為符號連線(Symbolic Link),也叫軟連線。軟連結檔案有類似於 Windows 的快捷方式。它實際上是一個特殊的檔案。在符號連線中,檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊。比如:A 是 B 的軟連結(A 和 B 都是檔名),A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號不相同,A 和 B 指向的是兩個不同的 inode,繼而指向兩塊不同的資料塊。但是 A 的資料塊中存放的只是 B 的路徑名(可以根據這個找到 B 的目錄項)。A 和 B 之間是“主從”關係,如果 B 被刪除了,A 仍然存在(因為兩個是不同的檔案),但指向的是一個無效的連結。
測試:
[root@kuangshen /]# cd /home
[root@kuangshen home]# touch f1 # 建立一個測試檔案f1
[root@kuangshen home]# ls
f1
[root@kuangshen home]# ln f1 f2 # 建立f1的一個硬連線檔案f2
[root@kuangshen home]# ln -s f1 f3 # 建立f1的一個符號連線檔案f3
[root@kuangshen home]# ls -li # -i引數顯示檔案的inode節點資訊
397247-rw-r--r--2root root 0Mar1300:50 f1
397247-rw-r--r--2root root 0Mar1300:50 f2
397248lrwxrwxrwx1root root 2Mar1300:50 f3-> f1
從上面的結果中可以看出,硬連線檔案 f2 與原檔案 f1 的 inode 節點相同,均為 397247,然而符號連線檔案的 inode 節點不同。
# echo 字串輸出 >> f1 輸出到 f1檔案
[root@kuangshen home]# echo "I am f1 file" >>f1
[root@kuangshen home]# cat f1
I am f1 file
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
I am f1 file
[root@kuangshen home]# rm -f f1
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
cat: f3: No such file or directory
通過上面的測試可以看出:當刪除原始檔案 f1 後,硬連線 f2 不受影響,但是符號連線 f1 檔案無效;
依此您可以做一些相關的測試,可以得到以下全部結論:
-
刪除符號連線f3,對f1,f2無影響;
-
刪除硬連線f2,對f1,f3也無影響;
-
刪除原檔案f1,對硬連線f2沒有影響,導致符號連線f3失效;
-
同時刪除原檔案f1,硬連線f2,整個檔案會真正的被刪除。