Linux开机启动原理完整过程要经历十步
第一步开机自检(BIOS),就是主板检测
第二步MBR引导,就是硬盘引导
第三步GRUB菜单, 操作系统的启动菜单
第四步 加载内核kernel,启动操作系统核心
第五步 运行INIT进程,init进程初始化,执行kernel的任务(执行程序)
第六步 读取etc/inittab配置文件(Linux开机时默认的启动模式)
第七步 执行/etc/rc.d/rc.sysinit初始化脚本(/proc目录是临时存放内存数据用的目录)
第八步 执行/etc/rc.d/rc 脚本(去某个目录执行文件)
第九步 执行/etc/rc.d/rc.local 个人配置脚本
第十步 启动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 我们称为无限数据流文件,不论你要从文件里取多大的数据,都能取得出来,然而取出的数据没有任何内容显示,就是纯粹的占大小。