**************************

********6.shell脚本命令*****

**************************

 

******1.diff****

difffile file1//比较两个文件的不同

-c//显示上下周围的行

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

-r//比较两个目录有什么不同

 

patchfile   file.path        //打补丁


 

wKiom1gjRB_igI3vAACQTxsaqrU200.png

wKioL1gjRCDTG_7iAAHwxHVRK88800.png

wKioL1gjRCHy0MnnAAGVvsgGpVM974.png

wKiom1gjRCGBIeCYAAIM5i-RL8g340.png


 

******2.grep****   【查询,grep 正则表达式】

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


grep-i//忽略大小写

-n//显示关键字所在行

-c//显示过滤结果的个数

-v//反向过滤 【非】

-E “关键字1|关键字2”//过滤多个关键字  【表示的两个关键字意义为:或,且。满足其中一个,或者同时满足两个】

-r目录//在目录中查找含有关键字的文件 【例如: grep -r root /etc/ ,绝对会有很多数据输出来,并且开头有文件名称】

 

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

      关键字$//以关键字结尾

 

wKioL1gjRGHRi66XAAKsFyHFQsw491.png

wKiom1gjRGHCBrfMAACGHN30lOI762.png

wKioL1gjRGKjsOpOAAEMSaUldaE960.png

wKiom1gjRGPiGymPAAEFFqLQCdM251.png

 

*****3.cut*****

cut//截取字符

cut -d 分隔符//指定分隔符

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

cut -c 1-4//显示指定序号的字符(第几到第几个)


wKiom1gjRLOAlQccAAEDWiM-YmU027.png

wKioL1gjRLSBaYN7AAEMWfIAsdw439.png

wKioL1gjRLbwU7UjAADOUUozAMs840.png


【例子,显示ifconfig br0 下的ip ifconfig br0 | grep "inet " | awk -F " " '{print $2}' 】

 

***4.sort***//排序

sort

-n//纯数字排序

-u//去掉重复

|uniq -c//去掉重复的,并统计重复次数 【首行显示】

-t//指定分隔符

-k//指定列

【例如 要排序一个文件,但所数字不再开头,在:后。则命令为 sort -t : -k 2 -n file。表示:指定分隔符为:,且在:后第二位 并且将其纯属字进行排序。如若统计重复数字出现的次数,则可家 |uniq -c 】


 

wKioL1gjRTjD6hlfAACKzXhwyQM617.png

wKiom1gjRTnCiVCzAACOMefKc6s839.png

wKioL1gjRTriN5clAABOiHil2u0956.png


****5.uniq****【必须配合sort使用】

sort file |uniq -c//去掉重复并统计重复的次数

-d//显示重复的行

-u//显示唯一的行

 

wKiom1gjRVHjW724AADOBPqLY28758.png

wKioL1gjRVGDQil2AABQ8F_ZdaU754.png

wKiom1gjRVKgIEGMAABogRlA6i4521.png


****6.sed****

sed 's/源字符/替换字符/g' file

sed -e '策略1'-e '策略2' file

sed -i file//把转换后的内容输入到指定文件

sed '3,5s/原字符/替换字符/g'//3-5行替换

sed xd//屏蔽指定行

sed xp//复制指定行

sed -n xp//只显示指定行 【显示大于以行的信息   sed -ne xp -ne yp filename】

 

wKiom1gjRYCj9EXqAAHVUmoy5iY118.png

wKioL1gjRYXyyKCUAAFu-IroRnM154.png

wKioL1gjRYrDt7QPAAFoCDOHBvg023.png

wKiom1gjRY_RCnonAAGxYK25bQo705.png

wKioL1gjRZPxgNhyAAE3ixf-I5E087.png

wKiom1gjRZjBzxUEAAFu7t8bVZk101.png


****7.awk****【重点】

相对于sed常常作为一整行的处理,awk则比较倾向于将一行分成数个“字段”来处理。因此,awk相当适合处理小型的数据,awk通常运行的模式是:awk '条件类型1 {动作1} 条件类型2 {动作2} 'filename。

 

执行last -n 5 输出的是当前用户的登陆情况。若想进行优化,只提取出用户名和ip,则可用 last -n 5 | awk '{print $1 "\t" $3}' 。

