shell 脚本命令
1.diff
diff file file1
-c 显示周围的行
-u 按照一格式统一输出生成补丁
-r 比较两个目录中文件的不同
patch -b 备份原文件
2.grep
grep 关键字符 文件|目录 在文件或目录中查找含有关键字的行
-i 忽略大小写
-n 显示关键字所在行
-c 显示过滤结果个数 wc-l
-v 反向过滤
-E “关键字1|关键字2” 过滤多个关键字
-r 在目录中查找,含有关键字的文件
注意:^关键字 以关键字开头
关键字$ 以关键字结尾
1)不区分大小写
2)过滤以root开头。以root结尾
3)以root开头或以root结尾
方法一:
方法二:
4)既不以root开头也不以root结尾但包含root(优先考虑)
5)统计root出现了共几行,分别是哪几行
6)不包含root的行
7)包含root,但不在开头也不在结尾
3.cut 截取字符
cut -d分隔符 指定分隔符
cut -f 1,7 显示指定的列
cut -c 1-4 显示指定的字符
1)以:为分隔符,取第1列和第7列。
2)取出每行的第2到4个字符
综合练习:取出eth0中ipv4的地址
4.sort
sort 第一位数字按大小排序
-n 纯数字排序
-u 去重复
|uniq -c 去除冗余并统计冗余次数
-t 指定分隔符
-k 指定列
1)数值排序和按第一位数字按大小排序
2)去重
3)统计重复次数并去重
4)有分隔符的排序
5.uniq
sort file |unqi -c 去除冗余并统计冗余次数
-d 显示冗余行
-u 显示唯一行
6.sed
sed 's/源字符/目的字符/g' g这一行全部,只替换第一个,s全文的
sed -e '策略1' -e '策略2' file 多个策略用-e
sed -i 修改源文件,当文件非常大时,用vim打开的时间很长,用-i直接修改
sed '3,5/源字符/目的字符/g' 3到5行替换,3和5行替换用-e
sed xd 屏蔽指定行
sed xp 复制指定行
sed -n xp 只显示指定行
sed -ne 3p -ne 5p /mnt/passwd 只显示3和5行
练习:
passwd原文
1)将每行的第一个sbin替换成westos
sed ‘s/sbin/westos/’ passwd
2)将全文sbin替换成westos
sed ‘s/sbin/westos/g’ passwd
其中s表示每行都替换,g表示替换这一行全部,
没有g只替换本行第一个字符。
3)将全文的sbin替换成westos,同时将全文的nologin替换成linux,用-e连接
4)将全文的开头的tab和空格全部删除
方法一:
方法二:
5)使用sed修改源文件,且修改后的输出只能是源文件
不管-i后面接的是什么文件,sed修改的永远是源文件
修改前,如passwd3所示
6)修改第三行到第五行,用3,5s
7)修改第三行和第五行,用3s –e 5s
8)只修改第5行
9)删除第5行
10)复制第5行
11)显示3到5行
12)显示3和5行
13)复制第3行和第5行
7.awk
8.tr 转换字符
综合练习:
写一个脚本:实现从一个文件读取用户名,从另一个文件读取密码,创建用户
脚本:
方法一运行结果:
方法二运行结果:
文件系统
1)存在设备 fdisk
2)可识别设备 /proc/partition
3)可使用设备blkid
划分分区后,还未被系统识别时,分区信息在硬盘中的477的64里
mbr:最大2T
gpt:更大
管理存储设备
1.分区划分
fdisk
m help
d 删除分区
g gpt
l 列出系统可用的分区类型
n 新建分区
q 退出
t 修改分区功能id
w 保存更改到分区
p 显示分区
p primary 主分区
e extended 拓展分区
Partition number (1-4, default 1): 1 分区id
First sector (2048-20971519, default 2048): +100分区大小
wq 退出并保存,q表示退出不保存
1)创建分区
partprobe 同步分区表
2)格式化分区
3)开机挂载
vi /etc/fstab
/dev/vdb1 /mnt ext4 defaults 0 0
不备份,不检测
4)更新挂载文件 mount -a
fdisk /dev/vdb1 不对,不能对分区分区
主分区和拓展分区之和的最大个数为15
ext=32T
xfs=18E
格式化的过程是安装文件系统的过程
mkfs.xfs /dev/vdb5 格式化
mount /dev/vdb5 /mnt 挂载
查看交换分区
swapon -s
交换分区
1)先创建一个分区,再改标签t,w为82(不知道用L查看)
2)格式化交换分区,mkswap/dev/vdb3
3)开机挂载(第二行)
/dev/vdb2 swap swap defaults 0 0
4)更新挂载文件
swapon -a
当交换分区满的时候,可以用一个文件当作临时交换分区
dd if=/dev/zero of=/mnt/swapfile bs=1M count=1000
mkswap /mnt/swapfile 格式化
swapon -a /mnt/swapfile 激活
man 5 fstab 查看fstab 的信息
磁盘加密
1.磁盘加密:
1)fdisk /dev/vdb
2)cryptsetup luksFortmat /dev/vdb1 加锁
3)cryptsetup open /dev/vdb1 linux打开锁,给设备起个名字(任意)
可以在/dev/mapper 查看设备信息
4)mkfs.xfs /dev/mapper/linux 格式化设备(用新名字)
往设备里存入秘密信息哦~
5)mount /dev/mapper/linux /mnt
只有解锁以后设备才能挂载
///////
6)umount /mnt/
卸载设备前不能关闭linux(锁)
7)cryptsetup close linux 把设备的钥匙关闭,关闭前要卸载设备
2.加密磁盘永久挂载
1)vim /etc/crypttab
解密后设备管理文件 设备 加密字符存放文件
redhat /dev/vdb1 /root/lukspsfile
2)chmod 600/root/lukspsfile
vim /root/lukspsfile
3)关联密码文件和分区
cryptsetup luckAddKey /dev/vdb1 /root/luksfsfile
4)vim /etc/fstab
/dev/mapper/redhat /mnt xfs defaults 0 0
5) reboot
3.加密清除
vim /etc/fstable
>/etc/crypttab
rm -rf /root/lukspsfile
umount /mnt
cryptsetup close redhat 关闭锁
mkfs.xfs /dev/vdb1
磁盘阵列
1:两块同时读两个设备,写一个设备
0:两块同时读一个设备,读比较快
5:0+1
1)fdisk /dev/vdb (fd:raid)
2)mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sdb{1..3}
3)mkfs.xfs /dev/md0
4)mount /dev/md0
监控命令:watch -n cat /proc/mastat
mdadm -f/dev/md0 /dev/vdb1 手动挂掉
-D /dev/md0 查看详细信息
-r /dev/md0 /dev/vdb1 remove
-a /dev/md0 /dev/vdb1 添加
-S /dev/md0 当只有一个分区的时候,不能再用-r删除,用-s停止设备,停止前要卸载
1)-f
2)–r
3)-a
4)-D
5)-S --stop
磁盘配额
1.磁盘分区,更新分区表,格式化
2.设定配额
mkdir /pub
mount -o usrquota /dev/vdb1 /pub
chmod 1777 /pub 先挂载再更改权限
quotaon -uv /dev/vdb1 查看是否设置用户配额,u:user,v:详细信息
edquota -u student 给指定用户配额
检验:
du –sh /pub/file;quota;quotastat;
3.开机挂载
vim /etc/fstable
/dev/vdb1 /mnt xfsdefaults,usrquota0 0
电脑挂了的话,输入密码,vim /etc/fstable,再reboot
磁盘配额针对于分区:只对分区生效,不是针对用户,因为并没有限制用户在别的分区建立文件大小和数量!!!
超出配额的文件,在7天之内会被删
LVM:
PE:一滴果汁 physics
PV:一个橘子 physicsvolume
VG:一大杯果汁 volumegroup
|||
LVM:倒一小杯果汁 logicalvolume managesPE的整数倍
LVM建立
1.划分物理分区并把分区id修改为8e
pvs|pvdisplay
gvs|vgdisplay 查看表
lvs|lcdisplay
pvcreate /dev/vdb1 创建逻辑卷
vgcreate westos/dev/vdb1 创建逻辑组,westos
lvcreate -L100M -n lv0 westos创建逻辑卷管理,-L 大小,-n名称,westos属于哪个逻辑组
mkfs.xfs /dev/westos/lv0格式化
mount /dev/westos/lv0 /mnt
拓展分区
lvextend -L 200M /dev/westos/lv0 拉升逻辑卷
xfs_growfs /dev/westos/lv0 拉升文件系统
pvcreate /dev/vdb2 创建一个新的逻辑卷
vgextend westos /dev/vdb2 把新的逻辑卷添加到组中
lvextend -L 1500M/dev/westos/lv0 拉升逻辑卷
监控命令
watch -n 1 'echo === pvinfo ===;pvs;echo === vginfo===;vgs;echo === lvinfo ===;lvs;echo mnt;df -h /mnt'
当拉升分区非常大时,把新分区加入逻辑组
1)lvextend -L 1500M /dev/westos/lv0 拉升逻辑卷(报错)
2)vgextend westos /dev/vdb2 把新的逻辑卷添加到组中
3)lvextend -L 1500M /dev/westos/lv0 拉升逻辑卷
4)拉升操作系统
设备无限扩大,文件系统会受到限制
最大增加到18EB,文件系统支持最大的一个分区为18EB
缩减LVM
xfs文件系统不能缩减,ext4文件系统可以缩减。
先执行mkfs.ext4 /dev/westos/lv0
umount /mnt/
e2fsck -f /dev/westos/lv0 先检测能不能缩
resize2fs /dev/westos/lv0 200M 缩减文件系统大小
lvreduce -L 200M /dev/westos/lv0 缩减lvm大小
pvmove /dev/vdb1 /dev/vdb2 将vdb2的内容传到vdb1上
vgreduce westos /dev/vdb1 将/dev/vdb1从逻辑组中westos删除
pvremove /dev/vdb1
遇到的问题
1)缩减时,本应该先缩减文件系统,再缩减逻辑卷,但是因为失误,先缩减了逻辑卷,导致文件系统不能被挂载。
解决方法:先拉升逻辑卷,再拉升文件系统,再按照正确顺序缩减
lvreduce -L 100M /dev/westos/lv0
umount /mnt
mount /dev/westos/lv0 /mnt 报错
lvreduce -L 100M /dev/westos/lv0
resize2fs /dev/westos/lv0 可以不加大小
mount /dev/westos/lv0 /mnt 成功
之后缩减时注意:先缩减文件系统,再缩减逻辑卷
2)操作中误删了正在使用的分区
vgreduce --removemissing westos 把未知的错误的设备清除
删除之后变乱码。
执行vgreduce --removemissing westos
恢复正常!!!
设备的快照snapshot
1.做一个快照
lvcreate -L 10M -n lv0-backup -s /dev/westos/lv0
10M:修改内容存储大小
-n:快照的名字
-s:母盘
2.快照的挂载
mount /dev/westos/lv0-backup /mnt
挂载上的快照,读取的母盘内容,修改的部分会存储在快照上
误删快照,重新照一张就好
///
3.快照的删除
lvremove /dev/westos/lv0-backup
lvm的删除
lvmremove /dev/westos/lv0 删除lvm(小杯杯)
vgremove westos 删除volumegroup(大桶)
fdisk /dev/vdb d 2 直接删除硬盘(橘子)