Julia Evans has such great and accessible content, they’re awesome

Okay, this is legitimately cool as heck. This finally helps me wrap my head around the “everything is a file” concept in Linux. Of course it can just copy the executable to memory for later reference. That’s how the system would not completely have a meltdown when you do live updates.
Excellent share!
It’s a bit more interesting than that…
Linux, unlike Windows, will let you delete a file that is actively in use. It removes the reference on the file system but the contents of the file won’t be deleted until all file pointers to it close. In fact it will still be seen as taking up disk space until it’s garbage collected (deleting a large file that’s in use can be frustrating).
So the file is actually still available to that running process. If you replace it with a new executable and run that then you get the new version.
I bet this is done with inodes. Deleted files aren’t truely deleted until nothing has it open and its inode gets dropped. Like ARC for files.
You can also do interesting things like overwrite a “file” (as in a specific filesystem path) with new contents while keeping anything that already has the file open on the old contents by unlinking the old inode to the path and writing the new contents under a new inode. I believe mv does this. The kind of lesser known feature that probably strikes a good balance between preventing super annoying silent errors/corruption and causing them.
Thanks for explaining, I was wondering about that.
Wait, is that why renaming or moving files on android takes forever?
No, that’s because Android. It’s also overlaying all filesystems to enforce stupid rules, like no files named “CON” and no files named the same in a different case (like in DOS).
Wait until you see the Plan 9 API
This is awesome, and I really no no idea about this!
I no no idea you liked this, nice
d’oh! That’s what I get for trying to type quickly.
That’s ok, sometimes I to to type quickly too
I know what a symlink is, but what is a magic symlink?
A symlink that has been blessed by Richard Stallman.

“Now that’s a name I haven’t heard in a long time” - Saint IGNUcius
Anyone else getting turned on rn?

If you delete a file that’s still open by the app, the link in proc will still exist and you can copy the file back out of proc.
Does that not make them a hard link (pointing to a filesystem node) instead of a symlink (pointing to another filename)?
No, you can’t have a hard link cross filesystems and proc is its own fs type.
Ah - it has its own special magical file system type, that’s the secret sauce. Neat!
/dev and /sys are the other two special ones
These days there can be a dozen virtual filesystems doing various stuff. If you ever want to get quite baffled, install a terminal emulator on an Android phone (not Termux) and run
mount.Remember the old days before /dev was its own virtual filesystem?
It still is! If you try and boot a kernel with nothing in /dev, you won’t get most of the kernel boot messages since /dev/console doesn’t exist. You need a basic set of device nodes in /dev before udev is started.
If you’re going to rsync a system to new hardware and exclude /dev /proc /sys, it’s better to setup a new mount of your / to a different directory and sync off that, so you get the underlying stuff without the cruft.
Do you know how to build portable executables?
configure --prefix=/proc/self/pwdIt even works in .so files and libtool.
I would generally just set the RPATH to
$ORIGINin the ELF fileMay I have the explanation?
The executable will search for .so files not inside predefined paths like /usr/lib but inside it’s current directory. You may theoretically put
.as an argument toconfigure, but it converts that into an absolute path, snd libtool and linker fail when encountering relative paths inside shared library dependencies.Thank you
Great tips! Although if i may 🤓 just a little for the top right, it works because what you deleted isn’t the binary, it’s the pointer that points to the binary’s location. The data is still exactly as it was before “deletion”; the symlink is simply a copy of the original pointer’s info; and I’m speculating that the existence of any pointer prevents the system from recycling those addressed bits.
I didn’t know any of this. Amazing. I usually just look at
/proc/net/for routes and bonding config etc.Julia Evans has a bunch of these really handy cheatsheets. I have several saved that I reference semi-regularly.
Subscribe.
I am saving this, both for the post AND for the comments.
Did you know openBSD does not have this folder? I think the BSD’s do not use /proc. I do not know why though.
That raises the question of how their
ps,top,lsofand such work, since afaik in Linux they read from /proc.P.S. Looks like BSDs tug at the kernel via syscalls, namely
sysctland also the ‘kvm interface’ in the case of MacOS (not sure what ‘kvm’ thing is meant here). Seems vaguely reasonable, since procfs also queries the kernel for the info, so about the same resources would be used, perhaps even with the overhead of filesystem traversal and string-numbers conversion.I might be mistaken, but I think kvm stands for kernel virtual machine. Having no /proc, and interacting with sysctl instead sounds more secure, IMO.
Some pseudofiles under /proc are only readable by the user running the process, and of course root can read everything. So it’s the standard Unix security model, afaics.
For example, any process’ command-line arguments are famously visible to everyone, while the environment variables only to the user of the process.
I have some of her paper zines on my desk, warmly recommended.
Might look esoteric at first but if you think we will be using Linux at least on desktop, servers, consoles and more for decades then totally worth learning about.
Damn, I really could have made a lot of use of this over the last 20+ years… Thanks for sharing!
The hand written effect make these so much easier to digest.
/proc is quite useful when it comes to hiding root on Android.










