zoukankan      html  css  js  c++  java
  • 第三周LINUX学习笔记

                                                                                                                          周期性任务丶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

  • 相关阅读:
    SQL之mysql常用操作语句(入门级)
    总结了一些指针易出错的常见问题(七)
    C++之类和对象课后习题1
    SQL之50个常用的SQL语句
    SQL之经典SQL语句大全
    C语言之计算字符串最后一个单词的长度,单词以空格隔开
    spring之HttpInvoker
    Java之解压流(ZipInputStream)
    jetty之嵌入式开发
    java之压缩流(ZipOutputStream)
  • 原文地址:https://www.cnblogs.com/gohrx/p/10588016.html
Copyright © 2011-2022 走看看