shell基础命令
1 diff 命令
-
Linux diff命令用于比较文件的差异。
-
diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
diff [options] files|directorys 参数 文件|目录
-
常用参数
参数 | 功能 |
---|---|
-b | 忽略空格 |
-B | 忽略空行 |
-i | 忽略大小写 |
-c | 显示文件所有内容并标示不同 |
-r | 对比目录 |
-u | 合并输出 |
-
输出信息
[num1,num2] [a|c|d] [num3,num4] num1,num2 ## 第一个文件中的行 num3,num4 ##第二个文件中的行 a ##添加 c ##更改 d ##删除 < ##第一个文件中的内容 > ##第二个文件中的内容
合并输出,生成补丁文件
2 patch
patch指令让用户利用设置修补文件的方式,修改,更新原始文件
- 下载软件:
-
命令的使用:
patch 原文件 补丁文件 -b ##备份原文件
3 cut
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。
- cut命令常用的参数
参数 | 含义 |
---|---|
-d | 指定分割符号 |
-f | 指定显示的列 |
-c | 指定截取的字符 |
实验素材:
(1)指定分割符为 “:”,显示第3列: cut -d : -f 3 passwd
(2)指定分割符为 “:”,显示第3列: cut -d : -f 3-5 passwd
(3)指定分割符为 “:”,显示第3,5列: cut -d : -f 3,5 passwd
(4)指定分割符为 “:”,显示第5列之后的列:cut -d : -f 5- passwd
(5)指定分割符为 “:”,显示到第5列:cut -d : -f -5 passwd
4 sort
sort命令用于将文本文件内容加以排序, sort可针对文本文件的内容,以行为单位来排序
- 常用的参数
参数 | 含义 |
---|---|
-n | 纯数字排序 |
-r | 倒序 |
-u | 去掉重复 |
-o | 输出到指定文件 |
-t | 指定分割符 |
-k | 指定排序的列 |
5 uniq
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
- 常用的参数
参数 | 功能 |
---|---|
-c | 合并重复并统计重复个数 |
-d | 显示重复的行 |
-u | 显示唯一的行 |
测试:找出能登陆系统用户中UID最大的用户,并显示其名称
6 tr
tr命令不能从文件中读取数据,只能从标准输出中获取数据,结果写到输出设备。 tr命令可以批量转换或删除指定的字符
1- tr 'a-z' 'A-Z' ##小写转大写
2- tr 'A-Z' 'a-z' ##大写转小写
7 test
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
test = [] ##[] 就相当于test命令
test $a = $b = [ $a = $b ]
7.1 test数字对比
=
!=
-eq ##等于
-ne ##不等于
-le ##小于等于
-lt ##小于
-ge ##大于等于
-gt ##大于
7.2 test的条件关系
-a ##并且
-o ##或者
7.3 test对空的判定
-n ## 判定内容不为空
-z ## 判定内容为空
测试:执行下列脚本来判断用户类型
!/bin/bash
[ -z "$1" ] && {
echo username is null
exit
}
id $1 &>/dev/null || {
echo user $1 is not exist
exit
}
[ "$(id -u $1)" -eq "0" ] && {
echo $1 is super user
exit
}
[ "$(id -u $1)" -le "999" ] && {
echo $1 is system user
exit
}
echo $1 is common user
7.4 test对于文件的判定
参数 | |
---|---|
-ef | 文件节点号是否一致(硬链) |
-nt | 文件1是不是比文件2新 |
-ot | 文件1是不是比文件2老 |
-d | 目录 |
-S | 套结字 |
-L | 软连接 |
-e | 存在 |
-f | 普通文件 |
-b | 块设备 |
-c | 字符设备 |
-
编写脚本完成以下条件
file_check.sh 在执行时 如果脚本后未指定检测文件报错“未指定检测文件,请指定” 如果脚本后指定文件不存在报错“此文件不存在” 当文件存在时请检测文件类型并显示到输出中
#!/bin/bash
[ -z "$1" ] && {
echo "please input filename following with script !!"
exit
}
[ -e "$1" ] || {
echo "$1 is not exit!!"
exit
}
[ -S "$1" ] && {
echo "$1 is socket "
}
[ -L "$1" ] && {
echo "$1 is link "
}
[ -f "$1" ] && {
echo "$1 is commont file "
}
[ -b "$1" ] && {
echo "$1 is block "
}
[ -c "$1" ] && {
echo "$1 is character device "
}
[ -d "$1" ] && {
echo "$1 is direct "
}
8 &&和||
&& 符合条件作动作
|| 不符合条件作动作
- 判断文件是否存在,如果存在输出yes;如果文件不存在输出no
9 测试:
1.ifconfig 网卡 显示信息中包含此网卡使用的ip地址,用命令过滤此ip并在输出时只显示ip其他信息不显示
ifconfig enp1s0 | head -n 2|tail -n 1 | cut -d " " -f 10
ifconfig enp1s0 | head -n 2|tail -n 1 | cut -c 14-27
2.找出能登陆系统用户中UID最大的用户,并显示其名称
sort -nt : -k 3 /etc/passwd | grep bash|tail -n 1| cut -d : -f 1
sort -nt : -k3 /etc/passwd | awk -F : '/bash$/{ print $1 }'|tail -n 1
ifconfig enp1s0 |awk -F " " '/^\ /{print $2}'|head -n 1
当前主机为web服务器,请抓取访问web服务器次数排在前5的ip地址
cut -d " " -f 1 access_log |sort |uniq -c |sort -nr|awk -F " " '{print $2}'|head -n 5