`losetup --list`の出力はどのようにソートされますか?

`losetup --list`の出力はどのようにソートされますか?

システムのループバックデバイスのリストを取得するために実行losetup --list(または単に)すると、出力は意味のある順序になっていないようです。losetup

0 $  losetup --list
NAME        SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                   DIO LOG-SEC
/dev/loop1          0      0         1  1 /var/lib/snapd/snaps/core18_1885.snap                         0     512
/dev/loop29         0      0         1  1 /var/lib/snapd/snaps/core18_1880.snap                         0     512
/dev/loop19         0      0         1  1 /var/lib/snapd/snaps/gtk-common-themes_1506.snap              0     512
/dev/loop27         0      0         1  1 /var/lib/snapd/snaps/gnome-characters_539.snap                0     512
/dev/loop17         0      0         1  1 /var/lib/snapd/snaps/gnome-characters_550.snap                0     512
/dev/loop8          0      0         1  1 /var/lib/snapd/snaps/gtk-common-themes_1502.snap              0     512
/dev/loop25         0      0         1  1 /var/lib/snapd/snaps/kde-frameworks-5-qt-5-14-core18_4.snap   0     512
/dev/loop15         0      0         1  1 /var/lib/snapd/snaps/glimpse-editor_134.snap                  0     512
/dev/loop6          0      0         1  1 /var/lib/snapd/snaps/gnome-calculator_730.snap                0     512
/dev/loop23         0      0         1  1 /var/lib/snapd/snaps/gnome-logs_93.snap                       0     512
/dev/loop13         0      0         1  1 /var/lib/snapd/snaps/wormhole_112.snap                        0     512
/dev/loop4          0      0         1  1 /var/lib/snapd/snaps/canonical-livepatch_94.snap              0     512

明らかに、デバイス名またはサポートファイル名でソートされていません。順番は任意に決められていますか?

ベストアンサー1

losetup読むgetdents64()from/sys/blockなので、そのディレクトリ内の項目の順序です。

同じ順序(ソートされていない)が得られると、ls -f次のようになります。

# ls -f /sys/block | grep loop
loop1
loop6
loop4
loop2
loop0
loop7
loop5
loop3

そしてlosetup比較してみてください:

# losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE  DIO LOG-SEC
/dev/loop1         0      0         0  0 /dev/shm/b   0     512
/dev/loop6         0      0         0  0 /dev/shm/c   0     512
/dev/loop4         0      0         0  0 /dev/shm/a   0     512
/dev/loop2         0      0         0  0 /dev/shm/c   0     512
/dev/loop0         0      0         0  0 /dev/shm/a   0     512
/dev/loop7         0      0         0  0 /dev/shm/d   0     512
/dev/loop5         0      0         0  0 /dev/shm/b   0     512
/dev/loop3         0      0         0  0 /dev/shm/d   0     512

マンページにはgetdents注文への言及はありませんが、readdir説明する:

   The order in which filenames are read by successive calls to readdir()
   depends on the filesystem implementation; it is unlikely that the names
   will be sorted in any fashion.

ソートされたリスト(など)にファイルを出力するプログラムは、通常、ファイルを自分でソートしますlsecho *

losetup出力の場合、誰も意味のある方法でソートしようとしなかったと思います。

おすすめ記事