欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

第三周LINUX学习笔记

程序员文章站 2023-11-25 17:32:04
周期性任务丶find 文件查找:find命令 locate :在数据库中查找,非实时查找,精确度不高,查找速度快,模糊查找 /tmp/passwad/a.textfind:实时查找:速度慢 ,精确匹配find [option] [查找路径][查找标准][执行动作](默认为显示)查找路径:默认为当前路 ......

                                                                                                                      周期性任务丶find

文件查找:find命令
locate :在数据库中查找,非实时查找,精确度不高,查找速度快,模糊查找  /tmp/passwad/a.text
find:实时查找:速度慢  ,精确匹配

find [option] [查找路径][查找标准][执行动作](默认为显示)
查找路径:默认为当前路径
查找标准:默认为指定路径下的所有文件

查找标准:
                       -name “文件名称”:根据文件名查找 支持使用globbing(文件名统配符)
                        -iname 忽略大小写

                        -user username :根据属主查找
                        -group groupname:根据属组查找
                        -uid uid:根据uid查找
                        -gid gid:根据gid查找   以上两个作用在于,有些用户被删除了,但是属于该用户的文件没被删除,所以通过uid,gid 来查找
                        -nouser:查找没有属主的文件
                        -nogroup:查找没有属组的文件
                     组合条件
                             -a :且  -标准1 -a -标准2  两标准都满足,-a可省略,
                             -o:或
                             -not:反
      
                      -type:根据文件类型查找
                          f:普通文件
                          d:目录文件
                          b:块设备
                          c:字符设备
                          l:符号链接文件
                          p:命名管道
                          s:套接字
                      -size:根据文件大小查找
                          -size [+|-](大于|小于)#unit
                            例如:-size +2m
                            常用单位:k,m,g
                            另外在一个单位之内的都表示等于 20k也是被当做1m文件,但是搜索-1m文件只能查找到0k的文件
                      根据时间查找:
                         以天为单位(time)  
                           最近访问时间    -atime [+|-]#unit #:表示(#+1)天之外被访问过
                           :表示#天内被访问过的
                            无符号:表示短于(#+1)>x>=#天的时间段被访问过
                            最近更改时间-mtime
                            最近状态改动时间-ctime    
                         以分钟为单位(min)
                            -amin
                            -mmin
                            -cmin
                      根据权限查找:
                          -perm [+|-]mode
                                mode:精确匹配
                                +mode:任何一类用户的任何一位权限都得匹配
                                -mode:每类用户的指定要检查的权限位都匹配
                                如 文件权限 644
                                -perm -600 :否
                                -perm +222 :是
处理动作:



                      -ls :以长格式输出各文件信息
                      -exec command {} \; :对查找到的文件指定的命令
                       -ok command {} \; :交互式
                         find把查找到的所有文件一次性地传递给-exec执行
                        find |xargs



文件的特殊权限:
             有这么一个问题:对于设置用户密码的文件/etc/shadow 他的权限是000,也就是说除了管理员以外,其他用户都不能修改这个文件的内容
             那么,当用户想要修改自己的用户密码时究竟要怎么实现呢。

   让可执行文件有suid
         任何用户执行可执行可执行文件时,不再以用户自己的身份达成进程的属主,而是以文件的属主当作进程的属主
     suid表现为文件属主权限执行位上的s或s
      x:s
     -:s
        如何设定suid权限
        chmod u+s file
        或者:假设原来的权限为755
    chmod 4755

    目录文件的sgid
       具有sgid的目录,用户再此创建文件时,新建文件的属组不再是用户的属组,而是目录的属组  
        chmod g+s file
       或者:假设原来的权限为755
       chmod 2755

       粘滞位:sticky
       对于公共可写的目录,用户可创建文件,可以删除自己的文件,但无法删除别的用户的文件
        
         chmod o+t file
     或者:假设原来的权限为755
         chmod 1755
       sticky表示其在其他用户上表示为t或者t
        x:t
    -:t
     suid sgid sticky
      0    0     0

linux任务计划
 一次性任务计划
    at,batch
 周期性任务计划:
    crontab
    anacron


一次性任务计划:
   at 交互式:让用户在at>提示符输入多个要执行命令:
      批处理:让任务的个命令写入文件由at进行调用

      at time
      at>
      ctrl+d 提交作业
      at -l:查看作业 =atq
      at -q 字母 time 添加别的队列
      at -d job_name 删除一个尚未执行的作业= atrm
 
  at批模式:
      at  -f 文件路径 time
      time:
         模糊时间:
           now,noon(中午) midnight(午夜)teatime(下午4点)tomorrow
任务的执行结果会议邮件的形式发送给提交者
    使用mail
          交互模式接受邮件
      交互模式发动邮件
      -s 指定主题
      < /path/to/somefile
      可以通过管道来提交邮件内容
    
    batch:一批,与at不同的是,不能指定时间:它自动选择系统空闲时执行
 
 周期性任务计划:cron,建议写全路径 ,否则有些命令可能找不到路径
     crond:守护进程,运行在后台,随时监视着进程等待执行
         服务进程:阻塞,轮训

   系统cron
     文件:/etc/crontab
/etc/crontab
shell=/bin/bash
path=/sbin:/bin:/usr/sbin:/usr/bin
mailto=root
home=/
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) or jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (sunday=0 or 7) or sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
 时间表示法:
  1.每个事件为都应该使用其可用的有效取之范围内的值
  2.某事件围上的*表示对应位的有效取值
  3、-:连续的相邻时间点取值
  4、,:离散的时间点取值
  5,/# :表示在指定时间范围内每隔#一次