其中,$1表示root ; $3表示ip "\t" 表示回车符,其实还有个$0,它代表一整行数据的意思。

 

变量名称代表意义

NF每一行{$0}拥有的字段总数

NR目前awk处理的是“第几行” 数据

FS 目前的分割字符,默认是空格键

 

举例:last -n 5 | awk '{print $1 "\t lines:" NR "\t columes:" NF}'【显示后五行,并且输出$1,行数和每一行拥有的字段总数(有分隔就为1字段)】

 

cat /etc/passwd | \

>awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3 }'【在/etc/passwd 当中是以冒号“:” 来作为字段的分隔,该文件中第一字段为帐号,第三字段则是UID,那假设我们要查阅,第三列小于10以下的数据,并且仅列出帐号与第三列】 【BEGIN表示变量的起始时从开头,如若不然则第一段不能正确输出】

**区分**

例如 cat /etc/passwd | awk 'BEGIN {FS=":"} { print $3 } ' 【表示输出以:为分隔的第三段字符】 【print中可没有逻辑运算符,写进去 例如 {print $X<Y } 是错误的】

    cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10  '  【表示一段的第三个字符小于10的每一段都输出】

 

小题:输出你本机的ip:ifconfig br0 | awk 'NR==2 {print $2}';ifconfig br0 |grep "inet " | awk -F ' ' {prinf $2}

wKiom1gjRhXzTWEHAAGxJG6hauI376.png

wKioL1gjRhjRXl14AADdQntWy7s865.png

wKiom1gjRhuC85ODAADe62AFxqY840.png

wKioL1gjRhzBv7IzAACWYDf5EHM362.png




***********************

******4.管理系统存储*****

***********************



***1.分区划分****

[root@localhost Desktop]# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.23.2).

 

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

 

Command (m for help): m//帮助

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition//删除分区

   g   create a new empty GPT partition table

   G   create an IRIX (SGI) partition table

   l   list known partition types//列出系统可用的分区类型

   m   print this menu

   n   add a new partition//新建分区

   o   create a new empty DOS partition table

   p   print the partition table//显示分区

   q   quit without saving changes//退出

   s   create a new empty Sun disklabel

   t   change a partition's system id//修改分区功能id【修改分区后面显示的功能】

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit//保存更改到分区表中

   x   extra functionality (experts only)

Command (m for help): n//新建

Partition type:

   p   primary (0 primary, 0 extended, 4 free)//分区类型为主分区【注意:一般不将第4个分区分成主分区。将它分为扩展分区,并且默认大小(1b)。后面的分区新建都为扩展分区】

   e   extended//分区类型为扩展分区

Select (default p): //默认为主分区

Using default response p

Partition number (1-4, default 1): 1//主分区id

First sector (2048-20971519, default 2048):     //此分区起始位置

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +100M//分区大小

Partition 1 of type Linux and of size 100 MiB is set

command (m for help):p//查看分区信息【也可以在命令行写 fdisk -l 查询分区信息】

Command (m for help):wq//表示保存退出,q表示不保存,放弃更改退出

[root@localhost mnt]# partprobe//同步分区表cat /proc/partitions 查看分区信息】

 

 mkfs.xfs/dev/vdb5//格式化为 xfs文件系统类型blkid查询可使用的分区】

mount /dev/vdb5/mnt///挂载

 

wKioL1gjRpmAC5GLAAHXRmPVwU4868.png

wKiom1gjRp6g42LMAAGlx1IdQ-M031.png

wKiom1gjRqCztzmPAAB6gd7zznI334.png

wKioL1gjR2HhCER2AALnxOP9PEc889.png


*****2.更改分区功能id**** 【例如:将普通分区更改为swap分区】

[root@localhost Desktop]# fdisk /dev/vdb

Command (m for help):t【进入修改分区功能】

Partition number (1-6, default 6): XX为你要改的分区名称】

Partition type (type L to list all types):82【写要更改能容的标号 例如更改为 swap功能为的标号为 82】

Command (m for help):p【查询分区的信息】

Command (m for help):wq //保存

