压缩解压缩
压缩格式: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 等待的超时时长
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)
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 格式也不尽相同
转载于:https://blog.51cto.com/daxia000/1876032