Linux之系統檢測和維護

說明:週一到週五的9AM到6PM每小時運行。

命令:*/1 * * * * date >>/home/fengfeng/crontab.log

說明:每分鐘往/home/fengfeng/crontab.log這個文件裡追加一條當前時間

十三、系統啟動流程

linux啟動時我們會看到許多啟動信息。Linux系統的啟動過程並不是大家想象中的那麼複雜,其過程可以分為5個階段:

第一步、加載內核

操作系統接管硬件以後,首先讀入 /boot 目錄下的內核文件。

Linux之系統檢測和維護

以我的電腦為例,/boot 目錄下面大概是這樣一些文件:

Linux之系統檢測和維護

第二步、啟動初始化進程

內核文件加載以後,就開始運行第一個程序 /sbin/init,它的作用是初始化系統環境。

Linux之系統檢測和維護

由於init是第一個運行的程序,它的進程編號(pid)就是1。其他所有進程都從它衍生,都是它的子進程。

第三步、確定運行級別

許多程序需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。

init進程的一大任務,就是去運行這些開機啟動的程序。但是,不同的場合需要啟動不同的程序,比如用作服務器時,需要啟動Apache,用作桌面就不需要。Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。也就是說,啟動時根據"運行級別",確定要運行哪些程序。

Linux之系統檢測和維護

運行級別0:系統停機狀態,系統默認運行級別不能設為0,否則不能正常啟動;

運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸;

運行級別2:多用戶狀態(沒有NFS);

運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制檯命令行模式;

運行級別4:系統未使用,保留;

運行級別5:X11控制檯,登陸後進入圖形GUI模式;

運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動;

init進程首先讀取文件 /etc/inittab,它是運行級別的設置文件。如果你打開它,可以看到第一行是這樣的:

id:2:initdefault:

initdefault的值是2,表明系統啟動時的運行級別為2。如果需要指定其他級別,可以手動修改這個值。

每個運行級別在/etc目錄下面,都有一個對應的子目錄,指定要加載的程序。

  /etc/rc0.d

  /etc/rc1.d

  /etc/rc2.d

  /etc/rc3.d

  /etc/rc4.d

  /etc/rc5.d

  /etc/rc6.d

上面目錄名中的"rc",表示run command(運行程序),最後的d表示directory(目錄)。

下面讓我們看看 /etc/rc2.d 目錄中到底指定了哪些程序。

$ ls /etc/rc2.d

  README

  S01motd

  S13rpcbind

  S14nfs-common

  S16binfmt-support

  S16rsyslog

  S16sudo

  S17apache2

  S18acpid

  ...

  

可以看到,除了第一個文件README以外,其他文件名都是"字母S+兩位數字+程序名"的形式。字母S表示Start,也就是啟動的意思(啟動腳本的運行參數為start),如果這個位置是字母K,就代表Kill(關閉),即如果從其他運行級別切換過來,需要關閉的程序(啟動腳本的運行參數為stop)。後面的兩位數字表示處理順序,數字越小越早處理,所以第一個啟動的程序是motd,然後是rpcbing、nfs......數字相同時,則按照程序名的字母順序啟動,所以rsyslog會先於sudo啟動。

這個目錄裡的所有文件(除了README),就是啟動時要加載的程序。

第四步、加載開機啟動程序

七種預設的"運行級別"各自有一個目錄,存放需要開機啟動的程序。不難想到,如果多個"運行級別"需要啟動同一個程序,那麼這個程序的啟動腳本,就會在每一個目錄裡都有一個拷貝。這樣會造成管理上的困擾:如果要修改啟動腳本,豈不是每個目錄都要改一遍?

Linux之系統檢測和維護

