超有用的linux筆記

名詞解釋

根目錄說明

tree -L 1

.
├── bin -> usr/bin # 英語binary的縮寫,表示」二進制文件「,bin目錄包含了會被全部用戶使用的可執行程序
├── boot # 英語boot表示」啓動「,boot目錄包含與Linux啓動密切相關的文件
├── dev # 英語device的縮寫, 表示」設備「,包含外設,它裏面的子目錄,每個對應一個外設
├── etc # etc目錄包含系統的配置文件,按照原始Unix的說法,這下面都是一堆零零碎碎的東西,就叫etc好了,是歷史遺留問題
├── home # 英語home表示」家「,用戶的私人目錄,在home目錄中,咱們放置私人的文件
├── lib -> usr/lib # 英語library的縮寫,表示」庫「,目錄包含被程序所調用的庫文件,以.so結尾的文件
├── lib64 -> usr/lib64
├── media # 英語media表示」媒體「,可移動的外設(USB盤,SD卡,DVD,光盤等)插入電腦時可讓咱們經過media的子目錄來訪問這些外設的內容
├── mnt # mnt是英語mount的縮寫,表示」掛載「,有點相似media目錄,但通常用於臨時掛載一些裝置
├── opt # 英語 optional application software package的縮寫,表示」可選的軟件包「,用於安裝多數第三方軟件和插件
├── proc
├── root
├── run
├── sbin -> usr/sbin # 英語system binary的縮寫, 表示」系統二進制文件「 ,包含系統級的重要可執行程序
├── srv # 英語service的縮寫,表示」服務「,包含一些網絡服務啓動以後所須要取用的數據
├── sys
├── tmp # 英語temporary的縮寫,表示」臨時的「,普通用戶和程序存放臨時文件的地方
├── usr # 是英語Unix Software Resource的縮寫,表示」Unix操做系統軟件資源「,目錄裏安裝了大部分用戶須要調用的程序
└── var # 英語variable的縮寫,表示」動態的,可變的「,var一般包含程序的數據,好比log(日誌)文件,記錄電腦了發生了什麼事

掛載

所謂的掛載就是利用一個目錄當成進入點,將磁盤分區的數據放置在該目錄下;也就是說進入該目錄就能夠讀取該分區的意思。這個操做咱們稱爲掛載,那個進入點的目錄咱們稱爲掛載點php

shell

當談到命令時,咱們實際上指的是shellshell是一個接收由鍵盤輸入的命令,並將其傳遞給操做系統來執行的程序。幾乎全部的Linux發行版都提供shell程序,該程序來自於稱之爲bash的GNU項目。bash是Bourne Again Shell的首字母縮寫,Bourne Again Shell基於這樣一個事實,即bash是sh的加強版本,而sh是最初的UNIX shell程序,由Steve Bourne編寫。html

終端

當使用圖形用戶界面時,須要另外一種叫作終端仿真器(terminal emulator)的程序與shell進行交互。若是咱們仔細查看桌面菜單,那麼極可能會找到一個款終端仿真器。在KDE環境下使用的是konsole,而在GNOME環境下使用的是gonme-terminal,但在桌面菜單上極可能將它們簡單地統稱爲終端。在Linux系統中,還有許多其餘的終端仿真器能夠使用,可是它們基本上都作一樣的事情:讓用戶訪問shellnode

硬件相關

修改主機名

查看當前主機名linux

hostname

臨時修改主機名:web

hostname new_name(新主機名)

上面的修改方式屬於臨時修改,系統重啓後失效,若是想要永久性修改主機名,那麼就須要修改配置文件正則表達式

  • 在CentOS6中,須要修改 /etc/sysconfig/network文件
  • 在CentOS7中,須要修改 /etc/hostname文件

查看CentOS版本

cat /etc/redhat-release

查看CPU總核數

# 表示一顆CPU四核
grep processor /proc/cpuinfo |wc -l
grep -c processor /proc/cpuinfo

校訂CentOS7時間

GPS系統中有兩種時間區分,UTC就0時區的時間,CST爲本地時間,如北京爲早上八點(東八區),UTC時間比北京時晚八小時;
CST:Central Standard Time,UTC+8:00 中央標準時間
UTC:Universal Time Coordinated 世界協調時間redis

# 安裝ntp軟件包
sudo yum -y install ntp

# 設置ntp開機自啓
systemctl enable ntpd.service

# 啓動ntp服務
sudo service ntpd.service restart

若是須要配置CTS時間,須要建立以下軟連接shell

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

若是須要配置UTC時間,須要建立以下軟連接數據庫

ln -sf /usr/share/zoneinfo/Universal /etc/localtime

修改文件最大打開數

linux修改文件最大打開數量的方法,默認狀況下是1024的。vim

咱們能夠使用 ulimit -n命令查看

若是咱們想臨時修改,能夠使用 ulimit -n 數量來修改,不過系統重啓後修改會丟失

若是想永久修改,須要修改/etc/security/limits.conf文件

修改系統端口最大監聽隊列的長度

在linux中,/proc/sys/net/core/somaxconn這個參數,定義了系統中每個端口最大的監聽隊列的長度,這是個全局的參數,默認值爲128。

somaxconn限制了接收新 TCP 鏈接偵聽隊列的大小。對於一個常常處理新鏈接的高負載 web服務環境來講,默認的 128 過小了。大多數環境這個值建議增長到 1024 或者更多。 服務進程會本身限制偵聽隊列的大小(例如 sendmail(8) 或者 Apache),經常在它們的配置文件中有設置隊列大小的選項。大的偵聽隊列對防止拒絕服務 DoS 攻擊也會有所幫助。

vim /etc/sysctl.conf
# 添加
net.core.somaxconn = 1024

而後執行sysctl -p使配置生效。

修改內核內存分配策略

overcommit_memory是一個內核對內存分配的一種策略。 具體可見/proc/sys/vm/overcommit_memory下的值

overcommit_memory取值又三種分別爲0,1,2

  • overcommit_memory=0,表示內核將檢查是否有足夠的可用內存供應用進程使用;若是有足夠的可用內存,內存申請容許;不然,內存申請失敗,並把錯誤返回給應用進程。
  • overcommit_memory=1,表示內核容許分配全部的物理內存,而無論當前的內存狀態如何。
  • overcommit_memory=2, 表示內核容許分配超過全部物理內存和交換空間總和的內存。

當咱們啓動redis服務時,會報警告,翻譯爲【「警告超限」內存設置爲0!在內存不足的狀況下,後臺保存可能會失敗。若要解決此問題,請將「vm.overcommit_memory=1」添加到/etc/sysctl.conf,而後從新啓動或運行命令「sysctl vm.overcommit_memory=1」以使其生效。】

vim /etc/sysctl.conf
# 添加
vm.overcommit_memory = 1

而後執行sysctl -p使配置生效。

vim編輯器

基本上vi共分爲3種模式,分別是通常命令模式、編輯模式與命令行模式

通常命令模式(command mode)

以vi打開一個文件就直接進入通常命令模式了(這是默認的模式,也成爲通常模式)。在這個模式中,你能夠使用【上下左右】按鍵來移動光標,你能夠使用【刪除字符】或【刪除整行】來處理文件內容,也能夠使用【複製、粘貼】來處理你的文件內容。

編輯模式(insert mode)

在通常命令模式中能夠進行刪除、複製、粘貼等的操做,可是卻沒法編輯文件的內容。要等到你按下【i、I、o、O、a、A、r、R】等任何一個字母以後纔會進入編輯模式。注意了,一般在Linux中,按下這些按鍵時,在界面的左下方會出現【INSERT】或【REPLACE】的字樣,此時才能夠進行編輯,而若是要回到通常命令模式時,則必需要按下【Esc】這個按鍵便可退出編輯模式。

命令行模式(command-line mode)

在通常模式當中,輸入【😕?】三個中的任何一個按鈕,就能夠將光標移動到最下面的一行。在這個模式當中,能夠提供你【查找數據】的操做,而讀取、保存、批量字符替換、退出vi、顯示行號等的操做則是在此模式中完成。

通常命令模式可與編輯模式及命令行模式切換,但編輯模式與命令行模式之間不可互相切換。

經常使用vim命令:

插入命令:

命令 說明
i 當前位置插入
I 行首插入
a 當前位置後插入
A 行尾插入
o 下一新行插入
O 上一新行插入
s 刪除光標所在的字符,當前位置插入
S 刪除光標所在行,當前行插入

移動光標:

命令 說明
h 光標左移
j 光標下移
k 光標上移
l 光標右移
^ 光標移動到行首
$ 光標移動到行尾
gg 光標移動到文件首行
G 光標移動到文件尾行
ngg n爲數字,移動到這個文件的第n行
nG n爲數字,移動到這個文件的第n行

查找與替換:

命令 說明
/word 向光標之下尋找一個名稱爲word的字符串。例如要在文件內查找itbsl這個字符串,就輸入/itbsl便可(經常使用)
?word 向光標之上尋找一個字符名稱爲word的字符串
n 這個n是英文按鍵,表明【重複前一個查找的操做】。舉例來講,若是剛剛咱們執行/itbsl去向下查找itbsl這個字符串,則按下n後,會向下繼續查找下一個名稱爲itbsl的字符串,若是是執行?itbsl的話,那麼按下n則會向上繼續查找名稱爲itbsl的字符串
N 這個N是英文按鍵,與n恰好相反,爲【反向】進行前一個查找操做,例如/itbsl後,按下N則表示【向上】查找itbsl
:n1,n2s/word1/word2/g n1與n2爲數字,在第n1與n2行之間尋找word1這個字符串,並將該字符串替換爲word2,舉例來講,在100到200行之間查找itbsl並替換爲ITBSL,則 :100,200s/itbsl/ITBSL/g(經常使用)
:1,$s/word1/word2/g 從第一行到最後一行尋找word1字符串,並將該字符串替換爲word2(經常使用)
:1,$s/word1/word2/gc 從第一行到最後一行尋找word1字符串,並將該字符串替換爲word2,且在替換前顯示提示字符給用戶確認(confirm)是否須要替換(經常使用)

