When you start working with Linux, it's good to have a rough view with regard to Linux philosophy. Disclaimer: This is my own highly opinionated view. 1) is a file design Everything Files are files, devices drivers are files, directories, system configuration, kernel parameters, and... even processes are all as files on the filesystem. represented , whether a plain-text file, block, character special device driver, or kernel state a lot like a file. Everything behaves ls -l /proc/$$/cmdline ls -l /proc/$$/fd # check how shell was started, using the PID of the current process, and leveraging everything is a file design # check the file descriptors of it 2) Each command does one thing and one thing very well. Finding things is very easy, being a d (directory) c (character special file), b (block special file), l (symbolic link), p (named pipe), s (socket), and f (normal file). find <location> -name <file_name> - type <file_type> Measuring things is very easy. For example: du --max-depth=1 -hx / # Calculate size of each of the system top-level dirs 3) running is a process Everything In a basic form, Linux processes can be visualized as a running instance of a program. Every process is started by a parent, except the process (on most distributions, is the parent of all other processes directly or indirectly) which is started by the Linux kernel and has a PID of 1. init systemd ps -p 1 lsof -p 1 # check which process has PID 1 # list all files opened by a process Every process has a file descriptor associated with it, a process can open all sorts of files like /dev files, UNIX Sockets, Network sockets, Library files /lib /lib64, so the latter becomes: ls -l /proc/1/fd # check file descriptors 4) Pipelines allow composition Anything that can be read or written. For any process, we have three standard file things: what it can read ( ) and where it can write ( and ). stdin stdout stderr # find PID of python process and kill it ps aux | grep python | grep -v grep | awk '{print $2}' | xargs kill 5) Shell comes in multiple flavors We have (Bourne shell), (C shell), (Bourne-again shell), (Korn shell), and last but not least . sh csh bash ksh zsh