This page is currently being developed and will be updated during the course.
This page is not intended to be exhaustive and complete but should be considered a starting point for learning daily practical (side) tools for a computer programmer.
Computers these days have a variety of interfaces for giving them commands; fanciful graphical user interfaces, voice interfaces, and even AR/VR are everywhere. These are great for 80% of use-cases, but they are often fundamentally restricted in what they allow you to do — you cannot press a button that isn’t there or give a voice command that hasn’t been programmed. To take full advantage of the tools your computer provides, we have to go old-school and drop down to a textual interface: The Shell.
Nearly all platforms you can get your hand on has a shell in one form or another, and many of them have several shells for you to choose from. While they may vary in the details, at their core they are all roughly the same: they allow you to run programs, give them input, and inspect their output in a semi-structured way.
In this lecture, we will focus on the Bourne Again SHell, or “bash” for short. This is one of the most widely used shells, and its syntax is similar to what you will see in many other shells. To open a shell prompt (where you can type commands), you first need a terminal. Your device probably shipped with one installed, or you can install one fairly easily.
- Zsh vs Bash
- Make your terminal beautiful and fast with ZSH shell and PowerLevel10K
- Windows per Linux (WSL)
- macOS
top
andhtop
, information of running tasks, memory, cpu, and swap- or also more advanced tools, such as btop
- Software package management systems see this list
- 🔝 50 commands 🌟:
Show commands
- ls - The most frequently used command in Linux to list directories
- pwd - Print working directory command in Linux
- cd - Linux command to navigate through directories
- mkdir - Command used to create directories in Linux
- mv - Move or rename files in Linux
- cp - Similar usage as mv but for copying files in Linux
- rm - Delete files or directories
- touch - Create blank/empty files
- ln - Create symbolic links (shortcuts) to other files
- cat - Display file contents on the terminal
- clear - Clear the terminal display
- echo - Print any text that follows the command
- less - Linux command to display paged outputs in the terminal
- man - Access manual pages for all Linux commands
- uname - Linux command to get basic information about the OS
- whoami - Get the active username
- tar - Command to extract and compress files in Linux
- grep - Search for a string within an output
- head - Return the specified number of lines from the top
- tail - Return the specified number of lines from the bottom
- diff - Find the difference between two files
- cmp - Allows you to check if two files are identical
- comm - Combines the functionality of diff and cmp
- sort - Linux command to sort the content of a file while outputting
- export - Export environment variables in Linux
- zip - Zip files in Linux
- unzip - Unzip files in Linux
- ssh - Secure Shell command in Linux
- service - Linux command to start and stop services
- ps - Display active processes
- kill and killall - Kill active processes by process ID or name
- df - Display disk filesystem information
- mount - Mount file systems in Linux
- chmod - Command to change file permissions
- chown - Command for granting ownership of files or folders
- ifconfig - Display network interfaces and IP addresses
- traceroute - Trace all the network hops to reach the destination
- wget - Direct download files from the internet
- ufw - Firewall command
- iptables - Base firewall for all other firewall utilities to interface with
- apt, pacman, yum, rpm - Package managers depending on the distro
- sudo - Command to escalate privileges in Linux
- cal - View a command-line calendar
- alias - Create custom shortcuts for your regularly used commands
- dd - Majorly used for creating bootable USB sticks
- whereis - Locate the binary, source, and manual pages for a command
- whatis - Find what a command is used for
- top - View active processes live with their system usage
- useradd and usermod - Add new user or change existing users data
- passwd - Create or update passwords for existing users
- 💡 Remember to use the
man
command to see the documentation of each tool/command.
Avoid repetitive tasks or use tools to help in such tasks!
For instance, it is vital to use tools for finding files or search content in file.
All UNIX-like systems provide a package named find, a tool to find files, and it will recursively search for files matching specific criteria.
# Find all directories named src
find . -name src -type d
# Find all python files that have a folder named test in their path
find . -path '*/test/*.py' -type f
# Find all files modified in the last day
find . -mtime -1
# Find all zip files with size in range 500k to 10M
find . -size +500k -size -10M -name '*.tar.gz'
# Delete all files with .tmp extension
find . -name '*.tmp' -exec rm {} \;
# Find all PNG files and convert them to JPG
find . -name '*.png' -exec convert {} {}.jpg \;
It is an alternative to the find command and promises to offer better and more comprehensive outputs.
Install: brew install fd
or see Github page also for documentation.
The find command permits you to search files using names or matching patterns, while the grep command allows you to find inside the content of your files, such as searching specific lines of codes and more.
# Search all file that contains the string hello of types txt and doc
grep -r --include=\*.{txt,doc} "hello" .
# Ignore case
grep -i "this" test-file
# Count the number of patterns
ps -ef | grep -c $USER
# Display line numbers of a match
grep -n "set" ~/.zshrc
It is also helpful in finding your command history history | grep find
.
//TODO description of regular expression and different flavors
Basic patterns:
.
means “any single character” except newline*
zero or more of the preceding match+
one or more of the preceding match[abc]
any one character of a, b, and c(Hello|Ciao)
either something that matches Hello or Ciao^
the start of the line$
the end of the line
Debugging regular expression on egex101.com.
ssh
Secure Shell Protocol (SSH) is a cryptographic network protocol for operating network services securely over an unsecured network. SSH applications are based on a client–server architecture, connecting an SSH client instance with an SSH server.
- ssh key exchange //TODO
- ssh tunneling //TODO
tmux
is a terminal multiplexer, allowing you to use multiple programs in a single terminal.
vi
and vim
//TODO
nano
//TODO
emacs
//TODO
Visual Studio Code
//TODO
//TODO
//TODO
//TODO
//TODO
//TODO
//TODO