👋
lstat に与えるシンボリックリンク名の末尾にスラッシュ「/」をつけるとシンボリックリンクを辿るらしい
Python の os.lstat です。 os.lstat はシステムコールの lstat を呼びます。
os.lstat(path, *, dir_fd=None)
Perform the equivalent of an lstat() system call on the given path. Similar to stat(), but does not follow symbolic links. Return a stat_result object.
シンボリックリンクは辿らないと書いてあるのに
環境
- Arch Linux x86_64
- Python 3.9.1
% uname -rsm
Linux 5.10.7-arch1-1 x86_64
% python --version
Python 3.9.1
例
ディレクトリ b へのシンボリックリンク b.symlink があるとして
% ls -l a/
合計 4
drwxr-xr-x 2 miwa docker 4096 1月 19 14:19 b
lrwxrwxrwx 1 miwa docker 1 1月 19 14:19 b.symlink -> b
lstat にシンボリックリンクを与えるとシンボリックリンク自体の情報を返す
>>> os.lstat('a/b.symlink')
os.stat_result(st_mode=41471, st_ino=7999734, st_dev=65024, st_nlink=1, st_uid=1337, st_gid=973, st_size=1, st_atime=1611033568, st_mtime=1611033560, st_ctime=1611033560)
末尾にスラッシュ /
を付けるとシンボリックリンクを辿る。
>>> os.lstat('a/b.symlink/')
os.stat_result(st_mode=16877, st_ino=7999733, st_dev=65024, st_nlink=2, st_uid=1337, st_gid=973, st_size=4096, st_atime=1611033546, st_mtime=1611033546, st_ctime=1611033546)
上記の結果はリンク先のディレクトリを与えた場合と同じ結果。inode (st_ino) も同じ。
>>> os.lstat('a/b')
os.stat_result(st_mode=16877, st_ino=7999733, st_dev=65024, st_nlink=2, st_uid=1337, st_gid=973, st_size=4096, st_atime=1611033546, st_mtime=1611033546, st_ctime=1611033546)
なお stat コマンドでも同じ挙動となる。
シンボリックリンクを与える
% stat a/b.symlink
File: a/b.symlink -> b
Size: 1 Blocks: 0 IO Block: 4096 シンボリックリンク
Device: fe00h/65024d Inode: 7999734 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1337/ miwa) Gid: ( 973/ docker)
Access: 2021-01-19 14:19:28.141464184 +0900
Modify: 2021-01-19 14:19:20.764913179 +0900
Change: 2021-01-19 14:19:20.764913179 +0900
Birth: 2021-01-19 14:19:20.764913179 +0900
末尾にスラッシュ /
を付ける。
% stat a/b.symlink/
File: a/b.symlink/
Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ
Device: fe00h/65024d Inode: 7999733 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1337/ miwa) Gid: ( 973/ docker)
Access: 2021-01-19 14:19:06.125142673 +0900
Modify: 2021-01-19 14:19:06.125142673 +0900
Change: 2021-01-19 14:19:06.125142673 +0900
Birth: 2021-01-19 14:19:06.125142673 +0900
上記の結果はリンク先のディレクトリの結果と同じ。 inode も同じ。
% stat a/b
File: a/b
Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ
Device: fe00h/65024d Inode: 7999733 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1337/ miwa) Gid: ( 973/ docker)
Access: 2021-01-19 14:19:06.125142673 +0900
Modify: 2021-01-19 14:19:06.125142673 +0900
Change: 2021-01-19 14:19:06.125142673 +0900
Birth: 2021-01-19 14:19:06.125142673 +0900
Discussion