Захватить все идентификаторы и пути подкачки из списка - PullRequest
0 голосов
/ 08 декабря 2018

Мне нужно захватить все разделы подкачки из моей команды

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

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Не могли бы вы попробовать следующее (я сейчас за рулем, поэтому не проверял его, проверим, как только доберусь до дома :)).

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)
0 голосов
/ 10 декабря 2018

Используя Perl, просто используйте «команду» вместо «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>
0 голосов
/ 08 декабря 2018

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

Это работает для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...