2.3.1 切換目錄
cd (change directory) 指令
要在 Linux 的目錄中移動,必須瞭解絕對路徑及相對路徑。以根目錄 /
啟始來指定的完整目錄路徑稱為絕對路徑,例如 /var/log/nginx/
的表示方式就稱為絕對路徑,它表示的是 /
根目錄下的 var/
目錄下的 log/
目錄下的 nginx/
目錄,在任何目錄中要切換到這個路徑,可以在終端機中輸入如下指令:
cd /var/log/nginx/
使用絕對路徑的表示法不用去理會目前所在的目錄,不管你目前在哪個目錄,只要使用絕對路徑表示法都能正確地切換;有時候我們會省略最後面的斜線不輸入。
相對路徑意思是,要前往的目錄相對於目前所在目錄的路徑,例如目前在 /var/log/nginx
要切換到其他目錄時使用相對路徑的使用法:
# 切換到子目錄 /var/log/nginx/temp/
# temp 目錄是我假設的,實際上並沒有這個目錄
cd temp/
# 切換到上層目錄 /var/log/
cd ..
# 切換到 /var/log/php-fpm/
cd ../php-fpm/
# 切換到 /usr/share/nginx/
cd ../../../usr/share/nginx/
你會發現相對路徑表示法,比較適合切換到目前所在目錄的上、下層即父、子目錄,如果切換的目錄太遠,使用絕對路徑才是比較有效率的方式。
每個目錄都會有兩個預設的目錄,.
及 ..
,單點表示目錄本身,雙點則表示父目錄。有時候要明確指定執行目前目錄中的檔案時會這樣表示
./run.sh
2.3.2 檔案及目錄的瀏覽、建立、移動、複製、更名及刪除
ls 指令
查看目錄中的檔案及子目錄清單。相關選項如下:
# 列出目前目錄中的檔案及子目錄
ls
# 同時顯示隱藏檔
ls -a
# 以長清單格式表示,資訊較多
ls -l
# 依修改時間排序,新的在前面
ls -t
# 選項可以搭配使用
ls -alt
# 使用絕對路徑查看
ls /var/log/nginx/
# 查看 ls 說明文件
ls --help
在 Linux 中,檔案或目錄名稱以 .
開始就會成為隱藏檔,在非 -a
選項下不會顯示。
touch 指令
建立一個空白檔案。對已存在的檔案 touch
一下,會改變它的修改時間的記錄。
touch a.txt
mv 指令
移動檔案或目錄;第一個參數是準備移動的檔案或目錄,第二個參數是目的地目錄。
# 移動檔案到目錄
mv a.txt abc/
# 移動目錄到目錄
mv abc/ def/
cp 指令
複製檔案;第一個參數是準備複製的檔案,第二個參數是新檔案的名稱;若要複製目錄,需加上 -r
(recursively, 遞迴) 選項。
# 複製檔案
cp a.txt b.txt
# 複製目錄
cp -r abc/ def/
更名指令
透過移動指令來做到;第一個參數是原本名稱,第二個參數是新名稱。
# 檔案更名
mv a.txt c.txt
# 目錄更名
mv abc/ xyz/
# 如果已經有 xyz 目錄,則 abc 目錄會被移動到 xyz 目錄之下,而不是更名
rm 指令
刪除檔案;如果要刪除目錄,需加上 -r
(recursively, 遞迴) 選項。這個指令會請求確認,請輸入 y
表示確定刪除,或 n
表示不要刪除。
# 刪除檔案
rm a.txt
# 刪除目錄
rm -r abc/
mkdir 指令
建立目錄;如果要同時建立多層子目錄,請使用 -p
選項;要同時設定權限請使用 -m
選項。
# 建立目錄
mkdir abc
# 建立多層目錄
mkdir -p aaa/bbb/ccc/ddd
# 同時設定權限
mkdir -m 711 eee
rmdir 指令
刪除空的目錄,注意!只有該目錄是空的情況下才能使用此指令,否則請用 rm -r
指令;同時刪除多層空目錄,請使用 -p
選項。
# 刪除目錄
rmdir eee
# 刪除多層空目錄
rmdir -p aaa/bbb/ccc/ddd/
# 如果沒有使用 -p ,只會刪除 ddd/ 目錄
pwd (Print Working Directory) 指令
顯示目前所在的目錄的絕對路徑。如果是連結檔,可以使用 -P
來顯示原始的完整路徑。
# 假設目前在 /var/log/nginx/
pwd
# 會顯示 /var/log/nginx
# 假設在 /var/mail/ ,它連結到 /var/spool/mail
pwd # 顯示 /var/mail
pwd -P # 顯示 /var/spool/mail
2.3.3 查看檔案內容
cat 指令
顯示檔案內容。由於會一次印出檔案的全部內容,所以適合內容較少的檔案。-b
選項可以顯示行號,但跳過空白行;-n
選項會顯示包含空白行的行號。
cat abc.txt
cat -n abc.txt
tac 指令
和 cat 一樣,但是反過來從最後一行倒著印出全部內容。
tac abc.txt
more 指令
可以翻頁、一次顯示一個螢幕的內容,適合內容較多的檔案。
more abc.txt
# Enter: 下一行
# 空白鍵: 下一頁
# b: 上一頁
# q: 離開
# / 接要搜尋的文字: 從目前所在行往下搜尋
less 指令
比 more
指令更多功能的操作,例如 more
不能用上下鍵來移動,less
就可以。
less abc.txt
# 上、下鍵: 上一行、下一行
# 空白鍵: 下一頁
# 可使用鍵盤的 PageDown, PageUp 翻頁
# g: 到第一行
# G: 到最後一行
# q: 離開
# / 接要搜尋的文字: 從目前所在行往下搜尋
# ? 接要搜尋的文字: 從目前所在行往上搜尋
# n: 重複前一個搜尋,往下
# N: 重複前一個搜尋,往上
註:這兩個指令很搞笑,more 的功能比較少,less 的功能反而比較多。head 指令
部分顯示,只顯示前幾行。預設為 10 行,可以使用 -n
選項指定行數。
head abc.txt
# 預設前 10 行
head -n 20 abc.txt
# 指定顯示前 20 行
tail 指令
部分顯示,只顯示最後幾行。預設為 10 行,可以使用 -n
選項指定行數。有時候在觀察 log 檔時,需要不斷的查看最後面的 log 內容,這時候可以使用 -f
選項來持續偵測內容,使用 ctrl + c
可以離開。
tail abc.txt
# 預設最後 10 行
tail -n 20 abc.txt
# 指定最後 20 行
tail -f /var/log/nginx/error.log
# 持續顯示,當 log 檔更新時會同步更新內容
# 必須使用 ctrl + c 才能離開
2.3.4 編輯檔案內容
Linux 內建的文字編輯器是 1976 年就發佈的 vi,然後在 1991 年出現了一個 vi 改良版的 vim,在簡單操作的情況下兩者沒什麼差別。有些 Linux 發行版會內建 vim,有些則無,安裝方式如下:
yum -y update
sudo yum -y install epel-release
sudo yum -y install vim
要用好 vi 必須記住一大堆的指令,這裡只打算告訴你如何用最簡單的方法編輯文件,因為之後修改配置檔時需要用到,無論如何都必須瞭解最基本的操作才行。以下內容將使用 vim 來操作。
當你使用 vim 來開啟檔案時,如果該檔案已存在,就會直接打開,如果不存在,則會自動以新檔案開啟:
vim abc.txt
# 如果有則開啟,沒有則當成新檔
Vim 的編輯畫面會佔用整個終端機的畫面,最下方會有一行狀態列,可以用來輸入指令及辨別目前所操作的模式。Vim 分為 4 種操作模式:
- 一般模式
- 插入模式
- 指令模式
- 視覺模式
一般模式
當你開啟一個檔案時的第一個模式,要切換成其他模式時,必須先回到一般模式,然後再切換過去;一般模式可以做任何能夠移動游標來做的事,例如移動游標、刪除行、複製行、貼上行及切換頁面等等。
- Vim 使用
h
(左) 、j
(下) 、k
(上) 、l
(右) 鍵來移動游標,如果不習慣,使用鍵盤的方向鍵還是可以移動游標的。你可以使用數字 + 方向鍵
的方式快速移動游標幾行或幾個字元,例如在鍵盤上按下5j
游標就會向下移動 5 行、8l
向右 8 個字元、3k
向上 3 行。數字 + Enter
游標往下移動幾行,例如5 Enter
效果等同5j
。 - 按下
0
(數字 0) 鍵,游標會移到該行的第一個字元;$
(shift + 4) 鍵移到該行最後一個字元。 ctrl + f
下一頁;ctrl + b
上一頁。G
(大寫 G) 游標移到文件的最後一行;gg
(兩個小寫 g) 游標移到文件的第一行。yy
(兩個小寫 y) 複製游標所在行dd
(兩個小寫 d) 剪下游標所在行,可視同刪除行p
(小寫 p) 貼到游標的下一行;P
(大寫 P) 貼到游標所在行,原行往下移動。- 複製及剪下/刪除可以搭配數字來做到更有效率的操作,例如:
5yy
表示複製游標及其下共 5 行的內容、3dd
表示剪下/刪除游標及其下 3 行的內容。 .
(小數點) 重複上次的操作,例如3dd
之後可以使用.
來重做一次3dd
。u
(小寫 u) 復原上次的動作,即 undo;ctrl + r
重做上個被復原的動作,即 redo。
插入模式
請看下方的狀態列,當出現 -- INSERT -- 提示文字時表示你正處於插入模式,這時候就可修改文件內容。
按下以下任一鍵即可切換成插入模式:
i
(小寫 i) :插入文字;游標停在原處不動,當你輸入文字時,游標處的字元會被往後移動。I
(大寫 I) :和小寫 i 一樣是插入文字,但游標會移到第一個字元。a
(小寫 a) : 附加文字;游標會往後移動一個字元,新的內容會附加在原游標處字元的後面。A
(大寫 A):同小寫 a,但游標會移到該行最後一個字元之後。o
(小寫 o) : 新行;游標所在行之下會新增一行,然後游標會跳到這一行。O
(大寫 O) : 同小寫 o,但是游標所在行的內容會往下移動,游標所在行成為新的一行。r
(小寫 r) :置換游標處的一個字元,該字元一被置換後就自動返回一般模式。R
(大寫 R) : 置換模式,狀態列會顯示 -- REPLACE —,此時會無視目前的內容,輸入的任何文字都會覆蓋原有的文字。esc
鍵:任何時候按下此鍵即可離開插入模式或置換模式,並回到一般模式。
指令模式
必須先回到一般模式下,然後輸入以下命令,命令會顯示在狀態列中:
:w
存檔。:q
離開。如果未做任何修改,或已經存檔就可以正常離開。假如已經有修改內容,但是不想儲存而要直接離開,可以加上驚嘆號:q!
不存檔強制離開。:wq
存檔同時離開。即使檔案未修改,也會強制儲存並更新修改時間。:x
存檔同時離開。只在檔案有修改的情況下才會儲存並更新修改時間,否則就只會離開而不更新修改時間。建議使用:x
取代:wq
。:e!
放棄目前修改的內容並回復到上次存檔時的內容。:set nu
顯示行號。:set nonu
取消顯示行號。/
搜尋文字,按下斜線後接著輸入要尋找的文字;按下n
會跳到下一個找到的文字,按下N
則跳往上一個找到的文字。找到的文字會反白,如果要取消可以輸入:noh
即可關閉反白直到下次的搜尋。
視覺模式
在一般模式按下:
v
(小寫 v):狀態列顯示 -- VISUAL -- 表示進入視覺編輯模式,在此模式下移動游標會將字元反白 (高亮),然後可以按下d
刪除 (剪下) 反白內容、y
複製反白內容,再按一次v
即可結束視覺模式並反回一般模式。V
(大寫 V):狀態列顯示 -- VISUAL LINE -- ,移動游標可以反白一行,一樣可以使用d
刪除 (剪下)、y
複製V
結束。ctrl + v
:狀態列顯示 -- VISUAL BLOCK -- 模式,移動游標可以反白一個區塊,其他操作方式一樣,在按一次ctrl + v
結束。
這 3 個模式可以互相切換,例如按 v
進入字元反白模式,然後按 V
切換成行反白模式。
有時候你需要垂直操作,例如將好幾行的內容前方加上註解,可以使用區塊反白模式來做到,操作順序是先將游標移到要反白的第一行開頭 ➔ 按 ctrl + v
➔ j
(游標往下選取) ➔ I
(大寫 I,此時游標會跳到第一行第一個字元等待輸入) ➔ 輸入註解 #
然後按 esc
鍵。
如果要刪除數行的註解:游標移到第一行開頭 ➔ ctrl + v
➔ j
(游標往下選取) ➔ d
刪除。
2.3.5 檔案及目錄的權限及擁有者
Linux 將使用者分成 3 種角色,檔案擁有者 (User)、群組 (Group) 及其他人 (Others)。一個檔案會有一個擁有者,只有該擁有者有能力對該檔案做任何事;但是我可以建立一個群組,讓某些人加入,這些屬於同一個群組的人可以對該檔案做我允許他們做的事;其他沒有被分類的人就是其他人,我也可以允許他們能做或不能做什麼事。一位使用者可以同時加入多個群組而擁有該群組的權限。
瞭解這 3 種角色後就能正確使用權限。
權限也分為 3 㮔,讀 (read) 、寫 (write) 及執行 (execute)。每個角色可以分配 3 種權限,加上用來標示為目錄 (d) 或連結檔 (l) 的屬性,一個檔案或目錄總共會有 10 個為一組的權限屬性,例如我們用 ls -l
指令查看:
[權限] [連結][擁有者][群組][檔案容量][修改日期] [檔名]
-rw-rw-r--. 1 tony dev 0 Mar 30 15:11 a.txt
drwxrwxr-x. 2 tony dev 19 Mar 30 15:25 xyz
權限屬性以減號 -
表示無此權限,第一個為 d
表示是個目錄,之後 3 個為一組來看,第一組為檔案擁有者、第二組為群組、第三組為其他人。
以上例來看,a.txt
是檔案,因為沒有 d
屬性,檔案擁有者可讀、可寫但不可執行,群組相同,其他人則只能讀、不能寫。
Linux 不是以副檔名來決定該檔案是否可執行,而是以權限中的 x
屬性來決定;x
標示在檔案為可執行檔,標示在目錄則表示能進入該目錄。
有 3 個指令可以改變檔案的群組、擁有者或權限:
- chgrp :改變檔案所屬群組
- chown :改變檔案擁有者
- chmod :改變檔案的權限
chgrp 改變檔案所屬群組
第一個參數為群組名稱,第二個為檔案名稱。
# 將 a.txt 改為 test 群組
chgrp test a.txt
# 將 xyz 目錄及其檔案和子目錄改為 test 群組
chgrp -R test xyz
可使用 -R 選項將目錄中所有檔案及子目錄全部修改。
chown 改變檔案擁有者
第一個參數為使用者名稱,第二個為檔案名稱。
# 將 a.txt 的擁有者改為 tom
chown tom a.txt
前提是系統中已有該使用者。一樣可以使用 -R 選項。
chmod 改變檔案的權限
權限中,每個權限有一個數字來代表 r:4
、w:2
、x:1
,相加後就是權限的結果,例如:
4+2+1=7 即 rwx
4+1 =5 即 r-x
4+2 =6 即 rw-
0 即 ---
chmod
指令的第一個參數為權限值,第二個為檔案名稱:
chmod 666 a.txt
# 即 rw-rw-rw-
chmod 644 a.txt
# 即 rw-r--r--
chmod 755 xyz
# 即 rwxr-xr-x
另外一種設定權限的方式是使用符號表示,u:擁有者
、g:群組
、o:其他人
、a:全部
,然後透過 +,-,=
三個符號表示增加、減少、指定:
# 直接指定
chmod u=rw,go=r a.txt
# 即 rw-r--r--
chmod u+x a.txt
# 在原本的權限屬性中,增加擁有者的 x
# 即 rwxr--r--
chmod o-r a.txt
# 在原本的權限屬性中,減少其他人的 r
# 即 rwxr-----
繼續閱讀:動手學 VPS 架站:使用 CentOS 7 + Nginx + PHP-FPM + MariaDB (4) - Shell 指令(續)
由 Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀
我要留言
留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。