天天看點

Linux系統管理技巧(下)

六.Linux系統服務管理

  1. chkconfig服務管理工具

Linux系統所有的預設服務都可以通過檢視/etc/init.d/目 錄得到。

系統的預設服務都可以通過這樣的指令實作:service服務名start|stop|restart。這裡的服務名就是/etc/init.d/目錄下的這些檔案了。啟動crond除了可以使用指令service crond start外,還可以使用指令/etc/init.d/crond starto 我們可以使用指令chkconfig -list列出所有的服務及其每個級别的開啟狀态

0作為shutdown動作,1作為重新開機至單使用者模式,6為重新開機。在一般的Linux系統實作中,都使用了2、3、4、5幾個級别。在CentOS系統中,2表示無NFS支援的多使用者模式,3表示完全多使用者模式(也是最常用的級别),4保留給使用者自定義,5表示圖形登入方式

更改某級别下的開啟狀态:

用--level指定級别,後面是服務名。然後是off或者on。選項--level後面還可以指定多個級别

還可以省略級别

Ckhconfig還有一個功能,就是可以把某個服務加入系統服務或者删除,即可以使用“chkconfig --add服務名"或者“chkconfig --del服務名“這樣的形式,并且可以在chkconfig --list的結果中査找到。

2.Systemd服務管理

systemd支援多個服務并發啟動,而SysV隻能一個一個地啟動。系統所有的服務如下:

這些服務對應的啟動腳本檔案在哪:

 等

一些常用指令:

systemctl enable crond.service // 讓某個服務開機啟動(.service可以省略)

#systemctl disable crond.service // 不讓開機啟動

#systemctl status crond.service // 檢視服務狀态

#systemctl start crond.service // 啟動某個服務

#systemctl stop crond.service // 停止某個服務

#systemctl restart crond.service // 重新開機某個服務

#systemctl is-enabled crond //檢視某個服務是否開機啟動

unit

剛剛執行指令ls /usr/lib/systemd/system的時候,下面有很多檔案,其實可以把它們歸類為下面這幾大類:

service:系統服務  

target:多個unit組成的組  

device:硬體裝置  

mount:檔案系統挂載點

automount:自動挂載點

path:檔案或路徑

scope:不是由systemd啟動的外部程序  

slice:程序組  

snapshot: systemd快照  

socket:程序間通信的套接字  

swap: swap檔案  

timer:定時器

target

target類似于CentOS 6裡面的啟動級别。但target支援多個target同時啟動。target其實是多個unit的組合,系統啟動就是啟動多個unit,為了管理友善,就使用target來管理這些unit。檢視目前系統的所有target:

檢視一個target包含有的所有unit

其餘關于target的指令:

multi-user.target等同于CentOS6的運作級别3,其實還有其他幾個target對應0〜6運作 級别,如下表所示:

SyaV運作級别            systemd target                 備注

0                        poweroff.target                關閉系統

1                        rescure.target                 單使用者系統

2                        multiuser.target                使用者自定義級别,通常識别為級别3

3                        multiuser.target                多使用者,無圖形

4                        multiuser.target                使用者自定義級别,通常識别為級别3

5                        graphical.target                多使用者,有圖形,比級别3就多了一個圖形

6                        reboot.target                  重新開機

service. unit以及target之間的聯系:

(1)一個service屬于一種unit;

(2) 多個unit一起組成了一個target;

(3)一個target裡面包含了多個service,你可以檢視檔案/usr/1ib/systemd/system/sshd.service裡面 [install]部分的内容,它就定義了該service屬于哪一個targeto

七.Linux下的資料備份工具rsync

remote sync (遠端同步)。rsync不僅可以遠端同步資料(類似于scp ),而且可以本地同步資料(類似于cp),但不同于cp或scp的一點是,它不會覆寫以前的資料(如果資料已經存在),而是先判斷已經存在的資料和新資料的差異,隻有資料不同時才會把不相同的部分覆寫。如果Linux沒有rsync指令,使用指令# yum install -y rsync安裝。

1.rsync的指令模式

rsync [OPTION]… SRC DEST

rsync [OPTION]… SRC [USER@]HOST:DEST

