имена устройств в выводе rfkill не совпадают с именами из ip

С инструментами GNU (Оболочка GNU или другая оболочка с поддержкой ksh подстановка процессов (<(...)), GNU xargsили совместимая, как FreeBSD (для -a, -r,-0), GNU mvдля -t, GNU awkдляnextfile(также поддерживается некоторыми другими реализациями; он будет проигнорирован, но менее эффективен там, где не поддерживается)):

xargs -r0a <(
  find dir -type f -exec awk 'FNR == 2 {
    if (substr($0, 8, 2) == "EL" && substr($0, 42, 4) == "2017")
      printf "%s\0", FILENAME
    nextfile}' {} +)  echo mv -it /somewhere

(удалить echoесли доволен)

В системах, отличных от -GNU, вы можете изменить его на:

{
find dir -type f -exec awk -v q="'" '
  function quote_for_xargs(s) {
    gsub(q, q "\\" q q, s)
    gsub("\n", q "\\\n" q, s)
    return q s q
  }
  FNR == 2 {
    if (substr($0, 8, 2) == "EL" && substr($0, 42, 4) == "2017")
      print quote_for_xargs(FILENAME)
    nextfile
  }' {} + | xargs sh -c '
  [ "$#" -eq 0 ] || exec echo mv -i "$@" /somewhere <&3 3<&-' sh
} 3<&0

(удалить echoесли устраивает ).

То есть иметь findвызов awkдля каждого текстового файла. В awkдля второй строки каждого файла (FNR==2), если выполняются условия, выведите имя файла в формате, подходящем для вводаxargs(xargs, который рассматривается как список слов, разделенных пробелами или символами новой строки, и где одинарные и двойные кавычки, а также обратную косую черту можно использовать для экранирования разделителей или друг друга ). Например, файл с именем ./That's tough.logбудет выводиться как './That'\''s tough.log'.

xargsиспользует этот вход для передачи как можно большего количества аргументов в sh. Нам нужна оболочка sh, потому что каталог назначения должен быть последним аргументом. Нам нужен -i, потому что, поскольку файлы попадают в один и тот же каталог, существует вероятность потери данных, если перемещаются два файла с одинаковым именем в разных каталогах. Нам нужен mvстандартный ввод (для -iподсказки )к , а не быть каналом из find, следовательно, использование временного fd 3 для пересылки внешнего стандартного ввода на shдля sh, чтобы установить mvстандартный ввод для этого.

1
02.09.2020, 03:35
1 ответ

Беспроводная связь существует в двух аспектах.:

  • аппаратное беспроводное устройство phy , обычно называемое phyX .
  • связанный с ним сетевой интерфейс (s)dev обычно называемый wlanY .

Для данного беспроводного аппаратного устройства phyX даже возможно создать дополнительные сетевые интерфейсы, связанные с ним , когда оно имеет для этого возможности. Вот как можно, например, использовать одну и ту же карту (, когда она имеет возможность )быть и клиентом, и точкой доступа одновременно. И, вероятно, поэтому есть дополнительный слой. Весь этот нижний уровень управляется командой iw, а не командой ip link, которая управляет только конечным сетевым интерфейсом.

