Linux開機啓動原理完整過程要經歷十步面試
第一步開機自檢(BIOS),就是主板檢測shell
第二步MBR引導,就是硬盤引導安全
第三步GRUB菜單, 操做系統的啓動菜單bash
第四步 加載內核kernel,啓動操做系統核心運維
第五步 運行INIT進程,init進程初始化,執行kernel的任務(執行程序)dom
第六步 讀取etc/inittab配置文件(Linux開機時默認的啓動模式)ssh
第七步 執行/etc/rc.d/rc.sysinit初始化腳本(/proc目錄是臨時存放內存數據用的目錄)socket
第八步 執行/etc/rc.d/rc 腳本(去某個目錄執行文件)post
第九步 執行/etc/rc.d/rc.local 我的配置腳本ui
第十步 啓動mingetty 進程(啓動我的進程)
GPUB菜單 看機啓動時按esc鍵
能夠干擾默認啓動模式。e 2 e 空格 3 回車 再按b 控制開機引導方式
改一下這個數字保存退出重啓之後默認進入咱們想要進的模式
pstree以樹的形式顯示進程
[root@wangna ~]# pstree
init─┬─crond
├─login───bash
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
PID號是1
init是主進程
sshd是個socket進程
什麼叫作socket進程,咱們管24小時不間斷監聽某個固定端口的進程,叫作socket進程。
[root@wangna ~]# bash 在以前的進程生成一個子進程
[root@wangna ~]# exit
exit
Linux作事的整個原理:
sshd這個進程是負責咱們遠程鏈接服務的進程,當咱們xshell鏈接上Linux之後,sshd主進程會臨時生成一個sshd子進程來接待咱們全部發起的遠程鏈接。sshd子進程,爲了可以讓咱們以友好的方式進行遠程操做,sshd子進程會生成一個叫作bash的界面進程。其實咱們的命令模式所操做的界面就是bash這個界面。爲了同一時間解析多個命令,bash有生成一個進程,直接就是命令,生成一個臨時子進程,去幫咱們作事,作完事本身就消失了。
[root@wangna ~]# cd /proc
[root@wangna proc]# ls
1 11 134 20 297 392 72 cmdline interrupts kpageflags net sys
10 1103 14 21 3 4 750 cpuinfo iomem loadavg pagetypeinfo sysrq-trigger
1066 1104 140 22 30 41 8 crypto ioports locks partitions sysvipc
1074 1105 141 23 31 42 9 devices ipmi mdstat sched_debug timer_list
1082 1120 142 24 314 5 928 diskstats irq meminfo schedstat timer_stats
1089 1122 15 25 315 580 945 dma kallsyms misc scsi tty
1091 1166 16 26 32 588 990 driver kcore modules self uptime
1093 1178 17 27 33 6 acpi execdomains keys mounts slabinfo version
1095 12 18 28 346 7 buddyinfo fb key-users mpt softirqs vmallocinfo
1097 13 19 29 38 702 bus filesystems kmsg mtd stat vmstat
1099 133 2 295 39 703 cgroups fs kpagecount mtrr swaps zoneinfo
[root@wangna proc]# which ps
/bin/ps
[root@wangna proc]# ps 直接顯示進程
PID TTY TIME CMD
1122 pts/0 00:00:00 bash
1181 pts/0 00:00:00 ps
[root@wangna proc]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 18:12 ? 00:00:00 /sbin/init
root 2 0 0 18:12 ? 00:00:00 [kthreadd]
root 3 2 0 18:12 ? 00:00:00 [migration/0]
root 4 2 0 18:12 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 18:12 ? 00:00:00 [migration/0]
postfix 1082 1066 0 18:12 ? 00:00:00 qmgr -l -t fifo -u
/proc/既有目錄又有文件,可是咱們發現好多目錄的名字都是數字,那麼這個數字目錄究竟是什麼呢?是進程
若是隻把眼光站在運維的角度看問題,那麼你只能看到進程這個東西。
一般來講,站在運維的立場,進程就是程序。
可是,假如咱們把眼光看的更深一些,其實進程裏還有許多叫作線程的東西,而後真正幹活的不是進程,而是線程。
若是面試時面試官問你,進程是什麼?你說進程就是程序,也能夠。
但若是面試的是開發。那麼你必定要說,進程什麼都不是,它只是一個目錄,存放資源的目錄,這些資源是提供給線程進行調用的資源,真正幹活的是線程,所以,線程纔是進程。
[root@wangna ~]# cd /etc/rc3.d
[root@wangna rc3.d]# ls
K10saslauthd K89rdisc S08ip6tables S12rsyslog S25netfs S80postfix
K50netconsole K92iptables S10network S15mdmonitor S26udev-post S90crond
K87restorecond S02lvm2-monitor S11auditd S25blk-availability S55sshd S99local
[root@wangna rc3.d]# chkconfig 查詢全部開機啓動
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
[root@wangna rc3.d]# chkconfig | grep "3:on"
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
[root@wangna rc3.d]# chkconfig | grep postfix
postfix 0:off 1:off 2:on 3:off 4:on 5:on 6:off
[root@wangna rc3.d]# ls
K10saslauthd K80postfix K89rdisc S02lvm2-monitor S10network S12rsyslog S25blk-availability S26udev-post S90crond
K50netconsole K87restorecond K92iptables S08ip6tables S11auditd S15mdmonitor S25netfs S55sshd S99local
[root@wangna rc3.d]# mv K80postfix S80postfix 把K80改成S80,S是開
[root@wangna rc3.d]# chkconfig | grep postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@wangna rc3.d]# ls
K10saslauthd K87restorecond K92iptables S08ip6tables S11auditd S15mdmonitor S25netfs S55sshd S90crond
K50netconsole K89rdisc S02lvm2-monitor S10network S12rsyslog S25blk-availability S26udev-post S80postfix S99local
[root@wangna ~]# chkconfig --list postfix 查看單一的服務
[root@wangna ~]# chkconfig postfix on 指定在345模式下開啓
[root@wangna ~]# chkconfig postfix off 指定在345模式下關閉
[root@wangna ~]# chkconfig --level 3 postfix on 指讓在3模式下開始
Service服務名start|stop|restart(強制關閉在重啓)|reload(平滑重啓)|status(看狀態)
雖然咱們常常用這個方式來控制服務的當前啓動狀態,可是,假如咱們忘記了postfix或者其餘服務的名字,會發現這種方式不能tab
那麼,咱們建議利用一個路徑 /etc/init.d/ 來控制服務
[root@wangna ~]# service postfix status 看一下postfix的狀態
[root@wangna ~]# service postfix stop 給postfix服務關閉了
[root@wangna ~]# service postfix start 給postfix服務開啓
當咱們的啓動模式是3模式,那麼Linux進入/etc/rc3.d/目錄下,就會執行裏面全部有以S打頭的腳本(那麼依靠這個方式完成的開機服務自啓動)。因此,chkconfig這個命令所查看的內容,實際上是即時生成的。然而並非保存於某個文件裏。所以,咱們是沒法對chkconfig的啓動項作備份的。所以,在運維工做中,咱們並不建議以chkconfig的方式來管理Linux操做系統的開機自啓動項,由於運維須要安全,安全就要備份。/etc/fstab開機自動掛載,咱們也不推薦的。推薦在/etc/rc.local,其實,咱們也能夠經過命令的方式去啓動服務。若是/etc/rc.local這個腳本每次開機都先啓動的話,裏面的命令也會被先執行,其實也就是開機自啓動。
運維規則就是有理由便可。
命令runlevel查看系統當前啓動模式
***命令dd 重要命令(測磁盤讀寫速度), 工做中運維經過dd命令檢測磁盤讀寫速度。
工做中常使
[root@wangna ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
從/dev/sda系統盤開始抽前512字節的數據,輸出到/backup/sda.mbr.bask,抽一次備份
[root@wangna ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
***從無限數據流文件取東西輸出到/dev/sda裏,輸出前512字節 輸出一次,把前512覆蓋了,系統就啓動不起來了,很難恢復數據
Linux操做系統裏有兩個特殊的文件,/dev/null和/dev/zero
/dev/null 咱們稱做黑洞文件,不論什麼文件內容被重定向到了這個文件裏,內容就都消失了。也叫垃圾箱文件。
/dev/zero 咱們稱爲無限數據流文件,不論你要從文件裏取多大的數據,都能取得出來,然而取出的數據沒有任何內容顯示,就是純粹的佔大小。