Linux实用命令补充

788 阅读5分钟

image.png


sort命令

sort [选项] 参数
cat file | sort 选项

为单位对文件内容进行排序,也可以根据不同的数据类型来排序比较原则是从首字符向后,依次按AscII码值进行比较,最后将他们按升序输出。

image.png

常用选项

选项作用
-n按照数字进行排序
-r反向排序
-u等同于uniq,表示相同的数据仅显示一行
-t指定字段分隔符,默认使用[Tab]键分隔
-k指定排序字段
-o<输出文件>将排序后的结果转存至指定文件
-f忽略大小写,会将小写字母都转换为大写字母来进行比较
-b忽略每行前面的空格
  • 按数字进行排序 image.png

  • 反向排序 image.png image.png

  • 相同的数据仅显示一行 image.png

  • 指定分隔符和指定排序字段 image.png

  • 排序后的结果转存至指定文件 image.png

    效果和重定向输出类似,重定向输出只能输入静态的内容 image.png

  • 忽略大小写 image.png

用途举例:筛选du统计占用情况 image.png

uniq命令

uniq [选项] 参数
cat file | uniq [选项]

用于忽略文件中连续的重复行,通常与sort命令结合使用。(去重) image.png image.png

常用选项

选项作用
-c进行计数,并删除文件中重复出现的行
-d仅显示连续的重复行
-u仅显示出现一次的行
  • 统计重复次数 image.png

  • 仅显示连续重复行和仅显示出现一次的行 image.png

用途举例:可用于监测用户登录次数 image.png image.png

脚本内容

#!/bin/bash
#监测用户登录
grep 'Failed password' /var/log/secure | awk '{print $11}' | sort -n | uniq -c > IPS.txt
OLD_IFS=$IFS
IFS=$'\n'
for i in $(cat IPS.txt)
do
        num=$(echo $i | awk '{print $1}')
        ip=$(echo $i | awk '{print $2}')
        if [ $num -gt 3 ];then
                echo "sshd:$ip" >> /etc/hosts.deny
        fi
done

IFS=$OLD_IFS
rm -f IPS.txt

解析

  • 筛选出对应的IP地址并统计次数 image.png

  • 筛选出相应的数据赋给变量,并对登录次数进行判断 image.png

tr命令

tr [选项] 参数1 参数2

常用来对来自标准输入的字符进行替换、压缩和删除

常用选项

选项作用
-c保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换
-d删除所有属于字符集1的字符
-s将重复出现的字符串压缩为一个字符;用字符集2替换字符集1
-t字符集2替换字符集1,不加选项同结果
  • 字符集2替换字符集1 image.png image.png

    符号也可以替换 image.png image.png

    字符集1和字符集2具有对应关系 image.png

  • 保留字符集1的字符,其他的字符用字符集2替换 image.png

    换行符\n也会被替换 image.png

  • 删除所有属于字符集的字符 image.png

  • 压缩并替换 image.png image.png image.png

删除空行

使用grep image.png

使用tr -s image.png

补充:删除windows文件“造成”的'^M'字符

Windows中编写的脚本文件移动到Linux中会多“^M”字符。 image.png

原因

  • Linux中遇到换行符("\n")会进行回车+换行的操作,回车符反而只会作为控制字符("^M")显示,不发生回车的操作。
  • windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。

删除^M的方法

  • 方法一:利用tr删除 image.png

  • 方法二:安装dos2unix,使用dos2unix删除 image.png image.png

补充:使用sort和tr排序数组

image.png

cut命令

cut 参数
cut file | cut 选项

显示行中的指定部分,删除文件中指定字段。

常用选项

选项作用
-f通过指定哪一个字段进行提取。cut命令使用"TAB"作为默认的字段分隔符。
-d“TAB"是默认的分隔符,使用此选项可以更改为其他的分隔符。
-b截取字符串
--complement此选项用于排除所指定的字段。
--output-delimiter更改输出内容的分隔符。
  • 指定提取哪一字段,指定分隔符 image.png image.png image.png

  • 截取字符串

    • echo直接截取 image.png

    • cut -b image.png

    • expr substr 变量名 第几个字符开始 截取长度 image.png

  • 用于排除所指定的字段 image.png

  • 更改输出内容的分隔符 image.png

split命令

split 选项 参数 原始文件 拆分后文件名前缀

可将将一个大的文件拆分成若干小文件

常用选项

选项作用
-l以行数拆分
-b以大小拆分

image.png

paste命令

paste [-s] [-d<间隔字符>] 文件..

用于合并文件的列

image.png

普通的合并,通过重定向追加,或者将两个文件重定向输出到第三个文件即可完成。

image.png

image.png

常用选项

选项作用
-d <间隔字符>用指定的间隔字符取代制表符
-s把多行内容合并为一行进行显示
  • 用指定的间隔字符取代制表符 image.png

  • 多行内容合并为一行进行显示 image.png

  • 组合使用 image.png

将文件1的第2列和文件2的第3列合并

  • 将两个文件的对应列分别导出到另一个文件,然后再使用paste合并。 image.png

eval命令

命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。

即先解析命令中的变量,再执行解析后的命令。 image.png

结合脚本使用

image.png

image.png

image.png