Symlinks already present
Cameron Simpson
cs at cskk.id.au
Sun Aug 30 22:32:50 EDT 2020
On 27Jul2020 22:19, Grant Edwards <grant.b.edwards at gmail.com> wrote:
>On 2020-07-27, Termoregolato <waste at is.invalid> wrote:
>> Il 26/07/20 22:47, dn ha scritto:
>>> Thus, compare the results of the two calls to detect a difference.
>>
>> I will try also another way, If I don't err symlinks and original
>> directory have the same inode number (I talk about Linux, where I'm
>> using the application).
>
>You err. Symlinks are distinct i-nodes which are not the same i-node
>as the destination. A symlink is basically a file containing a string
>that is read and then used a path to another file.
We need to be careful with terminology (just for clarity).
Each "source" symlink has its own inode. But if you os.stat() the
symlink it follows the symlink and you get the inode for the "target"
directory - two symlinks which point at the same directory will return the same
inode and thus (st_dev,st_ino) in that stat result.
That can be used for comparison, and you don't need to readlink or
anything like that - let the OS do it all for you during the os.stat()
call.
>If you create a "hard" link (ln without the '-s') then you end up a single
>i-node that has entries in multiple directories.
Aye.
>[old-Unix-guy story: Way back when, SunOS used to allow you (if root)
>to create a hard link to a directory. It's not something you did a
>second time.]
It's a well defined operation. There are some policy choices an OS can
make about some of the side effects (how does pwd work? how you got
there? or some underlying "real" path - this spills over into "what does
".." mean?), etc. But having made those choices, the idea is just fine.
As a counter example, many rsync based backup systems have the following
underlying approach:
- make a new directory tree with every file hardlinked from the previous
backup tree
- rsync into the new tree, because rsync unlinks and replaces changed
files
By contrast, MacOS Time Machine utilitises hardlinking directories on
HFS volumes: instead of making a new directory tree full of hardlinks
you just hardlink the top directory itself if nothing inside it has been
changed.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list