压缩解压缩

压缩格式: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风格

 -u 用户

 

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 等待的超时时长

splashimage=(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)

 upstart :ubuntu开发 d bus events dirver

 systemd :


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*开头的文件

k表示创建K*开头的文件

S后面的数字表示优先级为SS

K后面的数字表示优先级为KK

runlevel 是- 表示所有都是K开头的链接

renlevel 可以省略,默认为2345级别

description:用户说明此脚本的简单功能, \换行 

chkconfig --list 查看所有独立守护服务的设定,独立守护进程

 --list 服务名 查看指定服务名

 

 --add 服务名 添加到服务列表中

 --del 服务名 删除

 --level 级别 服务名 on|off


    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

/etc/inittab

/etc/init/*.conf

内核初始化

硬件探测

装载驱动

挂载根文件系统

启动用户空间的第一进程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/用户名

分 时 天 月 周 任务

时间的有效期

时间通配符表示

*:应对所有有效的取值

  3 * * * *  每小时的第3分钟

  22 4 * * 0  每周日的4点22分

  

,:离散时间点

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 格式也不尽相同