注意:通过输出重定向而拒收邮件:
   &> /dev/null
  > /dev/null 2>&1
用户cron
     /var/spool/cron/username 该目录下存储crontab任务
    使用crontab命令来实现:
     -l:查看自己的cron任务列表
     -e:通过editor变量中定义的编辑器打开用户自己的cron配置文件:
         编辑单独的任务都使用-e选项,无论是删除、修改还是新建
     -r:移除crontab文件

    如果是管理员:
    -u username :为别的用户配置crontab作业;
提醒:如果在crontab的用户命令中使用%,得转义为\%
5 3 * * * /bin/touch ~/testfile_`date +\%y-\%m-\%d`.txt

在使用单引号后,%也可以不转义
5 3 * * * /bin/touch ~/testfile_`date +’%y-%m-%d‘`.txt

如何实现秒级别的任务:

* * * * for i in {0..4};do /bin/echo “how are you?”;sleep10;done


crontab文件的格式
  空白行会被忽略
  #开头的行是注释


 anacron: 是crontab的补充,用于检查crontab中某任务在过去的一个周期内是否没有执行,
 如果没有执行,则在开机以后的某时间点让其执行一次,无论其周期是否到达

facl:文件访问控制列表

普通用户无法安全地将某文件授权给其他用户访问

facl:附加原有权限模型之上另一层权限控制机制,保存至文件扩展属性信息中

getfacl file。。。获取facl
setfacl[-m|-x]权限 文件
-m:设定权限
   -m u:username:perms
   -m g:groupname:perms
   -m m::perms
-x:取消权限
   -x u:username
   -x g:groupname
   -x m:
ll表示为+,有额外的权限属性
 -r:递归,对文件夹内的文件也生效




bash编制之循环控制
   for varname in list;do
      循环体
   done

   while condition;do
     循环体
    done

   until condition;do
     循环体
    done


循环控制:
   continue:提前结束本次循环而开始评估下一轮
   break[n]:跳出当前循环
                                                                                             网络详解
网络基本知识
   tcp/ip
      物理层
      链路层:从设备到设备主机通信,mac地址,mac<-->ip(rarp/arp)
      网络层: 从源主机到目标主机之间通信,ip地址,ip报文
      传输层:从源主机进程到目标主机特定进程之间通信,tcp/udp
      应用层:

      iso/osi:七层
      1-4:通信子网
      5-7:资源子网
         会话层
     表示层
     应用层
      

    tcp:有连接协议,建立逻辑链接
        syn,ack,fin,rst,psh,urg
    三次握手:
     syn=1 ack=0,fin=0
     syn=1 ack=1 fin=0
     syn=0 ack=1 fin=0
    四次断开:

主机:tcp/ip协议栈