[root@localhost mnt]# partprobe //同步分区表

mkswap/dev/vdb6//创建swap 【切记要创建,不然无法进行】

swapon -a/dev/vdb6 //激活增加的swapon 分区

swapon -s //查看所有的swapon分区列表blkid也可以查询】

wKioL1gjSB7Bal-zAAImTMPrda0506.png

wKioL1gjSCbTS5anAAKK8agWL2k902.png

wKioL1gjSCzzoomvAAHaiHvtIWU163.png

 

如果要在每次开机的时候都自动激活

vim /etc/fstab

/dev/vdb6 swapswapdefaults0 0【表示的意义以此为:文件名(/dev/vdb6) 激活点(swap) 类型(swap) 参数(默认) 备份(否) 检测(否)】

 

wKiom1gjSD2C22V2AAIQMi2ITdM543.png

wKioL1gjSD6wNrHdAAIMN2CKZ0g936.png


 

*****3.文件分割一个swap分区功能****

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

mkswap/mnt/westos

swapon -a /mnt/HXL【后面会有文件权限不合适的提示,不过没关系,你已经激活了】

swapon -s【查看你激活的swap】

 wKiom1gjSF7xxcz2AAHpO4tjIyw863.png

【如果 你想改变swap的优先级(-1 —— 32767),数字越大优先级越高,在你激活的时候 swapon -a /mnt/filename -p X (X就表示你所指定的优先级数)】

 

 

 

*****3.磁盘加密*****

1。磁盘加密

fdisk  /dev/vdb【新建分区】

cryptsetup luksFormat /dev/vdb1【加密锁 设备】【在cryptsetup后面的命令 是用tab健补不齐的,当然是可以理解的,毕竟是秘密命令】

cryptsetup open /dev/vdb1 westos【打开加密的分区,并且指定一个临时名称,临时名称是必须指定的,但每次可以不一样】

mkfs.xfs  /dev/mapper/westos【使得/dev/mapper/westos 使得它为.xfs文件系统】

mount /dev/mapper/westos  /mnt/【挂载在/mnt下,挂载的时候当前环境不能是要挂载的目录(/mnt/) 】

umount /mnt/【解挂】【切忌,不能在没有解挂的时候再次加密,会死机】

cryptsetup close westos【关闭已经打开的加密指定目录】


wKioL1gjSS-hyt2-AADnE56MpaE358.png

wKiom1gjSTDTsubzAAJbAhug2c4622.png

wKioL1gjSTDSV5ERAAFiXBU9tag544.png

 

2.加密磁盘的永久挂载 【下列步骤应详细,否则虚拟机会开不起来】【注意!,在你能自动挂载 /dev/mapper/HXL之前,首先要打开加密文件指定,然后 mkfs.xfs /dev/mapper/HXL(使之成为.xfs文件系统),要不然 你电脑重启有问题,因为无法识别挂载类型】

vim /etc/crypttab

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

HXL/dev/vdb1/root/lukspsfile【注意!!此处的HXL与下面自动挂载文件中的名称一致】

vim /root/lukspsfile【!!在此中写入你的/dev/vdb1加密的密码,直接写人密码,啥都不加】

 

chmod 600 /root/lukspsfile【!将该文件权限改为600】

cryptsetup luksAddKey /dev/vdb1  /root/lukspsfile【解密文件与加密分区的对应关系指令】

vim /etc/fstab 【自动挂载的写入点】

/dev/mapper/HXL /mntxfsdefaults0 0

reboot【重启进行检查】


wKioL1gjSX_TjB1qAABiKV17rsI926.png

wKiom1gjSX_Sj7B3AACq17480ag921.png

wKioL1gjSYCzOG2uAABRuK2otxs747.png

wKiom1gjSYHQfCWRAAEZSDDq8zU122.png

wKioL1gjSYKyPXWKAAIsHCAnWcI892.png

 

3.加密清除【基于已经做过自动挂载功能,如果没做过只需执行后三步】

vim /etc/fstab【删除自动挂载中的条目】

> /etc/crypttab【清除磁盘文件中的条目】

rm -fr /root/lukspsfile【删除密码文件】

