【问题标题】:Grab all swap partitions id & path from the list从列表中获取所有交换分区 ID 和路径
【发布时间】:2018-12-08 14:36:48
【问题描述】:

我需要从我的命令中获取所有交换分区

blkid
/dev/block/sda4: LABEL="system" UUID="da594c53-9beb-f85c-85c5-cedf76546f7a" TYPE="ext4" 
/dev/block/swap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap" 
/dev/block/swap1: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap" 
/dev/block/vnswap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap" 
/dev/block/zram0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap" 
/dev/block/sde10: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4" 
/dev/block/sde11: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4" 
/dev/block/sdd13: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat" 
/dev/block/sdd17: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat" 
/dev/block/sdd22: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4" 
/dev/block/mmcblk0p1: UUID="9016-4EF8" TYPE="vfat" 
/dev/block/loop64: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"

我需要的是获取该分区的路径和 UUID 并将它们放入单独的变量中,以知道它是否是交换分区 TYPE 必须是 TYPE="swap" UUID 和路径值是可变的(可以更改)这里有一些示例

/dev/block/swap0
/dev/block/swap1
/dev/block/swap2
/dev/block/vnswap0
/dev/block/vnswap1
/dev/block/zram0 

我实际上找到了一个可以完成这项工作的代码,但它是受版权保护的,我不想使用它,所以任何替代品都值得赞赏。这个有点不同,它在“/proc/swaps”中寻找交换

grep zram /proc/swaps
/dev/swap0                              partition       2097148 2816    16383
/dev/zram0                              partition       2097148 2816    16383
/dev/zram1                              partition       2097148 2816    16383

我将它包含在下面仅供参考

# Find all swapregions and target each one for swapoff
# Don't assume it's in the first field of swaps, find it
    SR="\/dev\/"
    PS="/proc/swap*"

    DIE=`awk -v SBD="$SR" ' $0 ~ SBD {
          for ( i=1;i<=NF;i++ )
            {
              if ( $i ~ ( "^" SBD ) )
               {
                  printf "%s;", $i
               }
            }
          }' $PS`

    saveifs=$IFS
    IFS=';'

    # I could have put all this in awk and just eval'd it 
    # But where's the fun in that

    for i in $DIE
    do
        case $i in
            *zram*)
                  j=`echo $i | sed 's/.*zram//'`
                 ( ( 
                     echo $j > /sys/class/zram-control/hot_remove
                     echo 1 > /sys/block/zram${j}/reset
                     swapoff $i
                  ) & )
                  ;;
            *)
                  if [ -n $i ]; then
                      ( ( swapoff $i ) & ) 
                  fi
                  ;;
        esac
    done

    IFS=$saveifs

    exit 0

【问题讨论】:

    标签: regex bash shell awk sed


    【解决方案1】:

    你能试试跟随吗(我现在正在开车所以没有测试它,我回家后也会测试它:))。

    awk '$0 ~ /swap/ && match($0,/\/[^:]*/){path=substr($0,RSTART,RLENGTH);match($0,/UUID=\"[^"]*/);print path,substr($0,RSTART+6,RLENGTH-6);path=""}'  Input_file
    

    根据需要的 OP 2 变量,因此现在也按此添加解决方案。

    uuids=$(awk '$0 ~ /swap/ && match($0,/UUID=\"[^"]*/){print substr($0,RSTART+6,RLENGTH-6)}'  Input_file)
    paths=$(awk '$0 ~ /swap/ && match($0,/\/[^:]*/){substr($0,RSTART,RLENGTH);print substr($0,RSTART,RLENGTH)}' Input_file)
    

    【讨论】:

    • @ranger003,你能试试这个解决方案然后告诉我吗?
    • @ranger003,哦抱歉忘了/现在试试然后告诉我?
    • 现在输出每个分区的路径
    • @ranger003,好的,如果您只需要 swap 的,那么现在试试我的编辑,然后告诉我?
    • 只有抓取交换分区路径才能完美运行。现在如何做同样的事情来获取交换分区的 UUID。
    【解决方案2】:

    script.awk

    /TYPE="swap"/ {
      path = $1
      uuid = $2
      sub(":", "", path)
      sub("UUID=\"", "", uuid)
      sub("\"", "", uuid)
      print path, uuid
    }
    

    返回以下结果:例如blkid | awk -f script.awk

    /dev/block/swap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /dev/block/swap1 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /dev/block/vnswap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /dev/block/zram0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    

    这对你有用吗?

    【讨论】:

    • 你能编辑一下,这样我就不需要调用外部文件了吗?
    【解决方案3】:

    使用 Perl,只需使用“command”而不是“cat ranger.txt”

    /tmp> cat ranger.txt
    blkid
    /dev/block/sda4: LABEL="system" UUID="da594c53-9beb-f85c-85c5-cedf76546f7a" TYPE="ext4"
    /dev/block/swap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
    /dev/block/swap1: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
    /dev/block/vnswap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
    /dev/block/zram0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
    /dev/block/sde10: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
    /dev/block/sde11: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
    /dev/block/sdd13: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat"
    /dev/block/sdd17: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat"
    /dev/block/sdd22: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
    /dev/block/mmcblk0p1: UUID="9016-4EF8" TYPE="vfat"
    /dev/block/loop64: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
    /tmp> cat ranger.txt | perl -ne ' /(^.+?):.*UUID=\"(.+?)\".*TYPE=\"swap\"/g and print "$1 $2\n" '
    /dev/block/swap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /dev/block/swap1 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /dev/block/vnswap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /dev/block/zram0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
    /tmp>
    

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      相关资源
      最近更新 更多