
システムのループバックデバイスのリストを取得するために実行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.
ソートされたリスト(など)にファイルを出力するプログラムは、通常、ファイルを自分でソートしますls
。echo *
losetup
出力の場合、誰も意味のある方法でソートしようとしなかったと思います。