文章目录
厚基础Linux——第五周作业
统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来
涉及知识点
正则表达式——位置匹配
位置匹配用于匹配字符存在于特定位置,在本题中需要匹配的/sbin/nologin应该满足两个条件,一是处于行尾,二是词首应该存在冒号。
# 位置匹配
/< #表示词首
/> #表示词尾
^ #表示行首
$ #表示行尾
wc命令
wc命令可以计算文本行数,单词数,字节数
# wc常见用法
-l #表示行数
-w #表示单词数
-c #表示字节数
cut命令
cut命令可以按照指定分隔符提取字段,在本题中适合用于提取用户名
#cut常见用法
-d #指定分隔符
-f #指定截取字段,支持多个截取,用逗号分隔
grep命令
grep命令支持正则表达式,可以截取符合要求的文本
# grep常用选项
-v #反向匹配,截取不满足要求的
-o #只输出匹配到的内容,若同一行有多处满足,则输出多行。
代码段
#统计行数
grep -v ":/sbin/nologin$" /etc/passwd | wc -l
#输出用户名
grep -v ":/sbin/nologin$" /etc/passwd | cut -d: -f1
查出用户UID最大值的用户名、UID及shell类型
涉及知识点
sort命令
sort命令用于排序,可以指定分隔符和字段序号,在本题中对uid进行数字排序。
#sort常见用法
-n #连续的数字文本在排序时当作数字
-r #按照降序排序
-t #指定分隔符,如不指定则默认选择空白
-k #指定排序字段序号
head命令
head用于向前截取文本,默认为截取10行,支持标准输入。
#head常见用法
-n #按行截取,指定截取数量
-c #按照字节截取
代码段
cat /etc/passwd | sort -t: -k3 -nr | head -n1 | cut -d: -f1,3,7
统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
涉及知识点
netstat命令
netstat 查看网络状态,使用tcp过滤可以获取当前连接的主机详细数据
netstat | grep tcp
grep命令
grep -o可以仅显示截取的ip地址
uniq命令
uniq用于连续重复文本场景,多次重复文本只会记录一次
#uniq命令常见用法
-c #记录文本重复次数
-u #只输出不重复的文本
-d #只输出重复的文本
代码段
netstat | grep tcp | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | sort | uniq -c | tr -s " " | sort -nr
编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果 指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等 信息
涉及知识点
位置变量
$1 #脚本后的第一个参数
条件控制语句
CMD1 && CMD2 || CMD3 结构实现简单的条件控制
代码段
#!/bin/bash
#
#***************************************************************************
#Author: Kel Zhou
#QQ: 248416319
#Date: 2020-10-05
#FileName: createuser.sh
#URL: https://i.csdn.net/#/uc/profile
#Description: 创建用户,如果存在就显示其存在,否则添加,显示添加的用户的id号等信
息
#Copyright (C): 2020 All rights reserved
#***************************************************************************
USERNAME=$1
id $USERNAME &> /dev/null && echo "$USERNAME exists" || (useradd $USERNAME; echo "$USERNAME is created, ID INFO:"; id $USERNAME)
编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
涉及知识点
.vimrc配置文件
该文件在用户家目录下,用于控制vim的环境。
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#")
call setline(3,"#***************************************************************************")
call setline(4,"#Author: Kel Zhou")
call setline(5,"#QQ: 248416319")
call setline(6,"#Date: ".strftime("%Y-%m-%d"))
call setline(7,"#FileName: ".expand("%"))
call setline(8,"#URL: https://i.csdn.net/#/uc/profile")
call setline(9,"#Description: The test script")
call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
call setline(11,"#***************************************************************************")
call setline(12,"")
endif
endfunc
autocmd BufNewFile * normal G