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

第三周学习作业_vim

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

第三周学习作业_系统版本_02

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

第三周学习作业_centos_03

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"

第三周学习作业_centos_04

第三周学习作业_vim_05

第三周学习作业_主机名_06

第三周学习作业_系统版本_07

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

第三周学习作业_sed_08

第三周学习作业_centos_09

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 加密

:r Filename 读取文件内容到当前文件中

: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 撤销光标落在这行后所有此行的更改

. 重复前一个操作

#. 重复前一个操作#次