刪除、複製與粘貼:

命令 說明
xX 在一行當中,x爲向後刪除一個字符(至關於[del]按鍵),X爲向前刪除一個字符(至關於[Backspace]即退格鍵)(經常使用)
nx n爲數字,連續向後刪除n個字符。舉例來講,我要連續刪除10個字符,【10x】
dd 刪除(剪切)光標所在的那一整行(經常使用)
ndd n爲數字,刪除(剪切)光標所在的向下n行,例如20dd則是刪除(剪切)20行(經常使用)
d1G 刪除(剪切)光標所在到第一行的全部數據
dG 刪除(剪切)光標所在到最後一行的全部數據
d$ 刪除(剪切)光標所在處,到該行的最後一個字符
d0 刪除(剪切)光標所在處,到該行的最前面的一個字符
yy 複製光標所在的那一行(經常使用)
nyy n爲數字,複製光標所在的向下n行,例如20yy則是複製20行(經常使用)
y1G 複製光標所在行到第一行的全部數據
yG 複製光標所在行到最後同樣的全部數據
y0 複製光標所在的那個字符到該行行首的全部數據
y$ 複製光標所在的那個字符到該行行尾的全部數據
yw 拷貝一個單詞
nyw 拷貝n個單詞(n表示數字)
p 後置粘貼
P 前置粘貼

保存:

命令 說明
:w 直接保存
:w file 保存成新文件

退出:

命令 說明
:q 退出

強制執行:

命令 說明
:wq! 強制保存退出
:q! 強制退出

顯示行號:

命令 說明
:set nu 顯示行號

配置系統:

  • 全局配置
    /etc/virc
  • 用戶級別
    ~/vimrc

vim搜索

命令 說明
/字符串 好比搜索user,輸入/user

按下回車以後,能夠看到vim已經把光標移動到該字符處和高亮了匹配的字符串
查看下一個匹配,按下n(小寫n)
跳轉到上一個匹配,按下N(大寫N)
搜索後,咱們打開別的文件,發現也被高亮了,怎麼關閉高亮?
命令模式下,輸入:nohlsearch 也能夠:set nohlsearch; 固然,能夠簡寫,noh或者 set noh

Linux文件操做

實用快捷鍵

Ctrl+L:清理終端的內容,就是清屏的做用。同clear命令

Ctrl+D:給終端傳遞EOF(End Of File,文件結束符)

Shift+PgUp:用於向上滾屏,與鼠標的滾輪向上滾屏是一個效果

Shift+PgDn:用於向下滾屏,與鼠標的滾輪向下滾屏是一個效果

Ctrl+A:光標跳到一行命令的開頭。Home鍵有相同的效果

Ctr+E:光標跳到一行命令的結尾。End鍵具備相同的效果

Ctrl+U:刪除全部光標左側的命令字符

Ctrl+K:刪除全部在光標右側的命令字符

Ctrl+W:刪除光標左側的一個」單詞「

Ctrl+Y:粘貼,用Ctrl+U,Ctrl+K

locate:快速查找

locate命令用於定位要查找的文件,並且此命令很快,」locate「是英語」定位「的意思

用法:

終端會列出全部包含了search_content的文件和目錄

locate search_content

在使用locate命令查找文件時,你們可能會遇到這樣的問題

我剛建立的文件,爲何用locate命令查找不到呢?

這正好是locate命令的缺陷,locate命令不會對你實際的整個硬盤進行查找,而是在文件的數據庫裏查找記錄,locate命令的原理以下圖所示

對於剛建立不就的文件,由於它們尚未被收錄進文件數據庫,所以locate命令就找不到其索引,天然就不會反悔任何結果

linux系統通常天天會更新一次文件數據庫,所以,只要你隔24小時再用locate查找,應該就能找到你剛建立的文件了,可是,你可能不想等這麼久,所以也提供了updatedb命令強制系統當即更新文件數據庫,updatedb命令只能由root用戶執行,這個命令執行須要一點時間,一旦執行成功,就能夠使用locate命令查找剛剛建立的文件了,locate命令會列出全部在文件數據庫中找到的內容,有時候結果太多了,太繁雜了,並且locate命令還不能找到一天以內建立的文件,因此係統提供了另外一個查找的命令find

find:深刻查找

find命令是查找文件的利器,find是英語」找到「的意思,並且它可讓咱們對每一個找到的文件作後續的操做,與locate命令不一樣,find命令不會在文件數據庫中查找文件的記錄,而是遍歷你的實際硬盤

用法:

# 與locate命令不一樣的是,find命令只會查找徹底符合名字的文件
find 查找目錄(默認當前目錄) -name "文件名"

# 不過也能夠用通配符 *來匹配多個名稱
# 在/var/log目錄下查找以syslog開頭的文件
find /var/log -name "syslog*"

# 根據文件大小查找
# 查找/var/log中大小超過10M的文件
# -size:size指定查找文件的大小(M兆,K千字節,G千兆字節)
find /var/log -size +10M

# 查找小於50M的
find /var/log -size -50M

# 查找等於20M的
find /var/log -size 20M

# 根據文件最近訪問時間查找
# -atime參數:atime是access和time的縮寫,表示訪問時間
# -atime參數後面緊跟的-7表示7天以內,減號的做用表示小於
find /var/log -name "*.txt" -atime -7

# 僅查找目錄或文件
# -type d:只查找目錄類型。d是directory的首字母,表示」目錄「
# -type f:只查找文件類型。f是file的首字母,表示「文件」
# 若是不用-type參數指定類型,那麼find命令默認是查找目錄和文件
find /var/log -name "file" -type d

# 刪除查找到的文件
# -delete參數:
find /var/log -name "*.jpg" -delete

# 調用命令
# -exec參數:使用-exec參數,能夠後接一個命令,對每一個查找到的文件進行操做
# exec是execute的縮寫,是英語「執行」的意思
# 假如要將/var/log目錄下的全部查找到的txt文件的訪問權限都改成600
find /var/log -name "*.txt" -exec chmod 600 {}\;
# 你能夠將-exec參數換成-ok參數,用法同樣,只不過-ok參數會對每個查找到的文件都確認提示

ls:列出文件和目錄

ls是list的縮寫,是英語「列出」的意思,用於列出文件和目錄

ls -a:列出全部的目錄和文件,包括隱藏的,包含.和..

ls -A:列出全部的目錄和文件,包括隱藏的,不包含.和..

ls -l:列出一個顯示文件和目錄的詳細信息的列表

ls -lh:h是human readable的縮寫,表示「適合人類閱讀的」

ls -lt:t是time的縮寫,表示時間,按文件最近一次修改時間排序

du:顯示目錄包含的文件大小

du是英語disk usage的縮寫,表示「磁盤使用/佔用」,du命令可讓咱們知道文件和目錄所佔的空間大小

相比ls -l命令,du命令統計的纔是真正的文件大小

du命令會深刻遍歷每一個目錄的子目錄,統計全部文件的大小

du -h:以適合人類閱讀的方式展現

默認狀況下,du命令只顯示目錄的大小,若是加上-a參數,則會顯示目錄和文件的大小

du -s:只顯示統計大小

du -sh:顯示統計大小(以適合人類閱讀的方式)

cat:顯示文件內容

cat命令能夠一次性在終端中顯示文件的全部內容,cat是concatenate的縮寫,表示「鏈接/串聯」

cat -n:顯示文件內容時帶上行號

適合文件內容比較少的文件若是文件比較大,更適合用less命令

less:顯示文件內容

和cat命令最大的區別:less會一頁一頁的顯示文件內容,還有一個more命令,more是「更多」,less是「更少」

more命令和less命令功能相似,more沒有less那麼強大,好比more命令不能日後翻頁,只能往前

less命令中最基本最經常使用的快捷鍵

空格鍵:文件內容讀取下一個終端屏幕的行數,至關於前進一個屏幕(頁),與鍵盤上的PageDown(下一頁)效果同樣

回車鍵:讀取下一行文件內容,也就是前進一行

d鍵:前進半頁(半個屏幕)

b鍵:後退一頁。與鍵盤上的PageUp(上一頁)效果同樣

y鍵:後退一行。與鍵盤上的向上效果是同樣的

u鍵:後退半頁(半個屏幕)

q鍵:中止讀取文件,終止less命令

=鍵:顯示你在文件的什麼位置,會顯示當前頁面的內容是文件中第幾行到第幾行,整個文件所含行數,所含字符數

h鍵:顯示幫助文檔。按q鍵退出幫助文檔

/:進入搜索模式,在斜槓後面輸入你要搜索的文件,按下回車鍵,就會把全部符合的結果都標識出來,要在搜索所得結果中跳轉,能夠按n鍵,跳到下一個符合項目,按N鍵跳到上一個符合項目

head:顯示文件的開頭

head在英語中是「頭部」的意思,顧名思義,這個命令用於顯示文件的開頭,默認狀況下,head會顯示文件的頭10行

head -n 數字:指定顯示的行數

tail:顯示文件的結尾

tail在英語中是「尾部」的意思,顧名思義,這個命令用於顯示文件的結尾,默認狀況下,tail會顯示文件結尾的最後10行內容

tail -n 數字:指定顯示的行數

tail命令還能夠配合-f參數來實時追蹤文件的更新,能夠用快捷鍵Ctrl+c來終止tail -f命令

