压缩解压缩
压缩格式:gz bz2 xz zip z 
压缩算法,算法不同,压缩比也不同

compress: filename.Z
uncompress: 
不能压缩文件夹,会将文件夹内的文件单个压缩
gzip: .gz
 gzip filename 压缩完成后删除源文件
 gzip -d 等于 gunzip 
 -#: 1-9 指定压缩比 默认为6
 
gunzip:
 gunzip filename

zcat 临时查看压缩的文本文件不解压
 
bzip2: .bz2 
 比gzip 有更大的压缩比
 使用格式相同
 bzip2 filename
 -d -# 都有
 -k 可以保留源文件

bunzip2 :同理解压
bzcat :

xz: .xz  同上

unxz 解压
xzcat
xzdec 解压

zip: zip 压缩后的文件名 压缩的路径 
 可以压缩文件夹,压缩后不删除源文件

archive:归档 归档本身不意味着压缩 

unzip :解压

tar:归档工具 
 -c:创建归档
 -f file.tar :操作的归档文件
 -x :展开归档
 --xattrs 归档同时保留其扩展属性信息
 -t: 不展开归档查看内部文件
 -zxf:解压归档 调用gzip
 -zcf:压缩归档 调用gzip
 
 -jcf 调用bzip2
 -jxf
 
 -Jcf 调用xz
 -Jxf
 
 -z -j -J 在解压时可以省略,压缩时不可以
 
cpio:归档工具

read: 
 -p 给出提示
 -t 超时时间
 
while 循环:
 适用于循环的次数未知的场景,要有退出条件

语法:
 while 条件 ;do
 运行命令
 
 done
 
使用颜色控制字体

