動手學 VPS 架站:使用 CentOS 7 + Nginx + PHP-FPM + MariaDB (3) - shell 指令

LNMP

Linux 提供一個殻層 (shell) 指令讓使用者和作業系統互動,shell 有很多種,預設是 bash shell 也就是我們接下來要使用的。我們一樣只會介紹目前需要知道的指令。

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 + vj (游標往下選取) ➔ I (大寫 I,此時游標會跳到第一行第一個字元等待輸入) ➔ 輸入註解 # 然後按 esc 鍵。

如果要刪除數行的註解:游標移到第一行開頭 ➔ ctrl + vj (游標往下選取) ➔ 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:4w:2x: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 指令(續)

本文網址:https://blog.tonycube.com/2018/07/vps-centos-7-nginx-php-fpm-mariadb-3-shell.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。