Отдельно от этого система может выбрать переименование (из wlanYсетевой интерфейс в соответствии с так -называемымСогласованное имя устройства сетевого интерфейсаили также называетсяПредсказуемые имена сетевых интерфейсов. Это несвязанная тема, так как она не поможет лучше угадать связь между phyX (, который обычно является динамическим )и любым именем.

iwman-страница почти пуста, но у команды все еще есть (очень )большая справочная страница.

# iw help | less

[...]
        dev
                List all network interfaces for wireless hardware.

        dev <devname> info
                Show information for this interface.
[...]

Для заданного сетевого интерфейса wlanY использование iw dev wlanY infoотобразит в результатах запись с именем wiphyи индекс. Это индекс X соответствующего интерфейса phy . Таким образом, вы можете получить отношение wlanY-> phyX .

Пример:

# iw dev wlan1 info
Interface wlan1
    ifindex 45
    wdev 0x300000001
    addr 16:c3:0c:a5:63:62
    type managed
    wiphy 3
    txpower 0.00 dBm

Или вы можете получить список аппаратных устройств, отсортированных по phyX (, отображаемыйphy#X)с соответствующими сетевыми интерфейсами.Например:

# iw dev
phy#4
    Interface wlan2
        ifindex 46
        wdev 0x500000001
        addr 2a:5f:7f:7a:30:1b
        type managed
        txpower 0.00 dBm
phy#3
    Interface wlan1
        ifindex 45
        wdev 0x300000001
        addr 16:c3:0c:a5:63:62
        type managed
        txpower 0.00 dBm
phy#0
    Interface wlan0
        ifindex 3
        wdev 0x1
        addr be:2d:23:03:29:c5
        type managed
        txpower 0.00 dBm

И rfkill отображает связь между rfkillZ и phyX(рядом с модемом LTE и Bluetooth ).

# rfkill -o ID,TYPE,DEVICE,SOFT,HARD list
ID TYPE      DEVICE      SOFT      HARD
 0 wlan      phy0   unblocked unblocked
 4 wlan      phy3   unblocked unblocked
 5 wlan      phy4   unblocked unblocked
 9 bluetooth hci0     blocked unblocked

При навигации по символическим ссылкам и чтении содержимого, доступного в /sys/class/, информация также доступна более чем одним возможным способом:

от wlan до phy до rfkill:

$ ls -l /sys/class/net/wlan1/phy80211
lrwxrwxrwx. 1 root root 0 Sep  1 20:58 /sys/class/net/wlan1/phy80211 ->../../ieee80211/phy3
$ grep ^ /sys/class/net/*/phy80211/name 
/sys/class/net/wlan0/phy80211/name:phy0
/sys/class/net/wlan1/phy80211/name:phy3
/sys/class/net/wlan2/phy80211/name:phy4

$ ls -1d /sys/class/net/*/phy80211/rfkill*
/sys/class/net/wlan0/phy80211/rfkill0
/sys/class/net/wlan1/phy80211/rfkill4
/sys/class/net/wlan2/phy80211/rfkill5

от rfkill до phy до wlan:

$ ls -l /sys/class/rfkill/rfkill4/device
lrwxrwxrwx. 1 root root 0 Sep  1 21:05 /sys/class/rfkill/rfkill4/device ->../../phy3
$ grep ^ /sys/class/rfkill/rfkill*/device/name
/sys/class/rfkill/rfkill0/device/name:phy0
/sys/class/rfkill/rfkill4/device/name:phy3
/sys/class/rfkill/rfkill5/device/name:phy4
$ ls -1d /sys/class/rfkill/rfkill*/device/device/ieee80211/*
/sys/class/rfkill/rfkill0/device/device/ieee80211/phy0
/sys/class/rfkill/rfkill4/device/device/ieee80211/phy3
/sys/class/rfkill/rfkill5/device/device/ieee80211/phy4

(Устройство Bluetooth, указанное выше, имеет другую компоновку и поэтому не отображается так)

ls -1d /sys/class/rfkill/rfkill*/device/device/net/* 
/sys/class/rfkill/rfkill0/device/device/net/wlan0
/sys/class/rfkill/rfkill4/device/device/net/wlan1
/sys/class/rfkill/rfkill5/device/device/net/wlan2

# iw phy phy4 interface add onemorewlan type managed addr 12:34:56:78:ab:cd

$ ls -1d /sys/class/ieee80211/phy*/device/net/*
/sys/class/ieee80211/phy0/device/net/wlan0
/sys/class/ieee80211/phy3/device/net/wlan1
/sys/class/ieee80211/phy4/device/net/onemorewlan
/sys/class/ieee80211/phy4/device/net/wlan2

Вы поняли.

2
18.03.2021, 23:08

Теги

Похожие вопросы