Я могу перечислить файловые системы, которые может поддерживать рабочее ядро?

for i in 10 20 30; do echo $i; sleep 1; done | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

хорошо работает, таким образом, @Shadur является правильным и там буферизует приведенный в действие.

Добавление sed стриппер в соединение показывает, что это - преступник (только показывает 0 и 30):

for i in 10 20 30; do echo $i; sleep 1; done | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

Теперь, когда проблема известна, у Вас есть несколько опций. Самым чистым был бы к раунду/сокращению процент в awk или с математикой или с обработкой строк, но так как у Вас есть GNU sed, просто добавление -u или --unbuffered должен добиться цели.

Однако для пользы полноты, простой тестовый сценарий показывает awk также делает буферизацию:

for i in 10 20 30; do echo $i; sleep 1; done | awk '{print $0}' | sed -u 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 

Но Вы уже обрабатываете это с fflush, таким образом, я не ожидаю проблем.

27
13.04.2017, 15:37
4 ответа

Я могу перечислить файловые системы, которые может поддерживать рабочее ядро?

Ну, ответ /proc/filesystems является просто неправильным — это отражает только те FSes, которые уже принесены используемый, но обычно существует путь больше:

ls /lib/modules/$(uname -r)/kernel/fs

Другой источник /proc/config.gz который мог бы отсутствовать в Вашем дистрибутиве (и я всегда задаюсь вопросом «почему?!» в случае, если).

13
27.01.2020, 19:39
  • 1
    Ubuntu включена, только в другом месте: /boot/config-$(uname -r) –  Oli 03.11.2013, 18:21
  • 2
    /proc/filesystems не является неправильным, это просто неполно. –  scai 03.11.2013, 23:15
  • 3
    @poige той логикой Ваш ответ является ужасно неполным и неправильным также. /lib/modules/$(uname -r)/kernel/fs только поможет с файловыми системами, которые были включены как модули, не, которые встроены в ядро. Дополнительно имя модуля не могло бы соответствовать имени файловой системы, которое оно обеспечивает, и единственный модуль может обеспечить несколько файловых систем. –  Patrick 04.11.2013, 03:42
  • 4
    Этот ответ вводит в заблуждение, если модуль не загружается, ядро просто не может загрузить тот тип файловой системы, пока это не. Чтобы указать, что ядро может загрузиться, это не корректно - Вы не знаете, может ли это, пока Вы успешно не загружаете модуль. Даже нет гарантии, что можно загрузить тот модуль. –  Chris Down 04.11.2013, 09:35
  • 5
    @poige на самом деле я не пропускаю /proc/config.gz вообще. 1) это, как гарантируют, не будет существовать, 2) Имя модуля не могло бы соответствовать имени файловой системы, которое оно обеспечивает, и единственный модуль может обеспечить несколько файловых систем. –  Patrick 04.11.2013, 14:00

/proc/filesystems списки все типы файловой системы, поддерживаемые рабочим ядром, наряду с атрибутами файловой системы, nodev указать, что эта файловая система не поддерживается блочным устройством, например.

man 5 filesystems дает еще некоторую всестороннюю информацию.

11
27.01.2020, 19:39
  • 1
    Что делает nodev средний в выводе, когда Вы cat /proc/filesystems? –  slm♦ 03.11.2013, 16:22
  • 2
    На моем ноутбуке Linux Arch, cat /proc/filesystems перечисляет набор "nodev", файловых систем очевидно специального назначения, плюс ext2, ext3, ext4. Когда я заглядываю /lib/modules/3.11.6-1-ARCH/kernel/fs, Я вижу много других, как "жиры", "btrfs", "reiserfs", которые являются также регулярными дисковыми файловыми системами, но не появляются в /proc/filesystem список. Что произошло с этим? –  Bruce Ediger 03.11.2013, 16:49
  • 3
    nodev указывает, что рассматриваемая файловая система не является физической файловой системой, которой нужно блочное устройство для проживания на, а скорее виртуальная файловая система, которая поддерживается чем-то другим, чем блочное устройство. –  Jonathan Callen 03.11.2013, 16:49
  • 4
    @BruceEdiger: /proc/filesystems только показывает файловые системы, что ядро загрузилось - пока Вы не вставляете те модули в ядро (который обычно происходит автоматически, когда Вам нужны они), ядро не может поддерживать те файловые системы. –  Jonathan Callen 03.11.2013, 16:51

Он упакован в одинарные кавычки, поэтому не может быть развернут.

jq -r '.AutoScalingInstances[] | select(.AutoScalingGroupName == "$var1") ... .InstanceId'

Ключевой частью является команда jq , для которой фактически передается только один аргумент (обратите внимание на длинную часть команды red ). Так что ваши трубы тоже не вступают в силу. Можно выборочно свернуть вещи в кавычки, которые действительно должны быть.

-121--157327-

Я запускаю arch linux и предложенное решение cat/proc/filesystems | awk '{print $ NF}' | sed '/^ $/d ' не предоставило мне полный список файловых систем, которые в настоящее время поддерживает/поддерживает мое ядро. После поиска он выглядит как/proc/filesystems просто перечисляет файловые системы, которые уже имеют свои модули ядра загружены (или не нужны модули, такие как sysfs?).

На основании предложения Якамока прочитать справочную страницу я обнаружил, что документация о -t parmater имеет другую команду cat/proc/filesystems | awk '{print $ NF}' | sed '/^ $/d ', которая показывает дополнительные модули ядра файловой системы, которые доступны, но в настоящее время не загружены.

Сложив все вместе, у меня теперь есть эта команда, которая, как я полагаю, при запуске даст вам полный список всех файловых систем, которые поддерживает ваша текущая система linux:

(cat/proc/filesystems | awk '{print $ NF}' | sed '/^ $/d '; ls -1/lib/modules/$ (uname -r )/kernel/fs) | sort -u

Это в основном обе команды, выводимые один за другим все pipeed для сортировки с параметром -u (unique) включен для фильтрации дубликатов.

-121--20135-

Я верю, что это даст вам то, что вы хотите:

(cat /proc/filesystems | awk '{print $NF}' | sed '/^$/d'; ls -1 /lib/modules/$(uname -r)/kernel/fs) | sort -u

Объяснение

Основываясь на моем лучшем понимании:

  • cat/proc/filesystems | awk '{print $ NF}' | sed '/^ $/d ' предоставляет все файловые системы, которые изначально поддерживаются ядром (как и sysfs) вместе с модулями ядра, загруженными в настоящее время
  • ls -1/lib/modules/$(uname -r )/kernel/fs предоставляет список доступных модулей файловой системы, доступных для вашего ядра
  • sort -u сортирует объединенные результаты первых двух команд с удаленными дубликатами (только показать уникальные результаты -u)

Я все еще учусь linux, это работает на Arch linux, но я полагаю, что по крайней мере для ubuntu вам может понадобиться изменить путь /lib/modules/$ (uname -r )/kernel/fs на другой каталог, подходящий для вашего дистрибутива.

0
27.01.2020, 19:39

tl;dr

Правильный ответ: cat /proc/filesystems.

Пояснение

На вопрос уже был дан ответ, но все остальные ответы в той или иной степени неполны, вводят в заблуждение, не соответствуют действительности или, по крайней мере, больше не соответствуют действительности.

Изman 8 mount(упор мой):

-t, --types fstype

The argument following the -t is used to indicate the filesystem type. The filesystem types which are currently supported depend on the running kernel. See /proc/filesystems and /lib/modules/$(uname -r)/kernel/fs for a complete list of the filesystems. The most common are ext2, ext3, ext4, xfs, btrfs, vfat, sysfs, proc, nfs and cifs.

Поэтому я не могу винить никого, кто предлагает эти подходы. Однако, как указывали другие, каталог /lib/modules/$(uname -r)/kernel/fsсодержит файловую систему -, связанные модули ядра , что не то же самое, что поддерживаемые в настоящее время файловые системы :

.
  • Если модуль не загружен, файловая система в настоящее время не поддерживается.
  • Если поддержка встроена -в ядро, файловая система будет поддерживаться, но не будет отображаться в списке модулей.
  • Имена модулей не гарантируют соответствие 1 :1 файловым системам, которые они поддерживают.

Таким образом, список может содержать добавления, удаления и/или замены. Это не очень надежно. Можно иметь так называемое -"монолитное ядро", в котором все встроено -уже -в этом (заведомо необычном )случае список модулей будет полностью пуст, но ядро ​​по-прежнему будет поддерживать произвольное количество вещей -, включая, конечно же, различные файловые системы.

С другой стороны, это содержимое моего /proc/filesystemsфайла:

nodev   sysfs
nodev   tmpfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cgroup2
nodev   cpuset
nodev   devtmpfs
nodev   binfmt_misc
nodev   configfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   bpf
nodev   pipefs
nodev   ramfs
nodev   hugetlbfs
nodev   rpc_pipefs
nodev   devpts
        ext3
        ext4
        ext2
        cramfs
        squashfs
        vfat
        msdos
        exfat
        iso9660
nodev   nfs
nodev   nfs4
nodev   nfsd
nodev   cifs
nodev   smb3
        ntfs3
nodev   autofs
        fuseblk
nodev   fuse
nodev   fusectl
        udf
        f2fs
nodev   efivarfs
nodev   mqueue
nodev   resctrl
        btrfs
nodev   pstore

В этом списке есть файловые системы, которые моя система даже не видела, не говоря уже о том, что в настоящее время их монтирует.

По крайней мере, в моей системе это ответ. Я не могу сказать, почему принятый в настоящее время ответ приводит к противоположному выводу; возможно это новая разработка...

1
13.11.2021, 21:26

Теги

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