echo -e \033[x;y;zm显示文字\033[
x 字体
y 前景色
z 背景色 

64,32
/lib
/lib32

IDE 133Mbps 并行
SATA 300M 600M 6G 串行
USB 3 480M 串行
SCSI SMALL COMPUTER SYSTEM INTERFACE  320M 并行总结
SAS 2.5英寸 串行

RAID:
级别,仅代表磁盘组织方式不同,没有上下之分

条带:0 
 性能提升,读写
 冗余能力没有
 空间利用 n
 至少2块
 
镜像:1
 写性能下降,读性能上升
 有冗余能力
 空间利用 n/2
 至少2块
 
效验码:4   盘1,盘2,盘3   盘6,坏一块(1-3)都可以用盘6来-去好的
轮流校验码 :5 轮流校验码存储位置
 读写都提升
 有冗余能力
 空间利用 (n-1)/n
 至少3块
 
1+0:先条带再镜像
    至少4块
0+1:先镜像再条带
 至少4块
JOBD:简单增加多块硬盘
 无性能提升
 无冗余能力
 空间利用n
 至少2块
 
MD multi dsiks 模拟一个RAID
逻辑RAID
 /dev/md# 
 
mdadm:任何块设备做成RAID
模式化命令
 创建模式 
 -C
 专用选项:
 -l:级别
 -n:设备个数
 -a:yes/no 自动创建设备文件
 -c:指定数据块chunk大小 默认64KB
 -x:指定空间盘个数
 管理模式
 --add,--remove,--fail
 监控模式
 -F
 增长模式
 -G
 装配模式
 -A

 -D --detail 查看RAID 的详细信息
 停止整列
 -S --stop
将当前RAID 信息保存至配置文件
 mdadm -D --scan > /etc/mdadm.conf
 以后装配就用 mdadm -A /dev/md#
 
 

 
watch 周期性地执行指定命令,并以全屏方式显示结果
 -n 指定周期长度,默认单位为秒,默认2秒
 watch -n '命令'
 
lsmod 列出内核模块

mdadm 用户空间工具

MD:MULTI DEVICE 多设备

DM:device mapper 设备映射
 逻辑设备
 
 lvm2
 快照
 多路径
 
vgcreate vgname 设备
 -s : pe 的大小,默认为4mb
 
lvcreate -n lv name -L 空间大小 vg name 

扩展逻辑卷
 lvextend
 -L 大小 逻辑卷
 
 
 resize2fs
 resize2fs2fs 逻辑卷 扩展到大小
 -p 与物理边界一样大小
 
缩减逻辑卷
 resize2fs 逻辑卷 缩减到大小
 不能在线缩减,先要卸载
 确保缩减后的空间大小依然能存储原有数据
 在缩减之前应先强直检查文件,以确保文件系统一致性状态
 lvreduce -L 大小 逻辑卷
 再挂载
 
快照卷
 生命周期为整个数据时长,这段时间内,数据的增长不能超出快照卷大小
 快照卷只读
 跟原卷在同一卷组内
 lvcreate 
 -s 快照卷
 -p r|w  权限
 lvcreate -s -L 大小 -n 逻辑卷名 -p r /路径
 
 
until = !while
until who | grep "hadoop" >> /dev/null ;do
 sleep 5
done
echo "hadoop is logged in"

for ((变量赋值;变量范围;变量变化)); do
 循环操作
done

ping
 -c 次数
 -w 超时时间
 
awk 条件 {动作}

 df -h | awk '{print $1}'  awk -F 分隔符 '{print $字段序号}'
 
 $NF是最后一个字段  ,NF是字段个数
 -F 后跟分隔符匹配
 
 

CSMA/CD  carrier sense multi access colision detection
 载波侦听多路访问冲突检测
 
socket 套接字 ip与port 绑定

三次握手 四次断开 tcp 有限状态集

    A      三次握手建立TCP连接              B
1.发送 SYN=1,SN=100 
2.接受 SYN=1,ACK=1,AN=101,SN=300
3.发送 ACK=1,SN=101,AN=301

    A      四次断开TCP连接              B
1.发送 FIN=1,
2.
3.
4.CLOSED

主机接入网络
ip
mask
gateway
hostname
dns
route
dhcp:dynamie host configuration protocol
 169.254.x.x 自动地址
 
linux 网络属于内核功能
lo:本地回环
eth{0-9}:以太网卡
ppp{0-9}:点对点
5.8  /etc/modprobe.conf
alias

6.0 /etc/udev/rules.d/70-persistent-net.rules

ifconfig 
 -a 显示所有接口的配置信息
 ifconfig eth{0-9} ip/mask up|down
 配置立即生效,但重启后失效
 
网络服务:
5.8 /etc/init.d/network start|stop|restart|status
6 /etc/init.d/networkmanager 同上  

网关
route 
 add 添加
 -host 主机
 -net 网络
 -net 0.0.0.0 默认路由
 route add -net 网络 gw 下一跳地址
 route add -net default gw 下一条地址
 del 删除
 同上
 route del -net 0.0.0.0 
 route -n 以数字方式显示主机信息

网络配置文件
 /etc/sysconfig/network

网卡配置文件
 /etc/sysconfig/network-scripts/icfg-eth{0-9}
 
 DEVICE=关联的设备名称,要与文件名的后半部保持一致
 BOOTPROTO={static|none|dchp|bootp}:引导协议,
 静态   动态
 IPADDR IP地址
 NETMASK 子网掩码
 GATEWAY 网关
 ONBOOT 自动启用
 HWADDR mac地址与硬件一致
 USERCTL {YES|NO} 是否允许普通用户控制接口
 PEERDNS {YES|NO} 是否接受DHCP中DNS的配置信息
 
不会立即生效,保证永久有效
 
路由配置文件
 /etc/sysconfig/network-scripts/route-eth{0-9}
 添加格式
 格式,1 
 DEST     via       NEXTHOP
 
 格式,2
 ADDRESS0=
 NETMASK0=
 GATEWAY0=
 ADDRESS1=
 NETMASK1=
 GATEWAY1= 
 
DNS服务器指定 最多3个
 /etc/resolv.conf
 nameserver ip
 
本地地址解析
 /etc/hosts
 主机IP 主机名称 主机别名

配置主机名
 hostname 名字
 立即生效,重启失效
 /etc/sysconfig/network
 HOSTNAME=
 永久有效
 
 使用setup 设置效果一样,需要重启

ifconfig 老旧命令 
iproute2 
 ip 
 link:配置网卡属性
 ip -s link show 限时统计信息
 ip link set 设备 状态
 
 addr:协议地址
 ip addr add 地址 dev 设备
 ip addr del 地址 dev 设备
 ip addr show
 route:路由
 
tc 流量控制
 
 
一个网卡多个地址
 网络设备可以别名
 别名不能使用DHCP
ifconfig eth0:0
/etc/sysconfig/network-scripts/icfg-eth{0-9}:{0-9}
DEVICE=eth{0-9}{0-9}


程序组成
 二进制文件  /bin,/sbin
 库 /lib
 配置文件 /etc
 帮助文件 /usr/share/man
 
/etc,/bin,/sbin,/lib
 都是系统启动需要用到的目录程序,不能单独挂载额外分区
 必须在根分区上 
 
/usr/
 /bin
 /sbin
 /lib
 操作系统的核心功能
 可以单独分区
 
/usr/local
 /bin
 /sbin
 /lib
 /etc
 /man
 
 用户使用的第三方软件
 
/opt
 早期第三方软件安装位置
 
/proc
/sys  
 不能单独分区,内核自我管理
 
/dev 
 设备,也不能单独分区
 udev 
  
/home 用户数据目录
 

/root 管理员家目录,么必要单独分区

/var 有了他系统管理更加规范
 
 
/boot :内核 initrd {initramfs} 只要能被找到就行,推荐单独分区

POST ---BIOS ----MBR (BOOTLOADER)--- 找到磁盘上的内核 ---- 找根的位置 

软件包安装器
 打包成一个文件:二进制文件,库文件,配置文件,帮助文件
 生成数据库:追踪所安装的每一个软件

1,制作软件包
2,安装卸载升级查询校验

redhat suse :rpm
 redhat package manager
 rpm is package manager
 redhat和suse 不能混用
 
debian :dpt

依赖关系:
 
前端工具:yum,apt-get
后端工具:rpm,dpt

yum:yellowdog  update modifier

rpm 命令:
 rpm:
 /var/lib/rpm
 rpmbulid:
 
安装,卸载,升级,查询,校验,数据库重建,验证数据包,

rpm命名:
 包组成:
 主包:
 bind-版本 
 子包:
 bind-libs
 bind-utils
 包名
包名格式:
 名称-版本-发行号.架构.平台.rpm
 bind-major.minor.release-release.arch.rpm 
 第一个release是发行号,第二个release是rpm包制作者修订用
 主版本号:重大改进
 次版本号:某个子功能发生重大变化
 发行号:修改了部分bug,调整了一些功能
 noarch 没有针对版本
 
umame -a 查看内核版本

 
rpm包:
 二进制格式:直接使用,多数使用
 源码格式:需要编译
 
rpm :
1,安装:
 rpm -i 路径/文件名
 -h 已#显示安装进读,50个#,每个2%
 -v 详细过程
 -vv 更详细
 rpm -ivh 常用
 --nodeps:忽略依赖关系,可以安装但是无法正常使用
 --replacepkgs:重新安装,替换原有安装
 --force:重装,覆盖,降级 强行安装
 --test 测试安装
 
2,查询:
 rpm -q 包名 : 查询指定包
 -qa: 查询所有已经安装的包
 -qi: 查询指定包的说明信息
 -ql:查询指定包安装后生成的文件列表
 -qc:查询指定包的配置文件
 -qd:查询指定包的安装帮助文件
 -qf 查询指定文件是由那个rpm包安装生成的
 
 -q --scripts 查询指定包中的脚本
 
 如果某RPM未安装,希望查询
 -qpi
 -qpa
 同上
 
3,升级:
 rpm -Uvh 如果有老版本的则升级,否则安装
 -Fvh 如果有老版本的则升级,否则退出
 
 rpm -Uvh --oldpackage 包名  降级安装包
 
4,卸载
 rpm -e 包名
 --nodeps
 
5,校验
 rpm -V 包名
6,重建数据库
 rpm 
 --rebuliddb 重建数据库,一定会重建
 --initdb 初始化数据库,没有才建立,有就不建建立
 
 
 
7,校验来源合法性,及软件完整性
 
 ls /etc/pki/rpm-gpg/
 RPM-GPG-KEY-redhat-release
 
 rpm -K 包名
 dsa,gpg 验证来源合法性
 sha1,md5 验证软件包的完整性
 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
 导入redhat的秘钥
 
 
HTML HYPERTEXT MARK LANGUAGGE
XML EXTENDED MARK LANGUAGGE

XML,JSON 半结构化数据

yum仓库中的元数据文件
 primary.xml.gz  
 所有rpm包的列表:
 依赖关系
 每个rpm生成的文件列表
 
 filelist.xml.gz
 当前仓库RPM包的所有文件列表
 
 other.xml.gz
 额外信息,rpm修改日志
 
 repomd.xml
 记录以上上个文件的时间戳和校验和
 
 comps 开头的.xml
 rpm包的分组信息
 
 为yum定义repo /etc/yum.repos.d/ 以.repo结尾的文件
 [标示ID]
 name=       名称
 baseurl= 仓库路径 
 ftp://
 http://
 file:/// 
 enable= 是否可用
 gpgcheck= 检查签名完整性
 gpgkey= 检查的秘钥位置
 
 
 yum 
 list:列表
 all 全部
 available 可用
 installed 已装
 updates 可用更新
 
 clean:清理缓存
 
 repolist:显示repoe列表
 
 install:
 -y 自动回复yes
 --nogpgcheck 无检查完整性
 
 update:
 升级到最新版本
 
 update to:
 升级到指定版本
 
 remove|erase:
 卸载
 
 info :信息
 
 provides:
 查看指定文件或特性是那个yum安装的
 
 groupinstall:
 grouplist
 groupinfo
 
 createrepo 手动建立yum仓库时需要使用
 在指定目录中建立repodata
     还需要复制 XML文件 
 

rpm 安装
 二进制格式
 源程序---编译----二进制格式
 有些特性是编译选定的,如果编译未选定此特性,将无法使用
 rpm包的版本落后于源码包,甚至落后很多
 
 定制:手动编译安装
 编译环境,开发环境
 开发库,开发工具

 linux :c
 gun :c
 
C环境,c++, 
 gcc:编译器
 g++:
 
 make:项目管理工具
 makefile:定义了make (gcc,g++) 按何种次序去编译源文件的程序
 
 automake,创建---makefile.in
 autoconf,创建---configure
 以上两者结合成makefile
 
 
 make install 
 
perl+java,python 
 编译安装三步骤
 前提:准备开发环境{编译环境}
 安装 Development Tools 和 development libraries
 
 
 先用tar 解压二进制程序包
 cd
 ./configure (让用户选择编译特性,检查编译环境)
 使用 configure --help 查看选项
 使用 configure --prefix 指定安装目录 
 --sysconfdir 指定安装的配置目录
 在安装目录中用 make 确认安装
 再输入 make install
 
 
1,修改PATH环境变量,以能够识别次程序的二进制文件路径
 1.修改/etc/profile
 2.或者在/etc/profile.d 目录中 建立以.SH为名称后缀的文件
 在里面定义export PATH=$PATH:/路径
2,默认情况下,系统搜索库文件的路径/lib,/usr/lib,要额外添加搜索路径
 在/etc/ld.so.conf.d/中创建以.conf为后缀命名的文件,而后把要增添的路径直接写入次文件
 ldconfig:重新搜索库文件
 -v:显示重新搜索的过程 
 
3,头文件(库调用的参数标准相关信息):输出给系统,
 默认:/usr/include
 添加头文件搜索路径,使用链接进行
 /usr/local/tengine/include/  /usr/include/
 第一种 ln -s  /usr/local/tengine/include/*  /usr/include/
 第二种 ln -s /usr/local/tengine/include/  /usr/include/tengine
4,man文件:安装在--prefix 指定目录下额man目录,/usr/share/man
 1,man -M man文件的路径
 2,在/etc/man.config 中添加一条manpath

netstat :网络状态命令
 -r 显示路由表 -rn 数字显示
 -t 显示tcp连接
 -u 显示udp连接
 -l 监听状态的连接
 -p 监听指定套接字的进程号与进程名
 
 
source /etc/profile 重新载入配置文件

kill 进程号 杀死进程
 
while ,until,for

break :提前退出循环结束任务
continue: 提前退出当前循环,继续循环

while 特殊用法
while: ;do

done 
无限循环


while read line; do    循环读取 文件每一行 存入line中

done < 输入重定向文件


函数,功能, function

代码重用:

定义函数 2种方法

1.  function 函数名 {
 函数体 
 }
 
2.  函数名() {
 函数体
 |
 
 `` 反引号,应用程序执行结果
执行结果状态,看命令的最后一条运行结果

return # 0-255  定义函数状态返回

接受参数的函数
函数名 参数1 参数2
$1 调用参数1
$2 调用参数2


进程管理

CPU中 MMU 内存管理单元 MEMORY MANAGEMENT UNIT
进程切换,上下文环境切换 

rss 常驻内存,位于物理内存不被交换出去的
vsz 虚拟内存大小 ,栈,堆,库,初始和为初始化数据,命令

thrend 线程 由进程拆分的多个小的组成部分, 可以节省内存的使用空间

进程状态

uninterruptible 不可中断的睡眠
interruptible  可中断的睡眠

init: 内核之后的第一个进程,其他均为其子进程
优先级 0-139 共140个
进程越小越高级

100-139 :用户控制
0-99: 内核调整

高优先级的优势, 1,获得更多的CPU运行时间
 2,获得优先的运行时间
 
 每个进程都有个
 nice值:友好的,优雅的
 范围-20到19
 对应 100到139
 nice值越小优先级越高
 默认都是0
 普通用户仅能够调大自己进程的nice值
 管理员可以随意调整
 
 PID:process id
 init:所有进程的父进程 PID 为 1
 进程的相关属性在目录 /proc/中对应的进程号
 
ps:process status
 BSD 风格
 sysv 风格 - 
 a:所有和终端有关的进程
 u:
 x:所有和终端无关的进程
 
 -e:所有进程
 -l:
 -f:
 ps -o 字段   显示指定字段
 
进程的分类:
 跟终端相关的进程
 跟终端无关的进程
 
进程状态:
 D:不可中断的睡眠
 R:运行或就绪
 S:可中断的睡眠
 T:停止的
 Z:僵尸
 
 <:高优先级进程
 N:低优先级
 +:前台进程组中的进程
 l:多线程进程
 s:会话领导者进程
 
 
pstree:显示进程树

pgrep: grep风格
 
 
pidof:根据程序名查找ID号

top:
 M:根据驻留内存大小排序
 P:根据CPU使用时间排序
 T:根据累计时间排序
 
 l:显示
 t:显示
 m:显示内存
 
 c:显示完整命令
 k:杀死进程
 q:退出
 
top -d # 显示延迟时长
 -b 翻屏显示
 -n # 指定屏幕数量显示
 
 
进程间通信 IPC (inter process commu)
 共享内存
 信号:
 semaphore:旗语
 
kill -l 查看信号

1:SIGHUP :让进程不用重启就可以重读配置文件,并让新的配置信息生效
2:SIGINT :ctrl + c ,中断进程
9:SIGKILL :杀死一个进程 强行杀死
15:SIGTERM : 终止一个进程 完成后事后杀死  kill 默认信号

指定一个信号:
 信号号码:kill -1
 信号名称:kill -SIGKILL
 信号名称简写 : kill -KILL  去掉SIG就行
 
kill pid
killall commmand 杀死有多个进程的命令

调整已经启动进程的nice值
 renice nice值 PID         renice  3  16522
 
调整准备启动的nice值
 nice -n nice值 command     nice -n 8 top

前台作业:占据了命令提示符
后台作业:启动之后释放命令提示符,剩余工资在后台完成

前台--后台:ctrl+z ,或者在命令启动后在后台执行,最后加&

jobs:查看所有的作业,作业号不同于进程号
bg :让后台停止的作业继续运行
 bg %作业号 默认为+


 +:命令将操作的作业
 -:命令将第二个操作的作业

fg:将后台调往前台
 fg %作业号
 
终止作业用 kill %作业号

vmstat 系统状态查看命令
 vmstat 间隔 次数  vmstat 1 5

uptime

/proc/meninfo 文件 内存信息


post----bios(boot disk select )----mbr(bootloader 446k)-----kernel---initrd-----rootfs/sbin/init(/etc/inittab)

启动的服务不同:
 运行级别:0-6
 0:halt
 1:单用户 single user mode 直接登录管理员模式 1,S,s,single都可以
 2:多用户 multi usermode ,no NFS 不挂在
 3:多用户 multi usermode ,test 模式命令行
 4:reserved 未定义,保留级别
 5:多用户 multi usermode ,图形模式
 6:reboot

redhat,suse
核心:动态加载,内核模块
内核:/lib/modules/内核版本号命名的目录

vmlinux-2.6.32

/lib/modules/2.6.32


内核设计风格:
 单内核:linux LWP 轻量级进程
 核心:ko kernel object
 
 微内核:windows,solaris  线程 
 
chroot 虚根的目录
ldd /bin/bash 查看二进制文件的共享库
tree 

ramdisk---initrd
ramfs---initramfs
 
详解启动过程:
 bootloader 
 LILO: linux bootloader
 grub:grand unified bootloader
 stage1:MBR
 stage1_5: 引导文件系统
 stage2:/boot/grub
 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
#boot=/dev/sda
default=0 设置默认启动的title编号,从0开始
timeout=5 等待的超时时长
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz 指定背景图片
hiddenmenu 隐藏菜单
password 明文密码
password --md5 加密密码 (使用grub-md5-crypt 生成)

title Red Hat Enterprise Linux Server (2.6.18-308.el5)  内核标题,可以自由修改
 root (hd0,0) 内核文件所在的设备,,gurb中所有设备都是(hd#,@) #表示第几个磁盘,@表示第几个分区 
 kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/ rhgb quiet  内核路径和传递给内核的参数
 initrd /initrd-2.6.18-308.el5.img ramdisk 文件路径


gimp 图像编辑软件
 
查看运行级别
runlevel
who -r 

查看内核:
uname -r
uname -a

安装修复 grub
安装 grub stage 1
方式1,
 grub
 root (hd0,0) 设置
 setup (hd0,0)
 quit

方法2,
 grub-install --root-directory=/(boot所在的父母目录) /device指定设备
 

grub 下启动系统

find 查找 内核和initrd文件位置
root (hd0,0)
kernel 
initrd
 
kernel 初始化过程
1.设备探测
2.驱动初始化(可能从initrd中状态驱动模块)
3.以只读文件挂载文件系统
4.状态第一个进程init (pid:1)

/sbin/init (/etc/inittab)
 
 

 id标示符:那个运行级别:动作:运行的进程
 si::sysinit:/etc/rc.d/rc.sysinit
 动作:
 initdefault:设定默认级别
 sysinit:系统初始化
 wait:等待切换至此级别
 respawn:一旦程序终止,会重新重启
 

/etc/rc.d/rc.sysinit 完成的任务
 1.激活udev和selinux
 2.根据/etc/syscti.conf 设定内核参数
 3.设定系统时钟
 4.装载键盘映射
 5.启用交换分区
 6.设置主机名
 7.根文件系统检测,并以读写方式挂载
 8.激活raid 和 lvm 设备
 9.启用磁盘配额
 10.检查并挂载其他文件系统,/etc/fstab
 11.清理过期的锁和pid文件
 
l0:0:wait:/etc/rc.d/rc.sysinit
 rc0.d
 k*
 stop
 s*
 start
 /etc/rc.d/init.d etc/init.d
 
 服务类脚本:
 start 
 
 sysv : /etc/rc.d/init.d
 start|stop|restart|status
 reload|configtest
 
 chkconfig
 
 checkconfig: 第一组数字,启动级别. 第二组SS启动顺序. 第三组KK关闭顺序
 当chkconfig命令为脚本在rc#.d目录中创建链接时
 runlevel s表示创建S*开头的文件
 
 
 
 runlevel 是- 表示所有都是K开头的链接
 renlevel 可以省略,默认为2345级别
 
 description:用户说明此脚本的简单功能, \换行 
 
chkconfig --list 查看所有独立守护服务的设定,独立守护进程
 
 
 
 
 

    chkconfig --list httpd
 chkconfig --level 2345 httpd on 
 
 /etc/rc.d/rc.local 系统最后启动的脚本
 可以把需要的命令写入让其运行
 
/etc/inittab 任务:
 1.设定默认运行级别
 2.运行系统初始化脚本
 3.运行对应的指定对应级别下额目录脚本
 4.设定 ctrl+alt+del 的操作
 5.定义ups电源
 6.启动虚拟终端(2345)
 7.启动图形终端(5)
 
 守护进程额类型
 独立守护进程
 xinetd:超级守护进程,代理人
 瞬时守护进程:不需要关联至运行级别
 大商场和专卖店
 
 
核心 :/boot/vm开头
内核模块:ko  /lib/modules/version/

内核设计:
 单内核
 模块化设计
 微内核
 
装载模块:
 insmod
 modprobe
 
用户监控和访问内核的方式
 /proc /sys

 伪文件系统
 /proc/sys:此目录中文件很多是可读写的
 /sys :某些也可以写
 
设定内核参数的方法
 echo 数值 > 重定向 /proc/sys/文件
 sysctl -w kernel.hostname=
 
 能立即生效,不能永久有效
 
 永久有效,但不能立即生效,/etc/sysctl.conf
 
 使用 sysctl -p 使内核在修改后生效
 sysctl -a 显示所有内核参数选项
 
内核模块管理
 lsmod 列出内核模块
 modprobe 模块名 装载模块
 modprobe -r 模块名 卸载模块名
 modinfo 模块名 查看模块具体信息
 
 insmod 模块路径 装载模块
 rmmod 模块名 卸载模块
 depmod 模块路径 设置模块的目录
 
 
内核中的功能除了核心功能之外,在编译时,大多数功能都有三种选择
 1,不使用功能
 2,编译成内核模块
 3,编译进内核
 
如何手动编译内核
 make gconfig:ghome 桌面环境使用,需要安装图形开发库 yum grouplist 安装
 make kconfig:kde 桌面使用
 
 make menuconfig 文本方式
 make
 make modules_install
 make install
 
 screen命令
 screen -ls 列出已经建立的会话
 screen 新建屏幕
 screen -r ID 可以还原屏幕
 ctrl+a,d 拆除屏幕
 exit 退出
 
二次编译时清理,清理前,如果需要,请备份配置文件.config
 make clean
 make mrproper
 
 mkinitrd initrd文件路径 内核版本号
 mkinitrd /boot/initrd-`uname -r`.img `umane -r`
 
 file=/etc/init.d/acpid
 echo ${file##*/}  从左向右最后一次匹配 / 删除
 acpid
 
 echo ${file#*.}  从左向右第一次匹配 . 删除
 d/acpid
 
 echo ${file##*/*/}
 acpid
 
 echo ${file%.*}  从右向左 第一次匹配 . 删除
 /etc/init
 
 echo ${file%%/*} 从右向左 最后一次匹配 / 删除
 空
 
系统启动流程
post---bios(boot device)---bootloader(mbr)---
kernel(initrd|initramfs)---init(/etc/inittab|)-----rootfs/sbin/init

 /etc/inittab
 设置默认运行级别
 系统初始化 /etc/rc.d/rc.sysinit
 运行指定级别的脚本
 /etc/rc.d/init.d
 /etc/rc.d/rc#.d
 k
 s
 00-99:运行次数
 启动虚拟终端
 启动图形终端
 
 /etc/rc.d/rc.sysinit
 检测并以读写方式挂载根文件系统
 设定主机名
 检测并挂载fstab中的文件系统
 启动SWAP分区
 初始化外围硬件的设备驱动
 根据/etc/sysctl.conf 设定内核参数
 激活udv和selinux
 激活udev和selinux
 清理过期的锁和pid文件
 状态键映射
 
 
 
 RELE 6
 UPSTART --init
 
 
内核初始化
 硬件探测
 装载驱动
 挂载根文件系统
 启动用户空间的第一进程init
 
 1,关机和重启
 shuntdown
 halt
 reboot
 poweroff
 
 2,主机名
 3,运行对应的服务脚本
 4,启动终端
 5,运行用户
 6,定义单用户级别
 7,状态网卡驱动
 8,提供一个WEB服务器
 
busybox
kernel

制定安装
 自动化安装
 定制引导盘
 
mount -n 挂载时不更新/etc/mtab文件
cat /proc/mounts 可以查看当前系统挂载的fs

mingetty 创建终端登录  运行后会调用 /bin/longin 登录提示符


脚本编程
 变量中字符的长度,$(#变量名)
 
终端提示信息
 /etc/issue 文件的内容
 
设定内核参数
 /etc/sysctl.conf
 
sysctl -p

用户

PAM 
/etc/pan.d/*

绕过PAM:
 /bin/login:
 
login:验证

nsswitch NETWORK SERVICE SWITCH
 名称解析开关
框架:
 库:libnss_file.so,
 配置文件:/etc/nsswitch.conf
 确定了去×××用户密码
 /etc/passwd /etc/shandow
 
/root/.bash_profile 中的环境变量
PS1= '[ \u @ \h \W]\$'
 
单用户模式 
 
 exec init S
 
 
内核编译

busybox
kernel+rootfs
kernel+initrd(busybox)+rootfs(busybox)

查看本机硬件信息
1. cat /proc/cpuinfo
2. lsusb
3. lspci
4. hal-device

内核配置
make menuconfig
make gconfig
make kconfig
make config

报错为.config 文件

make
make modules install
make install

模块安装位置,/lib/modules/内核版本号/

部分编译
1,只编译某子目录下的相关代码:
make dir/
make arch/
make drivers/net/

2,只编译部分模块
make M=drivers/net/

3,只编译某一模块
make /drivers/net/pcnet32.ko

4,将编译完成的结果放置别的目录
make O=/tmp/kernel


如何编译busybox:

交叉编译
make arch=平台格式

$ {变量:-对应值} 如果变量为空或者未定义,则变量展开为"对应值",否则,展开为变量的值
$ {变量:+对应值} 如果变量为空或者未定义,无操作,否则,展开为"对应值"的值
$ {变量:=对应值} 如果变量为空或者未定义,则变量展开为"对应值"并将展开为变量的值

A=HELLOWORD
ECHO ${A:2:3}   第一个数字表示略过几个,第二个数字表示之后的长度
LLO

/etc/rc.d/init.d/服务脚本

服务脚本支持配置文件: /etc/sysconfig/同名服务脚本


mktemp
创建零时文件或目录
mktemp /tmp/file.XX X是随机生成的数值
mktemp -d 零时目录 

信号:
kill -信号 PID
 1:HUP
 2:INT
 9:KILL
 15:TERM
 
脚本中的信号捕捉,但是9和15无法捕捉

ctrl + c: 2 INT

trap命令
 trap `command` 信号列表
 
一行中执行多个语句,命令中间加: 即可

任务计划
在未来的某一点执行一次某任务

 at
 batch
 
 at 时间
 at>命令
 at>ctrl + d
 指定时间的方法
 10:20
 now+3m
 noon中午,midnight午夜,teatime下午四点
 at -l =atq 显示执行列表
 at -d =atrm 删除
 
 命令的执行结果,将以邮件的形式发送给安排任务的用户 
 
 batch 系统空闲时自动执行
 
 /etc/at.allow /etc/at.deny
 
周期性的执行
 cron:自身是个不间断的服务
 anacron:cron的补充,能够实现让cron因为各种原因在过去的时间该执行的任务恢复正常执行一次
 
 cron:
 系统cron任务
 /etc/crontab
 分 时 天 月 周 用户 任务
 用户cron任务
 /varspool/cron/用户名
 分 时 天 月 周 任务
 时间的有效期
 
 时间通配符表示
 *:应对所有有效的取值
 
 
 
 
 10,40 * * * * 每小时的10分和40分执行,半小时任务
 
 -:连续时间点
 10 02 * * 1-5 每周1-5的2点10分
 
 /:对应取值范围内的每多久一次
 */3 * * * *    每3分钟一次
 
 每2小时执行一次
 0 */2 * * *
 每2天执行一次
 0 0 */2 * *
 
 执行结果将以邮件形式发送给管理员
 */3 * * * * cat /etc/fstab &> /dev/null 
 
 cron的环境变量:执行的所有命令都去PATH环境变量指定的路径下找
 PATH /bin /sbin /usr/bin /usrsbin
 
 管理用户任务
 crontab 
 -l:查看
 -e:编辑
 -r:移除所有任务
 -u:用户名 -e 管理其他用户的cron任务
 
 移除一个任务,打开编辑删除即可
 
 anacron:
 /etc/anacrontab
 
 第一项  第二项 
 多少天么运行 开机后多少时间运行     注释 
 
 使用时需确保 crond service 开启 
 
 
 make acrh/
 arch/x86/boot/bzImage  编译好的内核文件存放位置
 
 硬件驱动:initrd
 initrd:仅需提供访问真正根文件系统所在设备的驱动
 
 系统初始化rc.sysinit:提供其他硬件的驱动:
 
 ROOTFS:busybox 的INIT 不支持运行级别
 /etc/inittab 格式也不尽相同

 
转载于:https://blog.51cto.com/daxia000/1876032