默認地,tail -f會每過1秒檢查一下文件是否有新內容

能夠指定間隔檢查的秒數,用-s參數:tail -f -s 4 文件名

touch:建立一個空白文件

touch命令其實一開始的設計初衷是修改文件的時間戳,就是能夠修改文件的建立時間或修改時間,讓電腦覺得文件是在那個時候被建立或修改的

若是touch命令後面跟着的文件名是不存在的文件,它會建立一個

mkdir:建立一個目錄

mkdir命令就是用於建立一個目錄的,mkdir是mk和dir的縮寫。mk是make的縮寫,表示建立

索要建立的目錄的名字裏有空格怎麼辦呢?加上引號

還能夠用-p參數來遞歸建立目錄結構:mkdir -p one/two/three

cp:拷貝文件或目錄

cp是英語copy的縮寫,表示「拷貝」,cp命令不只能夠拷貝單個文件,還能夠拷貝多個文件,也能夠拷貝目錄

拷貝目錄,只要在cp命令以後加上-r或者-R參數,r大寫和小寫做用是同樣的,都表示recursive,也就是遞歸的,拷貝的時候,目錄中的全部內容(子目錄和文件)都會被拷貝

使用通配符*:cp*.txt folder表示把當前目錄下全部以.txt結尾的文件都拷貝到folder目錄中,cp ha* folder表示把當前目錄全部以ha開頭的文件都拷貝到folder目錄中

rm:刪除文件和目錄

rm是英語remove的縮寫,表示「移除」,這個命令就是用來刪除東西的

rm -i:向用戶確認是否刪除,保險起見,用rm命令刪除文件時,能夠加上-i參數,這樣對於每一個要刪除的文件,終端都會詢問咱們是否肯定刪除

rm -f:慎用,不會詢問是否刪除,強制刪除

