Linux Emploment 第三周

1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来

grep -v 'nologin' /etc/passwd | wc -l

grep -v 'nologin' /etc/passwd | cut -d':' -f1
2、查出用户UID最大值的用户名、UID及shell类型

[root@joy ~]# cat /etc/passwd | cut -d':' -f3 | sort -rn | head -1 | xargs -i grep {''} /etc/passwd |cut -d':' -f1,3
,7
nfsnobody:65534:/sbin/nologin


3、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

ss -tn | grep '^ESTAB' | tr -s ' ' : | cut -d':' -f6 | sort | uniq -c | sort -rn
4、编写脚本disk.sh,显示当前硬盘分区中空间利用率最大的值

[root@joy ~]# cat ./disk.sh 
#! /bin/bash
usage=`df | grep -E '/dev/sd'| grep -Eo '[0-9]+%'| grep -Eo '[0-9]+'|sort -rn | head -1`
echo MaxUsage:$usage

5、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小


6、20分钟内通关vimtutor(可参考https://yyqing.me/post/2017/2017-02-22-vimtutor-chinese-summary)

vim
vim /file
vim +N /file 打开并处在N行 没有N处在最后一行
vim +/pattern 打开文件定位至第一次被模式匹配到的行的行首
编辑模式
    i 光标前输入 I当前光标所在行的行首输入
    a 光标后输入 A当前光标所在行的行尾输入
    o 当前光标下一行新建行首输入 O当前光标上一行新建行首输入
    /pattern查找 整个文件
    ?pattern 当前光标到文件首部查找
        n 下一个
        N 上一个
        支持正则表达式(末行模式)
        替换:add1,add2s/pattern/string/g

输入模式
    ESC返回编辑模式

末行模式
    从编辑模式进入:进入末行模式
    :set nu 行号 set nonu取消
    要想永久显示行号 vim ~/.bashrc 添加一行 set nu #复制内容会把行号复制进去的 狗头 vim /etc/.bashrc设置所有人都有效 不建议  
    :set ic /set noic 忽略大小写
    :set list /set nolist 显示/取消 tab ^ |和$字符 写脚本可以排错等常用 tab有字符
    :set ai /set noai 显示/取消自动缩进 shell脚本是很有用
    :set paste /set nopaste 粘贴时保留原格式 不会因为自动缩进而乱码
    :set hl /set nohl 高亮
    syntax on/off 语法高亮
    :set ff=dos/linux 设置为windows或者linux文件
    :set et 设置tab键转化为空格 写脚本有用
    :set ts=# 设置1个tab键等于几个空格 要后与set et一起用
    :set cul /set nocul 光标下添加横线
    :set or = set all 查看set帮助

    :10d 删掉10行
    :1,10d 删掉1-10行
    :!不退出返回终端执行命令界面 !command   再次回车返回
    :wq 、保存退出 =:x
    :q不保存退出 更改保存
    :q!不保存强行退出
    :w!强行保存 root权限
    :.表示当前行$最后一行
    :.,$-3d 当前到倒数第3行
    :add1,add2s/pattern/string/g 替换
    :x 保存退出   不安全
    :X 加密 
    :r /file 将文件内容读到光标处 相当于复制粘贴 好用
    :r! command 将命令结果读到光标处  好用
    :%s/a/b/g g全局替换 =%s#a#b#g  =%s@a@b@g  有时候替换文件/file需要转义。比较麻烦


    ZZ 编辑模式下保存退出
    ZQ 编辑模式下不保存退出

移动光标:
    H页首
    N页中
    L页底
    h 左 #h 跳动#个字符
    l 右 #l 跳动#个字符
    j 下 #j 跳动#个字符
    k 上 #K 跳动#个字符
    #h 向左移动#个字符
    w 下一个单词的词首 #w
    e  当前词尾或下个单词的词尾
    b  当前词首或前个单词的词首
    也支持#w等用法
    0 行首 绝对行首
    ^ 行首 非空白行首
    $ 绝对行尾
    #G 直接跳转到#行上
    G 最后一行
    GG 第一行
    :n 直接跳到n行上
    ctrl+f 下一屏幕
    ctrl+b 上一屏幕
    ctrl+d 下半屏
    ctrl+u 上半屏
    #x 删除光标所在的#个字符
    d$ 从光标到行尾
    d0 从光标到行首
    dw 删除一个单词
    #dw 删除#个单词
    dd 删除当前行
    #dd 删除光标后#行
    ~大小写转换

删除内容被保存在缓存区中,最后一次可被粘贴
    p 如果删除的或复制的内容,粘贴到光标所在(删除的是整行)行下方或(删除的是非整行)后面
    P 如果删除的或复制的内容,粘贴到光标所在(删除的是整行)行上方或(删除的是非整行)后面

复制y同d命令一致
    yy 复制一行
    y$
    ...

先删除内容再转换到输入模式=修改 c的用法同d
    cc 删除并转入输入模式

替换 
    r 单个字符 等字符转换
    R 替换模式多字符替换 等字符转换

类鼠标操作:
    v 字符随意选中
    V 行随意选中
    ctrl v 块随意选中 矩阵形状  例:特意行加# 选中矩阵 I 加入# esc退出


撤销编辑u
    u 撤销前一次操作 可连续操作 最多50次
    #u 撤销#次操作
    ctrl+r 撤销撤销。还原最近的撤销

重复此前的操作 .

可视化模式v
    先选定位置,v进入可视化操作,d删除 y复制    
    V矩形化操作,整行操作
vim编辑多个文件
vim /file1 /file2 /file3...
:next 编辑下个文件
:prev 编辑上个文件
:last 编辑最后一个文件
:qa 全部退出

分屏显示
ctrl+w松开按s 水平拆分窗口
ctrl+w松开按v 垂直拆分窗口
窗口切换ctrl+w松开按上下键 
编辑多个文件时
vim -o /file /file..水平分割窗口
vim -O /file /file..垂直分割窗口
将文件部分内容保存为另外一个文件中
    :w /file
    :add1 add2w /file
将其他文件中的内容填充进现在文件中的光标后
:r /file
shell交互
:!command
:vimtutor 练习使用
:help 使用帮助

高级话题
1.显示行号、取消行号 :set nu  :set nonu 
2.忽略或区分大小写 :set ic(ignorecase) :set noic(noignorecase)
3.缩进 :set ai(autoindent) :set noai
4.搜索高亮显示 :set hlsearch  :set nohlsearch
5.语法高亮 :syntax on    :syntax off

以上都是临时显示,永久要更改配置文件 
    全局 /etc/vimrc  
    本地 ~/.vimrc 
手册命令: vimtutor 练习使用
文件提醒,编辑中意外退出未保存 原文件留下有个副本  .原文件名字.swap 手动删除

正则表达式

grep [opt] PATTERN file.. 包含
    --color 加颜色 alias grep=`grep --color=auto` >> /etc/profile
    -i ignore case忽视大小写
    -v 被匹配到的不显示 反向查找
    -o 只显示被匹配的字符串
    -E 扩展正则表达式匹配 =egrep
    -A n(数字) 匹配到后再接着显示后面n行
    -B n  匹配到后再接着显示前面的n行
    -C n  匹配到后再接着显示前后的n行
    -w 匹配整个单词 = \<word\>
    -F =fgrep 后面跟的字符不认为是正则表达式 
    -f file1 file2 grep file1里面的正则表达式行 用来匹配file2
        eg:查找两个文件公有的行 cat /file1 /file2 |sort |uniq-c  grep -f /file1 /file2
    -r /dir 递归 


使用策略:通配符是匹配现有文件的 不是生成文件的。则表达式是匹配字符串的

基本正则表达式 grep 
grep '' /file  注意要加双引号 有时候会出错 
扩展正则表达式 egrep =grep -E
字符匹配
. 任意一个字符
[] 一个任意字符 里面的字符中选一个 里面的特殊字符不用转义
[^]排错 
次数匹配
*前面字符出现任意次 包括0次  通配符至少一次
.*表示任意字符 贪婪模式··
\? 0次或1次 在* + {m,n}后面表示关闭贪婪模式 懒惰模式 通配符表示一次
\+ 匹配前面的字符至少一次 相当于正则\{1,\}
\{m,n\}    \{6,\}6次以上
^
$
连续的数字字母下划线 是算一个单词
\< 词首
\> 词尾
分组
() 使用 \1 \2 \3
或者 | C|cat =C or cat 如果表示大小写用 ( C|c)at 

IP地址表示:egrep --color '\<([0-9]{1,3}\.){3}[0-9]{1,3} \>' 虽然第一位和最后一位不能为0,但是这足够精准匹配IP了,因为IP的特殊性,
百分百精准:egrep --color '([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]\.){2}\1'
QQ表达式 \<[0-9]{6,12}\>
邮箱:[[:alnum:]_]+@[[:alnum:]_]+\.[[:alpha:]]+
手机号:\<1[3-9][0-9]{9}\>
[root@joy ~]# ifconfig ens33 | grep netmask | tr -s ' ' | cut -d" " -f3
[root@joy ~]# ifconfig ens33| grep -i mask|grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -1   #E要放在最后  


fgrep 不支持正则表达式 但是速度极快f fast 

grep -v '^[[:space:]]*#' /file 过滤掉#开头 或者是空白+#的行
grep -v '^$' /file 过滤掉空白行
统计ss或者其他用户的链接状态
ss -nt > /data/ss.log
grep -v '^State' /data/ss.log | grep -oE '[[:alpha:]-]+\>' | sort | uniq -c 当然cut是最方便的

命令执行的方式有多种:
1.放到$PATH路径种 可以创造一个软链接
2.chmod +x 
    ./脚本
3.bash 脚本
4.cat 脚本 | bash 
第四种 可以把脚本放到服务器器文本中
curl -s www./ | bash 远程直接安装 {安装前请检查脚本的安全}
[root@joy ~]# curl -s www.wangxiaochun.com/testdir/system_info.sh | bash

脚本的错误调试:
命令错误:脚本后面正常执行
vim +行数 脚本
语法错误:后面的命令中断执行
执行前执行下  bash -n 脚本
逻辑错误:结果不是预期的
执行前 bash +x 脚本 一行一行显示结果


shell变量
区分大小写
不能使用内置变量和保留字 set 可以显示
只能使用数字,字母,下划线,且不能以数字开头
 规范:
 见名知意
 变量大写
 局部变量小写
 函数名小写
 大驼峰 StudentName
 小驼峰 studentName
 下划线 student_name

变量赋值引用和删除
NAME=24
echo $NAME
unset NAME

追加字符串
NAME=ZHANG
NAME+=JUN
echo $NAME    结果就是变量的结果+追加的字符串 ZHANG JUN JUN就是追加的字符串

变量只在当前进程有效,要想全进程有效,需定义成环境变量 export列出的都是环境变量
    变量=value
    export 变量
查看当前进程的环境变量 /proc/pidnumber/environ
pstree -p 查看进程树


只读变量、也就是常量
readonly age=18
不能删 不能改 进程完成或者退出才能释放

位置变量
$* $@代表所有的参数
脚本 a b c ....
a b c ... 对应的$1 $2 $3  
$0代表脚本本身 软链接是显示软链接的名称 可以用软链接逻辑判断 wow
$#代表参数个数
注意:变量10 ${10}必须要加{},否则会被认为是$1+0
set --  可以清除位置变量

rm.sh脚本的安全删除 <移动文件>
定义脚本 alias rm=rm.sh
chmod +x 脚本的决对路径

$? 前一个命令的执行结果的状态码 0-255  0是成功 其他是失败 1-255可以定义状态
echo $?
exit 不计算错误code 可以定义状态code
exit 2 错误退出 返回状态2 

脚本第一个命令 set -e 如果有一行脚本执行错误 则退出 阻止脚本继续执行下去
但是有些搜索类grep等不严重错误会误杀 不会执行 影响脚本
脚本前面加上set -u 变量没有赋值 不允许使用
所有脚本命令第一行加上 set -ue

$- 特殊功能
imBHs 每个都有特殊功能 


运算:
let 算式
$[]
$(())
(())

逻辑运算
&与 转二进制 对位 相同为1 不同为0 两个都是真 两个都为假 为真
|或 转二进制 对位 相同为0 不同为1 只有一个真就是真 
!非 取反
^异或 相同为真 不同为假
&&短路运算 CMD 1 && CMD 2 命令1是真将执行命令2 命令1是假将不执行命令2
||短路或 命令1为真 将不执行命令2 命令1为假 执行命令2
注意 a=1是赋值 a = 1 带空格是比较 !=不等
数字比较方法:-eq 等于 -ne 不等 -lt 小于 -le 小于等于 -gt 大于 -ge 大于等于

条件测试语句
test Express = [ EXPRESS ] []带空格
    -a /file 探测文件是否存在 不建议使用 不能取反 
    -r /file 探测文件是否是可读
    -x /file 同上
    -w /file 同上
    -e /file 探测文件是否存在
    -z string 探测是否是空字符串 在交互可用 不存在也是空 
    -n string 探测是否是不空字符串

测试是否用户是root  [ `id -u` -eq 0 ]; echo $?
磁盘利用率脚本 
[root@joy /]# df | grep -E '/dev/sd'| grep -Eo '[0-9]+%'| grep -Eo '[0-9]+'|sort -rn | head -1  #/dev/sd'可换成特定磁盘
19

[ 条件1 -a 条件2 ] -a and 两个条件并行 比较的条件最好用""引起来  [[]]不支持 -a -o
                  -o  or 只要一个条件为真 结果为真

CMD1 && CMD2 || CMD3         只有这个用法 && ||不能调换

[[ ]] 支持正则表达式和通配符  包含[]  且== != 支持 而且=~支持正则表达式 正则双引号引起来
( cmd ) 括号里面的命令会用子进程 不改变父进程的环境及赋值 结束后清空进程  { cmd; }里面的命令是同等进程执行 并行环境

ln -s /dir dirlink  删除软链接目录时 千万别tab补全 rm -rf dirlink/ 是删除dir下的所有的文件 千万注意
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值