umount /mnt/【卸载挂载】

cryptsetup close HXL【关闭已经打开的加密指定目录】

mkfs.xfs  /dev/vdb1-f【将分区格式化为xfs文件系统格式,首先关闭要不然格式化不成功】

 

 

******4.磁盘阵列*****

1.建立磁盘阵列

fdisk /dev/vdb【新建设备分区(此次实验建立三个),注意!要将它的类型改为fd】

mdadm  -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/vdb{1..3} 【建立磁盘阵列 -C ;/dev/md0 :这个名称不能更换; -a yes:如果没有前面的目录自动建立;-l 1:级别为1,1为写入;-n 2: 用两个设备分区;-x 1:剩余一个备用】

mkfs.xfs/dev/md0

mount /dev/md0  /mnt/

watch -n 1 cat /proc/mdstat

 

wKioL1gjSlLwPOO9AAGmLNaSX2Y470.png

wKiom1gjSlKTh6deAAFCkZt4GyE627.png

wKioL1gjSlOw3OeFAAJKAyp-G1Q593.png

wKiom1gjSlSAS-HiAAJGuZwVxUU528.png


2.删除磁盘阵列

mdadm -f /dev/md0  /dev/vdb1【使这个设备不可用】

mdadm -D /dev/md0【查看设备】

mdadm -r /dev/md0  /dev/vdb1 【删除设备vdb1】【这种删除方法,并不能使得磁盘阵列功能关闭,因为这种删除方法,是删除不完的,总会有一个是忙碌,不可删除的】

mdadm -a /dev/md0 /dev/vdb1【添加设备vdb1】

umount /mnt/【卸载】

mdadm -S /dev/md0【删除阵列分】

fdisk /dev/vdb【当然,你也可以选择把设备分区都删除了】

 


wKiom1gjSmbg8YlQAAJ6iR1snU0512.png


****5.配额****【针对分区的,只在指定份额分区生效(/pub)】

mount -o usrquota /dev/vdb1 /pub【挂载并且开启usrquota(配额功能)】

quotaon -uv /dev/vdb1【开始并显示quotaon 命令的信息】

edquota -u student【查看student用户的文件配置信息】

Disk quotas for user student (uid 1000):

  Filesystem                   blocks       soft       hard     inodes     soft     hard

  /dev/vdb1                    102400          0       40000       1         0        0

wKiom1gjS7-ygxnmAAH6yH5QjmU460.png

wKioL1gjS8bDfq48AAI4qtoSqQo111.png

wKiom1gjS8jSwddJAABvWKW4h5A381.png

wKioL1gjS8zT5lAnAADdK9gUHHg932.png



【其中第一个hard规定了你最大可用的字节数,最后一个hard是规定你最大所用的文件的个数】

su - student【切换到student下,并且实验】

dd if=/dev/zero of=/pub/file bs=1M count=500【切出一个配额】

dd: error writing \u2018/pub/file\u2019: Disk quota exceeded   【配额超出】

101+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 0.0916726 s, 1.1 GB/s

 

quota【切换到指定的用户(student)写看你的配额信息】

Disk quotas for user student (uid 1000):

     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace

      /dev/vdb1  102400*      0  102400               1       0       0      

wKiom1gjTAGT424LAAD_IBA8Ghg069.png

wKioL1gjTAOzc5-LAADsfYaGlQM906.png

wKiom1gjTAfBhjpAAAF1Z0w9xmo004.png

wKiom1gjTAqQfgrvAAEAu6F0a7c956.png

wKioL1gjTA7xzyiFAAGJxHiKcdY671.png



**自动挂载分区的配额***

vim /etc/fstab

/dev/vdb1/mntxfsdefaults,usrquota0 0

【配额补录】

1.soft:表示为磁盘使用量的警戒线,如果文件大小在soft-hard中间,创建文件时会有警告,并且倒计时会开始。但没有关系,当倒数归零的时候soft的值会变成严格限制,你就没有空间再使用了。去删除一些就行。也可以设置warnquota来进行文件告知。

2.root用户用命令直接这是下层用户的磁盘使用量的限制。例:setquota -u student 200000 300000 0 0 /pub