rm -rf:遞歸刪除,千萬不要作 rm -rf /*或 rm -rf /

ln:建立連接

ln是link的縮寫,在英語中表示「連接」,ln命令用於在文件之間建立連接(快捷方式)

在Linux下連接有兩種類型:

  • Physical link:物理連接或硬連接
  • Symbolic link:符號連接或軟連接

在linux中,文件在硬盤上的存儲分兩部分:文件名和文件內容,文件名的列表是存儲在硬盤的其它地方的,和文件內容分開存放,方便linux管理

其實每一個文件有三部分:文件名、權限和文件內容,咱們這裏簡化地將文件分爲兩部分:文件名和文件內容

每一個文件的文件內容被分配到一個標號號碼,就是inode,所以每一個文件名都綁定到它的文件內容(用inode標識)

硬連接

用法:

ln file1 file2

若是咱們刪除了file1,那麼對file2沒什麼影響,刪除file2對file1也沒有什麼影響,咱們能夠理解爲用rm命令就是斷開了文件名和文件內容之間的那根線,

對於硬連接來講,刪除任意一方的文件,共同指向的文件內容並不會從硬盤上被刪除

硬連接原理:使連接的兩個文件共享一樣文件內容,就是一樣的inode,一旦兩個文件之間有了硬連接,那麼修改其中一個文件,修改的是相同的一塊內容,只不過咱們能夠用兩個文件名來獲取到文件內容

硬連接缺陷:只能建立指向文件的硬連接,不能建立指向目錄的(經過一些參數的修改,也能夠建立指向目錄的硬連接,可是比較複雜),軟連接能夠指向文件或目錄,對於目錄,通常都是用軟連接

能夠用ls -i命令查看一下(-i參數能夠顯示文件的inode)

軟鏈接

軟連接才真正像咱們在windows下的快捷方式,原理很類似

用法:

ln -s file1 file2

建立硬連接時ln不帶任何參數,建立軟鏈接須要加上-s參數

軟連接的特色:若是咱們刪除了file2,沒什麼大不了的,file1不會受到影響,若是刪除file1,file2會變成「死連接」,由於指向的文件不見了

grep:篩選數據

grep是Globally search a Regular Expression and Print的縮寫,意思是「全局搜索一個正則表達式,而且打印」,grep的功能簡單說是在文件中查找關鍵字,並顯示關鍵字所在的行

用法:

grep 搜索內容 要被搜索的文件

# -i參數:忽略大小寫,默認狀況下,grep命令是區分大小寫的,i是英語ignore的縮寫,表示「忽略」
grep -i

# -n參數:顯示行號,-n參數的做用很簡單,就是顯示搜索到的文本所在的行,n是英語number的縮寫,表示「數字,編號」
grep -n
# 示例
grep -n search_content /etc/profile

# -v參數:只顯示文本不在的行,v是invert的縮寫,表示「顛倒,倒置」
grep -v
# 示例
grep -v search_content /etc/profile

# -r參數:在全部子目錄和子文件中查找
grep -r
# 示例
grep -r "hello world" /folder

# 正則查找
# ^匹配行首 
grep -E ^path /etc/profle

# 包含Path和path的會被搜索到
grep -E [Pp]ath /etc/profile

# 包含a-zA-Z之間任意字母的均可以被搜索到
grep -E [a-zA-Z] /etc/profile
# 在CentOS中,不加-E也是能夠的

wc:文件統計

wc是word count的縮寫,不只能夠用來統計單詞數目,還能夠用來統計行數、字符數、字節數等

用法:

# wc命令顯示的三個數字分別是 行數 單詞數 字節數 文件名
wc 文件名
# -l參數:統計行數,l是英語「line」的縮寫,表示「行」
wc -l test.txt

# -w參數:統計單詞數,w是「word」的縮寫,表示「單詞」
wc -w test.txt

# -c參數:統計字節數,c是「character」的縮寫,表示「字符」
wc -c text.txt

示例:

uniq:刪除文件中的重複內容

uniq是英語unique的縮寫,表示「獨一無二的」,unique命令有點「呆」,只能將連續的重複行變爲一行

用法:

uniq 文件名
# -c參數:統計重複的行數,c是統計count的縮寫,表示「統計,計數」
uniq -c test.txt

# -d參數:只顯示重複的行的值,d是duplicated的縮寫,表示「重複的」
uniq -d test

示例:

scp:網間拷貝

scp是Secure Copy的縮寫,表示」安全拷貝「,scp能夠使咱們經過網絡,把文件從一臺電腦拷貝到另外一臺電腦

scp是基於SSH(Secure Shell)的原理來運做的,SSH會在兩臺經過網絡鏈接的電腦之間建立一條安全通訊的通道,scp就利用這條管道安全地拷貝文件

用法:

# source_file表示源文件,destination_file就是目標文件
# 這兩個文件均可以用以下方式來表示 user@ip:file_name
# []以及括號內的內容能夠省略,默認是22端口,和SSH同樣
scp [-P 端口號] source_file destination_file

rsync:同步備份

rsync是remote synchronize的縮寫,remote表示」遠程「,synchronize表示」同步「

所以rsync命令主要用於」遠程同步文件「,若是系統沒有rsync命令,能夠安裝

sudo yum install rsync

rsync能夠使咱們同步兩個目錄,無論這兩個目錄位於同一臺電腦仍是不一樣的電腦(用網絡鏈接)

rsync應該是最change用於」增量備份「的命令了,增量備份(incremental backup)是備份的一種類型,指在一次全備份或上一次增量備份後

用法:

# 將images目錄下的全部文件備份到backups目錄下
rsync -arv images/ backups/

# -a:保留文件的全部信息,包括權限、修改日期等
# -r:遞歸調用。表示子目錄下的全部文件都包括
# -v:冗餘模式。輸出詳細操做信息,v是verbose的縮寫,是」冗餘「的意思
# 默認地,rsync在同步時並不會刪除目標目錄的文件
# 例如,你的源目錄(被同步目錄)中刪除了一個文件,可是rsync同步時,它不會刪除同步目錄中的相同文件
rsync -arv --delete images/ joey@172.16.147.128:backups/

你能夠本身配置rsync,使得它從指定目錄(能夠是多個目錄)備份到指定IP地址的目錄下,並且能夠指定哪些類型文件是要備份的,哪些類型不要備份,而後把這一長串命令贊成用shell腳原本寫成一個文件(例如取名叫backup),使之可執行(用chmod + x命令),再把這個文件的路徑添加到PATH環境變量中

用戶羣組系統

sudo -i:切換到root身份

sudo 是英語Substitute User DO的縮寫,substitute是」替換,代替、替身「的意思,user是」用戶「的意思,do是」作「的意思,連在一塊兒就是」替換用戶來執行...「的意思

終端會提示你輸入密碼,至少第一次會要求輸入密碼,此密碼是你我的的密碼。

useradd:添加新用戶

user是英語」用戶「的意思,add是英語」添加「的意思

useradd用於添加用戶。用法:命令後接要建立的用戶名

用法:

useradd joey

passwd:設置/修改密碼

passwd是password這個英語單詞的縮寫,表示」密碼「

用法:

passwd joey

userdel:刪除用戶

單單用userdel命令,不加參數的話,只會刪除用戶,可是不會刪除在/home目錄中的用戶家目錄

若是想要連次用戶的家目錄頁一併刪除的話,能夠加上-r或-remove這個參數

用法:

userdel -r joey
userdel -remove joey

groupadd:建立羣組

groupadd是group和add的縮寫,group是英語」羣組「的意思,add是英語」添加「的意思

groupadd命令用於添加一個新的羣組

用法:

groupadd 組名
# 示例:
groupadd friends

usermod:修改用戶

usermod是user和modify的縮寫,user是用於」用戶「的意思,modify是」修改「的意思

usermod命令用於修改用戶的帳戶

用法:

usermod
# -l參數:對用戶重命名,/home中的家目錄名不改變,須要手動修改
# -g參數:修改用戶所在羣組
# 將joey的所屬於組改成friends
usermod -g friends joey

# -G參數:將一個用戶添加到多個羣組,羣組名之間用逗號分隔,並且沒有空格
usermod -G group1,group2,group3

# -a參數:追加,若是想不離開原先的羣組,又想加入新的羣組,能夠在-G的基礎上加上-a參數
usermod -aG group4,group5

groups:查看用戶所屬組

用groups(」羣組「)命令能夠獲知一個用戶屬於哪一個(些)羣組

groups joey

groupdel:刪除羣組

groupdel是group和delete的縮寫,group是英語」羣組「的意思,delete是英語」刪除「的意思

groupdel命令用於刪除一個已存在的羣組

groupdel group1

chown:改變文件的全部者

chown命令用於改變文件的全部者,須要root身份才能運行。chown是change和owner的縮寫。

用法:

chown 用戶 文件
# chown也能夠改變文件的羣組
chown 用戶:組 文件
# -R參數:遞歸修改文件全部者,只能是大寫,小寫不起做用,使得被修改的目錄的全部子目錄和文件都改變全部者
chown -R 用戶 目錄

chgrp:改變文件的羣組

chgrp是change和group的縮寫,用戶改變文件的羣組

用法:

chgrp 羣組名 文件名

chomod:修改訪問權限

linux系統裏,每一個文件和目錄都有一列權限樹形,訪問權限知名了誰有讀/寫/執行的權利,chmod命令不須要是root用戶才能運行,只要你是此文件全部者,就能夠使用chmod來修改文件的訪問權限

chmod是change和mode的縮寫,change是英語」改變「的意思,mode是」模式「的意思

chmod命令用於修改文件的各類訪問權限

linux系統對每種權限(r,w和x)分配了對應的數字

權限 數字
r 4
w 2
x 1

要合併這些權限,就須要作簡單的加法了。

訪問權限有三組(全部者的權限,羣組的權限,其它用戶的權限)

用法:

# text.txt的所屬用戶有讀寫權限,所屬組和其它用戶沒有任何權限
chmod 600 text.txt

# -R參數:遞歸地修改訪問權限
# chmod 配合 -R參數能夠遞歸地修改文件訪問權限
chmod -R 700 /home/joey

除了用戶,能夠用另外一種方式來分配文件的訪問權限:用字母

u:user的縮寫,表示全部者

g:group的縮寫,表示羣組用戶

o:other的縮寫,表示其它用戶

a:all的縮寫,表示全部用戶

+:加號,表示添加權限

-:減號,表示減去權限

-:等號,表示分配權限

示例:

chmod u+rx file 文件file的全部者增長讀和運行的權限
chmod g+r file  文件file的羣組用戶增長讀的權限
chmod o-r file  文件file的其它用戶移除讀的權限
chmod g+r o-r file 文件file的羣組用戶增長讀的權限,其它用戶移除讀的權限
chmod u=rwx,g=r,o=- file 文件file的全部者分配讀、寫、執行的權限,羣組分配讀的權限,其它用戶沒有任何權限

軟件管理

軟件倉庫

在Red Hat一族裏,軟件包的後綴是.rpm,rpm是Red Hat Package Manager的縮寫,表示」紅帽軟件包管理器「,CentOS做爲Red Hat一族的一員,也是用的.rpm的軟件包

用默認的官方版本是最好的,可是會比較卡,因此咱們要學習如何切換軟件倉庫,CentOS系統使用的軟件倉庫的列表是記錄在一個文件中,要編輯的那個包含軟件倉庫的列表的文件是/etc/yum.repos.d/CentOS-Base.repo,這個文件時系統文件,只能被root用戶修改

修改CentOS7默認yum源爲mirros.aliyun.com

# 1.備份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 2.下載新的CentOS-Base.repo 到 /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 3.運行 yum makecache 生成緩存
yum makecache

wget:下載文件

wget能夠使咱們直接從終端控制檯下載文件,只須要給出文件的HTTP或FTP地址

用法:

wget addr
# -c參數:繼續一箇中斷的下載,c是英語continue的縮寫,表示」繼續「
wget -c https://www.php.net/distributions/php-7.4.14.tar.gz
# -O參數:重命名(大寫字母O)
wget -c https://www.php.net/distributions/php-7.4.14.tar.gz -O php.tar.gz
# -o參數:保存輸出日誌(小寫字母o)
wget -c https://www.php.net/distributions/php-7.4.14.tar.gz -O php.tar.gz -o wget.log

yum:包管理工具

yum是CentOS中的默認包管理工具

# 搜索軟件包
sudo yum search

# 安裝軟件包
sudo yum install

# 刪除軟件包
sudo yum remove

# 本地的.rpm軟件包,能夠用rpm命令來安裝
sudo rpm -ivh xxx.rpm  # 用於安裝
sudo rpm -e 包名        # 用於卸載

# 本地的.rpm軟件包,也能夠用yum命令來安裝
sudo yum localinstall xxx.rpm  # 用於安裝
sudo yum remove 包名            # 用於卸載

進程和系統監測

w:都有誰,在作什麼?

user:當前登陸的用戶

From:登陸IP

load average:負載,後面的三個數表示1分鐘、5分鐘、15分鐘以內的平均負載

ps:進程的靜態列表

ps是Process Status的縮寫,process是英語「進程」的意思,status是「狀態」的意思

ps命令用戶顯示當前系統中的進程,ps命令顯示的進程列表不會隨着時間而更新,是靜態的

用法:

# 列出全部的進程
ps -ef

# 以喬木裝列出全部進程
ps -efH

# 列出某個用戶運行的進程
ps -u 用戶名

# 經過CPU和內存使用來過濾進程
ps -aux | less

# 根據CPU使用率來降序排序
ps -aux --sort -pcpu | less

# 根據內存使用率來降序排序
ps -aux --sort -pmem | less

# 以樹形結構顯示進程,和pstree效果相似
ps -axjf

top:進程的動態列表

q:退出top
h:顯示幫助文檔,也就是哪些按鍵能夠使用,按下任意鍵返回,按q回到top命令的主界面
B:大寫的B,加粗某些信息
f/F:在進程列表中添加或刪除某些列
u:依照用戶來過濾顯示
k:結束某個進程
s:改變刷新頁面的時間,默認地,頁面每隔3秒刷新一次

netstat:網絡統計

netstat命令很好記,它由兩部分組成:net和stat,net是network的縮寫,表示」網絡「,stat是statistics的縮寫,表示」統計「

# 查看命令執行的二進制文件在哪兒
which netstat
# 查看這個二進制屬於哪一個rpm包
rpm -qf /usr/bin/netstat

netstat -i:列出電腦的全部網絡接口的一些統計信息

RX是receive(表示」接收「)的縮寫

TX是transmit(表示」發送「)的縮寫

  • MTU:Maximum Transmission Unit的縮寫,表示」最大傳輸單元「,指一種通訊協議的某一層上能經過的最大數據包大小(單位是字節)
  • RX-OK:在此接口接收的包中正確的包數,」OK「表示」沒問題的,好的「
  • RX-ERR:在此接口接收的包中錯誤的包數,」ERR「是error的縮寫,表示」錯誤「
  • RX-DRP:在此接口接收的包中丟棄的包數,」DRP「是drop的縮寫,表示」丟棄「
  • RX-OVR:在此接口接收的包中,因爲過速而丟失的包數,」OVR「是over的縮寫, 表示」結束「
  • 相似的,TX-OK、TX-ERR、TX-DRP、TX-OVR表示在此接口發送的包中對應的包數
# 列出全部開啓的鏈接
netstat -uta

# -u:顯示UDP鏈接
# -t:顯示TCP鏈接
# -a:不論鏈接狀態如何,都顯示

# 列出狀態是LISTEN的統計信息
netstat -lt

# 列出總結性的統計信息
netstat -s
#-s:s是summary的縮寫,表示」總結「

kill:殺死進程

有時候,系統會忽然卡住。這在Linux中也是會發生的,在Linux中中止進程有幾種方法

kill是英語「殺死」的意思,有點「小暴力」

kill命令後接須要結束的進程號,也就是以前咱們看到的PID,能夠經過ps命令或top命令來獲知進程的PID

用法:

kill PID
# 殺死一個進程
kill 1024
# 殺死多個進程 進程號之間用空格隔開
kill 1024 2048
# kill -9 表示當即強制結束進程
kill -9 1024

注:Ctrl+C:中止終端中正在運行的進程,Ctrl+C能夠比較有好地停止終端中正在運行的程序(進程)

&:在後臺運行進程

讓一個進程在厚愛運行有幾種方法

很簡單的一種:在你要運行的命令最後加上&這個符號

示例:

cp file.txt file-copy.txt &
sudo find / -name "*log" &
sudo find / -name "*log" > output_find &
sudo find / -name "*log" > output_find 2>&1 &

nohup:使進程與終端分離

&符號雖然經常使用,但卻有一個不可忽視的缺點,就是後臺進程與終端相關聯,一旦終端關閉或者用戶登出,進程就自動結束,想讓進程在以上狀況下繼續在後臺運行

須要用到nohup命名,當用戶註銷(logout)或者網絡斷開時,終端會收到HUP(hangup的縮寫,」掛斷「的意思)信號從而關閉全部子進程,終端被關閉時也會關閉其子進程,能夠使用nohup命令使命令不受HUP信號影響

man nohup
nohup cp file.txt file-copy.txt

場景:我如今須要跑腳本批量處理一些數據,可是我又不想盯着控制檯看這個腳本的輸出結果,想把這些輸出結果記錄到一個日誌文件裏面

方案:能夠使用 Linux 的 nohup 命令,把進程掛起,後臺執行

用法:

nohup XXXXXX.sh >> /runtime/deletedata.log &

運行結果(這個數字是進程號):

[1] 13120

有時候可能會報一個提示:

nohup: ignoring input and redirecting stderr to stdout

這個影響不大,不用緊張,也能夠加多一個 2>&1 就不會出現這個問題

用法:

nohup XXXXXX.sh >> /runtime/deletedata.log 2>&1 &

TIPS:命令最後面的 & 符號是切換到後臺去跑,退出終端也不會退出任務進程

運行這個命令以後呢,會輸出一個進程號,相似上面的輸出,能夠使用 top 命令查看運行中的進程,也能夠用 ps -aux 查看進程

想要終止這個進程的話只能殺死這個進程,使用 kill 指令處理

kill -9 進程號

TIPS:若是進程掛不起來,多是端口被佔用了,自行排查處理即可

killall:結束多個進程

同一個程序運行時可能啓動多個進程,一個更快捷的命令是:killall,all是英語「所有」的意思

killall命令就是用於結束所有要結束的進程,不一樣於kill命令,killall命令後接程序名,而不是PID

host:查看域名對應IP

用法:

host www.baidu.com

whois:瞭解有關域名的信息

sudo yum install whois
whois www.baidu.com

halt:關機

須要以root身份才能關閉系統

sudo halt

reboot:重啓系統

須要以root身份才能重啓系統

sudo reboot

poweroff:關機

poweroff命令也能夠用於關機,直接運行便可關機,不須要root身份:poweroff

iproute2對決net-tools

原文地址:iproute2 對決 net-tools

現在不少系統管理員依然經過組合使用諸如ifconfig、route、arp和netstat等命令行工具(統稱爲net-tools)來配置網絡功能,解決網絡故障。net-tools起源於BSD的TCP/IP工具箱,後來成爲老版本Linux內核中配置網絡功能的工具。但自2001年起,Linux社區已經對其中止維護。同時,一些Linux發行版好比Arch Linux和CentOS/RHEL 7則已經徹底拋棄了net-tools,只支持iproute2。

做爲網絡配置工具的一份子,iproute2的出現旨在從功能上取代net-tools。net-tools經過procfs(/proc)和ioctl系統調用去訪問和改變內核網絡配置,而iproute2則經過netlink套接字接口與內核通信。拋開性能而言,iproute2的用戶接口比net-tools顯得更加直觀。好比,各類網絡資源(如link、IP地址、路由和隧道等)均使用合適的對象抽象去定義,使得用戶可以使用一致的語法去管理不一樣的對象。更重要的是,到目前爲止,iproute2仍處在持續開發中。

若是你仍在使用net-tools,並且尤爲須要跟上新版Linux內核中的最新最重要的網絡特性的話,那麼是時候轉到iproute2的陣營了。緣由就在於使用iproute2能夠作不少net-tools沒法作到的事情。

對於那些想要轉到使用iproute2的用戶,有必要了解下面有關net-tools和iproute2的衆多對比。

顯示全部已鏈接的網絡接口

使用net-tools:

ifconfig -a

使用iproute2:

ip link show

激活或停用網絡接口

使用這些命令來激活或停用某個指定的網絡接口。

使用net-tools:

sudo ifconfig eth1 up
sudo ifocnfig eth1 down

使用iproute2:

sudo ip link set down eth1
sudo ip link set up   eth1

爲網絡接口分配IPv4地址

使用這些命令配置網絡接口的IPv4地址。

使用net-tools:

sudo ifconfig eth1 10.0.0.1/24

使用iproute2:

sudo ip addr add 10.0.0.1/24 dev eth1

值得注意的是,能夠使用iproute2給同一個接口分配多個IP地址,ifconfig則沒法這麼作。使用ifconfig的變通方案是使用IP別名

sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1

移除網絡接口的IPv4地址

就IP地址的移除而言,除了給接口分配全0地址外,net-tools沒有提供任何合適的方法來移除網絡接口的IPv4地址。相反,iproute2則能很好地徹底。

使用net-tools:

sudo ifconfig eth1 0

使用iproute2:

sudo ip addr del 10.0.0.1/24 dev eth1

顯示網絡接口的IPv4地址

按照以下操做可查看某個指定網絡接口的IPv4地址。

使用net-tools:

ifconfig eth1

使用iproute2:

ip addr show dev eth1

一樣,若是接口分配了多個IP地址,iproute2會顯示出全部地址,而net-tools只能顯示一個IP地址。

爲網絡接口分配IPv6地址

使用這些命令爲網絡接口添加IPv6地址。net-tools和iproute2都容許用戶爲一個接口添加多個IPv6地址。

使用net-tools:

sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64

使用iproute2:

sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1

顯示網絡接口的IPv6地址

按照以下操做可顯示某個指定網絡接口的IPv6地址。net-tools和iproute2均可以顯示出全部已分配的IPv6地址。

使用net-tools:

ifconfig eth1

使用iproute2:

ip -6 addr show dev eth1

移除網絡設備的IPv6地址

使用這些命令可移除接口中沒必要要的IPv6地址。

使用net-tools:

sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64

使用iproute2:

sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1

改變網絡接口的MAC地址

使用下面的命令可篡改網絡接口的MAC地址,請注意在更改MAC地址前,須要停用接口。

使用net-tools:

sudo ifconfig eth1 hw ether 08:00:27:75:2a:66

使用iproute2:

sudo ip link set dev eth1 address 08:00:27:75:2a:67

查看IP路由表

net-tools中有兩個選擇來顯示內核的IP路由表:route和netstat。在iproute2中,使用命令ip route。

使用net-tools:

route -n
netstat -rn

使用iproute2:

ip route show

添加和修改默認路由

這裏的命令用來添加或修改內核IP路由表中的默認路由規則。請注意在net-tools中可經過添加新的默認路由、刪除舊的默認路由來實現修改默認路由。在iproute2使用ip route命令來代替。

使用net-tools:

sudo route add default gw 192.168.1.2 eth0
sudo route del default gw 192.168.1.1 eth0

使用iproute2:

sudo ip route add default via 192.168.1.2 dev eth0
sudo ip route replace default via 192.168.1.2 dev eth0

添加和移除靜態路由

使用下面命令添加或移除一個靜態路由。

使用net-tools:

sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
sudo route del -net 172.16.32.0/24

使用iproute2:

sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
sudo ip route del 172.16.32.0/24

查看套接字統計信息

這裏的命令用來查看套接字統計信息(好比活躍或監聽狀態的TCP/UDP套接字)。

使用net-tools:

netstat
netstat -l

使用iproute2:

ss
ss -l

查看ARP表

使用這些命令顯示內核的ARP表。

使用net-tools:

arp -an

使用iproute2:

ip neigh

添加或刪除靜態ARP項

按照以下操做在本地ARP表中添加或刪除一個靜態ARP項

使用net-tools:

sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
sudo arp -d 192.168.1.100

使用iproute2:

sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
sudo ip neigh del 192.168.1.100 dev eth0

添加、刪除或查看多播地址

使用下面的命令配置或查看網絡接口上的多播地址。

使用net-tools:

sudo ipmaddr add 33:44:00:00:00:01 dev eth0
sudo ipmaddr del 33:44:00:00:00:01 dev eth0
ipmaddr show dev eth0
netstat -g

使用iproute2:

sudo ip maddr add 33:44:00:00:00:01 dev eth0
sudo ip maddr del 33:44:00:00:00:01 dev eth0
ip maddr list dev eth0

計劃任務(crontab)

在咱們使用CentOS系統的過程當中,咱們會發現系統經常會主動的執行一些任務,這些任務究竟是誰在設置工做的呢?若是你想要讓本身設計的備份程序能夠自動地在系統下面執行,而不須要手動地啓動它,又該如何設置?這些計劃型的任務可能又分爲【單一】任務與【循環】任務,在系統內有時哪些服務在負責?還有還有,若是你想要每一年在老婆的生日前一天就發出一封郵件提醒本身不要忘記,能夠辦獲得嘛?嘿嘿!這些種種要如何處理,接來下咱們就來了解了解。

什麼是計劃任務

每一個人或多或少都有一些約會或是工做,有的工做是例行性的,例如每一年一次的加薪、每月一次的工做報告、每週一次的午飯彙報、天天須要的打卡等。有的工做則是臨時發生的,例如恰好總公司有高管來訪,須要你準備演講器材等。在生活上也有此類例行或臨時發生的事,例如每一年愛人的生日、天天起牀的時間等,要有突發性的電子產品大降價(真但願每天都有)等。

那麼Linux的例行性工做是如何實現的呢?我們的Linux計劃任務是經過crontabat這兩個東西完成的。這兩個工具備啥異同?就讓咱們先來看看。

Linux計劃任務的種類: at、cron

從上面的說明當中,咱們能夠很清楚地發現兩種計劃任務的方式。

  • 一種是例行性的,就是每隔必定的週期要來辦的事項。
  • 一種是突發性的,就是此次作完之後就沒有的那一種。

那麼在Linux下面如何處理這兩個功能?那就得使用atcrontab這兩個好東西。

  • at: at是個能夠支持處理僅執行一次就結束的命令,不過要執行at時,必需要有atd這個服務的支持才行。在某些新版的Linux發行版中,atd可能默認並無啓動,那麼at這個命令就會失效,不過咱們的CentOS默認是啓動的。
  • crontab: crontab這個命令所設置的任務將會循環地一直執行下去,可循環的時間爲分鐘、小時、每週、每個月或每一年等。crontab除了能夠使用命令執行外,亦可編輯/etc/crontab來支持,至於讓crontab能夠生效的服務則是crond。

下面咱們來談一談Linux的系統到底在作什麼事情,怎麼有若干計劃任務在執行呢?而後再回來談一談at與crontab這兩個好東西。

僅執行一次的計劃任務

首先,咱們先來談一談單一計劃任務的運行,那就是at這個命令的運行。

atd的啓動方式

要使用單一計劃任務時,咱們的Linux系統上班必需要有負責這類計劃任務的服務,那就是atd這個服務。不過並不是全部的Linux發行版都默認啓動,因此,某些時刻咱們必需要手動將它啓動才行。啓動的方法很簡單,就是這樣:

systemctl restart atd # 從新啓動atd這個服務
systemctl enable atd  # 讓這個服務開機就自動啓動
systemctl status atd  # 查看一下atd目前的狀態

at的運行方式

既然是計劃任務,那麼應該會有產生任務的方式,而且將這些任務排進計劃列表中。OK!那麼產生任務的方式是怎麼執行的呢?事實上,咱們使用at這個命令來產生所要運行的任務,並將這個任務一文本文件的方式寫入/var/spool/at/目錄內,該任務便能等待atd這個服務的使用與執行了,就這麼簡單。

不過,並非全部的人均可以執行at計劃任務。爲何?由於安全的緣由,不少主機被所謂的【劫持】後,最常發現的就是它們的系統當中多了不少的駭客(Cracker)程序,這些程序很是可能使用計劃任務來執行或蒐集系統信息,並定時地返回給駭客團體。因此,除非是你承認的帳號。不然先不要讓它們使用at目錄。那怎麼實現對at的管控呢?

我麼能夠利用/etc/at.allow/etc/at.deny這兩個文件來實現對at的使用限制。加上這兩個文件後,at的工做狀況實際上是這樣的:

  1. 先尋找/etc/at.allow這個文件,寫在這個文件中的用戶才能使用at,沒有在這個文件中的用戶則不能使用at(即便沒有寫在at.deny當中)。
  2. 若是/etc/at.allow不存在,就查找/etc/at.deny這個文件,寫在這個at.deny中的用戶則不能使用at,而沒有寫在這個at.deny文件中的用戶,就能夠使用at
  3. 若是兩個文件都不存在,那麼只有root能夠使用at這個命令。

經過這個說明,咱們知道/etc/at.allow是管理較爲嚴格的方式,而/etc/at.deny則較爲鬆散(由於帳號沒有在該文件中,就可以執行at了)。在通常的Linux發行版當中,因爲假設系統上的全部用戶都是可信任的,所以系統一般會保留一個空的/etc/at.deny文件,容許全部人使用at命令(您能夠自行檢查一下該文件)。不過,萬一你不但願某些用戶使用at的話,將那個用戶的帳號寫入/etc/at.deny便可,一個帳號寫一行。

循環執行的計劃任務

相對於at是僅執行一次的任務,循環執行的計劃任務則是由cron(crond)這個系統服務來控制的。剛剛談過Linux系統上面本來就有很是多的例行性計劃任務,所以這個系統服務默認啓動的。另外,因爲用戶本身也可能夠執行計劃任務,因此,Linux也提供用戶控制計劃任務的命令(crontab)。下面咱們分別來聊一聊。

用戶的設置

用戶想要創建循環型計劃任務時,使用的是crontab這個命令。不過,爲了不安全性的問題,與at一樣的,咱們能夠限制使用crontab的用戶帳號。能夠使用的配置文件有:

  • /etc/cron.allow
    將能夠使用crontab的帳號寫入其中,不在這個文件內的用戶則不可以使用crontab。
  • /etc/cron.deny
    將不能夠使用的crontab的帳號寫入其中,未記錄到這個文件當中的用戶,就能夠使用crontab。

與at很像。一樣的,以優先級來講,/etc/cron.allow比/etc/cron.deny要優先。而判斷上面,這兩個文件只選擇一個來限制而已。所以,建議你只要保留一個便可,省得影響本身在設置上面的判斷。通常來講,系統默認保留/etc/cron.deny,你能夠將不想讓它執行crontab的那個用戶寫入/etc/cron.deny當中,一個帳號一行。

當用戶使用crontab這個命令來創建計劃任務以後,該項任務就會被記錄到/var/spool/cron中,並且是以帳號來做爲根據判斷。舉例來講,kevin使用crontab後,它的任務會被記錄到/var/spool/cron/kevin中。但請注意,不要使用vi直接編輯該文件,由於可能因爲輸入語法錯誤,會致使沒法執行cron。另外,cron執行的每一項任務都會被記錄到/var/log/cron這個日誌文件中,因此,若是你的Linux不知道是否被植入了木馬時,也能夠查找一下/var/log/cron這個日誌文件。

好了,那麼咱們就來聊一聊crontab的語法。

crontab [-u username] [-l|-e|-r]
選項與參數:
-u : 只有root才能執行這個任務,亦即幫其餘使用者創建/刪除crontab計劃任務。
-e : 編輯crontab的任務內容
-l : 查看crontab的任務內容
-r : 刪除全部的crontab的任務內容,若僅要刪除一項,請用-e去編輯。
範例一:用kevin的身份在天天的12:00發信給本身。
crontab -e
# 此時會進入vi的編輯器界面讓您編輯任務,注意到,每項任務都是一行。
 0  12  *  *  * mail -s "at 12:00" kevin # /home/kevin/.bashrc
#分  時  日 月 周 【命令串】

默認狀況下,任何用戶只要不被列入/etc/cron.deny當中,那麼它就能夠直接執行【crontab -e】去編輯本身的例行性命令。整個過程就如同上面提到的,會進入vi的編輯器界面,而後以一個任務一行來編輯,編輯完畢以後輸入【:wq】並存儲後退出vi便可。而每項任務(每行)的格式都具備六個字段,這六個字段的意義爲:

表明意義 分鐘 小時 日期 月份 命令
數字範圍 0~59 0~23 1~31 1~12 0~7 須要執行的命令

比較有趣的是那個【周】,周的數字爲0或7時,都表明【星期天】的意思。另外,還有下面這些特殊字符:

特殊字符 表明意義
*(星號) 表明任什麼時候刻都接受的意思。舉例來講,範例一內那個日、月、周都是*,就表明着【不論何月、何日的星期幾的12:00都執行後續命令】的意思
,(逗號) 表明分隔時段的意思。舉例來講,若是要執行的任務是3:00與6:00時,就會是:
0 3,6 * * * command
時間參數仍是有五欄,不過第二欄是3,6,表明3與6都適合
-(減號) 表明一段時間範圍內,舉例來講,8點到12點之間的每小時的20分都執行一項任務:
20 8-12 * * * command
仔細看到第二欄變成8-12,表明八、九、十、十一、12都適用的意思
/n(斜線) 那個n表明數字,亦即【每隔n單位間隔】的意思,例如沒5分鐘執行一次,則:
/5 * * * * command
很簡單吧!用
/5來搭配,也能夠寫成0-59/5,相贊成思

咱們就來搭配幾個例子練習看看。

1.假如你的女友生日是5月2日,你想要在5月1日的23:59發一封信給她,這封信的內容已經寫在/home/kevin/lover.txt內了,該如何執行?

答:直接執行crontab -e以後,編輯成爲:

59 23 1 5 * mail kiki < /home/kevin/lover.txt

那樣的話,每一年kiki都會受到你的這封信。(固然,信的內容就要每一年變一變。)

2.假如每五分鐘須要執行/home/kevin/test.sh一次,又該如何?

答:一樣使用crontab -e進入編輯:

*/5 * * * * /home/kevin/test.sh

