• trem@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    9
    ·
    10 hours ago

    Just to kind of confirm this:

    ls -l does not show them like hard links, but rather like soft/symbolic links.

    But when I do tail -f /path/to/file.txt on a file (to keep it open in a process) and then delete the file, I get this output in ls -l:

    3 -> '/path/to/file.txt (deleted)'
    

    The 3 seems to just be an incrementing number for each file opened by the process. And then, well, obviously the file isn’t now called “file.txt (deleted)”. That is just a name the kernel makes up when ls -l asks it what’s in that directory.

    So, presumably the kernel keeps a separate copy of that file in memory until the process closes the file or is terminated. And then exposes it through this pseudo-softlink rather than making use of hardlinks.

    • korthrun@piefed.social
      link
      fedilink
      English
      arrow-up
      6
      ·
      9 hours ago

      The 3 seems to just be an incrementing number for each file opened by the process.

      FWIW: https://en.wikipedia.org/wiki/File_descriptor#file_descriptor_table

      If you throw an strace on a process that interacts with the filesystem you’ll see that stuff like open() returns a file descriptor and stuff like read() takes a file descriptor as an argument.

      These are also generally the numbers you’re using when you do I/O redirection in your shell with stuff like 2>&1 or exec 5< ./some_file.txt