rsync [OPTION]… [USER@]HOST:SRC DEST

rsync[OPTION]… [USER@]HOST::SRC DEST

rsync [OPTION]… SRC [USER@]HOST::DEST

在前面舉的兩個例子中,第一個例子為第一種格式,第二個例子為第二種格式。但不同的是,這裡并沒有加user@host,如果不加預設指的是root。第三種格式是從遠端目錄同步資料到本地。第四種和第五種格式使用了兩個冒号,這種格式和其他格式的驗證方式不同。

2.rsync 常用選項 

rsync指令各選項的含義如下

-a:這是歸檔模式,表示以遞歸方式傳輸檔案,并保持所有屬性,它等同于-rlptgoD。 -a選項後面可以跟一個–no-OPTION,表示關閉-rlptgoD中的某一個,比如-a–no-l等同于-rptgoD。  

-r:表示以遞歸模式處理子目錄。它主要是針對目錄來說的,如果單獨傳一個檔案不需要加 -r選項,但是傳輸目錄時必須加。  

-V:表示列印一些資訊,比如檔案清單、檔案數量等。  

-l:表示保留軟連接配接。  

-L:表示像對待正常檔案一樣處理軟連接配接。如果是SRC中有軟連接配接檔案,則加上該選項後, 将會把軟連接配接指向的目标檔案複制到DST。  

-p:表示保持檔案權限。  

-o:表示保持檔案屬主資訊。  

-g:表示保持檔案屬組資訊。  

-D:表示保持裝置檔案資訊。  

-t:表示保持檔案時間資訊。  

--delete:表示删除DST中SRC沒有的檔案。  

--exclude=PATTERN:表示指定排除不需要傳輸的檔案,等号後面跟檔案名,可以是萬用字元模式(*.txt)。  

--progress:表示在同步的過程中可以看到同步的過程狀态,比如統計要同步的檔案數量、 同步的檔案傳輸速度等。

-u:表示把DST中比SRC還新的檔案排除掉,不會覆寫。

-z:加上該選項,将會在傳輸過程中壓縮

(1)建立目錄和檔案

(2)使用-a選項

本來想把testl目錄直接複制成test2目錄,可結果rsync卻建立了test2目錄, 然後把testl放到test2當中。為了避免這樣的情況發生,可以這樣做:

使用rsync備份目錄時,要養成加斜杠的習慣。前面已經講了-a選項等同于-rlptgoD,且-a還可以和-no-OPTIN一并使用。下面再來看看-l選項的作用, 如下所示:

(3)使用-L選項

上例加上-L選項就可以把SRC中軟連接配接的目标檔案複制到DST

(4)使用-u選項

首先檢視一下test1/1和test2/1的建立時間(肯定是一樣的),然後使用touch修改一下test2/1的建立 時間(此時test2/1要比test1/1的建立時間晚一些)。如果不加-u選項,會把test2/1的建立時間變成和test1/1 一樣

修改test2/l的建立時間,然後不加-u同步:

加上-u選項:

(5)使用--delete選項

删除tcstU123.txt

把testl/目錄同步到test2/S錄下

test2/目錄并沒有删除123.txt。下面加上一delete選項

test2/目錄下的123.txt也被删除了。 另外還有一種情況,就是如果在DST中增加檔案了,而SRC當中沒有這些檔案,同步時加上-delete選項後同樣會删除新增的檔案

(6)使用--exclude選項

還可以與比對字元*一起使用:

-progress選項,它主要是用來觀察rsync同步過程狀态的。

3.rsync應用執行個體

1)通過ssh的方式

在之前介紹的rsync的5種指令格式中,第二種和第三種(一個冒号)就屬于通過ssh的方式備份資料。這種方式其實就是讓使用者登入到遠端機器,然後執行rsync的任務

這種方式就是前面介紹的第二種方式了,是通過ssh複制的資料,需要輸入192.168.188.129那台機 器root賬戶的密碼。 當然也可以使用第三種方式複制

 rsync -avL 192.168.100.2:/tmp/test2/ ./test3/

2)通過背景服務的方式

