第三周学习作业

别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述第三周学习作业相关的知识,希望能为你提供帮助。
1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来[root@centos84 data]# grep -v /sbin/nologin /etc/passwd | wc -l
10
[root@centos84 data]# grep -v /sbin/nologin /etc/passwd | cut -d: -f1
root
sync
shutdown
halt
nt
mageia
slackware
user1
user2
user3

2、查出用户UID最大值的用户名、UID及shell类型[root@centos84 data]# cut -d : -f 1,3,7 /etc/passwd | sort -n -t : -k 2 | tail -1
nobody:65534:/sbin/nologin

[root@centos84 data]# sort -n -t : -k3 /etc/passwd | tail -1 | cut -d : -f 1,3,7
nobody:65534:/sbin/nologin

3、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序[root@centos84 ~]# ss -tun| sed -rn s/.* ([0-9].+):[0-9]+.* ([0-9].+):[0-9]+.* /\\2/p | sort| uniq -c |sort -nr
4 10.0.10.200
2 10.0.10.140
1 10.0.10.142

4、编写脚本disk.sh,显示当前硬盘分区中空间利用率最大的值[root@centos84 ~]# df | grep "^/dev/" | grep -Eo [0-9]+% | sort -nr | head -1
24%
[root@centos84 ~]# vim disk.sh
[root@centos84 ~]# sh disk.sh
当前磁盘分区中空间利用率最大的值是:24%
[root@centos84 ~]# cat disk.sh
#!/bin/bash
【第三周学习作业】#
#*****************************************************************
# File Name:disk.sh
# Date:2021-12-02
# Author: xxxxxxxxxxx
# Mail:xxxxxxxxxxxx@xxxxx.com
# QQ:xxxxxxxxxxxx
# Copyright (C):2021 All rights reserved.
#*****************************************************************
#显示当前磁盘分区中空间利用率最大的值
disk_max=$(df | grep "^/dev/" | grep -Eo [0-9]+% | sort -nr | head -1)
echo "当前磁盘分区中空间利用率最大的值是:$disk_max"




5、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小1 #!/bin/bash
2 #
3 #*****************************************************************
4 # File Name:systeminfo.sh
5 # Date:2021-12-02
6 # Author: xxxxxxxxx
7 # Mail:xxxxxxxxx@xxxx.com
8 # QQ:xxxxxxxxxxxxxx
9 # Copyright (C):2021 All rights reserved.
10 #*****************************************************************


13 begincolor="\\e[1; $[RANDOM%7+31]m"
14 endcolor="\\e[0m"


16 echo-e "主机名:\\t\\t${begincolor}`hostname`${endcolor}"
17 echo-e "IPv4地址:\\t${begincolor}`ip a | sed -rn 9s#.*inet ([0-9.]+)/24 .*#\\1#p`${endcolor}"
18 echo-e "操作系统版本:\\t${begincolor}`cat /etc/redhat-release`${endcolor}"
19 echo-e "内核版本:\\t${begincolor}`uname -r`${endcolor}"
20 echo-e "CPU型号:\\t${begincolor}`sed -nr s/^model name.*:(.*)/\\1/p /proc/cpuinfo | tail -1`${endcolor}"
21 echo-e "内存大小:\\t${begincolor}`cat /proc/meminfo | head -1 | grep -Eo [0-9]+.*`${endcolor}"
22 echo-e "硬盘大小:\\t${begincolor}`lsblk | grep ^sda | grep -Eo [0-9]+[[:upper:]]`${endcolor}"


[root@centos84 ~]# sh systeminfo.sh
主机名:centos84
IPv4地址:10.0.10.220
操作系统版本:Red Hat Enterprise Linux release 8.4 (Ootpa)
内核版本:4.18.0-305.el8.x86_64
CPU型号:Intel(R) Xeon(R) Gold 6226 CPU @ 2.70GHz
内存大小:16210740 kB
硬盘大小:160G