下面就是鏈接文件真正的指向。

  $ ls -l /etc/rc2.d

  

  README

  S01motd -> ../init.d/motd

  S13rpcbind -> ../init.d/rpcbind

  S14nfs-common -> ../init.d/nfs-common

  S16binfmt-support -> ../init.d/binfmt-support

  S16rsyslog -> ../init.d/rsyslog

  S16sudo -> ../init.d/sudo

  S17apache2 -> ../init.d/apache2

  S18acpid -> ../init.d/acpid

  ...

  

這樣做的另一個好處,就是如果你要手動關閉或重啟某個進程,直接到目錄 /etc/init.d 中尋找啟動腳本即可。比如,我要重啟Apache服務器,就運行下面的命令:

  $ sudo /etc/init.d/apache2 restart

  

/etc/init.d 這個目錄名最後一個字母d,是directory的意思,表示這是一個目錄,用來與程序 /etc/init 區分。

第五步、用戶登錄

開機啟動程序加載完畢以後,就要讓用戶登錄了。

Linux之系統檢測和維護

一般來說,用戶的登錄方式有三種:

  (1)命令行登錄

  (2)ssh登錄

  (3)圖形界面登錄

這三種情況,都有自己的方式對用戶進行認證。

(1)命令行登錄:init進程調用getty程序(意為get teletype),讓用戶輸入用戶名和密碼。輸入完成後,再調用login程序,核對密碼(Debian還會再多運行一個身份核對程序/etc/pam.d/login)。如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然後啟動這個shell。

(2)ssh登錄:這時系統調用sshd程序(Debian還會再運行/etc/pam.d/ssh ),取代getty和login,然後啟動shell。

(3)圖形界面登錄:init進程調用顯示管理器,Gnome圖形界面對應的顯示管理器為gdm(GNOME Display Manager),然後用戶輸入用戶名和密碼。如果密碼正確,就讀取/etc/gdm3/Xsession,啟動用戶的會話。

十四、chkconfig命令

簡單地說,比如你安裝了mysql,並且你把啟動的腳本放在了/etc/rc.d/init.d目錄下,有時候你需要開機自動啟動它,而有時候則不需要,因此,就可以使用chkconfig命令來進行控制,這個命令就相當於一個開關,不過這個開關有6個檔,表示在不同級別下的運行狀態是on還是off。

chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的運行級信息。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。

命令格式:

chkconfig [--add][--del][--list][系統服務]

chkconfig [--level ][系統服務][on/off/reset]

命令參數:

--add  增加所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啟動的敘述文件內增加相關數據。 --del  刪除所指定的系統服務,不再由chkconfig指令管理,並同時在系統啟動的敘述文件內刪除相關數據。 --level  指定讀系統服務要在哪一個執行等級中開啟或關畢。 等級0表示:表示關機 等級1表示:單用戶模式 等級2表示:無網絡連接的多用戶命令行模式 等級3表示:有網絡連接的多用戶命令行模式 等級4表示:不可用 等級5表示:帶圖形界面的多用戶模式 等級6表示:重新啟動

chkconfig --list [name]:顯示所有運行級系統服務的運行狀態信息(on或off)。如果指定了name,那麼只顯示指定的服務在不同運行級的狀態。chkconfig --add name:增加一項新的服務。chkconfig確保每個運行級有一項啟動(S)或者殺死(K)入口。如有缺少,則會從缺省的init腳本自動建立。chkconfig --del name:刪除服務,並把相關符號連接從/etc/rc[0-6].d刪除。chkconfig [--level levels] name:設置某一服務在指定的運行級是被啟動,停止還是重置。

需要說明的是,level選項可以指定要查看的運行級而不一定是當前運行級。對於每個運行級,只能有一個啟動腳本或者停止腳本。當切換運行級時,init不會重新啟動已經啟動的服務,也不會再次去停止已經停止的服務。

使用實例:

實例5:列出系統所有的服務啟動情況

命令:chkconfig --list

實例2:增加httpd服務

命令:chkconfig --add httpd

實例3:刪除httpd服務

命令:chkconfig --del httpd

