There are a lot of mundane things on Linux that a lot of users don’t think much of that are incredibly useful. When new users learn how to use these mundane, boring little tricks, they become better Linux users. Bind-mounts and Symlinks on Linux are a prime example of this. In this article, we’ll discuss just exactly what is a symlink, how to create one and what they’re for. We’ll also go over how to create bind mounts, why they’re so useful, and even show users how to beef up their bind mounts with bindfs!
SPOILER ALERT: Scroll down and watch the video tutorial at the end of this article.
What Is A Symlink?
A symlink, or “symbolic link” is a reference to another file or folder somewhere else on the file system. For example, most developers, instead of duplicating libraries on a user’s system, will instead have their code create symbolic links to library folders and program files. This allows the program to easily have all the required tools and library files it needs to run, without creating extra cruft.
Symlinks are also used when referencing files between different partitions and drives. For example: your entire music library is stored on hard drive B, and the entire library’s size is 500 GB. Due to how large it is, it’s not possible to directly move the music library to Hard Drive A (aka the system drive).
To easily solve this problem, users can make a symbolic link and reference each file from drive B to drive A. That way the music player can find and access all music files easily.
Symbolic links can be used in two ways: to link an entire directory, or a single file. Here’s how to create them.
Symlink a file
To symlink a file, first open a terminal. Next, cd to the directory with the file to be linked.
Create the symbolic link. Keep in mind where the link should go.
ln -s original-file /path/where/link/goes
Symlink a folder
ln -s /path/to/original/folder /path/where/linked/folder/goes
Delete a symlink
cd /path/where/symlink/is rm symlinkname unlink symlinkname
What Is A Bind-mount?
A bin-mount is a way to show contents of one folder in once place on the file system in a different directory. Bind mounting sounds a lot link symbolically linking a folder, but it is very different. The bind mount is very useful. System administrators often use this method to quickly add more storage to a folder on the fly when the main system’s file system is ‘read only’. Bind-mounts can also be used to quickly bind a network share to a local directory, without the need to set up a mount point in the fstab file, and etc.
Using Bind-mounts With The Built-in Linux Kernel Command
The Linux kernel has a built in bind command. It is because of this, users can easily mount the contents of directories across the file system with ease. Here’s how to do it.
Think of a directory that has files you’d like to mount in another location. When you’ve got the location in mind, think of the place you’d like to mount it to.
In this example, we’ll bind a music directory from one hard drive to the other.
sudo mount --bind /mnt/DataDrive/Music /home/user/Music
Unmount the bind mount with:
Before making a bind-mount, you’ll need to install bindfs. It’s a tool that makes bind mounting possible, and also adds extra functionality (permission settings, better mirroring and etc). Here’s how to get it on your Linux distribution:
sudo apt install bindfs
sudo apt-get install bindfs
Bindfs isn’t in the official Arch software sources, unfortunately. If users want to use bindfs, they’ll need to install this AUR package instead.
sudo dnf install bindfs
sudo zypper install bindfs
To get bindfs on the Linux distribution of your choice, consider going to the official bindfs website. Alternatively, open the package manager on your Linux PC, search for “bindfs” and install it!
Using Bindfs For Bind-mounts
Using bindfs has it’s advantages. The built in kernel bind command works in a snap, but it’s very basic and doesn’t allow for some advance features such as restricting access to binds and etc. Here’s how to make use of bindfs.
Make a read only bind mount
bindfs --perms=a-w /path/to/the/original/directory/ /path/to/bind/to/
Make a read/write bind mount
bindfs /path/to/the/original/directory /path/to/bind/to
Unmount a bindfs mount
sudo umount /path/to/bind/
Mundane operations like symbolic links and bind mounts are probably the least explored subject on Linux due to the fact that they’re pretty uninteresting, and usually go unused by general users. The fact is: when you learn that symbolic links let you quickly and easily access files anywhere, or that bind mounts can make it incredibly easy to bolt on additional storage wherever you want, these subjects become much more interesting.