配置主机介入tcp/ip网络:
   ip/netmask
   路由:
     主机路由:一台主机
     网络路由:是一个网络
     默认路由:
   dns服务器:
       主dns服务器
       备用dns服务器
    主机名:

  动态指定:
    ip/netmask
  动态配置:
    dhcp服务器
     dynamic host configuration protocol

静态指定:
     用户空间工具
       ifconfig
       ip
     网络设备服务配置文件:
        /etc/sysconfig/network-script/ifcfg-eth0
        完成长久有效配置
     gui/tui

用户空间的命令行工具:立即生效,当不会长久有效
     ifconfig
     iproute2(ip,ss)
网络设备如何表示
      内核识别设备:驱动
      
      设备:别名
      以太网设备:ethx
      ppp设备:pppx
      本地回环:lo

ifconfig ip addr   ip link
   ifconfig:显示所有活动状态的相关信息
   ifconfig interface:仅显示指定接口的相关信息
   ifconfig interface address
      ip/mask
          长格式:
        ifconfig interface ip netmask mask
      cidr:无类别的预见路由
           ifconfig interface ip/mask
route:ip route
    route:显示路由信息
        -n:使用数字格式显示,不反解地址到主机名
    route add:
      -host host_ip gw next [dev device]
      -net net_addr

      -net 0.0.0.0 目标地址为任意地址
route del
   -host host_ip gw 下一跳
   -net net_addr gw 下一跳

dns服务器指向:
  配置文件:/etc/resolv.conf
      最多三个:
      nameserver dns_server_ip

      dig -t a 域名
         正解测试
      dig -x ip
          反解测试

centos5/6:
  服务脚本:/etc/init.d/network

centos 6
  服务脚本:/etc/init.d/networkmanager

  服务脚本:sysv style lsb
       控制运行在后台守护进程,接受参数{start|stop|restart|status}
       脚本位置:/etc/rc.d/init.d或/etc/init.d
   
   配置某服务开机自动启动:chkconfig src_script_name on
   禁止开机自动启动:chkconfig src_script_name off
   查看 chkconfig --list

   调用机制:
      1./etc/init.d/script_name {start|stop|restart|status}
      1.service script_name {start|stop|restart|status}

与网络设备相关的服务控制脚本
  他们通常能够读取为网络配置的配置文件,以之实现其配置生效或失效等管理功能

  配置文件有两类(/etc/sysconfig/network-scripts/)
    配置ip、掩码、网关
       以太网:ifcfg-ethx
       ppp:ifcfg-pppx
     匹配路由
      route-ethx
      route-pppx

    配置ip、掩码、网关:ethx
      device="eth0"
        此配置关联至的设备。设备名要与文件ifcfg-后ude内容保持一致
      bootproto=none
           引导协议:{none|static|dhcp|bootp}
      hwaddr="00:0c:29:26:62:92"
            mac地址:要与真实mac地址保持一致,可省略
      nm_controlled="yes"
            是否接受networkmanager脚本控制:{yes|no}
      onboot="yes"
           是否开机自动启动此网络设备{yes|no}
      type="ethernet"
            设备类型etheraget bridge(桥接)
      uuid="14351f7f-a726-4dfc-966e-dfb1f352f226"
          唯一标识,可省略
      ipaddr=
         ip地址
      netmask=
        掩码
      gateway=
        默认网关
      dns1=
         dns1服务地址
      ipv6init=no
         是否开启ipv6
      userctl=no
         是否允许普通用户操作网卡
      peerdns={yes|no}
         是否允许dhcp服务分配地址时直接更新/etc/resolv。conf中的dns服务器地址
   配置路由:route-ethx
     配置文件的格式1:每行一个要配置的路径条目
       目标 via 下一跳
     配置文件的格式2:每一组一个路由条目
       address#=目标
       netmask#=掩码
       gateway#=下一跳


       address0=192.168.0.0
       netmask0=255.255.255.0
       gateway0=172.16.100.1

如何实现在单网卡上配置多个地址:
    通过网络接口别名来实现
     eth0x
     eth0:x eth0:0 eth0:1....

     配置1:
     ifconfig ethx:y ip/mask
     配置2:
     ifcfg-ethx:y
      device=ethx:y
      bootproto={none|static}
      ipaddr=
      netmask=
      gateway=
     非主地址不支持dhcp协议获取

            
