標籤:伺服器 二進位 作業系統 linux 程式
一、Linux的啟動過程?
-
開機自我測試 (POST):伺服器主機開機以後,將根據主板BIOS(Basic Input/Output System,基本輸出入系統 (BIOS))中的設定對CPU、記憶體、顯卡、鍵盤等裝置進行初步檢測,檢測成功後根據預設的啟動順序移交系統控制權,大多數時候會移交給本機硬碟。
-
MBR引導:當從本機硬碟中啟動系統時,首先根據硬碟第1個扇區中MBR(Master Boot Record,主引導記錄)的設定,將系統控制權傳遞給包含作業系統引導檔案的分區;或者直接根據MBR記錄中的引導資訊調用啟動菜單(如GRUB)。
-
GRUB菜單:對於Linux系統來說,GRUB算是使用最為廣泛的多系統引導器程式了。系統控制權傳遞給GRUB以後,將會顯示啟動菜單提供給使用者選擇,並根據所選項(或採用預設值)載入Linux核心檔案,然後將系統控制權轉交給核心。
-
載入Linux核心:Linux核心是一個預先編譯好的特殊二進位檔案,介於各種硬體資源與系統程式之間,負責資源分派與調度。核心接過系統控制權以後,將完全掌控整個Linux作業系統的運行過程。在RHEL6系統中,預設的核心檔案位於"/boot/vmlinuz-2.6.32-431.e16.x86_64"。
-
init進程初始化:為了完成進一步的系統引導過程,Linux核心首先將系統中的"/sbin/init"程式載入到記憶體中運行(運行中的程式稱為進程),init進程負責完成一系列的系統初始化過程,最後等待使用者進行登入。
二、linux系統監控命令,查看cpu負載記憶體等情況
top命令是Linux下常用的效能分析工具,比如cpu、記憶體的使用,能夠即時顯示系統中各個進程的資源佔用狀況,類似於Windows的工作管理員。
top顯示系統當前的進程和其他狀況,是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理目前狀態.如果在前台執行該命令,它將獨佔前台,直到使用者終止該程式為止. 比較準確的說,top命令提供了即時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的工作清單.該命令可以按CPU使用.記憶體使用量和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人定製檔案中進行設定。
top命令參數
d:指定每兩次螢幕資訊重新整理之間的時間間隔。當然使用者可以使用s互動命令來改變之。
p:通過指定監控進程ID來僅僅監控某個進程的狀態。
q:該選項將使top沒有任何延遲的進行重新整理。如果調用程式有超級使用者權限,那麼top將以儘可能高的優先順序運行。
S:指定累計模式
s:使top命令在安全模式中運行。這將去除互動命令所帶來的潛在危險。
i:使top不顯示任何閑置或者僵死進程。
c:顯示整個命令列而不只是顯示命令名
常用操作
top //每隔5秒顯式所有進程的資源佔用情況
top -d2//每隔2秒顯式所有進程的資源佔用情況
top -c//每隔5秒顯式進程的資源佔用情況,並顯示進程的命令列參數(預設只有進程名)
top -p12345 -p6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用情況
top -d2 -c -p123456//每隔2秒顯示pid是12345的進程的資源使用方式,並顯式該進程啟動的命令列參數
三、查看網路流量的命令
watch -n 1 "/sbin/ifconfig eth0 | grep bytes"
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/91/00/wKioL1jzi32AHtQ1AAA8lVPYtuc948.jpg-wh_500x0-wm_3-wmp_4-s_3332436109.jpg" title="1.jpg" alt="wKioL1jzi32AHtQ1AAA8lVPYtuc948.jpg-wh_50" />
四、docker四中網路模式
-
host模式:如果啟動容器的時候使用 host 模式,那麼這個容器將不會獲得一個獨立的 Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出自己的網卡,配置自己的 IP 等,而是使用宿主機的 IP 和連接埠。
-
container模式:這個模式指定新建立的容器和已經存在的一個容器共用一個 Network Namespace,而不是和宿主機共用。新建立的容器不會建立自己的網卡,配置自己的 IP,而是和一個指定的容器共用 IP、連接埠範圍等。同樣,兩個容器除了網路方面,其他的如檔案系統、進程列表等還是隔離的。兩個容器的進程可以通過 lo 網卡裝置通訊。
-
none模式:這個模式和前兩個不同。在這種模式下,Docker 容器擁有自己的 Network Namespace,但是,並不為 Docker容器進行任何網路設定。也就是說,這個 Docker 容器沒有網卡、IP、路由等資訊。需要我們自己為 Docker 容器添加網卡、配置 IP 等。
-
bridge模式:bridge 模式是 Docker 預設的網路設定,此模式會為每一個容器分配 Network Namespace、設定 IP 等,並將一個主機上的 Docker 容器串連到一個虛擬橋接器上。當 Docker server 啟動時,會在主機上建立一個名為 docker0 的虛擬橋接器,此主機上啟動的 Docker 容器會串連到這個虛擬橋接器上。虛擬橋接器的工作方式和物理交換器類似,這樣主機上的所有容器就通過交換器連在了一個二層網路中。接下來就要為容器分配 IP 了,Docker 會從 RFC1918 所定義的私人 IP 網段中,選擇一個和宿主機不同的IP地址和子網分配給 docker0,串連到 docker0 的容器就從這個子網中選擇一個未佔用的 IP 使用。如一般 Docker 會使用 172.17.0.0/16 這個網段,並將 172.17.0.1/16 分配給 docker0 橋接器(在主機上使用 ifconfig 命令是可以看到 docker0 的,可以認為它是橋接器的管理介面,在宿主機上作為一塊虛擬網卡使用)
docker常用命令:
1.docker version //查看docker的版本號碼,包括用戶端、服務端、依賴的Go等
2.docker info //查看系統(docker)層面資訊,包括管理的images, containers數等
3.docker search <image> //在docker index中搜尋image
4.docker pull <image> //從docker registry server 中下拉image
5.docker push <image|repository> //推送一個image或repository到registry
6.docker push<image|repository>:TAG //同上,指定tag
7.docker inspect <image|container> //查看image或container的底層資訊
8.docker images //查看本機images
9.docker images –a //列出所有的images
10.docker ps //預設顯示正在運行中的container
六、docker怎麼實現容器間的獨立
使用核心技術Namespaces
1.pid namespace:不同使用者的進程就是通過pid namespace 隔離開的,且不同 namespace中可以有相同pid。所有的LXC進程在docker中的父進程為docker進程,每個lxc進程具有不同的 namespace 。
2.net namespace:有了pid namespace, 每個 namespace 中的pid能夠相互隔離,但是網路連接埠還是共用 host 的連接埠。網路隔離是通過 net namespace 實現的,每個 net namespace 有獨立的 networkdevices, IP addresses, IP routing tables, /proc/net 目錄。這樣每個 container 的網路就能隔離開來。docker預設採用veth的方式將 container 中的虛擬網卡同 host 上的一個docker bridge: docker0 串連在一起。
3.ipc namespace:container中進程互動還是採用linux常見的進程間互動方法 (interprocess communication - IPC),包括常見的訊號量、訊息佇列和共用記憶體。container 的進程間互動實際上還是host 上具有相同pid namespace 中的進程間互動。
4.mnt namespace:類似chroot,將一個進程放到一個特定的目錄執行。mnt namespace 允許不同 namespace 的進程看到的檔案結構不同,這樣每個 namespace 中的進程所看到的檔案目錄就被隔離開了。在container裡頭,看到的檔案系統,就是一個完整的linux系統,有/etc、/lib 等,通過chroot實現。
5.uts namespace:UTS("UNIX Time-sharing System")namespace 允許每個 container 擁有獨立的 hostname 和 domain name, 使其在網路上可以被視作一個獨立的節點而非 Host 上的一個進程。
6.usernamespace:每個 container 可以有不同的 user 和 groupid, 也就是說可以在 container 內部用 container 內部的使用者執行程式而非 Host 上的使用者。
七、實現高可用的工具有哪些?
1.hearbeat
2.keepalived
...
八、MySQLDatabase Backup工具?
MySQLdump工具:
1.是mysql內建的備份工具,目錄在bin目錄下面:/usr/local/mysql/bin/mysqldump,支援基於innodb的熱備份。但是由於是邏輯備份,所以速度不是很快,適合備份資料比較小的情境。Mysqldump完全備份+二進位日誌可以實現基於時間點的恢複。
2.是 mysql 用於備份和資料轉移的一個工具。它主要產生一系列的 SQL 陳述式,可以封裝到檔案,該檔案包含有所有重建你的資料庫所需要的 SQL 命令如 CREATE DATABASE,CREATE TABLE,INSERT 等等。可以用來實現輕量級的快速遷移或恢複資料庫。
3.是將資料表導成 SQL 指令檔,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。
4.資料庫匯出對象可以針對單個表、多個表、單個資料庫、多個資料庫、所有資料庫進行匯出的操
作。
percona提供的xtrabackup工具:
Xtrabackup 實現是物理備份,而且是物理熱備
1.支援innodb的物理熱備份,支援完全備份,增量備份,而且速度非常快,支援innodb儲存引起的資料在不同資料庫之間遷移,支援複製模式下的從機備份恢複備份恢複,為了讓xtrabackup支援更多的功能擴充,可以設立獨立資料表空間,開啟innodb_file_per_table功能,啟用之後可以支援單獨的表備份。
2.(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁碟空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快。
九、awk和sed的區別?
awk:
awk是一種程式語言,對文檔資料的處理具有很強的功能。awk擅長從格式化報文或從一個大的文字檔中抽取資料。
awk的命令格式為:
awk [-F filed-separator] “commands” input-file(s)
awk將一行文字按分隔字元(filed-separator)分為多個域,依次記為$ 1,$ 2 . . . $ n。$0代表所有域值。因此awk更適合於以域為單位來處理檔案。加之ARGIND等內建變數,使awk能處理多個檔案。典型的應用為尋找一個檔案中的某個欄位是否在另一個檔案中出現
sed:
sed是一個精簡的、非互動編輯器。它能執行與編輯vi和emacs相同的編輯任務,但sed編輯器不提供互動使用方式,只能在命令列下輸入編輯命令。
sed的命令格式為:
sed [options] ‘command‘ file(s)
sed [options] -f scrīptfile file(s)
作為編輯器,當然少不了插入(a/、i/)、刪除(d)、尋找替換(s)等命令。
如果檔案是格式化的,即由分隔字元分為多個域的,優先使用awk
awk適合按列(域)操作,sed適合按行操作
awk適合對檔案的抽取整理,sed適合對檔案的編輯。
十、cacti警示已經知道了,怎麼關閉警示?
將“Threshold Enabled”前面選項框中的勾去掉,即disabled閾值,當達到設定的警示閾值也不警示。
本文出自 “你好陽光” 部落格,請務必保留此出處http://hexiaoshuai.blog.51cto.com/12156333/1916522
Linux營運必會的面試題(二)