,LINUX'S FILESYSTEM IS ONE TREE A SINGLE ROOT _/ FROM WHICH EVERY DISK1 EVERY DEVICE1 EVERY PROCESS1 EVERY KERNEL INTERFACE HANGS4 ,THERE ARE NO DRIVE LETTERS2 A SECOND DISK DOESN'T BECOME ;,D3 IT MOUNTS INTO THE TREE AT ANY POINT YOU CHOOSE4 ,AND BENEATH THE TREE3 INODES THE KERNEL'S REAL FILE OBJECTS1 WHICH FILENAMES MERELY POINT AT4 ,LEARN THE TREE AND THE INODES AND YOU'VE LEARNED THE FILESYSTEM2 EVERYTHING ELSE IS ELABORATION4 ,THE ONE-TREE RULE ,A DISK1 A ,,CD-,,ROM1 A ,,USB STICK1 A NETWORK SHARE1 A DIRECTORY OF THE KERNEL'S INTERNALS ALL APPEAR AS PATHS UNDER _/4 ,THE FILESYSTEM NAMESPACE IS UNIFIED EVEN THOUGH THE STORAGE BEHIND IT IS SCATTERED ACROSS DEVICES3 DF -H,T _? WHICH DEVICE BACKS WHICH PATH THE TREE'S TRUE PLUMBING MOUNT _? EVERY CURRENTLY-MOUNTED FILESYSTEM FINDMNT _? THE MOUNT TREE1 VISUALIZED ,THIS IS WHAT MOUNT ACTUALLY DOES GRAFT A DEVICE ONTO A PATH4 ,UNMOUNT IT AND THE PATH IS EMPTY AGAIN2 THE TREE IS THE INTERFACE1 THE MOUNTS ARE THE PLUMBING4 ,THE ,,FHS MAP ,THE ,FILESYSTEM ,HIERARCHY ,STANDARD NAMES EVERY TOP-LEVEL DIRECTORY THE DEEP TABLE BELOW IS THE WORKING MAP4 ,THE HEADLINE FACTS FIRST3 _/ IS ONE TREE2 _/ETC IS ALL CONFIGURATION2 _/PROC AND _/SYS ARE KERNEL-COMPOSED VIEWS1 NOT DISK2 _/USR HOLDS THE USERLAND'S BULK2 _/VAR HOLDS WHAT CHANGES4 ,THE MODERN MERGED-USR LAYOUT MAKES _/BIN1 _/SBIN1 _/LIB SYMLINKS INTO _/USR THE SPLIT IS HISTORICAL "2 MODERN SYSTEMS UNIFY THEM4 ,INODES WHAT A FILE ACTUALLY IS ,A FILENAME IS NOT A FILE IT'S A DIRECTORY ENTRY POINTING AT AN INODE4 ,THE INODE HOLDS EVERYTHING3 SIZE1 OWNER1 PERMISSIONS1 TIMESTAMPS1 AND THE BLOCK POINTERS TO THE DATA4 ,THE NAME IS JUST ONE OF POSSIBLY SEVERAL LINKS TO IT3 LS -I FILE _? THE INODE NUMBER STAT FILE _? THE INODE'S FULL RECORD3 TIMES1 LINKS1 BLOCKS DF -I _? INODE EXHAUSTION A FULL ,,FS CAN HAVE BLOCKS FREE ,THIS ARCHITECTURE EXPLAINS THREE ,UNIX TRUTHS3 - ,HARD LINKS LN A ;B MAKES A SECOND NAME FOR THE SAME INODE2 NO 8ORIGINAL0 EXISTS1 ONLY A REFCOUNT4 ,DELETE ONE NAME AND THE FILE PERSISTS UNTIL THE LAST NAME GOES4 - ,SYMLINKS LN -;S MAKES A NEW INODE WHOSE CONTENTS ARE A PATH A POINTER BY NAME1 NOT BY NUMBER2 IT DANGLES IF THE TARGET DIES4 - ,MOVING WITHIN A FILESYSTEM IS FREE MV REWRITES A DIRECTORY ENTRY2 THE INODE AND DATA NEVER MOVE4 MV ACROSS FILESYSTEMS IS COPY"6DELETE4 ,THE ,,FHS MAP THE DEEP VERSION ,PATH ,HOLDS ,NOTES _/BIN _/USR_/BIN USER BINARIES LS CP MV BASH MERGED-USR SYMLINK _/BOOT KERNEL "6 INITRAMFS "6 BOOTLOADER ITS OWN PARTITION OFTEN2 VMLINUZ-"9 INITRD GRUB_/ _/DEV DEVICE NODES DEVTMPFS KERNEL-POPULATED3 NULL ZERO URANDOM TTY SDA"9 PTS_/ _/ETC ALL CONFIGURATION FSTAB PASSWD SHADOW SSH_/ SYSCONFIG_/ HOSTS RESOLV4CONF _/HOME USER HOMES @9ALICE ETC _/LIB _/USR_/LIB SHARED LIBS LIBC4SO THE LD4SO LINKER _/LIB#FD #FD-BIT LIBS X#HF.-#FD SPLIT _/MEDIA AUTOMOUNT POINT ,C,DS1 ,,USB STICKS _/MNT MANUAL MOUNTS ,,LFS'S @S,,LFS _/OPT THIRD-PARTY SELF-CONTAINED PACKAGES _/PROC KERNEL"6PROCESS STATE VIRTUAL CPUINFO MEMINFO ,,PID_/ _/ROOT ROOT'S HOME _/RUN RUNTIME STATE TMPFS RUN_/USER_/ RUN_/LOCK _/SBIN _/USR_/SBIN ADMIN BINARIES FDISK MKFS USERADD INIT _/SRV SITE-SERVED DATA _/SYS DEVICE_/DRIVER OBJECTS SYSFS CLASS_/ BLOCK_/ BUS_/ _/TMP TEMP WORLD-WRITABLE STICKY #AGGG1 CLEARED ON BOOT _/USR THE USERLAND BULK BIN LIB SHARE INCLUDE LOCAL SRC CAN BE READ-ONLY _/USR_/LOCAL YOUR ADDITIONS SOFTWARE YOU INSTALLED YOURSELF _/VAR VARIABLE DATA LOG SPOOL CACHE MAIL LIB _/VAR_/LOG THE LOGS MESSAGES SYSLOG AUTH4LOG _/VAR_/LIB STATE DPKG STATUS1 RPM DB _/VAR_/SPOOL QUEUES MAIL1 CRON1 PRINTING ,THE MERGED-USR STORY3 HISTORICALLY _/ WAS A MINIMAL RESCUE ROOT2 _/USR CAME LATER WITH THE REAL USERLAND MODERN SYSTEMS MERGE _/BIN _/SBIN _/LIB _/USR_/"9 SYMLINKS4 ,THE ,,FHS EXISTS SO EVERY ,LINUX LOOKS THE SAME A FILE LIVES WHERE YOU EXPECT4 ,THE SPECIAL FILE TYPES THE COMPLETE SET LS -;L - REGULAR FILE ;D DIRECTORY ;L SYMLINK A PATH IN AN INODE ;C CHARACTER DEVICE STREAMS3 TTY1 NULL1 URANDOM1 SERIAL ;B BLOCK DEVICE RANDOM-ACCESS3 SDA1 LOOP ;P NAMED PIPE ,,FIFO MKFIFO ;S UNIX SOCKET LOCAL ,,IPC MKFIFO MYFIFO2 ECHO HI @> MYFIFO @& CAT MYFIFO _? A FILE THAT'S A QUEUE MKNOD _/DEV_/FOO ;B #H"CB _? A DEVICE NODE BY HAND ,DEVICES AS FILES _/DEV HOLDS NOT PROGRAMS BUT DEVICE NODES FILES THAT OPEN KERNEL DRIVERS3 LS -;L _/DEV _\ HEAD _? CRW-RW-RW- #A ROOT ROOT #A1 #C NULL @<- ;C "7 CHARACTER1 #A1C "7 MAJOR1MINOR _? BRW-RW---- #A ROOT DISK #H1 #J SDA @<- ;B "7 BLOCK DEVICE ECHO HI @> _/DEV_/NULL _? A WRITE TO THE KERNEL'S VOID CAT _/DEV_/URANDOM _\ HEAD -C#AF _\ XXD _? READING ENTROPY AS A FILE ,MAJOR NUMBER "7 WHICH DRIVER2 MINOR "7 WHICH INSTANCE4 _/DEV_/NULL1 _/DEV_/ZERO1 _/DEV_/URANDOM1 _/DEV_/FULL1 TTY DEVICES1 DISKS ALL FILES1 ALL OPENED WITH THE SAME OPEN"<"> SYSCALL4 ,THIS IS 8EVERYTHING IS A FILE0 MADE LITERAL4 ,VIRTUAL FILESYSTEMS THE KERNEL EXPOSES ITSELF ,THREE PSEUDO-FILESYSTEMS ARE KERNEL INTERFACES WEARING FILE COSTUMES3 - _/PROC EVERY PROCESS AS A DIRECTORY2 KERNEL STATE AS FILES3 CAT _/PROC_/CPUINFO1 CAT _/PROC_/MEMINFO1 LS _/PROC_/SELF1 ECHO #A @> _/PROC_/SYS_/NET_/IPV#D_/IP.-FORWARD TO CONFIGURE THE KERNEL BY WRITING A FILE4 - _/SYS " DEVICES1 DRIVERS1 BUSES AS A BROWSABLE OBJECT TREE4 - _/DEV " POPULATED AUTOMATICALLY AS HARDWARE IS DETECTED4 ,NONE OF IT LIVES ON DISK THE KERNEL COMPOSES IT ON READ4 ,IT'S THE PUREST 8EVERYTHING IS A FILE0 INCLUDING THE KERNEL'S OWN MIND4 ,FILESYSTEM TYPES ,,FS ,PURPOSE EXT#D ,THE BORING CORRECT DEFAULT JOURNALED1 EVERYWHERE XFS ,LARGE FILES1 LARGE FILESYSTEMS BTRFS ,CO,W1 SNAPSHOTS1 CHECKSUMS TMPFS ,,RAM-BACKED _/RUN1 _/TMP VFAT ,THE ,,ESP1 ,,USB STICKS1 INTEROP ISO#IFFJ ,,CD IMAGES NFS1 CIFS ,NETWORK FILESYSTEMS PROC1 SYSFS1 DEVTMPFS1 CGROUP#B ,THE KERNEL INTERFACES ,PERMISSIONS ON THE TREE ,EVERY INODE CARRIES OWNER1 GROUP1 AND MODE THE RWXRWXRWX TRIAD #C "4 ,ON FILESYSTEMS3 MOUNT OPTIONS LIKE NOEXEC1 NOSUID1 NODEV1 RO CONSTRAIN WHAT INODES PERMIT _/PROC AND _/SYS MOUNT NOSUID1NODEV1NOEXEC FOR GOOD REASON4 _/PROC THE KERNEL'S PROCESS WINDOW1 DEEPER CAT _/PROC_/CPUINFO _? EVERY CORE'S MODEL1 FLAGS1 MHZ CAT _/PROC_/MEMINFO _? THE MEMORY LEDGER ,MEM,FREE VS ,BUFFERS_/,CACHED CAT _/PROC_/LOADAVG _? LOAD AVERAGES "6 RUNNING_/TOTAL "6 LAST PID CAT _/PROC_/UPTIME _? UPTIME "6 IDLE SECONDS CAT _/PROC_/MOUNTS _? THE REAL MOUNT TABLE CAT _/PROC_/FILESYSTEMS _? WHAT FILESYSTEMS THE KERNEL KNOWS CAT _/PROC_/PARTITIONS _? THE BLOCK DEVICES CAT _/PROC_/VERSION _? KERNEL "6 COMPILER CAT _/PROC_/CMDLINE _? THE BOOT PARAMS CAT _/PROC_/INTERRUPTS _? IRQ TRAFFIC CAT _/PROC_/NET_/TCP _? THE SOCKETS1 RAW CAT _/PROC_/SYS_/KERNEL_/HOSTNAME _? A WRITABLE KERNEL KNOB LS _/PROC_/SELF_/ _? ,,YOUR READING PROCESS AS FILES ,EVERY PROCESS IS _/PROC_/,,PID_/ STATUS1 CMDLINE1 ENVIRON1 FD_/1 MAPS1 IO1 LIMITS1 CWDREAL PATH1 EXETHE BINARY4 _/PROC_/SYS_/ IS THE SYSCTL TREE WRITABLE KNOBS4 _/PROC IS PURE KERNEL-COMPOSED CAT RUNS CODE1 NOT DISK ,I_/,O4 _/SYS THE DEVICE OBJECT TREE LS _/SYS_/CLASS_/NET_/ _? EVERY ,,NIC AS A DIRECTORY CAT _/SYS_/CLASS_/NET_/ETH#J_/ADDRESS _? ITS ,,MAC LS _/SYS_/BLOCK_/ _? EVERY BLOCK DEVICE CAT _/SYS_/BLOCK_/SDA_/QUEUE_/SCHEDULER _? IO SCHEDULER LIVE-TUNABLE LS _/SYS_/BUS_/USB_/DEVICES_/ _? THE ,,USB TREE CAT _/SYS_/DEVICES_/SYSTEM_/CPU_/CPU#J_/CPUFREQ_/SCALING.-GOVERNOR ECHO PERFORMANCE @> _/SYS_/444_/SCALING.-GOVERNOR _? TUNE IT UDEVADM INFO -A _/DEV_/SDA _? THE DEVICE'S FULL SYSFS RECORD _/SYS IS SYSFS THE KERNEL'S DEVICES1 DRIVERS1 BUSES1 AND CLASSES AS A BROWSABLE HIERARCHY THE SAME OBJECTS UDEV WATCHES FOR HOTPLUG4 ,MOUNT OPTIONS THE FLAGS THAT HARDEN MOUNT -O RO1NOEXEC1NOSUID1NODEV _/DEV_/SDA#C _/MNT _? RO READ-ONLY _? NOEXEC NO BINARIES EXECUTE _/TMP1 DATA PARTITIONS _? NOSUID SETUID BITS DISABLED _? NODEV NO DEVICE FILES HONORED _? NOATIME DON'T UPDATE ACCESS TIMES THE PERFORMANCE FLAG _? RELATIME THE MODERN ATIME COMPROMISE " _? SYNC NO WRITE CACHING _? .-NETDEV WAIT FOR NETWORK _? NOFAIL DON'T FAIL BOOT IF ABSENT _? ;X-SYSTEMD4AUTOMOUNT LAZY-MOUNT ON FIRST ACCESS _? BIND MOUNT A DIR ONTO ANOTHER PATH NOEXEC_/NOSUID_/NODEV_/RO ON _/TMP1 _/PROC1 _/SYS1 DATA MOUNTS ARE THE HARDENING LAYER THE FSTAB OPTIONS ENCODE4 ,PRACTICAL3 FIND AND FRIENDS FIND _/ETC -NAME '"94CONF' _? NAME MATCH FIND _/ -TYPE ;F -SIZE "6#AJJ;,M #B@>_/DEV_/NULL _? THE SPACE HOGS FIND 4 -MTIME -#G _? CHANGED THIS WEEK FIND _/ -XDEV -NAME TARGET _? STAY ON ONE FILESYSTEM FIND 4 -TYPE ;L -XTYPE ;L _? BROKEN SYMLINKS DU -SH _/VAR_/"9 _\ SORT -RH _\ HEAD _? WHERE THE SPACE WENT ,EXERCISES #A4 FINDMNT DRAW THE ACTUAL MOUNT TREE OF YOUR SYSTEM4 #B4 ,CREATE A HARD LINK AND A SYMLINK2 STAT BOTH2 EXPLAIN THE INODE DIFFERENCE4 #C4 CAT _/PROC_/MEMINFO1 LS _/SYS_/CLASS_/NET BROWSE THE KERNEL'S MIND4 #D4 DF -I COULD YOUR FILESYSTEM HOLD A MILLION EMPTY FILES8 #E4 ,MOUNT A ,,USB STICK MANUALLY MOUNT _/DEV_/SD,X#A _/MNT AND UNMOUNT4 ,TIMELINE ,CONCEPT ,WHAT IT IS ,ONE TREE ,EVERY DEVICE GRAFTS INTO _/ ,INODES ,THE REAL FILES2 NAMES ARE LINKS _/DEV ,DEVICES AS FILES _/PROC1 _/SYS ,THE KERNEL EXPOSING ITSELF ,,FHS ,THE STANDARD MAP OF _/ ,SEE ALSO - ,LINUX ,SHELL ,CORE ,UTILITIES ,USERS AND ,PERMISSIONS ,,LFS ,PREPARATION