ip命令的使用
  ip link
    ip link show 查看默认信息
    ip link set 接口 [up|down] [multicast on|off]:
  ip addr
      可以在一个接口配置多个地址而不使用接口别名:显示这些地址
       ip addr show
    ip addr add dev 接口 ip地址/掩码 [ ladel 别名 ]
    ip addr add dev 接口 ip地址 [ ladel 别名 ]
    ip addr flush 接口 [to 网络地址]
  ip route             
     ip route add 目标 via 下一跳 src 源地址 [dev 设备] 发到 “目标” 网段的网络包,下一跳的路由器 ip 是 “下一跳“”,包的源ip地址设为“源地址“” src 选项只会影响该 host 上产生的网络包。如果是一个被路由的外来包,明显地它已经带有了一个源 ip 地址,这时候,src 参数的配置对它没有任何影响
     ip route del 目标
     ip route show


启用/禁用接口:
  ip link set 接口 up|down
  ifconfig 接口 up|down
  ifdown 接口,ifup 接口
     重置网络连接

tui或gui
 system-config-network-tui
    配置结束后将保存配置文件中
 setup --> network configuration


网络管理或检测等相关的工具:
    ping:icmp
       ping [options] ip
         -c 次数
     -w 测试执行时长
    traceroute host:
        获取当前主机到目标主机所经过的网关
    mtr host

    netstat
       -t:tcp协议的连接
       -u:udp协议的链接
       -l:监听状态的连接
       -a:所有状态的连接
       -p:连接相关的进程
       -n:数字格式显示
       -r: 显示路由表,类似于route或ip route show

       常用组合:
        netstat -tan
    netstat -tunl
    netstat -rn
    ss,用于取代netstat
       -t:tcp协议的连接
       -u:udp协议的链接
       -l:监听状态的连接
       -a:所有状态的连接
       -e:显示扩展信息
       -m:显示套接连接使用的内存信息
       -p:进程及udp
       -n:数字格式显示
       -o state (established)
    ethtool 接口: 显示接口设备属性
    ethtool -s 接口:显示设备接口的统计数据

                                                                                                  进程管理

进程管理:
 二进制的格式为elf,是cpu指令集中的指令
 程序=指令+数据,
 进程是程序的副本,可以有多个
 内核是一个资源调度监视器
 linux是抢占式多任务
 内存被事先划分成多个相同大小的页框
 liu:最近最少使用
 mmap 共享内存
 通过fork()进程生成
 内存泄漏

 init是所有进程的父进程
 task_struct任务结构:是一种数据结构
 双向循环链表
 线程是一个进程内的多个执行流
wlp:轻量级进程
模式转换:

时钟驱动:
    进程优先级:

    是进程调度的核心资源

    公平:
        结果公平:
    起点公平:
算法:完成工作的调度方式
big o
    o(1)
    o(logn)
    o(n)
    o(n^2)
    o(2^n)
一共140个队列
0-99 为实时优先级


进程间通信:ipc
      interprocess communication
         signal:信号
     shm:共享内存
     semerphor:旗语
     socket:
     rpc:remoter procedure calling
             xml-rpc,rest

     过程:没有返回值的函数
     函数:

进程的分类:
  cpu-bound:cpu密集型
  i/o-bound:i/o密集型

进程的分类:
     批处理进程
     交互式进程
     实时进程

进程调度器:
    进程优先级:0-139
        实时优先级: 1-99,数字越大,优先级越高
    静态优先级:100-139,nice值调整,数字越大,优先级越低
                    nice:-20,19
            priority:100,139
     动态优先级:由内核维护,动态调整

进程状态:
      运行态:running r
         就绪态:
      睡眠态:sleeping
          可中断睡眠 inruptable
      不可中断睡眠 uninruptable
      停止态:不会被调度 stopped
      僵死态:zombie

进程管理命令:
  ps pstree pidof top htop pmap vmstat dstat

