A lot of exciting stuff is happening for gamers in Linux, and many Windows gamers are probably looking to make the leap to Linux, but aren't familiar enough with the platform to actually make the jump.
A lot of exciting stuff is happening for gamers in Linux, and many Windows gamers are probably looking to make the leap to Linux, but aren’t familiar enough with the platform to actually make the jump. There are many tutorials on the internet regarding Linux, but many nowadays are targeted towards the mythical grandmother, and the more in-depth tutorials were written 20 odd years ago. So what does one do when they come from a world of editing
autoexec.bat files for gaming and is now a complete beginner? This guide is for you1!
D: etc. in Linux. There is a single filesystem heirarchy2 which contains everything. The path separator is a forward slash
/ in linux, like on the web, instead of a backslash
\ in Windows. There is exactly one root, called
/ and literally everything branches off there. Hard drive partitions will get mounted on a “mount point”, for example
/home/leetnoob/ might actually be pointing to a partition which you think of as
D:. This might make it a bit harder to keep track of free space but overall, the way the actual filesystem is organised actually makes keeping track of hard drives easier.
Linux also has a better way of naming these drives and partitions. The first hard drive is named
hda if you still use old IDE drives), the second is named
sdb, and so on. The first partition on the first drive is named
sda2, etc. etc. If you’ve been driven slightly mad by Windows' NTFS partitions having drive assignments per partition so you have to remember your
F: is your second partition on your first hard drive and your
C: is your third partition on your first hard drive, this consistent naming scheme is quite good3.
In Linux you’ll probably be using the
ext4 filesystem instead of
NTFS. You’ll also rue the day that you formatted anything to be
exFAT, because Linux doesn’t really support it. If you’re reading this in the world of tomorrow, you might be using
btrfs. The important thing to know about
btrfs is that they’re fast, they’re “journalled” (which means you shouldn’t lose any data if you lose power), and they never need defragging. Nice!
Linux also has easier file permissions. If you’ve had nightmares of trying to give yourself permissions to a folder in Windows and it’s not friggin' working and even when it does work it takes forever to change all the files, Linux will feel like a nice compromise between security and sanity. All files in Linux have a “user” and “group”. Everyone else is considered “other”. You have read, write, and execute permissions on every file for the user, group, and other. These are concisely written as "
rwx" permissions for "
ugo". They always go in that order -- "
rwxrwxrwx", the first for “user”, then “group”, then “other”.
Programs also aren’t installed in Linux like they are in Windows. In Windows, most of a program goes under
C:\Program Files, but under Linux the program will be littered throughout the filesystem. You might hate this at first but eventually you’ll love it. Remember that you should never need to manually create or delete files for programs you install. The installer / uninstaller system in Linux works more like an “app store” (and it’s been around for 20 odd years). You install new programs in a consistent way (except Steam apps) and updates all happen through a single, consistent interface.
Here’s what the filesystem4 looks like at the “root” (or
boot— Contains everything necessary for the system to actually boot up. However, this won’t take you as far as a GUI or even a command prompt. The Linux “kernel” is kept here5.
bin— Contains absolute minimum binaries required for the system to run (like a command prompt).
sbin— Contains absolute minimum binaries required for the system to run that only the superuser will use.
etc— Contains configuration files for the system level. Nowadays you rarely edit these files.
run— Fairly new directory which contains state for core system services.
lib64— Absolute minimum shared libraries required for the system to run. Think of
libas being like a
system32directory. For 64 bit linux,
lib32is where the (bare minimum) 32 bit specific libraries are kept, and
lib64for 64 bit specific libraries.
usr— Slightly badly named, but it means "stuff for users". Anything you want to do in a day-to-day way will be kept here, like office applications or your UI. It’ll be the largest non-data part of your filesystem. We’ll look at the subdirectories in here:
usr/sbin— All the non-bare-minimum binaries (executables) for your system are kept here.
usr/sbinis for the superuser only.
usr/games— well behaved games will keep their binaries here (ironically, that’s like none of them).
usr/lib32— Libraries. You should see a pattern here. A bunch of directories in your root are repeated here.
usr/share— All the “data” for apps, like icons, bitmaps, levels etc. are kept here. If you think about Doom, your WAD files will be kept here, but the
doom.exeequivalent would be kept in
usr/games). All the
DLLfiles (they’re called
.sofiles in Linux) would be in
usr/shareshould be the biggest part of
usr/local— If you take a look in there, you’ll see a bunch of directories just like in the root directory as well as the
usrdirectory. This sub-heirarchy is for programs you installed yourself outside of the installer system. If at all possible, you should never ever use this. It’s unlikely that you’ll ever need to.
usr/src— for compiling stuff, ignore it.
opt— This directory was designed for people who hate Linux or can’t be bothered figuring out the filesystem. It’s basically a free-for-all, and works a lot like
Program Filesdoes for Windows. Most non-open-source games actually use this directory to keep everything — binaries, data, sometimes even config files. If you’re a gamer, this will potentially become the biggest part of your filesystem.
home— This is like Windows'
Usersdirectory. All your user stuff goes here (under
/home/yourusername). Note that steam actually keeps itself and all apps under your home directory.
var— Contains “varying” data. Any system wide caching, system logs, or stuff that changes all the time at a system level will be stored in
srv— This is like a new
vardirectory, but where
varis a “standard place” for all computers,
srvis where you keep stuff specific to your PC (at a system level). This is only of interest if you want your computer to be a headless web server or something to that effect.
tmp— Temporary files. These get created and destroyed by users and the system. Same as
proc— This is where information about currently running processes exists. Also stuff like memory usage, CPU usage, etc.
sys— This is where information about the current system exists. Stuff like the state of your hard drives or what’s plugged into usb ports is kept here.
dev— This is where all the devices on your system are kept. Literally every device on your system is represented as a file, from sound cards to video cards to USB devices. Every program which talks to those devices does so via the
root— This is the home directory of the “root” user, or “superuser”. Nowadays, no one is the superuser, so this directory is usually empty.
lost+found— This is where, if the filesystem does something wacky with your files, where they end up. This is not your recycling bin. This is where you will have to trawl if your filesystem gets corrupt. This shouldn’t ever happen on modern Linux.
selinux-- “se” means “security enhanced”. SELinux is a set of things you can do to harden your system up for running as an internet server. Unless you’re doing that, don’t worry about
media— If you plug in a USB drive, or still have CD Rom drives, etc. How will you look at the files in it? In Windows, you get a new drive letter. In Linux, the drive is “mounted”, likely somewhere under this directory. Today all this happens automagically, so you don’t really need to know, but in case you were curious.
cdrom— Modern systems no longer have this directory. This is the old
mediadirectory. It was called
cdrombecause that was what you used to use all the time. In case you still have it, this is why.
mnt— This is a convenient mount point if you’re doing some low level stuff. You’ll never need to use this unless your system is in the shit.
So, in a nutshell, that’s the Linux Filesystem. Hopefully you can use this knowledge to know the lay of the land, and be comfortable as master of your new domain. Next time we’ll talk about Distributions and what that even means, and specifically at Debian based distributions.
1 Note that I’m going to be making reference to some technical aspects of Windows in order to explain how Linux works by comparison.
2 See the FHS for a complete and technical look at the filesystem heirarchy in Linux.
3 Hmm yes quite.
4 Whenever it matters, I’ll be using conventions followed in Debian, which is about the most standards compliant distribution. I’ll explain what this means later.
5 Linux is in fact just the kernel. Literally everything else (like the command prompt or the GUI) comes from other projects, most of them from GNU (hence the term “GNU/Linux”).
6 This is where the brilliance of the linux filesystem shows up. You could put your
etc directories on an SSD, but keep
home on a spindle disk, which will ensure that except for software updates, your data on the SSD never changes. It’s also how a lot of people used to partition drives --
C: for Programs,
D: for Data, only in Linux it works in a far more natural way. Nice!