shell
脚本命令
1.diff
diff file file1
-c 显示周围的行
-u 按照一格式统一输出生成补丁
-r 比较两个目录中文件的不同
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070553242.jpg" title="image001.png" />
patch -b 备份原文件
2.grep
grep 关键字符 文件|目录 在文件或目录中查找含有关键字的行
-i 忽略大小写
-n 显示关键字所在行
-c 显示过滤结果个数 wc-l
-v 反向过滤
-E “关键字1|关键字2” 过滤多个关键字
-r 在目录中查找,含有关键字的文件
注意:^关键字 以关键字开头
关键字$ 以关键字结尾
1)不区分大小写
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070553475.jpg" title="image003.png" />
2)过滤以root开头。以root结尾
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070553738.jpg" title="image005.png" />
3)以root开头或以root结尾
方法一:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070554000.jpg" title="image007.png" />
方法二:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070554239.jpg" title="image009.png" />
4)既不以root开头也不以root结尾但包含root(优先考虑)
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070554526.jpg" title="image011.png" />
5)统计root出现了共几行,分别是哪几行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070554814.jpg" title="image013.png" />
6)不包含root的行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070555043.jpg" title="image015.png" />
7)包含root,但不在开头也不在结尾
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070555329.jpg" title="image017.png" />
3.cut 截取字符
cut -d分隔符 指定分隔符
cut -f 1,7 显示指定的列
cut -c 1-4 显示指定的字符
1)以:为分隔符,取第1列和第7列。
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070555570.jpg" title="image019.png" />
2)取出每行的第2到4个字符
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070555867.jpg" title="image021.png" />
综合练习:取出eth0中ipv4的地址
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070556099.jpg" title="image023.png" />
4.sort
sort 第一位数字按大小排序
-n 纯数字排序
-u 去重复
|uniq -c 去除冗余并统计冗余次数
-t 指定分隔符
-k 指定列
1)数值排序和按第一位数字按大小排序
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070556351.jpg" title="image025.png" />
2)去重
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070556656.jpg" title="image027.png" />
3)统计重复次数并去重
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070556886.jpg" title="image029.png" />
4)有分隔符的排序
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070557124.jpg" title="image031.png" />
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原文
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070557370.jpg" title="image033.png" />
1)将每行的第一个sbin替换成westos
sed ‘s/sbin/westos/’ passwd
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070557711.jpg" title="image035.png" />
2)将全文sbin替换成westos
sed ‘s/sbin/westos/g’ passwd
其中s表示每行都替换,
g
表示替换这一行全部,
没有g只替换本行第一个字符。
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070558033.jpg" title="image037.png" />
3)将全文的sbin替换成westos,同时将全文的nologin替换成linux,用-e连接
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070558368.jpg" title="image039.png" />
4)将全文的开头的tab和空格全部删除
方法一:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070558701.jpg" title="image041.png" />
方法二:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070559150.jpg" title="image043.png" />
5)使用sed修改源文件,且修改后的输出只能是源文件
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070559468.jpg" title="image045.png" />
不管-i后面接的是什么文件,sed修改的永远是源文件
修改前,如passwd3所示
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070559830.jpg" title="image047.png" />
6)修改第三行到第五行,用3,5s
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070600196.jpg" title="image049.png" />
7)修改第三行和第五行,用3s –e 5s
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070600543.jpg" title="image051.png" />
8)只修改第5行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070600825.jpg" title="image053.png" />
9)删除第5行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070601144.jpg" title="image055.png" />
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070601472.jpg" title="image057.png" />
10)复制第5行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070601734.jpg" title="image059.png" />
11)显示3到5行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070602097.jpg" title="image061.png" />
12)显示3和5行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070602519.jpg" title="image063.png" />
13)复制第3行和第5行
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070602750.jpg" title="image065.png" />
7.awk
8.tr 转换字符
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070602988.jpg" title="image067.png" />
综合练习:
写一个脚本:实现从一个文件读取用户名,从另一个文件读取密码,创建用户
脚本:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070603238.jpg" title="image069.png" />
方法一运行结果:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070603651.jpg" title="image071.png" />
方法二运行结果:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070604004.jpg" title="image073.png" />
文件系统
1
)存在设备 fdisk
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070604358.jpg" title="image075.png" />
2)可识别设备 /proc/partition
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070604716.jpg" title="image077.png" />
3
)可使用设备blkid
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070604935.jpg" title="image079.png" />
划分分区后,还未被系统识别时,分区信息在硬盘中的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)创建分区
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070605181.jpg" title="image081.png" />
partprobe 同步分区表
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070605638.jpg" title="image083.png" />
2)格式化分区
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070606071.jpg" title="image085.png" />
3)开机挂载
vi /etc/fstab
/dev/vdb1 /mnt ext4 defaults 0 0
不备份,不检测
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070606545.jpg" title="image087.png" />
4)更新挂载文件 mount -a
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070606927.jpg" title="image089.png" />
fdisk /dev/vdb1 不对,不能对分区分区
主分区和拓展分区之和的最大个数为15
ext=32T
xfs=18E
格式化的过程是安装文件系统的过程
mkfs.xfs /dev/vdb5 格式化
mount /dev/vdb5 /mnt 挂载
查看交换分区
swapon -s
交换分区
1)先创建一个分区,再改标签t,w为82(不知道用L查看)
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070607226.jpg" title="image091.png" />
2)格式化交换分区,mkswap/dev/vdb3
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070607540.jpg" title="image093.png" />
3
)开机挂载(第二行)
/dev/vdb2 swap swap defaults 0 0
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070607957.jpg" title="image095.png" />
4)更新挂载文件
swapon -a
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070608221.jpg" title="image097.png" />
当交换分区满的时候,可以用一个文件当作临时交换分区
dd if=/dev/zero of=/mnt/swapfile bs=1M count=1000
mkswap /mnt/swapfile 格式化
swapon -a /mnt/swapfile 激活
man 5 fstab 查看fstab 的信息
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070608486.jpg" title="image099.png" />
磁盘加密
1.
磁盘加密
:
1)fdisk /dev/vdb
2)cryptsetup luksFortmat /dev/vdb1 加锁
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070608850.jpg" title="image101.png" />
3)cryptsetup open /dev/vdb1 linux打开锁,给设备起个名字(任意)
可以在/dev/mapper 查看设备信息
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070609095.jpg" title="image103.png" />
4)mkfs.xfs /dev/mapper/linux 格式化设备(用新名字)
往设备里存入秘密信息哦~
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070609447.jpg" title="image105.png" />
5)mount /dev/mapper/linux /mnt
只有解锁以后设备才能挂载
///////
6)umount /mnt/
卸载设备前不能关闭linux(锁)
7)cryptsetup close linux 把设备的钥匙关闭,关闭前要卸载设备
2.
加密磁盘永久挂载
1)vim /etc/crypttab
解密后设备管理文件 设备 加密字符存放文件
redhat /dev/vdb1 /root/lukspsfile
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070609771.jpg" title="image107.png" />
2)chmod 600/root/lukspsfile
vim /root/lukspsfile
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070609950.jpg" title="image109.png" />
3)cryptsetup luckAddKey /dev/vdb1/root/luksfsfile关联密码文件和分区
vim /etc/fstab
/dev/mapper/redhat /mnt xfs defaults 0 0
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070610174.jpg" title="image111.png" />
4) reboot
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070610542.jpg" title="image113.png" />
3.加密清除
vim /etc/fstable
>/etc/crypttab
rm -rf /root/lukspsfile
umount /mnt
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070611127.jpg" title="image115.png" />
cryptsetup close redhat 关闭锁
mkfs.xfs /dev/vdb1
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070611436.jpg" title="image117.png" />
磁盘阵列
1:两块同时读两个设备,写一个设备
0:两块同时读一个设备,读比较快
5:0+1
1)fdisk /dev/vdb (fd:raid)
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070611787.jpg" title="image119.png" />
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
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070612085.jpg" title="image121.png" />
监控命令: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
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070612516.jpg" title="image123.png" />
2)–r
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070612908.jpg" title="image125.png" />
3)-a
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070613170.jpg" title="image127.png" />
4)-D
5)-S --stop
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070613477.jpg" title="image131.png" />
磁盘配额
1.
磁盘分区,更新分区表,格式化
2.
设定配额
mkdir /pub
mount -o usrquota /dev/vdb1 /pub
chmod 1777 /pub 先挂载再更改权限
quotaon -uv /dev/vdb1 查看是否设置用户配额,u:user,v:详细信息
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070613877.jpg" title="image133.png" />
edquota -u student 给指定用户配额
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070614149.jpg" title="image135.png" />
检验:
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070614423.jpg" title="image137.png" />
du –sh /pub/file;quota;quotastat;
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070614788.jpg" title="image139.png" />
3.开机挂载
vim /etc/fstable
/dev/vdb1 /mnt xfsdefaults,usrquota0 0
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070615079.jpg" title="image141.png" />
电脑挂了的话,输入密码,vim /etc/fstable,再reboot
磁盘配额
针对于分区:只对分区生效,不是针对用户,因为并没有限制用户在别的分区建立文件大小和数量!!!
超出配额的文件,在7天之内会被删
LVM:
PE:一滴果汁 physics
PV:一个橘子 physicsvolume
VG:一大杯果汁 volumegroup
|||
LVM:倒一小杯果汁 logicalvolume managesPE的整数倍
LVM
建立
1.划分物理分区并把分区id修改为8e
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070615347.jpg" title="image143.png" />
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格式化
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070615619.jpg" height="297" width="371" />
mount /dev/westos/lv0 /mnt
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070615940.jpg" title="image147.png" />
拓展分区
lvextend -L 200M /dev/westos/lv0 拉升逻辑卷
xfs_growfs /dev/westos/lv0 拉升文件系统
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070616196.jpg" title="image149.png" />
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 拉升逻辑卷(报错)
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070616539.jpg" title="image151.png" />
2)vgextend westos /dev/vdb2 把新的逻辑卷添加到组中
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070616875.jpg" title="image153.png" />
3)lvextend -L 1500M /dev/westos/lv0 拉升逻辑卷
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070617721.jpg" title="image155.png" />
4)拉升操作系统
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070618013.jpg" title="image157.png" />
设备无限扩大,文件系统会受到限制
最大增加到18EB,文件系统支持最大的一个分区为18EB
缩减
LVM
xfs文件系统不能缩减,ext4文件系统可以缩减。
先执行mkfs.ext4 /dev/westos/lv0
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070618274.jpg" title="image159.png" />
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
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070618819.jpg" title="image161.png" />
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070619126.jpg" title="image163.png" />
遇到的问题
1)缩减时,本应该先缩减文件系统,再缩减逻辑卷,但是因为失误,先缩减了逻辑卷,导致文件系统不能被挂载。
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070619491.jpg" title="image165.png" />
解决方法:先拉升逻辑卷,再拉升文件系统,再按照正确顺序缩减
lvreduce -L 100M /dev/westos/lv0
umount /mnt
mount /dev/westos/lv0 /mnt 报错
lvreduce -L 100M /dev/westos/lv0
resize2fs /dev/westos/lv0 可以不加大小
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070619865.jpg" title="image167.png" />
mount /dev/westos/lv0 /mnt 成功
之后缩减时注意:先缩减文件系统,再缩减逻辑卷
2)操作中误删了正在使用的分区
vgreduce --removemissing westos 把未知的错误的设备清除
设备的快照
snapshot
1.
做一个快照
lvcreate -L 10M -n lv0-backup -s /dev/westos/lv0
10M:修改内容存储大小
-n:快照的名字
-s:母盘
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070620137.jpg" title="image169.png" />
2.
快照的挂载
mount /dev/westos/lv0-backup /mnt
挂载上的快照,读取的母盘内容,修改的部分会存储在快照上
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108070620389.jpg" title="image171.png" />
误删快照,重新照一张就好
///
3.
快照的删除
lvremove /dev/westos/lv0-backup
lvm
的删除
lvmremove /dev/westos/lv0 删除lvm(小杯杯)
vgremove westos 删除volumegroup(大桶)
fdisk /dev/vdb d 2 直接删除硬盘(橘子)
本文出自 “12049878” 博客,谢绝转载!
原文:http://12059878.blog.51cto.com/12049878/1871767