ps:显示进程状态的命令
   进程:
       与终端相关的进程:a
       与终端无关的进程:x
     stat:
         r:运行或可运行
         s:可中端睡眠
         d:不可中端睡眠
         t:停止
         z:僵死
         s:session leader 有子进程
         +:前台进程
         l:多线程进程
         n:低优先级进程
         <: 高优先级进程
       u:以用户为中心显示进程相关信息
           %cpu:cputime/realtime
          vsz:虚拟内存集,virutal menmory size
      rss:常驻内存集,
      stime:启动时间
      time:累计占用的内存时间 []表示内核线程
    常用组合一:ps aux
    其他常用选项:
     -e:显示所有进程
     -f:以进程的长格式显示
     常用组合之二:ps -ef
     常用组合之三:ps -efh
          -f:显示额外信息
      -h:显示进程的层次信息
    pstree:显示进程树

      自定义要显示的信息:-o
              ps  auo pid, command
               rtprio:实时优先级
           ni:nice值
           pri:优先级
           psr:运行的cpu
pgrep pattern:
      例如:pgrep bash
   -u username:仅显示指定用户的进程的进程的pid
   -g groupname:仅显示指定用户组的进程的进程的pid

pidof:显示指定命令所启动的pid
    pidof command
 
top:
  m:按内存占用百分比大小排序
  p:按cpu占用百分比大小排序,默认
  t:按累计占有时长进行排序
  1:分开显示
  l: 是否显示负载信息
  t:是否显示cpu和进程的统计信息
  m:是否显示内存和交互分区的信息
  q:退出
  k:kill,杀掉进程
  s:改变top刷新频率
top - 11:49:38 up  3:18,  1 user,  load average: 0.00, 0.00, 0.00
tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
mem:    502168k total,   420160k used,    82008k free,    57496k buffers
swap:  2097144k total,        0k used,  2097144k free,   254164k cached

us — 用户空间占用cpu的百分比。
 sy — 内核空间占用cpu的百分比。
 ni — 改变过优先级的进程占用cpu的百分比
 id — 空闲cpu百分比
wa — io等待占用cpu的百分比
 hi — 硬中断(hardware irq)占用cpu的百分比
 si — 软中断(software interrupts)占用cpu的百分比

virt:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
res:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与virt相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
shr:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:res – shr
4、swap out后,它将会降下来
data
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

  常用选项:
     -d #:指定刷新时间间隔
     -b:以批次显示top的刷新
     -n # 指定指定的次数
htop
    u:选择指定用户的进程
    l: 显示进程所打开的文件列表
    s:显示进程执行的系统调用
    a:显示进程的进程的cpu上
    #:快速将光标定位之指定的pid进程上
    quit
vmstst
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  57460  54564 285520    0    0    30     5   21   14  0  0 99  1
  procs
    r:运行或等待cpu时间片的进程的个数
    b:被阻塞(通常为等待i/o完成)的进程的长度
  memory
    swpd:从物理内存交互至swap中的数据量
    free:未使用的内存大小
    buffer:buffer空间大小,通常与缓存写操作相关
    cache:cache空间大小,通常与缓存读操作相关
  swap
    si:swap in 数据进入swap中的数据量,通常是速率。kb/s
    so:swap out 数据离开swap中的数据量,通常是速率。kb/s
  io:
    bi:block in:从块设备读入的数据量,通常是速率,kb/s
    bo:block out:保存至块设备中的数据量,通常是速率,kb/s
   
    in:中断发生频率。每秒的中断数
    cs:context switch 上下文切换,进程切换,通常是速率,kb/s
  cpu:
    us:用户空间的使用率
    sy:内核空间的使用率
    id:空闲
    wa:等待的
    st:被偷走的
    
   使用格式
   vmstat [delay [counts]]
     -s:显示内存统计数据

进程:nice
      用来手动调整进程优先级
      -20,19
      100,139

      默认nice为0.其默认优先级为120

      nice:普通用户只能调大此值

      对于尚未启动的程序
         nice -n # command 表示进程以#进程启动

       对于运行中的进程:
          renice # pid 调整pid的nice值

        查看 ps axo ni,command, pid


进程间通信(ipc):
    信号:

    kill命令:可以实现向其他进程发送信息
     
       kill -l :可以查看向进程发送的所有信息
       man 7 sigual
       
       kill -signal pid
             -signal:
             数字代号:比如1,9等
         信号名称:如sighup等
         简写的信号名称:如hup等

        1) sighup:让程序重读配置文件,而不用重启程序
        2) sigint:中断信号。ctrl+c即发送次信号      
        9) sigkill:杀死进程    
        15) sigterm:终止进程,比较优雅(默认)
        
     killall -signal 进程名



