shell 脚本命令

1.diff

diff   file file1

    -c  显示周围的行

    -u  按照一格式统一输出生成补丁

    -r  比较两个目录中文件的不同

linux学习笔记6_第1张图片

patch  -b  备份原文件

2.grep

grep   关键字符   文件|目录  在文件或目录中查找含有关键字的行

   

    -i         忽略大小写

    -n         显示关键字所在行

    -c         显示过滤结果个数 wc-l

    -v         反向过滤

    -E “关键字1|关键字2”  过滤多个关键字

    -r         在目录中查找,含有关键字的文件

注意:^关键字        以关键字开头

    关键字$           以关键字结尾

 

 

1)不区分大小写

linux学习笔记6_第2张图片

2)过滤以root开头。以root结尾

linux学习笔记6_第3张图片

3)以root开头或以root结尾

方法一:

wKioL1glWR2Cu7pjAABFQUmRDQA172.png

方法二:

wKiom1glWR7Rg9SjAABJc_oPPJI732.png

 

4)既不以root开头也不以root结尾但包含root(优先考虑)

wKioL1glWR-Q9OP9AABJSDGO598053.png

5)统计root出现了共几行,分别是哪几行

linux学习笔记6_第4张图片

6)不包含root的行

linux学习笔记6_第5张图片

7)包含root,但不在开头也不在结尾

linux学习笔记6_第6张图片

 

3.cut           截取字符

 

cut -d分隔符     指定分隔符

cut -f 1,7       显示指定的列

cut -c 1-4    显示指定的字符

 

 

 

1)以:为分隔符,取第1列和第7列。


linux学习笔记6_第7张图片


2)取出每行的第2到4个字符


linux学习笔记6_第8张图片

 

综合练习:取出eth0中ipv4的地址

wKioL1glWSri6NF5AABc7POktdo079.png

4.sort

sort          第一位数字按大小排序

        -n     纯数字排序

        -u     去重复

        |uniq -c   去除冗余并统计冗余次数

        -t     指定分隔符

        -k     指定列

1)数值排序和按第一位数字按大小排序

linux学习笔记6_第9张图片

2)去重

linux学习笔记6_第10张图片

3)统计重复次数并去重

linux学习笔记6_第11张图片

4)有分隔符的排序

linux学习笔记6_第12张图片

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原文

linux学习笔记6_第13张图片

1)将每行的第一个sbin替换成westos

sed ‘s/sbin/westos/’ passwd


linux学习笔记6_第14张图片

 

2)将全文sbin替换成westos

sed ‘s/sbin/westos/g’ passwd

其中s表示每行都替换,g表示替换这一行全部,

没有g只替换本行第一个字符。


 

linux学习笔记6_第15张图片

 

3)将全文的sbin替换成westos,同时将全文的nologin替换成linux,用-e连接


linux学习笔记6_第16张图片


4)将全文的开头的tab和空格全部删除

方法一:


linux学习笔记6_第17张图片

方法二:

linux学习笔记6_第18张图片


5)使用sed修改源文件,且修改后的输出只能是源文件


linux学习笔记6_第19张图片

 

不管-i后面接的是什么文件,sed修改的永远是源文件

 

 

 

 

 

 

修改前,如passwd3所示

linux学习笔记6_第20张图片


6)修改第三行到第五行,用3,5s

linux学习笔记6_第21张图片


7)修改第三行和第五行,用3s –e 5s

linux学习笔记6_第22张图片


8)只修改第5行

linux学习笔记6_第23张图片

9)删除第5行

linux学习笔记6_第24张图片


wKiom1glWUPgvvSEAAB01kzj32M241.png


10)复制第5行

linux学习笔记6_第25张图片


11)显示3到5行

wKiom1glWUXCRn5wAABTefBOX0k348.png


12)显示3和5行

wKioL1glWUbj19vNAABD1NQi5ms859.png


13)复制第3行和第5行

linux学习笔记6_第26张图片

7.awk

8.tr   转换字符

 

linux学习笔记6_第27张图片

综合练习:

写一个脚本:实现从一个文件读取用户名,从另一个文件读取密码,创建用户

 

脚本:

linux学习笔记6_第28张图片

方法一运行结果:

linux学习笔记6_第29张图片

方法二运行结果:

linux学习笔记6_第30张图片

 

 

 

文件系统

 

1)存在设备   fdisk

linux学习笔记6_第31张图片

2)可识别设备  /proc/partition