這種方式可以了解為:在遠端主機上建立一個rsync的伺服器,在伺服器上配置好rsync的各種應用,然後将本機作為rsync的一個用戶端連接配接遠端的rsync伺服器。下面介紹一下如何配置一台 rsync伺服器。 在128主機上建立并配置rsync的配置檔案/etc/rsyncd.conf,如下所示(請把你的rsyncd.conf編輯成如下内容):

# vim /etc/rsyncd.conf

 port =873

       log file=/var/log/rsyncd.pid

       pid file =/var/run/rsyncd.pid

        address=192.168.188.128

        [test]

        path=/root/rsync

        use chroot=true

        max connections=4

        read only=no

        list=true

        uid=root

        gid=root

        auth users=test

        secrets file=/etc/rsyncd.passwd

        hosts allow=192.168.100.2

其中配置檔案分為兩部分:全局配置部分和子產品配置部分。

全局部分就是幾個參數,比如我的 rsyncd.conf中的port、log file> pid file和address都屬于全局配置;而[test]以下部分就是子產品配置部分了。一個配置檔案中可以有多個子產品,子產品名可自定義,格式就像我的rsyncd.conf中的這樣。其實子產品中的一些參數(如use chroot、max connections, udi、gid、auth users、secrets file以及 hosts allow都可以配置成全局參數。當然我并未給出所有的參數,你可以通過指令man rsyncd.conf 獲得更多資訊。

下面就簡單解釋一下這些參數的作用。  

 port:指定在哪個端口啟動rsyncd服務,預設是873端口。  

log file:指定日志檔案。  

pid file:指定pid檔案,這個檔案的作用涉及服務的啟動、停止等程序管理操作。  address:指定啟動rsyncd服務的IP。假如你的機器有多個IP,就可以指定由其中一個啟動 rsyncd服務,如果不指定該參數,預設是在全部IP上啟動。

[]:指定子產品名,裡面内容自定義。  

path:指定資料存放的路徑。  

use chroot true (false:表示在傳輸檔案前,首先chroot到path參數所指定的目錄下。這樣做的原因是實作額外的安全防護,但缺點是需要roots權限,并且不能備份指向外部的符号連接配接 所指向的目錄檔案。預設情況下chroot值為true,如果你的資料當中有軟連接配接檔案,建議你設定成false。  

max connections:指定最大的連接配接數,預設是0,即沒有限制。  

read only ture|false:如果為true,則不能上傳到該子產品指定的路徑下。  

list:表示當使用者查詢該伺服器上的可用子產品時,該子產品是否被列出,設定為true則列出,設定為false則隐藏。  

uid/gid:指定傳輸檔案時以哪個使用者/組的身份傳輸。  

auth users:指定傳輸時要使用的使用者名。  

secrets file:指定密碼檔案,該參數連同上面的參數如果不指定,則不使用密碼驗證。注意,該密碼檔案的權限一定要是600。  

hosts allow:表示被允許連接配接該子產品的主機,可以是IP或者網段,如果是多個,中間用空格 隔開。 編輯secrets file并儲存後要賦予600權限,如果權限不對,則不能完成同步,如下所示:

編輯secrets file并儲存後要賦予600權限,如果權限不對,則不能完成同步,如下所示:#cat /etc/rsyncd.passwd

test:test123

 #chmod 600 /etc/rsyncd.passwd

啟動rsyncd服務,如下所示: #rsync --daemon --config=/etc/rsyncd.conf 啟動後可以檢視一下日志,并檢視端口是否啟動,如下所示:

#cat /var/log/rsync.log

2020/04/13 08:54:13 [3070] rsyncd version 3.0.9 starting, listening on port 873 #netstat -Inp |grep rsync

tcp 0 0 192.168.188.128:873 0.0.0.0:* LISTEN 3070/rsync

如果想開機啟動rsyncd服務,請把/usr/bin/rsync --daemon --confg=/etc/rsyncd.conf寫入 /etc/rc.d/rc.local 檔案。 為了不影響實驗過程,還需要把兩台機器的firewalld服務關閉,并設定為不開機啟動,操作過程如下所示:

#systemctl stop firewalld ; systemctl disable firewalld 〃兩台機器都執行

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallDl.service.

Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

#rsync -avL [email protected]:: test/testl/ /tmp/test5/ 〃129上執行

Password:

receiving incremental file list

created directory /tmp/test5

./

1

1.txt

2

2.txt

3

4

sent 171 bytes received 391 bytes 26.14 bytes/sec

total size is 0 speedup is 0.

剛剛提到了選項use chroot,預設為trueo首先在主機128的/root/rsync/testl/目錄下建立一個軟連接配接檔案,如下所示:

#ln -s /etc/passwd /root/rsync/test1/test.txt

#ls -1 /root/rsync/testl/test.txt

lrwxrwxrwx 1 root root 11 3月 6 07:47 /root/rsync/testl/test.txt -> /etc/passwd

然後再到主機129上執行同步,如下所示:

# rsync -avL [email protected]::test/test1/ /tmp/test6/

Password:

receiving incremental file list

symlink has no referent: "/test1/test.txt" (in test)

created directory /tmp/test6

./

1

1.txt

2

2.txt

3

4

sent 171 bytes received 450 bytes 177.43 bytes/sec

total size is 0 speedup is 0.00

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518)

[generator=3.0.9]

從上例可以看岀,如果設定use chroot為true,則同步軟連接配接檔案會有問題。下面把主機128 的rsync配置檔案修改一下,把true改為false,如下所示:

#sed -i 's/use chroot=true/use

chroot=false/' /etc/rsyncd.conf

#grep ‘use chroot’ /etc/rsyncd.conf use chroot=false

然後再到主機129上再次執行同步:

#rsync -avL [email protected]::test/testl/ /tmp/test7/

Password:

receiving incremental file list created directory /tmp/test7

./

1

1.txt

2

2.txt

3

4

sent 190 bytes received 2812 bytes 461.85 bytes/sec

total size is 2361 speedup is 0.79

(1)指定密碼檔案

在用戶端(即主機129)上編輯一個密碼檔案,在同步時指定密碼檔案,就可以省去輸入密碼的步驟:

(2)在rsync服務端不指定使用者

在服務端(即主機128)上修改配置檔案rsyncd.conf,删除關于認證賬戶的配置項(auth user和 secrets file這兩行),如下所示:

#sed -i 's/auth users/#auth users/;s/secrets file/#secrets file/' /etc/rsyncd.conf

上例是在auth users和secrets file這兩行的最前面加一個#,這表示将這兩行作為注釋,使其失去意義。在前面未曾講過sed的這種用法,它是用分号把兩個替換的子指令塊替換了。 然後我們再到用戶端主機129上進行測試,如下所示:

rsync -avL [email protected]::test/testl/ /tmp/test9/

八.Linux系統日志

日志記錄了系統每天發生的各種各樣的事情,比如監測系統狀況、排查系統故障等。你可以通過日志來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕迹。日志的主要功能是審計和監測,還可以實時地監測系統狀态,監測和追蹤侵入者等。  

  1. /var/log/messages

常査看的日志檔案為/var/log/messages,它是核心系統日志檔案,包含了系統啟動時的引導消息,以及系統運作時的其他狀态消息。I/O錯誤、網絡錯誤和其他系統錯誤都會記錄到這個檔案中。 其他資訊,比如某個人的身份切換為root,以及使用者自定義安裝的軟體(Apache )的日志也會在這裡列出。 通常情況下,/var/log/messages是做故障診斷時首先要檢視的檔案。系統有一個日志輪詢的機制,每星期切換一個日志,切換後的日志名字類似于messages-20200413,會存放在/var/log/目錄下面,連同messages一共有5個這樣的日志檔案。這裡的20200413就是日期,它表示日志切割的年月日。在CentOS 5裡,這個字尾并不是日期,而是數字1、2、3或4。這是通過logrotate工具的控制來實作的,它的配置檔案是/etc/logrotate.conf(如果沒有特殊需求,請不要修改這個配置檔案)。

2.dmesg

除了關注/var/log/messages外,你還應該多關注一下dmesg這個指令,它可以顯示系統的啟動資訊。 如果你的某個硬體有問題(比如網卡),用這個指令也是可以看到的

3.安全日志

last指令用來檢視登入Linux的曆史資訊

從左至右依次為賬戶名稱、登入終端、登入用戶端IP、登入日期及時長。顯示www.baidu.com的話,是因為之前設定過hosts檔案。last指令輸出的資訊實際上是讀取了二進 制日志檔案/var/log/wtmp,隻是這個檔案不能直接使用cat、Vim、head、tail等工具査看。 另外/var/log/secure也是和登入資訊有關的日志檔案。該日志檔案記錄驗證和授權等方面的資訊, 比如ssh登入系統成功或者失敗時,相關的資訊都會記錄在這個日志裡。

九.Xargs與exec

xargs和exec可以實作相同的功能,exec主要是和find一起配合使用,而xargs比exec的用處更多。  

  1. xargs應用

上例表示把管道符前面的輸出作為xargs後面的指令的輸入。它的好處在于可以把原本兩步或者多步才能完成的任務僅用一步完成。xargs常常和find指令一起使用,比如查找目前目錄建立時間大于 10天的檔案,然後再删除,如下所示: # find . -mtime +10 |xargs rm  

xargs後面的rm也可以加選項,當為目錄時,就需要加-r選項了。xargs 還有一個神奇的功能,比如我現在要查找目前目錄下所有字尾為.txt的檔案,然後把這些檔案變 成,txt_bako正常情況下必須寫腳本才能實作,但是使用xargs就能一步完成,如下所示:

xargs -nl -i{}類似于for循環,-M表示逐個對象進行處理,-i{}表示用。取代前面的對象,mv {} {}_bak相當于mv l.txt l.txt_bak

2.Exec應用

使用find指令時,經常使用-exec選項,它可以達到和xargs同樣的效果。比如查找目前目錄建立時間大于10天的檔案并删除,如下所示: #find . -mtime +10 -exec rm -rf {} ; 這個指令中也是用{}替代前面find出來的檔案。後面的作為;的轉義符,否則shell會把分号作為該行指令的結尾。 -exec同樣可以實作上面批量更改檔案名的需求

十.Screen工具介紹

有時我們要執行一個指令或者腳本,需要幾小時甚至幾天,在這個過程中,如果中途斷網或出現其他意外情況怎麼辦?當然,你可以把指令或者腳本放到背景運作,不過也不保險。下面就介紹兩種方法來避免這類狀況發生。

1.使用 nohup

首先寫一個sleep.sh腳本,然後把它放到背景執行,如下所示:

# cat /usr/local/sbin/sleep.sh  

#! /bin/bash  

sleep 1000

 nohup sh /usr/local/sbin/sleep.sh &

 [1] 4271

上例中,直接在sleep.sh後面加&雖然可以在背景運作,但是當退出該終端時,這個腳本很有可能也會退出。是以在前面加上nohup就沒有問題了,執行後會在目前目錄下生成一個nohup的檔案,它的 作用就是防止程序意外中斷,并且會把輸出資訊記錄到nohup檔案中。

2.screen 工具的使用

簡單來說,screen是一個可以在多個程序之間多路複用一個實體終端的視窗管理器。screen中有會話的概念,使用者可以在一個screen會話中建立多個screen視窗,在每一個screen視窗中就像操作一個真實的SSH連接配接視窗一樣。下面介紹screen的一個簡單應用。

首先打開一個會話,直接輸入screen指令,然後回車進入screen會話視窗。如果你的系統中沒有 screen指令,請用指令# yum install -y screen安裝。它的使用也很簡單,直接輸入如下指令,就可以進入一個虛拟終端:

#screen

接着檢視已經打開的screen會話,如下所示:

==然後按Ctrl+A鍵,再按d退出該screen會話(隻是退出,并沒有結束,結束screen會話要按Ctrl+D 鍵或者輸入exit )。退出後如果還想再次登入某個screen會話,可以使用指令sreen -r [screen編号], 這個編号就是上例中那個4317。==如果目前隻打開了一個screen會話,後面的編号是可以省略的。當你有某個需要長時間運作的指令,或者腳本時,就打開一個screen會話,然後運作該任務,按Ctrl+A鍵, 再按d退出會話。這樣不影響終端視窗上的任何操作