linux的作业控制
    前台作业:占据着一个终端
    后台作业:作业执行时不占据终端,作业启动后就释放终端

    非守护进程类的程序,启动以后都在前台工作
          如果已经启动:前台-->后台。ctrl+z把前台作业送往后台,作业被”停止“
      如果尚未启动:command &

      退出当前会话,作业也会终止,因为作业与当前终端相关,如果把作业送往后台后,不期望作业随终止结束而停止
            nohup command &
           
       如何让送往后台的作业继续执行:
        fg [[%]作业号码]:将作业调回前台继续进行
        bg [[%]作业号码]:让作业在后台继续进行
            默认的为最后一个进入后台的任务
              kill %作业号码:终止作业       
       查看作业号:
           jobs
                                                                                                          系统初始化流程丶拯救模式   
内核管理

os:
   内核的功能:
        进程管理:task_struct,scheduler
    内存管理:
    i/o管理:中断及中断处理
    文件系统:ext3,ext4,reiserfs,xfs
    驱动程序:
    安全相关:selinux
    是通用软件,平台类的软件
    内核设计流派:
        单内核:单一体系结构
        linux
           模块化设计:核心+外围功能性模块组成
               .ko:kernel object
           内核支持动态装卸载模块
               
    微内核:内核子系统
        windows
        solaris
         
     fock()
         init:负责管理用户空间的进程
            init:pid 1
        /sbin/init:可执行文件

linux的初始化流程
 post:rom+ram
 
 bios:boot sequence

 mbr:
     446:bootloader,用以选择操作系统。还要能识别文件系统
     64:分区表,16个字节一个分区
     2:5a
 
 kernel文件:基本磁盘分区,无法放在lvm上
             vmlinuz 压缩存放,有两段代码组成,一个解压代码,一个为内核代码
 /sbin/init
 /lib/
 
 initrd:
    rd:ram disk

 /sbin/init:
      /etc/inittab
         /etc/rc.d/rc.sysinit脚本



 init:
    centos 5: sysv格式的系统初始化程序
         串行化:
    centos 6:upstart
         dbus
           a
       b
       c
     systemd:参考os x中并行初始化过程

   运行级别:
     0-6:7个级别
        0:关机
    1:单用户模式,直接以root用户登录
    2:多用户模式,不支持nfs文件系统
    3:完全多用户模式,文本模式,不启动图形界面
    4:预留级别
    5:完全多用户模式,图形模式
    6:重启

/sbin/init的配置文件:
    每行定义一种操作:
      id:操作的id
      运行级别:runlevels:在那些级别下执行此操作
      action:动作
         initdefault:设置默认运行级别,无需定义操作
           sysinit:指定系统初始化脚本
       si::sysinit:/etc/rc.d/rc.sysinit
     wait:等待系统切换至此级别时运行一次;
     ctrlaltdel:定义组合键被按下时要运行的命令:
     respawn:当指定的操作进程被关闭时立即在重启一次
       tty1:2345:respawn:/sbin/mingetty tty1
      process:操作
   /etc/inittab中定义的操作(init要完成的任务)
      指定默认运行级别
      指定系统运行的初始脚本
      启动指定级别下的要启动的服务,关闭要停止的服务
        /etc/init.d
             /etc/rc.d/rc.n.d(0-6)
                s##
            k##
      定义ctrlaltdel组合的动作
      初始化字符终端
          终端:对应的是设备
                /dev/tty#,/dev/ttys#,/dev/console,/dev/pts/#
      调用:login-->/etc/issue
      启动图形终端
cmdline:内核启动时传递给内核的参数
系统初始化脚本:/etc/rc.d/rcinit
      设置主机名:
      打印文本欢迎信息
      激活selinux和udev
      激活swap
      挂载/etc/fstab定义的本地文件系统
      实现检查根文件系统并对其以读写重新挂载
      设置系统时钟
      装载键盘映射
      根据/etc/sysctl.conf设置内核参数
      激活raid和lvm设备
      清理操作