實例3:關閉ntpd服務

命令:chkconfig ntpd off

實例4:設置httpd在運行級別為2、3、4、5的情況下都是on(開啟)的狀態

命令:chkconfig --level 2345 httpd on

實例6:設定mysqld在等級3和5為開機運行服務,--level 35表示操作只在等級3和5執行,on表示啟動,off表示關閉

命令:chkconfig --level 35 mysqld on

如何增加一個服務:

1. 服務腳本必須存放在/etc/ini.d/目錄下;

2. chmod a+x 腳本名(賦權限)

3. chkconfig --add servicename

在chkconfig工具服務列表中增加此服務,此時服務會被在/etc/rc.d/rcN.d中賦予K/S入口了;

4. chkconfig --level 2345 mysqld on

修改服務的默認啟動等級。

命令格式:/etc/init.d/服務名 [參數]

一般腳本里面都會有一下幾種參數:

start 開啟

stop 關閉

restart 重啟

status 狀態

使用 /etc/init.d/服務名 status 可以查看服務是否啟動

使用實例:

實例1:添加tomcat服務並使其開機自啟

準備工作:裝tomcat之前先裝jdk,準備jdk-7u80-linux-x64.rpm和apache-tomcat-7.0.78.tar.gz,上傳至linux系統內

軟件安裝與維護

1、 rpm命令

是RPM軟件包的管理工具。rpm原本是Red Hat Linux發行版專門用來管理Linux各項套件的程序,由於它遵循GPL規則且功能強大方便,因而廣受歡迎。逐漸受到其他發行版的採用。RPM套件管理方式的出現,讓Linux易於安裝,升級,間接提升了Linux的適用度。

命令格式:rpm [參數] 軟件名

命令參數:

-qa 查詢所有已安裝的軟件包

-i 安裝指定的應用程序

-e 卸載指定的應用程序

-U 升級指定的應用程序

-vh 顯示安裝進度

-f 查詢擁有指定文件的軟件包。

使用實例:

實例1:安裝jdk

命令:rpm -ivh jdk-7u80-linux-x64.rpm , 安裝的同時顯示安裝進度

綜合實例:

一、安裝jdk

rpm -ivh jdk-7u80-linux-x64.rpm

二、查找jdk的安裝目錄

find / -name java

三、配置環境變量

1、複製查詢出的jdk根目錄

/usr/java/jdk1.7.0_80

vi /etc/profile

3、在文件空白處加入並保存

export JAVA_HOME=/usr/java/jdk1.7.0_80

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

4、讓profile配置文件立即生效

source /etc/profile

四、安裝tomcat

如果下載的是解壓版的tomcat則需要解壓

1、在/usr/local/下新建一個tomcat7的目錄來存放解壓後的tomcat

mkdir /usr/local/tomcat7

2、去tomcat壓縮包存放的目錄下解壓tomcat到/usr/local/tomcat7

tar -zxvf apache-tomcat-7.0.78.tar.gz -C /usr/local/tomcat7

3、進入tomcat的bin目錄

cd /usr/local/tomcat7/apache-tomcat-7.0.78/bin/

4、執行startup.sh腳本,啟動tomcat

./startup.sh

注意:如果無法別的機器無法訪問tomcat,可能是本機防火牆攔截了,可使用以下方式關閉防火牆:

永久性生效,重啟後不會復原

開啟:chkconfig iptables on

關閉:chkconfig iptables off

即時生效,重啟後復原

開啟:service iptables start

關閉:service iptables stop

如果想讓tomcat開機自啟動,可以在/etc/rc.local文件裡最後一行加入tomcat執行啟動的腳本的命令,因為這個文件會在每次開機初始化腳本的最後執行。

vi /etc/rc.local

2、在文件最後一行加入以下命令即可

/usr/local/tomcat7/apache-tomcat-7.0.78/bin/startup.sh


分享到:


相關文章: