引导过程与服务控制

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改为S80S是开

[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 我们称为无限数据流文件,不论你要从文件里取多大的数据,都能取得出来,然而取出的数据没有任何内容显示,就是纯粹的占大小。

 

posted @ 2018-11-01 17:00  小王小同学  阅读(111)  评论(0编辑  收藏  举报