第三周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 Server性能优化与管理的艺术 附件下载地址


下一篇:Java入门——(8)网络编程