6、20分钟内通关vimtutor(可参考https://yyqing.me/post/2017/2017-02-22-vimtutor-chinese-summary)vim 命令格式:vim [option] … file …
vim常见模式:command:可以实现光标移动,剪切,复制、粘贴文本
insert:修改文本
extended command:保存,退出,运行命令
visual edit:文本块修改
extended command::wq 保存退出 或者 x
:X 加密
:rFilename读取文件内容到当前文件中
:w filename将当前文件内容写入到另一个文件
:!command执行命令
:r!command读入命令的输出
地址定界::#[d(删除)\\y(复制)\\w file(另存到指定文件)\\r file 在指位置插入指定文件的内容]具体第几行如::2第二行
:#,#[d(删除)\\y(复制)]从第几行到第几行
:#,+#从第几行起加几行
:.当前行
:$最后一行
:.,$-1当前行到倒数第二行
:%全文 或者1,$
:/pattern/从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
:/pat1/,/pat2/从第一次pat1模式匹配到的行开始,一直到第一次被pat2匹配的行结束
:#,/pat/从指定的行开始,一直到第一次匹配的pat结束
:/pat/,$从当前行向下查到第一个匹配pat到整个文件的结尾
编辑命令:d 删除
y 复制
查找并替换::s/查找的内容/替换的内容/修饰符
查找的内容支持基本的正则表达式,分隔符/也可以使用#,@
修饰符:i忽略大小写g全局替换,默认情况下,每一行只替换第一次出现gc 全局替换 每次替换前询问
vim的工作定制:配置文件
/etc/vimrc全局配置
~/vim.rc个人
vim 模板:
:set nu#行号
:set ts=2#两个空格(tab)
autocmd BufNewFile *.sh,*.py exec ":call SetTitle()"
let $author_name = "xxxxxxxxx"
let $author_email = "xxxxxxxx@xxx.com"
let $qq = xxxxxxxx
func SetTitle()
if & filetype == sh
call setline(1,"\\#!/bin/bash")
call append(line("."),"\\#*****************************************************************")
call append(line(".")+1, "\\# File Name:".expand("%"))
call append(line(".")+2, "\\# Date:".strftime("%Y-%m-%d"))
call append(line(".")+3, "\\# Author:".$author_name)
call append(line(".")+4, "\\# Mail:".$author_email)
call append(line(".")+5, "\\# QQ:".$qq)
call append(line(".")+6, "\\# Copyright (C):".strftime("%Y")." All rights reserved.")
call append(line(".")+7, "\\#*****************************************************************")
call append(line(".")+8, "")
else
call setline(1,"\\#!/usr/bin/python")
call append(line("."),"\\#")
call append(line(".")+1,"\\#*****************************************************************")
call append(line(".")+2, "\\# File Name:".expand("%"))
call append(line(".")+3, "\\# Date:".strftime("%Y-%m-%d"))
call append(line(".")+4, "\\# Author:".$author_name)
call append(line(".")+5, "\\# Mail:".$author_email)
call append(line(".")+6, "\\# QQ:".$qq)
call append(line(".")+7, "\\# Copyright (C):".strftime("%Y")." All rights reserved.")
call append(line(".")+8, "\\#*****************************************************************")
call append(line(".")+9, "")
endif
endfunc
常用设置:
:set nu/ nonu行号显示 /关闭
:set ic /noic字符大小写启用/禁用
:set ai/noai启用自动缩进/禁用
:set paste /nopaste复制保留格式/禁用
:set list /nolist显示tab ^I 和换行符和$/禁用
:set hlsearch / nohlsearch显示搜索高亮显示/禁用
:set tabstop=#指定#个空格代替tab或者 set ts=2
set cursorline / nocurserline设置光标所在行的表示线 或者set cul/禁用
光标跳转 : h 左
l 右
j下
k 上
单词跳转: w 下一个单词的词首
e当前或者下一单词的词尾
b当前或前一个单词的词首
行首行尾: ^行首
$行尾
o下一行并可首插入
O 上一行行首并可插入
行间移动: :#跳转至第几行
G 最后一行
1G或gg第一行
替换:r 删除: d删除命令,可结合光标跳转字符,实现范围删除
d^删除到非空行首
d$删除到行尾
d0删除到行首
dd剪切光标所在的行
#dd删除多行
D从光标所在行的位置一直删除到行尾等同于d$
:#,#d从第几行到第几行删除
:#,+3d
复制: y命令与d相似粘贴 : p若为整行,则粘贴到光标下方,否则张贴光标的后面
P若为整行,则粘贴到光标上方,否则张贴光标的前面
改变命令:c删除后进入插入模式命令与d、y相似
查找:/pattern从光标所在行向文件尾部查收n 向下N向上
?pattern从光标所在行向文件首部查找n N反之
撤销:u撤销最近的更改
#u 撤销之前所次更改
U撤销光标落在这行后所有此行的更改
.重复前一个操作
#.重复前一个操作#次

    推荐阅读