1
2
3
4
5
6
7
8
9
|
linux启动流程: {
1. BLOS 识别硬件,自我测试,导向MBR
2. MBR 提供菜单选择系统项 , grup
3. Boot loader kernel 与 加载内存及检测硬件情况
4. 内核文件 加载init进程 基本命令
ls
,
cp
, 其他软件加载到内存中
5. 配置文件
/etc/rc
.d
/rc
.sysinit
6. 执行服务的启动
7. 加载
/etc/rc
.d
/rc
.
local
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
shell特殊符号: {
# 注释
\ 转义
| 管道 用于数据定向
cat
etc
/passwd
|
cut
-d: -f1
; 分隔符
~ 用户根目录
$ 变量符号
& 作业控制
! 非
/ 目录符号
>> > 数据输出
< << 数据输入
''
""
``
()
{}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
shell脚本编程: (用于系统维护,自动化管理,检测) {
习惯良好的编程习惯
#!/bin/bash 作为起始描述.
定义变量
declare
-i num=1
declare
-s str=
"sss"
执行shell脚本
source
xxx.sh(父进程中执行,可更新配置文件)
bash
xxx.sh
bash
-x xxx.sh 执行调试
输入
read
-p
""
var 输出
echo
-e (格式化输出)
字符的作用
''
只做字符的引用
""
还可做变量的引用 `` 命令做执行结果
测试包含: 1. 数字测试 2. 字符测试 3. 文件测试
1.数字测试 -gt -lt -
ge
-
le
-
eq
-
ne
可用中括号完成
2.字符测试 == =~ 正则匹配测试 != -n 判断字符是否为空 null位真 -z 可用两对中括号完成
3.文件测试 -e 存在 -f 普通文件 -d 目录 -b 块设备 -c 正则表达式字符设备 -S socket文件 -p FIFO文件 (键盘设备??) -L 连接文件 可用中括号完成
-nt file1是否比file2新? -ot file2是否比file2旧? -ef 两个文件的inode号是否一致
4.文件权限测试 -r -w -x
多条件判断 && || !
个人倾向 [ a ] && [ b ] 可有: [[ a && b ]] [ a && y ]
变量分类:
本地变量 可由用户定义,只能在当前的上下文中使用,其他shell均没有权限
定义 num=1 但在使用的时候 $1
局部变量 $? 当前命令执行的状态
环境变量 比如shell脚本第一句导入,就是环境变量,当前的shell可以访问环境变量 比如$path
位置变量
#1 #2 #2 与shell脚本执行的参数变量
特殊变量 $
#(参数个数) $@(总参数列表)
算数运算:
let
sum
+=2
流程控制:
if
[ conditions ];
then
fi
if
[ conditions ];
then
else
fi
if
[ conditions ];
then
elif
[ conditions ];
then
else
fi
case
$1
in
"a"
)
;;
"b"
)
;;
*)
;;
esac
for
$i
in
列表;
do
done
列表生成
1.
for
i
in
1 6 8;
2.
for
i
in
/usr/log/
*
3.
for
i
in
{0..10}
for
i
in
`
seq
1 10 1`
for
i
in
`
seq
1 $line 2`
for
(( i=0; i<n; i++ ));
do
done
while
[ conditions ];
do
done
while
read
line;
do
done
<
/etc/passwd
until
[ !conditions ];
do
done
函数定义:
function
name() {
echo
$1
}
name 1
shift
: 参数轮替
}
|
1
2
3
4
5
6
7
8
9
10
11
|
shell特性重定向: {
每一个命令都支持支持最基本的linux标准输入和输出
ls
/etc/passwd
可将信息输出到用户频幕上
.
/a
.txt <
/etc/passwd
.
/a
.txt <<
/etc/passwd
讲信息输入到a ??
cat
/etc/passwd
> .
/a
.txt >>
可以在
set
-C 禁止覆盖
&> 和错误也定向输出
cat
/dev/zero
>
/dev
清空硬盘
ls
/etc
&>
/dev/null
讲错误定向到null区域
双向重定向
tee
输出屏幕和文件
tee
后一般是文件
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
shell命令: {
cat
输出
ll =
ls
-l
who
谁在线
cut
讲信息进行切割
cut
-d
' '
-f1 (-d 切割字符 -f 获取切割段)
grep
对文件进行正则匹配查找 (
grep
""
文件 /
cat
/etc/passwd
|
grep
""
)
last 最后登陆信息 20条
export
打印当前用户的环境
sprt 排序
sort
-t
''
-k 3 (-t 切割字符 -k 切割后的条件)
uniq
排除重复
wc
-c -l (字符数 , 文件行数)
tr
'[A-Z]'
'[a-z]'
大小写转换
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
shell常用目录或文件: {
/etc/passwd
账户信息
/dev/null
null黑洞
/dev/zero
zero0用于填充磁盘
/etc/rc
.d
/rc
.init 启动信息
/etc/vimrc
~/.vimrc vim配置信息
/proc/partitions
分区信息
/proc/cpuinfo
/proc/meminfo
cpu meminfo信息
/etc/fstab
挂载点信息(可更新)
/proc/mounts
详细
/etc/mtab
/proc/sys/vm/swapiness
内存策略 是否启用交换分区
/etc/mdadm
.conf 阵列配置信息
/proc/mdstat
整列设备信息
/dev/rc
.d
/rc
.sysinit 开机启动项
/etc/sysconfig/network-scripts/ifcfg-eth0
网络配置
/etc/yum
.conf
/etc/yum
.repos.d/* 软件源配置
/etc/issue
欢迎信息
/boot/grup
引导器
/boot/grup/menu
.lst 引导列表
/etc/man
.config
man
文档匹配
/etc/profile
.d 脚本配置目录
/usr/include
头文件目录
/etc/ld
.so.conf.d/ 库文件所在
/proc/meminfo
内存信息
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
vim的使用: {
模式:
编辑模式 默认
/esc
命令模式 : 输入模式 i 可视模式
v
按键:
编辑模式 gg
移动 ^ h j k l $ 可与数字配合 10j
G
ZZ 退出
dd
删除整行 d
o 新插入一行
yy 复制整行 y
p 粘贴
J 合并行
u 还原 ctrl+r 撤销
r 替换一个字符
CTRL+w s 窗口分割
可视模式
v
V 选择块 行
命令模式 / 搜索 :n,md 从n到m删除 :n,ms/原内容( 可正则)/ 新内容
/g
:wq 保存退出 :q! 强制退出
设置:
nu ai sm 括号匹配 syntax 语法
其他问题:
编码:
可设置当前主机 LANG=
断行符:
UNIX2dos -k 文件
dos2UNIX -k 文件
语系编码转换:
iconv -f 原编码 -t 现编码 filename newfilenamew
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
磁盘管理: 新建普通 {
磁盘有物理和逻辑结果组成(机械式)
物理结构: 扇区 512KB 物理结构最小单位 扇面 柱面 分区最小单位 (千层饼??)
在磁盘的第一个扇区 有446KB的MBR主引导 分区表64KB (16*4) 2KB标识位
逻辑结构: 磁盘被分为许多block, inode
众多的block组成了block group -> super block,文件描述信息,inode talbe,block bitmap,inode bitmap,block
文件描述信息: 描述上述东西的存在
super block: 描述block,inode数量 使用量
block: 最小逻辑单位 1K 2K 4K
inode: 记录block12个block的位置 共128byte 一般情况下拥有12个直接 1一个间接 1个双间接 1个三间接
block bitmap: 记录block的使用情况
inode bitmap: 记录inode的使用情况
常见文件系统格式:
基本: ext2 ext3 ext4 Reiserfs(小) JFS vfat xfs(大)
集群: GFS2 , OCFS2
网路: NFS , smbfs
光盘: ISO9660
交换分区: SWAP
分区磁盘分为两种情况:
1, 已存在系统
kpartx -i
/dev/sda
kpartx -af
/dev/sda
partx -a
/dev/sda
2, 新磁盘
操作:
查看
cat
/proc/partitions
磁盘信息
1. 分区
fdisk
sfdisk parted
2. 格式化 mkfs mkfs.exts mk2efs (在格式化也可对文件系统调整)
3. 信息查看/调整
blkid (格式化后文件系统信息)
dumpe2fs (超级块信息)
tune2fs (调整文件系统选项)
e2label (改变label)
hdparm (硬件信息)
resize2fs (从新调整大小)
4. 检测
fsck
e2fsck
5. 交换分区 mkswap swapon
/off
6. 挂载
mount
umount
(手动,开机)
过程中需要使用到的信息
fuser 挂载占用
df
磁盘空闲状态
du
目录评估占用
dd
填充
ln
链接
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
磁盘管理: raid {
HBA 查看机器raid情况
/proc/mdstat
raid的出现是为了 1.提高 读 a 写 b 速度 2. 容错能力 3. 备份 4.利用率 5. 至少数量
raid 0
yes
no no 100 2
raid 1 1a
yes
yes
50 2
raid 5
yes
yes
no n-1
/n
3
raid01 1a
yes
yes
n-2
/n
4
raid10
yes
yes
yes
n-2
/n
4
jbad 连接磁盘
实例:创建一个空间大小为10G的RAID5设备,要求其chunk大小为1024K,格式经为ext4文件系统,开机可自动挂载至
/backup
目录,并支持acl功能;
mdadm -C
/dev/md0
-a
yes
-l 5 -n 4 -c 1024K
/dev/sdb
/dev/sdc
/dev/sdd
/dev/sde
# 只有阵列完毕才可以格式化
mkfs -t ext4
/dev/md0
#调整绝大数磁盘信息
tune2fs -o acl
/dev/md0
可以调整目录的label的名字
e2label
/dev/md0
"xxxx"
dumpe2fs -h
/dev/md0
#编辑/etc/fstab
/dev/md0
/backup
ext4 defaults 0 0
UUID=5dc72528-30ef-44cd-a38f-7fd0ee176a46
/backup
ext4 defaults 0 0
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
磁盘管理: LVM {
LVM: 逻辑卷管理器(可弹性管理磁盘策略) 扩容不需要停止业务 缩容需要停止业务
分区之后的物理盘加入到卷组中(逻辑概念)之后假如逻辑卷(中间多了一个中间层,由内核驱动完成,内核提供了这样的中间层)
流程:
1. 将需要假如LVM的磁盘格式化
2. pvcreate
/dev/sd
{a-z}
3. vgcreate -s 16M vgname
/dev/sd
{a-z}
4. lvcreate -L 容量 lvname vgname
5. 挂载
/dev/vgname/lvname
动态其他操作:
1. 扩容 先扩大物理容量,再逻辑容量
2. 缩小 先缩小逻辑容量,再物理容量
练习:
1、创建一个由两个物理卷组成大小为20G的卷组myvg,要求PE大小16M;而后新建 大小为7G逻辑卷mylv1,要求其文件系统为ext4,块大小为2048,且开机能自动挂载至
/users
;
2、新建用户openstack,其家目录为
/users/openstack
,而后切换至openstack用户,复制一些文件至其家目录中;
3、缩减mylv1至5G大小;而后切换至openstack用户,确保其数据没有丢失;
4、对mylv1创建快照卷snap-mylv1,并通过其备份数据至
/tmp/user
.
tar
.bz2;
#1
pvscan
pvcreate
/dev/sd
{b,c}
pvdisplay
vgcreate -s 16M
test
/dev/sd
{b,c}
vgscan
vgdisplay
lvcreate -L 7G -n mylv
test
mkfs -t ext4
/dev/test/mylv
tune2fs -r 2048
/dev/test/mylv
vi
/etc/mdadm
.conf
ARRAY
/dev/md0
UUID=5dc72528-30ef-44cd-a38f-7fd0ee176a46
#编辑/etc/fstab
/dev/md0
/backup
ext4 defaults 0 0
UUID=5dc72528-30ef-44cd-a38f-7fd0ee176a46
/backup
ext4 defaults 0 0
#2
useradd
openstack -d
/users
su
openstack
cp
-rf
/var/
*
/users
#3
pvdisplay
umount
/dev/test/mylv
e2fsck -f
/dev/test/mylv
resize2fs
/dev/test/mylv
5G
mount
/dev/test/mylv
/users
lvresize -L 5G
/dev/test/mylv
#4 快照
lvcreate -L 50M -s -n mylv-snap
/dev/test/mylv
mkdir
/snap
mount
/dev/test/mylv-snap
/snap
tar
-jcf
/snap/
* >
/tmp/user
.
tar
.bz2
tar
-jcv -f
/tmp/user
.
tar
.bz2
/snap/
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
压缩,归档工具: {
这里包含压缩和归档的过程,两个在这里就不区分了,因为使用非常简单
tar
-c 创建压缩/归档文件夹
-x 解压压缩/归档文件
-f 欲解压压缩的文件或包
-j 对应使用
gzip
压缩工具
-z 对应使用
bzip2
压缩工具
-J 对应使用xz压缩工具
-
v
查看解压压缩过程
实例 在解压和压缩的过程 j J z 都可以省略 自动判断后缀选择压缩工具
tar
-xf nginx-1.4.2.
tar
.gz 解压
tar
-cf axel-2.4.
tar
.bz axel-2.4/ 压缩
}
|
本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1362564
,如需转载请自行联系原作者