Как использовать объектив toml для одного файла в Ubuntu 20.04?

«Файлы» под /dev/disk/by-*являются символическими ссылками , созданными udevс использованием информации о блочном устройстве (с ), предоставленной ядром. Символические ссылки указывают на фактические узлы устройств для дисков. Например:

/dev/disk/by-path/pci-0000:00:11.0-ata-1 ->../../sdn

и

/dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0 ->../../sdb

Драйвер их не создает, и ядро ​​их не создает. за них полностью отвечает udev.

udevиспользует правила, определенные в/etc/udev/rules.d/(для собственных правил локального системного администратора, и -использует )и/lib/udev/rules.d/(системные значения по умолчанию )для их создания.

Например:/lib/udev/rules.d/60-persistent-storage.rules. В моей системе Debian первые несколько строк этого файла::

# do not edit this file, it will be overwritten on update

# persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path}
# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>

Если вы хотите написать свои собственные правила для дисков на этом HBA, попробуйте запустить udevadm info /dev/disk/by-id/.....Это может предоставить достаточно информации для создания символической ссылки, которая идентифицирует отсек для диска.

напр. на одном из моих дисков (диск SATA, подключенный к IBM M1015, LSI SAS2008, часть одного из моих пулов ZFS):

# udevadm info /dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0
P: /devices/pci0000:00/0000:00:0b.0/0000:07:00.0/host0/port-0:1/end_device-0:1/target0:0:1/0:0:1:0/block/sdb
N: sdb
S: disk/by-id/ata-WDC_WD10EACS-00ZJB0_WD-WCASJ2114122
S: disk/by-id/wwn-0x50014ee2023dc46f
S: disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0
E: DEVLINKS=/dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0 /dev/disk/by-id/ata-WDC_WD10EACS-00ZJB0_WD-WCASJ2114122 /dev/disk/by-id/wwn-0x50014ee2023dc46f
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/pci0000:00/0000:00:0b.0/0000:07:00.0/host0/port-0:1/end_device-0:1/target0:0:1/0:0:1:0/block/sdb
E: DEVTYPE=disk
E: ID_ATA=1
E: ID_ATA_DOWNLOAD_MICROCODE=1
E: ID_ATA_FEATURE_SET_AAM=1
E: ID_ATA_FEATURE_SET_AAM_CURRENT_VALUE=254
E: ID_ATA_FEATURE_SET_AAM_ENABLED=0
E: ID_ATA_FEATURE_SET_AAM_VENDOR_RECOMMENDED_VALUE=128
E: ID_ATA_FEATURE_SET_HPA=1
E: ID_ATA_FEATURE_SET_HPA_ENABLED=1
E: ID_ATA_FEATURE_SET_PM=1
E: ID_ATA_FEATURE_SET_PM_ENABLED=1
E: ID_ATA_FEATURE_SET_PUIS=1
E: ID_ATA_FEATURE_SET_PUIS_ENABLED=0
E: ID_ATA_FEATURE_SET_SECURITY=1
E: ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
E: ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=276
E: ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=276
E: ID_ATA_FEATURE_SET_SMART=1
E: ID_ATA_FEATURE_SET_SMART_ENABLED=1
E: ID_ATA_SATA=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN1=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1
E: ID_ATA_WRITE_CACHE=1
E: ID_ATA_WRITE_CACHE_ENABLED=1
E: ID_BUS=ata
E: ID_MODEL=WDC_WD10EACS-00ZJB0
E: ID_MODEL_ENC=WDC\x20WD10EACS-00ZJB0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_PART_TABLE_TYPE=gpt
E: ID_PART_TABLE_UUID=53ad1007-a736-ca41-a1fb-98ec491cc00a
E: ID_PATH=pci-0000:07:00.0-sas-phy0-lun-0
E: ID_PATH_TAG=pci-0000_07_00_0-sas-phy0-lun-0
E: ID_REVISION=01.01B01
E: ID_SERIAL=WDC_WD10EACS-00ZJB0_WD-WCASJ2114122
E: ID_SERIAL_SHORT=WD-WCASJ2114122
E: ID_TYPE=disk
E: ID_WWN=0x50014ee2023dc46f
E: ID_WWN_WITH_EXTENSION=0x50014ee2023dc46f
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: TAGS=:systemd:
E: UDISKS_ATA_SMART_IS_AVAILABLE=1
E: UDISKS_IGNORE=1
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_COUNT=2
E: UDISKS_PARTITION_TABLE_SCHEME=gpt
E: UDISKS_PRESENTATION_HIDE=1
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=15128136
2
17.10.2020, 15:45
2 ответа

