内容简介:在 Linux 中,管理軟體的安裝或移除可以使用 RPM (Red Hat/Fedora/CentOS) 或 DPKG (Debian/Ubuntu),很方便但有一個缺點,就是因為軟體相依性的關係,原本你只想安裝 A 軟體,但是由於它相依其他 B、C、D 等等軟體,而必須先安裝 B、C、D,而 B、C、D 當中也可能相依其他軟體,造成安裝軟體的行為變得很繁鎖。YUM (Red Hat/Fedora/CentOS) 或 APT (Debian/Ubuntu) 是一個套件管理程式,它可以幫你解決軟體安裝時相依
LNMP
2.3.6 YUM 套件管理
在 Linux 中,管理軟體的安裝或移除可以使用 RPM (Red Hat/Fedora/CentOS) 或 DPKG (Debian/Ubuntu),很方便但有一個缺點,就是因為軟體相依性的關係,原本你只想安裝 A 軟體,但是由於它相依其他 B、C、D 等等軟體,而必須先安裝 B、C、D,而 B、C、D 當中也可能相依其他軟體,造成安裝軟體的行為變得很繁鎖。
YUM (Red Hat/Fedora/CentOS) 或 APT (Debian/Ubuntu) 是一個套件管理程式,它可以幫你解決軟體安裝時相依性的問題,每個軟體都有自己的相依軟體清單,套件管理指令可以藉由這個清單,自動幫你完成軟體的安裝,包含升級及移除等功能。YUM 也可以更新 Linux 系統的核心。
YUM 指令是怎麼取得軟體的呢?首先會有一台 YUM 伺服器,當軟體釋出的時候,會將其放到 YUM 伺服器上,這樣當你搜尋的時候才找得到。某些軟體會放在 EPEL (Extra Packages for Enterprise Linux) 額外套件庫中,此 EPEL 由 Fedora 群組建立、維護及管理,可以提供 Fedora、RHEL (Red Hat Enterprise Linux) 及 CentOS 等作業系統使用,有時候你必須安裝 EPEL 才能找到你想安裝的軟體。
搜尋套件
yum search 關鍵字 # 關鍵字可以是概略的名稱,yum 會找出所有相關的套件,例如 yum search php70w # 或是套件的描述 yum search PHP scripting language
查詢套件資訊
yum info 完整套件名稱 # 必須輸入完整套件名稱,否則會找不到,例如 yum info php70w # 列出所有可以更新的套件資訊 yum info updates # 列出所有已安裝的套件資訊 yum info installed
套件清單
# 列出伺服器上所有可以安裝的套件 yum list # 通常不會這麼用,因為套件太多了,可以用關鍵字加上萬用字元來過濾 yum list php7* # 只列出本機上已安裝,但是可以升級的套件 yum list updates # 和 yum info updates 不同的是,它不會顯示詳細資料 # 只列出本機上已安裝的套件 yum list installed # 一樣不會顯示詳細資料,只有套件名稱
安裝套件
yum install 完整套件名稱 # 套件名稱後的 .x86_64 可省略,它是表示此套件為 64 位元版本 # .i386 是 32 位元版本 # .noarch 表示沒有硬體上的限制
更新套件
yum update 完整套件名稱 # 如果不輸入完整套件名稱,表示要更新所有可以更新的套件
升級套件
yum upgrade 完整套件名稱 # 如果不輸入完整套件名稱,表示要升級所有可以升級的套件 yum upgrade # 等同於 yum update --obsoletes
升級套件和 更新套件 的功能差不多,唯一的差別在於 upgrade
會將過時的套件移除並且安裝新版本,而 update
不會,過時的版本通常指主版本號的版次,例如從第 1.x 版換到第 2.x 版。有時候新版本可能無法正常在你目前的工作環境中執行,這時候就要考慮使用 update
來保留舊版本的套件,而不要強制升級到最新版本。
移除套件
yum remove 套件完整名稱
自動回答詢問
在安裝、更新或移除套件時,yum 可能會詢問你 yes/no,如果你不想浪費這些停頓的時間,你可以透過 -y 選項來預設以 yes 回答,例如:
yum install -y php70w yum update -y php70w yum remove -y php70w
檢查有哪些套件可以更新
yum check-update # 等同於 yum list updates
清除快取檔案
# 清除快取資料 yum clean # 清除全部的快取,包含以下全部 yum clean all # 只清除套件快取 yum clean packages # 只清除 header 快取 yum clean headers # 只清除 oldheader 快取 yum claen oldheaders
在你安裝套件時,yum 會暫存該套件相關的資料 (可能在 /var/cache/yum
目錄),你可以選擇性地清除它們來釋放磁碟空間。
2.3.7 服務的啟動及停止
早期的服務啟動指令是直接呼叫該服務然後帶入參數,例如:
/etc/init.d/httpd start
但是這樣要記住每個服務的位置並輸入其路徑頗為麻煩,後來改用 service 指令:
service httpd start
現在最新的方式是使用 systmectl 指令,把服務名稱放在最後面:
systemctl start httpd # 啟動 systemctl stop httpd # 停止 systemctl restart httpd # 重新啟動 systemctl status httpd # 狀態
之後我們會用這個方式來控制服務的啟動等動作。
2.3.8 其他指令
which 指令
尋找執行檔 (指令) 所在位置,它只會尋找 $PATH
這個變數中所設定的目錄下的指令。
which php # 顯示結果 /usr/bin/php
echo 指令
用來輸出字串或變數。
echo "Hello" # 輸出 Hello echo $HOME # 輸出 /home/vagrant # 單引號和雙引號的差別在於變數是否視為字串 echo "My name is $USER" # 輸出 My name is vagrant echo 'My name is $USER' # 輸出 My name is $USER
你如果會寫 PHP,概念是一樣的。
資料流重導向
在 Linux 中,有標準輸入、輸出及錯誤輸出三種資料流向:
- 標準輸入 (stdin):代號 0 ,符號 < 或 <<
- 標準輸出 (stdout):代號 1 ,符號 > 或 >>
- 標準錯誤輸出 (stderr):代號 2 ,符號 2> 或 2>>
# 列出目錄中的檔案清單,並「輸出」到螢幕 ls # 列出目錄中的檔案清單,並「重導向輸出」到檔案 ls > filelist.txt # 執行後,會多出一個 filelist.txt 檔案, # 但是螢幕不會顯示任何內容 # 一般使用者無法讀取 secure 檔 cat /var/log/secure # 所以會出現以下錯誤 cat: /var/log/secure: Permission denied # 我們可以「重導向這個錯誤」到檔案中 cat /var/log/secure 2> err.txt # 現在多出一個 err.txt 的檔案,內容和原本出現在螢幕中的訊息一樣 # 原本由鍵盤輸入改由檔案輸入 cat > bashrc.txt < ~/.bashrc # 將會得到一個 bashrc.txt 檔案,內容和 .bashrc 一模一樣 # cat > bashrc.txt 這段指令可以讓我們從鍵盤輸入文字, # 但是我們藉由「輸入重導向」將檔案內容導入 # > 和 >> 的差別是一個會從頭輸出(即覆蓋原內容),一個是接在原內容後面 ls -l > filelist.txt ls -m > filelist.txt # 最後只有 ls -m 的內容存在 ls -l > filelist.txt ls -m >> filelist.txt # ls -m 的結果會接在 ls -l 後面
Linux 有個特殊的檔案 /dev/null
可以把它視為黑洞,任何丟給它的資料都會消失:
# 把權限不足的錯誤訊息丟到黑洞 cat /var/log/secure 2> /dev/null
你也可以把原本的標準輸出導向標準錯誤輸出:
# 「標準輸出」導向「標準錯誤輸出」 echo "Hello" 1>&2 # 反過來也可以 echo "Hello" 2>&1
管線指令 (pipe)
管線指令可以讓你將多組指令串接在一起一次執行,每一組指令的結果 (輸出) 會是下一組指令的資料來源 (輸入);只有可以接收 standard input (STDIN) 的指令才可用於管線指令中,例如 less
, more
, head
, tail
等。
yum list php* | less # 列出 php 開頭的套件太多了,可以輸出給 less 來翻頁查
grep 指令
以行為單位找出需要的資料,搜尋字串可以使用 正規表示式 (Regular Expression) 來表示。
# 找出無效的登入使用者名稱 sudo cat /var/log/secure | grep -i 'Invalid user'
可以使用選項:
-i -n -v
last 指令
查詢誰登入過主機。
# 預設會顯示當月的全部資料,如果太多可以加上數量限制 last last -5
lastlog 指令
顯示系統中所有帳號「最後一次」登入主機的時間;這個指令其實只是去讀取 /var/log/lastlog
的內容而已。
lastlog # 只列出 tony 這個使用者 lastlog | grep tony
uname 指令
查詢系統與核心相關資訊。
uname uname -a # 所有系統相關的資訊 # 結果 Linux localhost.localdomain 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux uname -s # 系統核心名稱 uname -r # 核心的版本 uname -m # 系統的硬體名稱,例如 i386 (32位元) 或 x86_64 (64位元)
free 指令
查詢記憶體使用情況。
free # 依選擇的單位顯示,請擇一使用 # -b (bytes) -k (Kbytes,預設值) -m (Mbytes) -g (Gbytes) free -m # 依人類容易閱讀的方式顯示 free -h # 每隔幾秒自動輸出, ctrl + c 結束 free -s 5
top 指令
持續顯示程序的運作狀態。
top # 進入畫面後按 u 再輸入使用者名稱,例如 nginx # 就能觀察 nginx 使用者的使用硬體資源的情況 # q 離開
ps 指令
將目前這個時間點程序運作狀態顯示出來。相對於 top 是靜態的。
# 顯示系統所有的程序的資料 ps aux # 通常會搭配管線指令及 grep 來過濾內容 ps aux | grep nginx
crontab 指令
這是排程指令,例如你希望每天晚上 12 點執行某支程式,就可以透過它來設定。
# 確認 crond 這個排程服務是否已啟動 systemctl status crond crontab -e # 編輯排程,自動開啟 vi crontab -l # 查看排程 crontab -r # 刪除排程
排程的格式為
分 時 日 月 週 指令 0~59 0~23 1~31 1~12 0~7 注意指令的路徑
註:週的 0 和 7 均指星期日。
一行一個排程,全部以空白間隔,可以使用 4 個符號來指定時間:
-
*
星號:表示任何時刻,例如放在 分 這欄表示任何分鐘都符合。 -
,
逗號:多個時間,例如在 時 這欄寫9,17
表示早上 9 點及下午 5 點兩個時間。 -
-
減號:一段連續時間,例如 時 寫8-12
表示早上 8 點一直到中午 12 點。 -
/
斜線:間隔時間,例如 分 寫*/10
表示每 10 分鐘一次。
使用範例:
# 每隔 5 分鐘,把 error.log 最後的內容輸出到家目錄下 */5 * * * * tail /var/log/nginx/error.log > ~/error.log # 每天早上 9 點,把最後登入的資訊輸出到家目錄下 * 9 * * * * last > ~/lastlogin.txt # 每月 1 日凌晨 1 點,更新憑證 * 1 1 * * /usr/local/bin/certbot-auto renew
ip 指令
# 列出所有網路裝置 ip a # 只列出 ipv4 的 ip ip -4 a # -6 則只顯示 ipv6 的 ip # 我們要查的裝置為 eth1,只顯示它的資料即可 ip -4 a show eth1 # 可以串接管線指令 grep 搜尋來過濾結果 ip -4 a show eth1 | grep inet # 得到的結果 inet 192.168.8.8/24 brd 192.168.8.255 scope global noprefixroute eth1
下一章,我們將介紹如何設定讓系統的登入更加安全。
以上所述就是小编给大家介绍的《動手學 VPS 架站:使用 CentOS 7 + Nginx + PHP-FPM + MariaDB (4) - shell 指令 (續)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 使用Angular自定义字段校验指令
- 使用SSE2指令集加速字符替换
- 使用 SSE2 指令集加速字符替换
- GCC 10支持使用SSE指令模拟MMX
- GCC开始使用SSE指令实现MMX内在函数
- 使用vue自定义指令开发一个表单验证插件validate.js
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。