Whilst extremely simple stuff, I often find myself (at the end of a 12 hour day) with brain fuzz trying to remember the most simple of commands.

Given how regularly I utilise these commands I figured that I would document them in one place for easy reference. Hopefully this reference is of some use to you too - these commands save me seconds (woop woop !) every time, which I am sure over my software career adds up to many saved days.

Whilst writing this post (gradually over a number of weeks years - I just found this in my drafts and figured I'd post it) I stumbled upon the following post: Advancing in the bash shell. It provides a longer, more in depth, and extremely useful overview explanation of the power of the bash shell. Have a read.

File systems

df -h outputs all of the mounted file systems, and the amount of available space on each. The -h option makes the output human readable.

du -sh /folder_name outputs the disk usage of a particular folder.

Want the size of all files/folders in a directory? du -a --max-depth=1 | sort -n. Thanks Stack Overflow.


On my mac I define aliases in ~/.profile. On other operating systems you might define them in a .bashrc file or a .bash_profile file.

An alias is essentially a command shortener, so for example I could define an alias like alias go-product="cd ~/Development/product-website" such that I only need to type go-product to access my development directory for a particular product.

Aliases can not explicitly take parameters, but the can call functions to which they pass parameters.

alias run-tests=runTests

function runTests() {

        ../vendor/phpunit/phpunit/phpunit unit-tests/$1

An alias/function combination (like above) allows me to run my controller unit tests by simply typing run-tests controllers (from the testing directory).

Listing files

ls lists files in the current directory but does not include hidden files. ls -a lists all files.

ls -l will list the files in a directory - it will show additional information like for example where smbolic links point.

You'll never guess what ls -al does.

Symbolic links

ln -s creates a symbolic link.

When for example you create a virtual host configuration file in sites-available you need to symbolically link to it from sites-enabled to.. enable it.

If you cd into the sites-enabled directory you can create the appropriate link with ln -s ../sites-available/domain.com - if you do not specify a filename for the link file, it will use the same name.

Going back

If you type cd - you will be returned to the previous directory that you were in. No more entering complex paths to get back to where you were.

Want to execute a command you executed 12 minutes ago? history | grep searchTerm will list matching commands. Then just type !commandId and hit enter.


landscape-sysinfo will provide you some important information about your server - load, memory/space usage etc.


screen - I use it every day. Apparently it is a 'terminal multiplexer'. It basically lets you run multiple terminal 'tabs' on a server. Have your error logs tailed (tail -f error.log) in one tab, your node backend services in another, mysql in a third etc.

ncdu - makes doing a deep dive into disk usage easy and pretty.