Спецификация TOML указывает, что строка должна быть заключена в кавычки (см.https://toml.io/en/v1.0.0#string). Исправленный вариант вашего файла будет выглядеть как

[config]
bm_open_method=0

[volume]
mount_on_startup=1
mount_removable=1
autorun=1

[ui]
always_show_tabs=0
max_tab_chars=32
win_width=1916
win_height=1149
splitter_pos=150
media_in_new_tab=0
desktop_folder_new_win=0
change_tab_on_drop=1
close_on_unmount=1
focus_previous=0
side_pane_mode="places"
view_mode="compact"
show_hidden=0
sort="name;ascending;"
toolbar="newtab;navigation;home;"
show_statusbar=1
pathbar_mode_buttons=0

Затем вы хотите заменить значение в разделе ui. Допустим, вы хотите изменить view_modeс compactна forward leaningи у вас есть это значение в переменной оболочки с именем vmode.

Затем с помощью инструмента tomlqиз https://kislyuk.github.io/yq/,

$ vmode='forward leaning'
$ tomlq -t --arg vmode "$vmode" '.ui.view_mode |= $vmode' pcmanfm.conf
[config]
bm_open_method = 0

[volume]
mount_on_startup = 1
mount_removable = 1
autorun = 1

[ui]
always_show_tabs = 0
max_tab_chars = 32
win_width = 1916
win_height = 1149
splitter_pos = 150
media_in_new_tab = 0
desktop_folder_new_win = 0
change_tab_on_drop = 1
close_on_unmount = 1
focus_previous = 0
side_pane_mode = "places"
view_mode = "forward leaning"
show_hidden = 0
sort = "name;ascending;"
toolbar = "newtab;navigation;home;"
show_statusbar = 1
pathbar_mode_buttons = 0

Инструмент tomlqиспользует синтаксис jqдля доступа и изменения документа. Путь .ui.view_mode— это то, что мы решили изменить, а $vmode— это значение, до которого мы его обновляем. Это внутренняя переменная, для которой мы устанавливаем то же значение, что и для переменной оболочки с тем же именем в командной строке, используя --arg.


Для справки, утилита tomlqвнутри работает с документом JSON, созданным из вашего документа TOML, который выглядит так

{
  "config": {
    "bm_open_method": 0
  },
  "volume": {
    "mount_on_startup": 1,
    "mount_removable": 1,
    "autorun": 1
  },
  "ui": {
    "always_show_tabs": 0,
    "max_tab_chars": 32,
    "win_width": 1916,
    "win_height": 1149,
    "splitter_pos": 150,
    "media_in_new_tab": 0,
    "desktop_folder_new_win": 0,
    "change_tab_on_drop": 1,
    "close_on_unmount": 1,
    "focus_previous": 0,
    "side_pane_mode": "places",
    "view_mode": "compact",
    "show_hidden": 0,
    "sort": "name;ascending;",
    "toolbar": "newtab;navigation;home;",
    "show_statusbar": 1,
    "pathbar_mode_buttons": 0
  }
}
1
21.06.2021, 12:04

Когда Augeas не может разобрать файл, вы можете использовать скрипт augcheck, чтобы выяснить, почему:

./augcheck /tmp/test.toml Toml
/tmp/augcheck.h99O5K/parse_file.aug:3.0-.54:exception thrown in test
/tmp/augcheck.h99O5K/parse_file.aug:3.5-.50:exception: Syntax error
    Lens: /usr/share/augeas/lenses/dist/toml.aug:145.10-.45:
    Error encountered at 20:15 (290 characters into string)
    <s_previous=0\nside_pane_mode=|=|places\nview_mode=compact\nsho>

    Tree generated so far:
    

Syntax error in lens definition
Failed to load /tmp/augcheck.h99O5K/parse_file.aug

Это указывает на то, что Augeas не удалось разобрать строку:side_pane_mode=planes. Глядя на линзу, кажется, что линза TOML в настоящее время поддерживает только строки в кавычках.

1
18.03.2021, 22:56

Теги

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