mbr:
    bootloader:引导加载器,是一个程序
         lilo:linux loader
          不能引导位于1024 cylinder(柱面)以后的分区中的os;
     grub:grand unified bootloader
          1st stage:位于mbr中,为了引导2nd stage
          1.5 stage:位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件识别扩展
          2nd stage:位于boot基本磁盘分区中,grub的引导成勋
              boot分区大小
             centos5:100m
             centos6:200m

          /boot/grub/
             stage2:读取配置文件grub.conf
          grub的功能:
          1.选择要启动的内核或系统
              隐藏交互式接口
          2.交互式接口
              e: 编辑模式
          3.基于密码保护:在配置文件中 输入 password --md5 密码
              启用内核映像
              定义在相应title下
          传递参数(进入编辑模式)
           
           定义在全局段中
          grub接口
          title:操作系统或内核的标题
              root:设定内核文件所在的分区为grub的根
                  kernel:定义要使用的文件,后面可以附加传递给内核的启动参数
          initrd:指定为内核提供额外驱动等功能的ram disk或ram fs文件
          
      init的级别1的表示方法:
           1,s single s
           单用户模式几乎不会启动任何服务,且不需要用户登录;单是会执行/etc/rc.d/rc.sysinit脚本
           如果连/etc/rc.d/rc.sysinit文件也不加载,则传递emergency

           运行级别的切换
           #init [0-6]
           查看运行级别:
                  runlevel
          who -r
        grub.conf配置文件语法:
       default=#:指定默认启动的内核或os
       timeout=#:等待用户选择要启动的内核或os的时长,单位为秒钟
       splashimage=   :指定使用的背景图片
       hiddenmenu:隐藏菜单
       title
          root(hd0,0)
                    (device part)
             device(磁盘)表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始
             part表示方式:代表分区,从0开始编号
           kernel
                指定内核文件及传递给内核的参数
            参数:ro root=设备文件,quiet 静默模式输出
        initrd
            文件:通常为cpio归档,并使用gzip压缩,通常以.img作为文件后缀名
        在紧急救援模式下:
         grub的安装:
        第一种方式
        #grub
          grub root(hd0,0)
          grub setup(hd0)
          grub quit

         第二种方式:
         # chroot /mnt/sysimage
         # grub-install --root-directory=/ /dev/sda


         sync 将内存文件加载到硬盘上
启动流程:post-->bios(boot sequence) --> grub(bootloader(stage1:mbr;stage2:grub目录中)) --> kernel(initrd) --> shell

  host:宿主机
  target:目标机
 
  基于host只做一个简单的可启动的linux
   1.给目标磁盘分区
      两个:
         宿主机上:/dev/sdb1 /dev/sdb2
     /dev/sdb1 挂载至 /mnt/boot
         /dev/sdb2 挂载至 /mnt/sysroot

   2.安装grub至目标磁盘
    # grub-install --root-directory=/mnt /dev/sdb
    
   3、复制内核和initrd文件
      cp /boot/vmlinuz-version  /mnt/boot/vmlinuz
      cp /boot/initramfs-version.img /mnt/boot/iniyramfs.img

    4.创建目标文件的根系统文件
       mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,src,mnt,media,home,root}
       接着去移植bash等至目标主机的根文件系统

     5.为grub提供配置文件
       vim /mnt/boot/grub/grub.conf
       default=0
       timeout=5
       title
         root(hd0,0)
     kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
     initramfs /initramfs

linux的内核,单内核,支持动态装载和卸载
      模块:/lib/modules/kernel_version/


      查看pci设备的命令
      lspci -v

      查看当前内核装载的所有模块
      lsmod

      查看某模块的详细信息
      modinfo 模块

      动态卸载某模块
         modprobe -r 模块
         rmmod 模块

       动态装载某模块
          modprobe 模块
      insmod 路径文件


       /sbin/init
          /etc/inittab
       /etc/rc.d/rc.sysinit
        启动对应级别的需要启动的服务。停止需要关闭的服务
         /etc/rc.d/rcn.d/
           s##
           k##
         符号链接:/etc/init.d

         ##:表示优先级(0-99),数字越小,优先级越大


         chkconfig --add 添加服务
         指定级别
         --level

         删除:
         chkconfig --del