shell中的基础命令

1.diff

用法;
diff xxx yyy

输出信息:

[num1,num2][a|c|d][num3.num4]
num1,num2	#第一个文件的行
a		#添加
c		#更改
d		#删除
<		#第一个文件中的内容
>		#第二个文件中的内容
num3,num4	#第二个文件中的行

常用参数:
-b #忽略空格
-B #忽略空行
-i #忽略大小写
-c #显示文件所有内容并标示不同
-r #对比目录
-u #合并输出

2.patch

patch 原文件 补丁文件
-b #备份原文件

测试:

diff -u westos westos1 > westos.path
patch -b westos westos.path
diff westos westos1

3.cut

-d :		#指定:为分割符
-f		#指定显示的列
		5 第五列
		35 353-5 355- 第五列以后
		-5 到第五列
-c		#指定截取的字符(数字用法同-f)

测试:

cp /etc/passwd .
cut -d : -f 1 passwd
cut -d : -f 1,4 passwd
cut -d : -f 1-4 passwd
cut -d : -f -4 passwd
cut -d : -f 4- passwd
cut -c 1-4 passwd 

在这里插入图片描述在这里插入图片描述

练习筛选出不能登陆的用户名:
grep bash -v /etc/passwd | cut -d : -f 1
在这里插入图片描述

4.sort

-n #纯数字排序
-r #倒叙
-u #去掉重复
-o #输出到指定文件
-t #指定分割符
-k #指定排序的列

练习:

vim rrr
cat rrr
sort -n rrr
sort -nr rrr
sort -t : -k 2 rrr
sort -n -t : -k 2 rrr

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

5.uniq

-c #合并重复并统计重复个数
-d #显示重复的行
-u #显示唯一的行

练习:找到重复最多的数并显示

sort -n rrr | uniq -c | tail -n 1 | cut -d " " -f 8

在这里插入图片描述

习题
1.显示出网卡ip

ifconfig ens3 | head -n 2 | tail -n 1 | cut -d " " -f 10

在这里插入图片描述2.找出能登陆的系统用户中UID最大的用户,并显示其名称

grep bash /etc/passwd | sort -n -t : -k 3 | tail -n 1 | cut -d : -f -1

在这里插入图片描述
3.当前主机为web服务器,请抓取访问web服务器次数排在前5的ip地址

cut -d " " -f 1 /etc/httpd/logs/access_log | sort -n  |uniq -c | sort -nr | head -n 5| sed 's/^ *//g'| cut -d " " -f 2

在这里插入图片描述

6.tr

tr " " ‘1’ #空格转1
tr ‘a-z’ ‘A-Z’ #小写转大写
tr ‘A-Z’ ‘a-z’ #大写转小写
在这里插入图片描述

在这里插入图片描述

7.test

a=1
b=2
test "$a" = "$b" && echo yes || echo no  
[ "$a" != "$b" ] && echo yes || echo no  
[ "$a" -eq "$b" ] && echo yes || echo no  
[ "$a" -ne "$b" ] && echo yes || echo no  
[ "$a" -le "$b" ] && echo yes || echo no  
[ "$a" -ge "$b" ] && echo yes || echo no  
[ "$a" -lt "$b" ] && echo yes || echo no  
[ "$a" -gt "$b" ] && echo yes || echo no  
[ "$a" -gt "0" -a "$a" -lt "10" ] && echo yes || echo no  
[ "$a" -le "0" -o "$a" -ge "10" ] && echo yes || echo no  
[ "$a" -le "0" ] || [ "$a" -ge "10" ] && echo yes || echo no  
[ "$a" -gt "0" ] && [ "$a" -lt "10" ] && echo yes || echo no  
test对空的判定
[ -z "$a" ] && echo yes || echo no
[ -z "$c" ] && echo yes || echo no
[ -n "$c" ] && echo yes || echo no
[ -n "$a" ] && echo yes || echo no

在这里插入图片描述在这里插入图片描述

test对于文件的判定
touch aaa
touch bbb
[ "/mnt/aaa" -ef "/mnt/bbb" ] && echo yes || echo no
ls -i
ln /mnt/aaa /mnt/ccc
ls -i
[ "/mnt/aaa" -ef "/mnt/ccc" ] && echo yes || echo no
[ "/mnt/aaa" -nt "/mnt/bbb" ] && echo yes || echo no
touch ddd
[ "/mnt/aaa" -nt "/mnt/ddd" ] && echo yes || echo no
ll
[ "/mnt/ddd" -nt "/mnt/aaa" ] && echo yes || echo no
[ -L "/mnt/ccc" ] && echo yes || echo no
ln -s /mnt/aaa eee
[ -L "/mnt/eee" ] && echo yes || echo no
[ -d "/mnt" ] && echo yes || echo no
[ -S "/mnt/aaa" ] && echo yes || echo no
[ -e "/mnt/aaa" ] && echo yes || echo no
[ -b "/dev/vda" ] && echo yes || echo no
[ -b "/dev/sda" ] && echo yes || echo no
[ -c "/dev/pts/0" ] && echo yes || echo no

在这里插入图片描述在这里插入图片描述测试
在这里插入图片描述

#!/bin/bash
[ -z "$1" ] && {
        echo "未指定检测文件,请指定"
        exit
}

[ -e "$1" ] || {
        echo "此文件不存在"
        exit
}

TYPE=$(ls -l $1 | cut -c 1)

[ "$TYPE" = "l" ] && echo $1 is link file
[ "$TYPE" = "-" ] && echo $1 is common file
[ "$TYPE" = "s" ] && echo $1 is socket
[ "$TYPE" = "c" ] && echo $1 is char
[ "$TYPE" = "b" ] && echo $1 is block

在这里插入图片描述
编写脚本判断用户类型
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值