3.假如你每星期六都與朋友有約,那麼想要每一個星期五下午4:30告訴你朋友不要忘記星期六的約會,則:

答:仍是crontab -e。

30 16 * * 5 mailfriend@his.server.name < /home/kevin/friend.txt

真的很簡單吧!呵呵!那麼,該如何查詢用戶目前的crontab內容呢?咱們能夠這樣來看看:

crontab -l
# 注意,若僅要刪除一項任務的話,必須用crontab -e去編輯,若是刪除所有任務,才使用crontab -r。

看到了嗎?若是使用crontab -r,那麼再用crontab -l查看時發現【整個內容會不見了】,因此請注意,【若是隻是要刪除某個crontab的任務選項,那麼請使用crontab -e來從新編輯便可】,若是使用-r的參數,是會將全部的crontab數據內容都刪除掉的,千萬注意了。

壓縮與解壓縮

在Linux下面有至關多的壓縮命令能夠運行,這些壓縮命令可讓咱們更方便地從網絡上面下載容量較大的文件。此外,咱們知道在Linux下面,擴展名沒有什麼特殊的意義。 不過,針對這些壓縮命令所產生的壓縮文件,爲了方便記憶,仍是會有一些特殊的命名方式,就讓咱們來看看吧!

文件壓縮

什麼是文件壓縮呢?咱們稍微談一談它的原理,目前咱們使用的計算機系統中都是使用所謂的字節單位來計量。不過,事實上,計算機最小的計量單位應該是bit纔對,此外,咱們也知道 1字節=8比特(1Byte=8bit),可是若是今天咱們只是記錄一個數字,即1這個數字,它會如何記錄?假設一個字節能夠當作下面的模樣:

因爲 1Byte=8bit,因此每一個字節當中會有8個空格,而每一個空格只能夠是0、1

因爲咱們記錄的數字是1,考慮計算機所謂的二進制,如此一來,1會在最右邊佔據1個位,而其餘的7個位將會自動地被填上0.以下圖所示

你看看,其實在這樣的例子中,那7個位應該是空的纔對。不過,爲了要知足目前咱們的操做系統數據的讀寫,因此就會將該數據轉爲字節的形式來記錄。而一些聰明的計算機工程師就利用一些複雜的計算方式,將這些沒有使用到的空間【丟】出來,以讓文件佔用的空間變小,這就是壓縮的技術。
另外一種壓縮技術也頗有趣,它是將重複的數據進行統計記錄。舉例來講,若是你的數據爲【111······】共有100個1時,那麼壓縮技術會記錄爲【100個1】而不是真的有100個1的位存在。這樣也可以精簡文件記錄的容量,很是有趣吧!
簡單地說,你能夠將它想成,其實文件裏面有至關多的空間存在,並非徹底填滿的,而壓縮技術就是將這些空間填滿,以讓整個文件佔用的容量降低。不過,這些壓縮過的文件並沒有法直接被咱們的操做系統所使用,所以,若要使用這些被壓縮過的文件數據,則必須將它還原回未壓縮前的模樣,那就是所謂的解壓縮。而至於壓縮後與壓縮的文件所佔用的磁盤空間大小,就能夠被稱爲是壓縮比
這個壓縮與解壓縮的操做有什麼好處呢?
1.最大的好處就是壓縮過的文件容量變小了,因此你的硬盤無形之中就能夠容納更多的數據。
2.此外,在一些網絡數據的傳輸中,也會因爲數據量的下降,好讓網絡帶寬能夠用來作更多的工做,而不是老卡在一些大型文件傳輸上面。