linux学习笔记6_第32张图片

3)可使用设备blkid

wKioL1glXOOSwntZAABD8rdXbqc745.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)创建分区

 

linux学习笔记6_第33张图片

partprobe  同步分区表

 

linux学习笔记6_第34张图片

 

2)格式化分区

linux学习笔记6_第35张图片

 

3)开机挂载

vi /etc/fstab

/dev/vdb1 /mnt  ext4 defaults 0      0

                                          不备份,不检测

 

linux学习笔记6_第36张图片


4)更新挂载文件      mount -a

 

linux学习笔记6_第37张图片

 

fdisk /dev/vdb1 不对,不能对分区分区

主分区和拓展分区之和的最大个数为15

 

 

ext=32T

xfs=18E

 

格式化的过程是安装文件系统的过程

 

mkfs.xfs   /dev/vdb5  格式化

mount /dev/vdb5 /mnt     挂载

 

查看交换分区

swapon -s

 

交换分区

1)先创建一个分区,再改标签t,w为82(不知道用L查看)


linux学习笔记6_第38张图片

 

2)格式化交换分区,mkswap/dev/vdb3

 

linux学习笔记6_第39张图片

 

3)开机挂载(第二行)

 

/dev/vdb2 swap  swap defaults 0 0

 

linux学习笔记6_第40张图片

 

4)更新挂载文件

swapon -a

 

 

linux学习笔记6_第41张图片

 

 

当交换分区满的时候,可以用一个文件当作临时交换分区

 

dd if=/dev/zero of=/mnt/swapfile bs=1M count=1000

mkswap /mnt/swapfile        格式化

swapon -a /mnt/swapfile         激活  

 

man    5   fstab 查看fstab 的信息

 

linux学习笔记6_第42张图片

磁盘加密

1.磁盘加密:

1)fdisk /dev/vdb   

2)cryptsetup luksFortmat /dev/vdb1    加锁

 

linux学习笔记6_第43张图片

 

3)cryptsetup open /dev/vdb1 linux打开锁,给设备起个名字(任意)

可以在/dev/mapper 查看设备信息

 

linux学习笔记6_第44张图片

 

4)mkfs.xfs /dev/mapper/linux      格式化设备(用新名字)

往设备里存入秘密信息哦~

 

linux学习笔记6_第45张图片

5)mount /dev/mapper/linux /mnt   

只有解锁以后设备才能挂载

///////

6)umount /mnt/     

卸载设备前不能关闭linux(锁)   

 

7)cryptsetup close  linux  把设备的钥匙关闭,关闭前要卸载设备

 


2.加密磁盘永久挂载

 

1)vim /etc/crypttab

   

解密后设备管理文件   设备            加密字符存放文件

redhat        /dev/vdb1       /root/lukspsfile

 

wKiom1glXP-RmKwoAAAVlGDP7sA075.png

 

2)chmod 600/root/lukspsfile

 

vim /root/lukspsfile

wKioL1glXP_yI_4zAAAJH0ZyJ1M036.png

 



3)关联密码文件和分区


cryptsetup luckAddKey     /dev/vdb1        /root/luksfsfile



wKiom1guq-CjINC3AAAtHFA-i3c159.png


4)vim /etc/fstab

/dev/mapper/redhat     /mnt    xfs     defaults        0 0

 

wKioL1glXQDjJsu_AABLP7Is6Ew080.png

5) reboot

 

linux学习笔记6_第46张图片

3.加密清除

vim /etc/fstable

>/etc/crypttab

rm -rf /root/lukspsfile

umount /mnt

 

wKiom1glXQKDslUvAABYh6LzxA0144.png

 

cryptsetup close redhat         关闭锁

 

mkfs.xfs /dev/vdb1

linux学习笔记6_第47张图片



磁盘阵列

1:两块同时读两个设备,写一个设备

0:两块同时读一个设备,读比较快

5:0+1

 

 

1)fdisk /dev/vdb    (fd:raid)

 

linux学习笔记6_第48张图片

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

 

linux学习笔记6_第49张图片

 

 

监控命令: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

linux学习笔记6_第50张图片

 

2)–r

linux学习笔记6_第51张图片

 

3)-a

 

linux学习笔记6_第52张图片

 

4)-D

 


 

5)-S      --stop

 

linux学习笔记6_第53张图片

磁盘配额




1.磁盘分区,更新分区表,格式化

 

2.设定配额

