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 加密
: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 撤销光标落在这行后所有此行的更改
. 重复前一个操作
#. 重复前一个操作#次