Linux系統常見壓縮命令

在Linux的環境中,壓縮文件的擴展名大可能是: *.tar、*.tar.gz、*.gz、*.Z、*.bz二、*.xz。爲何會有這樣的擴展名?不是說Linux的擴展名沒有什麼做用嗎?
這是由於Linux支持的壓縮命令很是多,且不一樣的命令所用的壓縮技術並不相同,固然彼此之間可能就沒法互通/解壓縮文件。因此,當你下載到某個文件時,天然就須要知道該文件是由哪一種壓縮命令所製做出來的,好用來對照對照着解壓縮,也就是說,雖然Linux文件的屬性基本上是與文件名沒有絕對關係的,可是爲了幫助咱們人類小小的腦殼,因此適當的擴展名仍是必要的,下面咱們就列出幾個常見的壓縮文件擴展名:

*.gz         gzip程序壓縮的文件
*.bz2        bzip2程序壓縮的文件
*.xz         xz程序壓縮的文件
*.zip        zip程序壓縮的文件
*.Z          compress程序壓縮的文件
*.tar        tar程序打包的文件,並無壓縮過
*.tar.gz     tar程序打包的文件,而且通過gzip的壓縮
*.tar.bz2    tar程序打包的文件,而且通過bzip2的壓縮
*.tar.xz     tar程序打包的文件,而且通過xz的壓縮

Linux常見的壓縮命令就是gzip、bzip2以及最新的xz,至於compress已經不流行了。爲了支持windows常見的zip,其實Linux也早就有zip命令了。gzip是由GNU計劃所開發出來的壓縮命令,該命令支持已經替換了compress。後臺GNU又開發出了bzip2及xz這幾個壓縮比更好的壓縮命令。不過,這些命令一般僅能針對一個文件來壓縮與解壓縮,如此一來,每次壓縮與解壓縮都要一大堆文件,豈不煩人?此時,這個所謂的【打包軟件,tar】就顯得很重要。
這個tar能夠將不少文件打包成一個文件,甚至是目錄也能夠這麼玩。不過,單純的tar功能僅僅是打包而已,即將不少文件結合爲一個文件,事實上,它並無提供壓縮的功能,後臺,GNU計劃中,將整個tar與壓縮的功能結合在一塊兒,如此一來,提供用戶更方便且更強大的壓縮與打包功能,下面咱們就來談一談這些在Linux下面基本的壓縮命令。

gzip

gzip能夠說是應用最廣的壓縮命令了,目前gzip能夠解開compress、zip和gzip等軟件所壓縮的文件,至於gzip所創建的壓縮文件爲*.gz,讓咱們來看看這個命令的語法:

gzip [-cdtvn] 文件名
選項與參數:
-c: 將壓縮的數據輸出到屏幕上,可經過數據流重定向來處理;
-d: 解壓縮的參數;
-t: 能夠用來檢驗一個壓縮文件的一致性,看看文件有無錯誤;
-v: 能夠顯示出原文件/壓縮文件的壓縮比等信息;
-n: n爲數字的意思,表明壓縮等級,-1最快,但壓縮比最差,-9最慢,可是壓縮比最好,默認是-6

示例1:壓縮文件(gzip -v 文件名)

示例2:解壓縮文件(gzip -d 文件名)

示例3:按照指定壓縮比壓縮(gzip -9 文件名)

示例4:查看壓縮文件的內容(zcat 文件名)

示例5:壓縮爲指定文件名(gzip -c 文件名 > 指定文件名)

當你使用gzip進行壓縮時,在默認的狀態下本來的文件會被壓縮成爲.gz後綴的文件,源文件就不存在了,這點與通常習慣使用Windows作壓縮的朋友所熟悉的狀況不一樣,要注意。cat/more/less能夠使用不一樣的方式來讀取純文本文件,那麼zcat/zmore/zless則能夠對應於cat/more/less的方式來讀取純文件文件被壓縮後的壓縮文件。

bzip2

若說gzip是爲了替換compress並提供更好的壓縮比而成立的,那麼bzip2則是爲了替換gzip並提供更加的壓縮比而來。bzip2真是很不錯的東西,這玩意的壓縮比居然比gzip還要好,至於bzip2的用法幾乎與gzip相同,看看下面的用法吧!

bzip2 [-cdkzvn] 文件名
選項與參數:
-c: 將壓縮的數據輸出到屏幕上,可經過數據流重定向來處理;
-d: 解壓縮的參數;
-k: 保留原始文件,而不是刪除原始文件;
-z: 壓縮的參數(默認值,能夠不加);
-v: 能夠顯示出原文件/壓縮文件的壓縮比等信息;
-n: n爲數字的意思,表明壓縮等級,-1最快,但壓縮比最差,-9最慢,可是壓縮比最好,默認是-6

示例:

bzip2 -v 待壓縮文件名
bzip2 -d 壓縮後的文件名
bzip2 -9 -c 待壓縮的文件名 > 自定義壓縮文件名

xz

雖然bzip2已經具備很棒的壓縮比,不過顯然某些自由軟件開發者還不知足,所以後來還推出了xz這個壓縮比更高的軟件。這個軟件的用法也跟gzip/bzip2幾乎如出一轍,那咱們就來看一看。

xz [-cdtlkn] 文件名
選項與參數:
-c: 將壓縮的數據輸出到屏幕上,可經過數據流重定向來處理;
-d: 解壓縮的參數;
-k: 保留原始文件,而不是刪除原始文件;
-l: 列出壓縮文件的相關信息;
-t: 測試壓縮文件的完整性,看看有沒有錯誤;
-z: 壓縮的參數(默認值,能夠不加);
-n: n爲數字的意思,表明壓縮等級,-1最快,但壓縮比最差,-9最慢,可是壓縮比最好,默認是-6

示例:

xz -v 待壓縮的文件名
xz -l 壓縮後的文件名
xz -d 壓縮後的文件名
xz -k 待壓縮的文件名

打包命令

前面談到的命令大多僅能針對單一文件來進行壓縮,雖然gzip、bzip二、xz也可以針對目錄來進行壓縮,不過,這幾個命令對目錄的壓縮指的是將目錄內的全部文件【分別】進行壓縮的操做。而不像在Windows的系統,能夠使用相似WinRAR這一類的壓縮軟件來將好多數據包成一個文件的樣式。
這種將多個文件或目錄包成一個大文件的命令功能,咱們能夠稱它是一種打包命令,那Linux有沒有這種打包命令?有,那就是大名鼎鼎的tar,tar能夠將多個目錄或文件打包成一個大文件,同時還能夠經過gzip、bzip二、xz的支持,將該文件同時進行壓縮。更有趣的是,因爲tar的使用太普遍了,目前Windows的WinRAR也支持.tar.gz文件名的解壓縮。

tar

tar的選項與參數特別多,咱們只講幾個經常使用的選項,更多選項您能夠自行man tar查詢。

tar [-z|-j|-J] [cv] [-f 待創建的新文件名] filename... <== 打包與壓縮。
tar [-z|-j|-J] [cv] [-f 既有的tar文件名]  <== 查看文件名
tar [-z|-j|-J] [xv] [-f 既有的tar文件名]  <== 解壓縮
選項與參數:
-c: 創建打包文件,可搭配-v來查看過程當中被打包的文件名(filename);
-t: 查看打包文件的內容含有那些文件名,重點在查看【文件名】;
-x: 解包或解壓縮功能,能夠搭配-C(大寫)在特定目錄解壓,特別留意的是,-c、-t、-x不可同時出如今一串命令行中;
-z: 經過gzip的支持進行壓縮/解壓縮: 此時文件名最好爲*.tar.gz;
-j: 經過bzip2的支持進行壓縮/解壓縮:此時文件名最好爲*.tar.bz2;
-J: 經過xz的支持進行壓縮/解壓縮: 此時文件名最好爲 *.tar.xz,特別留意,-z、-j、-J不能夠同時出如今一串命令行中;
-v: 在壓縮/解壓縮的過程當中,將正在處理的文件名顯示出來;
-f filename: -f後面要馬上接要被處理的文件名,建議-f單獨寫一個選項(比較不會忘記)。
-C 目錄: 這個選項用在解壓縮,若要在特定目錄解壓縮,能夠使用這個選項
-p(小寫): 保留備份數據的本來權限與屬性,經常使用於備份(-c)重要的配置文件;
-P(大寫): 保留絕對路徑,亦即容許備份數據中含有根目錄存在之意

