CLI? Shell? Terminal?
Shell is a program that takes commands from the keyboard and gives them to the operating system to perform. In the old days, it was the only user interface available on a Unix-like system such as Linux. (It’s the out most layer of the OS, thus the name)
Different types (dialects) of shells
- Z-Shell (default for higher versions of macOS & some Linux distros)
- Bash (default for older versions of macOS & some Linux distros)
- PowerShell (default for Windows)
Why use the terminal?
- Makes you much better at using your OS
- Increase efficiency and productivity
- You just have to sometimes
- CLI tools
- Git
- Package managers
- It’s FUN
- Makes you look cool
- Makes you feel like a coder
Learning Shell Commands
Basic Navigation
cd
: change directorypwd
: present working directory (understand where you are)ls
: list filesrm
: delete files/directorymv
: move and rename filestouch
: create a filemkdir
: make a directory
clear
: clear the terminal screencat
: print files in your terminal
Understanding Your File System
cd ..
: Navigate to parent directorycd -
: Navigate to previous directorycd ~
: Navigate to home directory- Common directories
/
: root directory/bin
: binary files/etc
: configuration files/usr/<YOUR_USERNAME>
: user home directory, YOU WILL BE HERE MOST OF THE TIME
Using Flags
rm -r
: remove recursively (delete directory with contents)rm -rf
: remove recursively and forcels -a
: list all files (including hidden files)--help
Greping and Searching
Flags with parameters
grep
: search for string in filesgrep "string" filename
: search for string in filenamegrep -r "string" .
: search for string in all files in current directory
find
: find filesfind . -name "filename"
: find file with name filename in current directoryfind . -type d
: find all directories in current directory
Data piping, redirect & chaining commands
|
: pipels | grep "string"
: list all files and search for stringls | grep "string" | wc -l
: list all files, search for string, and count the number of files
>
: redirectecho "string" > filename
: adds string to filename. Creates file if one does not existecho "strong" >> filename
: appends string to filename
- Chaining commands
command 1 && command 2
: command 2 executes if command 1 was successfulcommand 1 ; command 2
: command 2 executes no matter if command one was successful or not
Make Network calls with curl
curl
: make network requestscurl <URL>
: make a GET requestcurl -X POST -d "data" <URL>
: make a POST request with data
Package Managers
OS Package Managers
Installs and manages software on your machine
- MacOS
- Homebrew
- MacPorts
- Linux
- Apt - Debian based distros
- Pacman - Arch based distros
Language specific package managers
Makes managing dependencies easier
- Python
- pip
- Java
- Maven
- JavaScript (Node)
- npm
Beyond the Basics
Shell Scripting
- Sourcing files
- Making files executable
- Z-Shell environment
- Aliases
- Functions
- Keybinds
Plugins and Tools
Lawrence’s CLI setup
- Z-Shell plugins
- oh my zsh
- Syntax highlighting
- Lawrence’s Favorite Command line tools
fzf
: command line fuzzy finderripgrep/grep
: search for string in filesfd
: betterfind
commandbat
: bettercat
command
Exercises
- Navigate to your home directory
- List all the files and directories in your current directory
- Create a directory called
test
usingmkdir
- Change into the
test
directory - Create a file called
file.txt
- Rename the
file.txt
file toresult.txt
- Download the text from
https://raw.githubusercontent.com/ImPrankster/tamid-tech-resources/main/cli/foundation-and-earth
tonovel.txt
- Search for the word
robot
(case ignored) innovel.txt
, and output toresult.txt