一、文本编辑工具VIM
1、进入编辑界面首先为命令模式,按o键切换为插入模式,且光标切换到当前行的下一行行首另起一行。
2、进入编辑界面首先为命令模式,按O键切换为插入模式,且光标切换到当前行的上一行行首另起一行。
3、进入编辑界面首先为命令模式,按A键切换为插入模式,且光标切换到当前行的行尾。
4、命令模式输入:r后加文件名称,可将文件内容读到当前文件中。
5、命令模式下输入:!加命令可不退出文本编辑界面执行命令,输入:r!加命令可将执行命令的输出读入到当前光标所在行。
6、命令模式下输入:set number 可显示行号。
7、命令模式下输入:2,4d,表示删除2-4行的内容,:2,4y复制2-4行的内容,在光标所在行按p键即可粘贴内容。(p贴在当前行的后一行,P贴在当行的后一行)
8、搜索替换内容,命令模式下输入,该命令为搜索1-5行的root,将1-5行的root全部替换为admin,/g表示全部替换,如果不加则默认更改第一个。%表示全文
9、vim工具高级个性化定制需要在家目录下创建vimrc文件
配置文件:
/etc/vimrc (全局)
~/.vimrc (个人)
(1)显示行号
显示:set number ,简写set nu
取消显示:set nonumber,简写set nonu
(2)忽略字符的大小写
启用:set ignorecase,简写set ic
不忽略:set noic
(3)自动缩进
启用:set autoindent,简写set ai
禁用:set noai
(4)复制保留格式
启用:set paste
禁用:set nopaste
(5)显示Tab和换行符
启用:set list
禁用:set nolist
(6)高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(7)设置光标所在行的标识线
启用:set cursorline,简写set cul
禁用:set nocursorline
二、文本常见处理工具
1、cat -A显示所有控制符
2、cat -n 对显示出的每一行进行编号
3、tail -f 跟踪文件名,监控文件变化
新终端触日志生成
cut命令按列抽取文本cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
- -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
- -c :以字符为单位进行分割。
- -d :自定义分隔符,默认为制表符。
- -f :与-d一起使用,指定显示哪个区域。
-
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除
1、取出etc/passwd文件中的第一列和第三列(cut -d按分隔符来分)
1 [22:49:16 root@Centos8 ~]#cut -d: -f1,3 /etc/passwd 2 root:0 3 bin:1 4 daemon:2 5 adm:3 6 lp:4 7 sync:5 8 shutdown:6 9 halt:7 10 mail:8 11 operator:11 12 games:12 13 ftp:14 14 nobody:65534 15 dbus:81 16 systemd-coredump:999 17 systemd-resolve:193 18 tss:59 19 polkitd:998 20 unbound:997 21 sssd:996 22 sshd:74 23 gjz:1000 24 postfix:89
2、将df输出中的空格替换成%,再cut删除%号,取出第五列
1 [22:49:44 root@Centos8 ~]#df | tr -s ‘ ‘ ‘%‘ |cut -d% -f5 2 Use 3 0 4 0 5 1 6 0 7 3 8 1 9 13 10 0
wc命令收集文本统计数据
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。
- -c或–bytes或–chars 只显示Bytes数。
- -l或–lines 只显示列数。
- -w或–words 只显示字数。
- –help 在线帮助。
- –version 显示版本信息。
1 [22:58:53 root@Centos8 ~]#wc nianling.txt 2 3 3 37 nianling.txt 分别显示行数、单词数、字节数
1 [22:59:00 root@Centos8 ~]#wc -l nianling.txt 2 3 nianling.txt 只显示文件行数
sort命令文本排序
Linux sort命令用于将文本文件内容加以排序。
sort可针对文本文件的内容,以行为单位来排序。
- -b 忽略每行前面开始出的空格字符。
- -c 检查文件是否已经按照顺序排序。
- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字母。
- -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。
- -n 依照数值的大小排序。
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
- -t<分隔字符> 指定排序时所用的栏位分隔字符。
- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
- –help 显示帮助。
- –version 显示版本信息。
1、将etc/passwd文件的第3列排序,:作为分隔符,默认按照字符排序,加上n按照数字排序
1 [23:07:31 root@Centos8 ~]#sort -nt: -k3 /etc/passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 sync:x:5:0:sync:/sbin:/bin/sync 8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9 halt:x:7:0:halt:/sbin:/sbin/halt 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 operator:x:11:0:operator:/root:/sbin/nologin 12 games:x:12:100:games:/usr/games:/sbin/nologin 13 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 14 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 15 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 16 dbus:x:81:81:System message bus:/:/sbin/nologin 17 postfix:x:89:89::/var/spool/postfix:/sbin/nologin 18 systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin 19 sssd:x:996:993:User for sssd:/:/sbin/nologin 20 unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin 21 polkitd:x:998:996:User for polkitd:/:/sbin/nologin 22 systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin 23 gjz:x:1000:1000:gjz:/home/gjz:/bin/bash 24 nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
2、找到分区利用率最大的值
[23:07:40 root@Centos8 ~]#df |tr -s ‘ ‘ ‘%‘|cut -d% -f5|sort -nr|head -1 13
3、统计访问次数最多的IP地址
以空格为分隔符列出第一列,sort排序,uniq -c显示每行重复的次数,sort -nr倒序排序
1 [root@centos7 ~]#cut -d ‘ ‘ -f1 /root/access_log |sort |uniq -c|sort -nr 2 4870 172.20.116.228 3 3429 172.20.116.208 4 2834 172.20.0.222 5 2613 172.20.112.14 6 2267 172.20.0.227
正则表达式
1、显示etc/passwd文件包含root的行
[root@centos7 ~]#grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
2、以/dev/sd为字符列出磁盘分区并找出最大利用率值
1 [root@centos7 ~]#df |grep /dev/sd |tr -s ‘ ‘ %|cut -d% -f5 |sort -nr |head -n1 2 18
3、取出etc/passwd文件中不包含/bin/bash的行
1 [root@centos7 ~]#grep -v ‘/bin/bash‘ /etc/passwd 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin 11 games:x:12:100:games:/usr/games:/sbin/nologin 12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13 nobody:x:99:99:Nobody:/:/sbin/nologin 14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 15 dbus:x:81:81:System message bus:/:/sbin/nologin 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin 17 libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin 18 colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin 19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin 20 saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin 21 abrt:x:173:173::/etc/abrt:/sbin/nologin 22 setroubleshoot:x:995:992::/var/lib/setroubleshoot:/sbin/nologin 23 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin 24 gluster:x:994:991:GlusterFS daemons:/run/gluster:/sbin/nologin 25 chrony:x:993:990::/var/lib/chrony:/sbin/nologin 26 radvd:x:75:75:radvd user:/:/sbin/nologin 27 qemu:x:107:107:qemu user:/:/sbin/nologin 28 unbound:x:992:989:Unbound DNS resolver:/etc/unbound:/sbin/nologin 29 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin 30 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin 31 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 32 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin 33 geoclue:x:991:987:User for geoclue:/var/lib/geoclue:/sbin/nologin 34 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin 35 saned:x:990:984:SANE scanner daemon user:/usr/share/sane:/sbin/nologin 36 gdm:x:42:42::/var/lib/gdm:/sbin/nologin 37 gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin 38 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 39 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin 40 postfix:x:89:89::/var/spool/postfix:/sbin/nologin 41 ntp:x:38:38::/etc/ntp:/sbin/nologin 42 tcpdump:x:72:72::/:/sbin/nologin
4、grep -ni 忽略大小写显示包含root的行,且显示行号
1 [23:10:27 root@Centos8 ~]#grep -ni ROOT /etc/passwd 2 1:root:x:0:0:root:/root:/bin/bash 3 10:operator:x:11:0:operator:/root:/sbin/nologin
5、grep -c 统计匹配的行数
[23:26:39 root@Centos8 ~]#grep -c root /etc/passwd 2
6、^表示行首,表示etc/passwd文件中root开头的行
[23:30:29 root@Centos8 ~]#grep ^root /etc/passwd root:x:0:0:root:/root:/bin/bash
二、SHELL脚本编程
1、系统信息脚本显示系统:主机名、ip地址、版本号、内核版本号、CPU型号、内存、硬盘大小
1 #!/bin/bash 2 # 3 #******************************************************************** 4 #Author: gaojinzhou 5 #QQ: 525184587 6 #Date: 2020-04-02 7 #FileName: system_info.sh 8 #URL: https://www.cnblogs.com/gaojinzhou/ 9 #Description: The test script 10 #Copyright (C): 2020 All rights reserved 11 #******************************************************************** 12 RED="\E[1;31m" 13 GREEN="echo -e \E[1;32m" 14 END="\E[0m" 15 $GREEN-----------------------------------Host systeminfo----------------------------------------$END 16 echo -e "HOSTNAME: $RED`hostname`$END" 17 echo -e "IPADDR: $RED`ifconfig ens160|grep -Eo ‘([0-9]{1,3}\.){3}[0-9]{1,3}‘ | head -n1`$END" 18 echo -e "OSVERSION: $RED`cat /etc/redhat-release`$END" 19 echo -e "KERNEL: $RED`uname -r`$END" 20 echo -e "CPU: $RED`lscpu|grep ‘Model name‘|tr -s ‘ ‘|cut -d : -f2`$END" 21 echo -e "MEMORY: $RED`free -h|grep Mem|tr -s ‘ ‘ : |cut -d : -f2`$END" 22 echo -e "DISK: $RED`lsblk | grep ‘^sd‘|tr -s ‘ ‘ |cut -d " " -f4`$END" 23 $GREEN------------------------------------------------------------------------------------------$END
输出结果如下:
1 [23:46:20 root@Centos8 scripts]#. system_info.sh 2 -----------------------------------Host systeminfo---------------------------------------- 3 HOSTNAME: Centos8 4 IPADDR: 10.0.0.7 5 OSVERSION: CentOS Linux release 8.1.1911 (Core) 6 KERNEL: 4.18.0-147.el8.x86_64 7 CPU: Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz 8 MEMORY: 1.9Gi 9 DISK: 200G 10 ------------------------------------------------------------------------------------------
2、硬盘及磁盘节点编号自动告警脚本,将告警信息发送到邮箱,这里设置阈值为10
1 #!/bin/bash 2 # 3 #******************************************************************** 4 #Author: gaojinzhou 5 #QQ: 525184587 6 #Date: 2020-04-05 7 #FileName: disk_check.sh 8 #URL: https://www.cnblogs.com/gaojinzhou/ 9 #Description: The test script 10 #Copyright (C): 2020 All rights reserved 11 #******************************************************************** 12 WARNING=10 13 SPACE_USED=`df |grep ‘^/dev/sd‘|grep -oE ‘[0-9]+%‘|tr -d %| sort -nr|head -1` 14 INODE_USED=`df -i |grep ‘^/dev/sd‘|grep -oE ‘[0-9]+%‘|tr -d %| sort -nr|head -1` 15 [ "$SPACE_USED" -gt $WARNING -o "$INODE_USED" -gt $WARNING ] && echo "DISK USED:$SPACE_USED%,INODE_USED:$INODE_USED, will be full" | mail -s "DISK Warning" 525184587@qq.com
3、安全删除脚本,rm命令定义为mv命令实现安全删除
1 #!/bin/bash 2 # 3 #******************************************************************** 4 #Author: gaojinzhou 5 #QQ: 525184587 6 #Date: 2020-04-02 7 #FileName: rm.sh 8 #URL: https://www.cnblogs.com/gaojinzhou/ 9 #Description: The test script 10 #Copyright (C): 2020 All rights reserved 11 #******************************************************************** 12 WARNING_COLOR="echo -e \E[1;31m" 13 END="\E[0m" 14 DIR=/tmp/`date +%F_%H-%M-%S` 15 mkdir $DIR 16 mv $* $DIR 17 ${WARNING_COLOR} Move $* to $DIR $END
4、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之。并设置初始密码为123456,显示添加的用户的id号等信息,在第一次就提示用户立即改密码,如果没有参数,就提示用户“请输入用户名”
1 #!/bin/bash 2 # 3 #******************************************************************** 4 #Author: gaojinzhou 5 #QQ: 525184587 6 #Date: 2020-04-06 7 #FileName: createuser.sh 8 #URL: https://www.cnblogs.com/gaojinzhou/ 9 #Description: The test script 10 #Copyright (C): 2020 All rights reserved 11 #******************************************************************** 12 read -p "请输入用户名:" NAME 13 if getent passwd | grep $NAME; then 14 echo ‘该用户已存在‘ 15 else 16 useradd $NAME &> /dev/null 17 echo 123456 | passwd --stdin $NAME &> /dev/null 18 passwd -e $NAME &> /dev/null 19 echo -e "$NAME 用户已创建成功,用户密码为123456,请立即更改密码" 20 fi
5、编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
#!/bin/bash # #******************************************************************** #Author: gaojinzhou #QQ: 525184587 #Date: 2020-04-06 #FileName: yesorno.sh #URL: https://www.cnblogs.com/gaojinzhou/ #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** read -p "请输入yes或no:" INPUT case $INPUT in [Yy]|[Yy][Ee][Ss]) echo "您输入的是yes" ;; [Nn]|[Nn][Oo]) echo "您输入的是no" ;; *) echo "请输入yes或no" esac