其實最簡單的使用tar就只要記住下面的命令便可:

  • 壓縮: tar -zcv -f filename.tar.gz 要被壓縮的文件或目錄名稱;
  • 查詢: tar -ztv -f filename.tar.gz
  • 解壓縮: tar -zxv -f filename.tar.gz -C 欲解壓縮的目錄

示例:

tar -zcvf 文件名.tar.gz 文件名(目錄)

tar -ztvf 文件名.tar.gz

tar -zxvf 文件名.tar.gz

源代碼與Tarball

本文主要是爲了讓你瞭解如何將開發源代碼的程序設計、加入庫的原理、經過編譯而成爲能夠執行的二進制程序,最後該執行文件可被咱們使用的一連串過程。

  • 開放源代碼:就是程序代碼,寫給人類看的程序語言,但機器並不認識,因此沒法執行;
  • 編譯器: 將程序轉譯成爲機器看得懂的語言,就相似翻譯者的角色;
  • 可執行文件: 通過編譯器變成的二進制程序,機器看得懂因此能夠執行。

什麼是make與configure

事實上,使用相似 gcc的編譯器來進行編譯的過程並不簡單,由於一個軟件並不會僅有一個程序文件,而是有一堆程序代碼文件。因此除了每一個主程序與子程序均須要寫上一條編譯過程的命令外,還須要寫上最終的連接程序。程序代碼短的時候還好,若是是相似WWW服務器軟件(例如Apache),或是相似內核的源代碼,動輒數百MB的數據量,編譯命令會寫到瘋掉,這個時候,咱們就能夠使用make這個命令的相關功能來進行編譯過程的簡化。
當執行make時,make會在當前的目錄查找Makefile(or makefile)這個文本文件,而Makefile裏面則記錄了源代碼如何編譯的詳細信息。make會自動地判別源代碼是否通過變更了,而自動更新執行文件,是軟件工程師至關好用的一個輔助工具。

什麼是Tarball的軟件

所謂的Tarball文件,其實就是將軟件的全部源代碼文件先以tar打包,而後再以壓縮技術來壓縮,一般最多見的就是以gzip來壓縮。由於利用了tar與gzip的功能,因此Tarball文件通常的擴展名就會寫成*.tar.gz或是簡寫爲*.tgz,不過,近來因爲bzip2與xz的壓縮率較佳,因此Tarball漸漸地以bzip2及xz的壓縮技術來替換gzip,所以文件名也會變成*.tar.bz二、*.tar.xz之類的。因此說Tarball是一個軟件包,你將它解壓縮以後,裏面的文件一般就會有:

  • 源代碼文件;
  • 檢測程序文件(多是configure或config等文件);
  • 本軟件的簡易說明與安裝說明(INSTALL或README)。

其中最重要的是那個 INSTALL 或是 README 這兩個文件,一般你只要可以參考這兩個文件,Tarball軟件的安裝是很簡單的。

Tarball安裝的基本步驟

以Tarball方式發佈的軟件是須要從新編譯可執行的二進制程序。而Tarball是以tar這個命令來打包與壓縮的文件,因此,固然就須要先將Tarball解壓縮,而後到源代碼所在的目錄下進行makefile的創建,再以make來進行編譯與安裝的操做。因此整個安裝的基礎操做大可能是這樣的:

  1. 獲取原始文件:將tarball文件在/usr/local/src目錄下解壓縮;
  2. 獲取步驟流程:進入新創建的目錄下面,去查看INSTALL與README等相關文件內容(很重要的步驟);
  3. 依賴屬性軟件安裝:根據INSTALL/README的內容查看並安裝好一些依賴的軟件(非必要);
  4. 創建makefile:以自動檢測程序(configure或config)檢測操做環境,並創建Makefile這個文件;
  5. 編譯:用make這個程序,並使用該目錄下的Makefile做爲它的參數配置文件,來進行make(編譯或其它)的操做;
  6. 安裝:以make這個程序,並以Makefile這個參數配置文件,根據install這個目錄(target)的指定來安裝到正確的路徑。

注意到上面的第二個步驟,一般每一個軟件在發佈的時候,都會附上名爲INSTALL或是README的說明文件,這些說明文件請【確實詳細地】閱讀過一遍,一般這些文件會記錄這個軟件的安裝要求、軟件的工做項目與軟件的安裝參數設置及技巧等,只要仔細讀完這些文件,基本上,要安裝好Tarball的文件,都不會有什麼大問題。

至於makefile在製做出來以後,裏面會有至關多的目標(target),最多見的就是install與clean,一般【make clean】表明着將目標文件清除,【make】則是將源代碼進行進行編譯而已。注意,編譯完成的可執行文件與相關的配置文件還在源代碼所在的目錄當中。所以,最後要進行【make install】來將編譯完成的全部東西都安裝到正確的路徑中,這樣就能夠使用該軟件。
ok,咱們下面大概提一下大部分的Tarball軟件安裝的命令執行方式:

  1. ./configure
    這個步驟就是創建Makefile這個文件。一般程序開發者會寫一個腳原本檢查你的Linux系統、相關的軟件屬性等,這個步驟至關的重要,由於將來你的安裝信息都是在這一步驟內完成的。另外,這個步驟的相關信息應該要參考一下該目錄下的README或INSTALL相關的文件。
  2. make clean
    make會讀取Makefile中關於clean的工做。這個步驟不必定會有,可是但願執行一下,由於它能夠移除目標文件。由於誰也不肯定源代碼裏面到底有沒有包含上次編譯過的目標文件(*.o)存在,因此固然仍是清楚一下比較穩當,至少等一下新編譯出來的執行文件咱們能夠肯定是本身的機器所編譯完成的嘛!
  3. make
    make會根據Makefile當中的默認設置進行編譯的操做。編譯的操做主要是使用gcc來將源代碼編譯成爲能夠被執行的目標文件,可是這些目標文件一般還須要連接一些函數庫之類後,才能產生一個完整的執行文件。使用make就是要將源代碼編譯成爲能夠被執行的文件,而這個可執行文件會放置在目前所在的目錄之下,還沒有被安裝到預約安裝的目錄中。
  4. make install
    一般這就是最後的安裝步驟了,make會根據Makefile這個文件裏面關於install的選項,將上一個步驟所編譯完成的內容安裝到預約的目錄中,從而完成安裝。

請注意,上面的步驟是一步一步來進行的,而其中只要一個步驟沒法成功,那麼後續的步驟就徹底沒有辦法進行,所以,要肯定每一個步驟都是成功的才能夠。舉個例子來講,萬一今天你在./configure就不成功了,那麼就表示Makefile沒法被創建起來,要知道,後面的步驟都是根據Makefile來進行的,既然沒法創建Makefile,後的步驟固然沒法成功。

另外,若是在make沒法成功的話,那就表示源文件沒法被編譯成可執行文件,那麼make install主要是將編譯完成的文件放置到文件系統中,既然都沒有可用的執行文件了,怎麼進行安裝?因此,要每個步驟都正確無誤才能往下繼續作。此外,若是安裝成功,而且是安裝在獨立的一個目錄中,例如在/usr/local/packages這個目錄中,那麼你就必須手動將這個軟件的man page寫入到/etc/man_db.conf中。

Tarball安裝建議

爲何Tarball要在/usr/local/src裏面解壓縮?,基本上,在默認的狀況下,本來的Linux發行版發佈安裝的軟件大可能是在/usr裏面,而用戶自行安裝的軟件則建議放置在/usr/local裏面,這是考慮到管理用戶所安裝軟件的便利性。

爲何?咱們知道幾乎每一個軟件都會提供聯機幫助的服務,那就是info與man的功能。在默認的狀況下,man會去查找/usr/local/man裏面的說明文件,所以,若是咱們將軟件安裝在/usr/local下面的話,那麼天然安裝完成以後,該軟件的說明文件就能夠被找到了。因此,一般咱們會建議你們將本身安裝的軟件放置在/usr/local下,至於源代碼(Tarball)則建議防止在/usr/local/src(src爲source的縮寫)下面。

可是,若是將軟件直接安裝在/usr/local下,因爲/usr/local本來就默認就有/etc、/bin、/lib、/man,因此安裝其它軟件產生的一些文件也會在上述幾個目錄裏面,所以,若是你都安裝在這個目錄下的話,那麼將來再想要升級或刪除的時候,就會比較難以查找文件的來源。因此建議若是你的軟件名是software,建議安裝在/usr/local/softwsare目錄下,這樣單一軟件的文件都在同一個目錄下,那麼刪除該軟件就簡單的多了,只要將該目錄刪除便可視爲該軟件已經被刪除

因爲Tarball在升級與安裝上面具備這些特點,亦即Tarball在反安裝上面具備比較高的難度(若是你沒有好好規劃的話),因此,爲了方便Tarball的管理,一般鳥哥會這樣建議用戶:

  1. 最好將Tarball的原始數據解壓到/usr/local/src當中;
  2. 安裝時,最好安裝到/usr/local這個默認路徑下;
  3. 考慮到將來的反安裝步驟,最好能夠將每一個軟件單獨安裝在/usr/local下面;
  4. 爲安裝到單獨目錄的軟件的man page加入man path查找: 若是你安裝的軟件放置到/usr/local/software/,那麼在man page查找的設置中,可能就要在/etc/man_db.conf內的40~50行左右處,寫入以下的一行: MANPATH_MAP /usr/local/software/bin /usr/local/software/man 這樣才能夠使用man來查詢該軟件的在線文件。
相關文章
相關標籤/搜索