AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 793338
Accepted
user447274
user447274
Asked: 2025-04-05 05:38:33 +0800 CST2025-04-05 05:38:33 +0800 CST 2025-04-05 05:38:33 +0800 CST

列出并统计 /dev/mapper 设备中 cryptsetup 使用的密码

  • 772

在我的 Linux 计算机中,我有/dev/mapper/许多文件名为file1、、....。file2file3

现在我将从文件中了解密码的使用频率。

我试过这个

for i in /dev/mapper/file* ; do cryptsetup status $i | grep cipher ; done | sort

并成为这个输出

  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-cbc-essiv:sha256
  cipher:  aes-xts-plain64
  cipher:  aes-xts-plain64
  cipher:  aes-xts-plain64
  cipher:  serpent-xts-plain64
  cipher:  serpent-xts-plain64

但我正在寻找这样的输出:

13x  cipher:  aes-cbc-essiv:sha256
 3x  cipher:  aes-xts-plain64
 2x  cipher:  serpent-xts-plain64

另外还有如下输出:

file1  use cipher aes-xts-plain64
file2  use cipher serpent-xts-plain64
....
file13 use cipher aes-xts-plain64
linux
  • 2 2 个回答
  • 75 Views

2 个回答

  • Voted
  1. Best Answer
    Hauke Laging
    2025-04-05T06:49:59+08:002025-04-05T06:49:59+08:00

    在bash:

    #!/usr/bin/env bash
    
    declare -A cipher
    for file in /dev/mapper/file* ; do
        output="$( cryptsetup status "$file" | awk '$1=="cipher:" { print $2; }' )"
        test -n "$output" && cipher["$file"]="$output"
    done
    
    printf '%s\n' "${cipher[@]}" | sort -n | uniq -c
    
    for file in "${!cipher[@]}"; do
        echo "${file#/dev/mapper/}: ${cipher["$file"]}"
    done | column -t
    
    • 2
  2. markp-fuso
    2025-04-05T12:16:07+08:002025-04-05T12:16:07+08:00

    我没有使用,cryptsetup因此我将创建以下文件来模拟输出cryptsetup:

    i=1
    for c in 'aes-cbc-essiv:sha256' 'aes-xts-plain64' 'serpent-xts-plain64'
    do
        for ((j=i;j<=12;j+=3))
        do
            echo "  cipher: $c" > "file$j"
        done
        ((i++))
    done
    

    为了模拟跑步,cryptsetup status $i我将运行cat $i,例如:

    $ cat file1
      cipher: aes-cbc-essiv:sha256
    
    $ cat file2
      cipher: aes-xts-plain64
    

    由于我不熟悉cryptsetup输出,我将find打印文件名然后调用cat:

    $ find . -name 'file*' -printf "FILE: %f\n" -exec cat {} \;
    FILE: file2
      cipher: aes-xts-plain64
    FILE: file8
      cipher: aes-xts-plain64
    FILE: file12
      cipher: serpent-xts-plain64
    ... snip ...
    

    我现在可以将其输入到awk来累加计数,将file use cipher行打印到cipher_list.txt,最后将总计数打印到cipher_counts.txt:

    awk  '
    $1 == "FILE:"   { fname = $2; next }
    $1 == "cipher:" { counts[$2]++
                      printf "%s use cipher %s\n", fname, $2 > "cipher_list.txt"
                    }
    END             { for (cipher in counts)
                          printf "%sx cipher: %s\n", counts[cipher], cipher > "cipher_counts.txt"
                    }
    ' < <(find . -name 'file*' -printf "FILE: %f\n" -exec cat {} \; )
    

    结果:

    $ cat cipher_counts.txt
    4x cipher: aes-xts-plain64
    4x cipher: serpent-xts-plain64
    4x cipher: aes-cbc-essiv:sha256
    
    $ cat cipher_list.txt
    file2 use cipher aes-xts-plain64
    file8 use cipher aes-xts-plain64
    file12 use cipher serpent-xts-plain64
    file11 use cipher aes-xts-plain64
    file6 use cipher serpent-xts-plain64
    file5 use cipher aes-xts-plain64
    file3 use cipher serpent-xts-plain64
    file10 use cipher aes-cbc-essiv:sha256
    file9 use cipher serpent-xts-plain64
    file7 use cipher aes-cbc-essiv:sha256
    file1 use cipher aes-cbc-essiv:sha256
    file4 use cipher aes-cbc-essiv:sha256
    

    从这里开始,OP 可以运行文件sort并column根据需要进行格式化。我们可以在代码中推动排序和最终打印格式,但此时awk我想让代码保持(相对)简单。awk

    例如,cipher_list.txt按文件名排序(假设每个文件只有一行/一个密码)并以至少 1 个空格隔开列:

    $ sort -V cipher_list.txt | column -t -o ' '
    file1  use cipher aes-cbc-essiv:sha256
    file2  use cipher aes-xts-plain64
    file3  use cipher serpent-xts-plain64
    file4  use cipher aes-cbc-essiv:sha256
    file5  use cipher aes-xts-plain64
    file6  use cipher serpent-xts-plain64
    file7  use cipher aes-cbc-essiv:sha256
    file8  use cipher aes-xts-plain64
    file9  use cipher serpent-xts-plain64
    file10 use cipher aes-cbc-essiv:sha256
    file11 use cipher aes-xts-plain64
    file12 use cipher serpent-xts-plain64
    

    至于 OP 的实际环境,我假设 OP 做出以下更改就足够了:

    ##### change this:
    
    ' < <(find . -name 'file*' -printf "FILE: %f\n" -exec cat {} \; )
                                                          ^^^^^^
    
    ##### to this:
    
    ' < <(find . -name 'file*' -printf "FILE: %f\n" -exec cryptsetup status {} \; )
                                                          ^^^^^^^^^^^^^^^^^^^^
    
    • 2

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve