内容简介:在 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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Domain-Driven Design
Eric Evans / Addison-Wesley Professional / 2003-8-30 / USD 74.99
"Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. "His book is very compatible with XP. It is n......一起来看看 《Domain-Driven Design》 这本书的介绍吧!