mkdir /pub

mount -o usrquota /dev/vdb1 /pub

chmod 1777 /pub 先挂载再更改权限

 

quotaon -uv /dev/vdb1    查看是否设置用户配额,u:user,v:详细信息

 

linux学习笔记6_第54张图片

 

edquota -u student   给指定用户配额

 

wKioL1glYFmRPgpbAABEay0P2eM950.png

 

检验:

linux学习笔记6_第55张图片

 

 

du –sh /pub/file;quota;quotastat;

linux学习笔记6_第56张图片

 

3.开机挂载

vim /etc/fstable

/dev/vdb1  /mnt   xfsdefaults,usrquota0 0



linux学习笔记6_第57张图片

 

 

电脑挂了的话,输入密码,vim /etc/fstable,再reboot

 

磁盘配额针对于分区:只对分区生效,不是针对用户,因为并没有限制用户在别的分区建立文件大小和数量!!!

 

超出配额的文件,在7天之内会被删

 

 

LVM:

 

PE:一滴果汁       physics 

PV:一个橘子      physicsvolume

VG:一大杯果汁     volumegroup

|||

LVM:倒一小杯果汁    logicalvolume managesPE的整数倍

LVM建立

1.划分物理分区并把分区id修改为8e

linux学习笔记6_第58张图片

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格式化

 

linux学习笔记6_第59张图片



mount /dev/westos/lv0 /mnt


 

linux学习笔记6_第60张图片

 

拓展分区

 

lvextend -L 200M /dev/westos/lv0 拉升逻辑卷

xfs_growfs /dev/westos/lv0  拉升文件系统

 

linux学习笔记6_第61张图片

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   拉升逻辑卷(报错)

 

linux学习笔记6_第62张图片

 

2)vgextend westos /dev/vdb2    把新的逻辑卷添加到组中


linux学习笔记6_第63张图片


3)lvextend -L 1500M /dev/westos/lv0   拉升逻辑卷


linux学习笔记6_第64张图片


4)拉升操作系统


linux学习笔记6_第65张图片


 

设备无限扩大,文件系统会受到限制

最大增加到18EB,文件系统支持最大的一个分区为18EB

 

 

缩减LVM

xfs文件系统不能缩减ext4文件系统可以缩减

 

先执行mkfs.ext4 /dev/westos/lv0

 

linux学习笔记6_第66张图片

     

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         

 



linux学习笔记6_第67张图片



 

linux学习笔记6_第68张图片

遇到的问题

 

1)缩减时,本应该先缩减文件系统,再缩减逻辑卷,但是因为失误,先缩减了逻辑卷,导致文件系统不能被挂载。

 

linux学习笔记6_第69张图片

 


    解决方法:先拉升逻辑卷,再拉升文件系统,再按照正确顺序缩减

lvreduce -L 100M /dev/westos/lv0

umount /mnt

mount /dev/westos/lv0 /mnt  报错

 

lvreduce -L 100M /dev/westos/lv0

resize2fs  /dev/westos/lv0  可以不加大小

 

linux学习笔记6_第70张图片

mount /dev/westos/lv0 /mnt  成功

 

 

 

之后缩减时注意:先缩减文件系统,再缩减逻辑卷

 

2)操作中误删了正在使用的分区

 

vgreduce --removemissing westos    把未知的错误的设备清除

 


 

linux学习笔记6_第71张图片

 

删除之后变乱码。

 

linux学习笔记6_第72张图片

 

执行vgreduce --removemissing westos

 

linux学习笔记6_第73张图片

恢复正常!!!

 

linux学习笔记6_第74张图片

 



设备的快照snapshot

 

1.做一个快照

 

lvcreate -L 10M -n lv0-backup -s /dev/westos/lv0

10M:修改内容存储大小

-n:快照的名字

-s:母盘

 

linux学习笔记6_第75张图片

 

2.快照的挂载

mount /dev/westos/lv0-backup /mnt

挂载上的快照,读取的母盘内容,修改的部分会存储在快照上

 

linux学习笔记6_第76张图片

 

 

误删快照,重新照一张就好

///

 

3.快照的删除

lvremove /dev/westos/lv0-backup

 

 

 

lvm的删除

 

lvmremove /dev/westos/lv0   删除lvm(小杯杯)

vgremove westos          删除volumegroup(大桶)

fdisk /dev/vdb  d   2      直接删除硬盘(橘子)

   

linux学习笔记6_第77张图片