Every May the 4th I hold a free series of live-recorded Beginner Boost sessions on Twitch and YouTube that run through the end of July (or so). Below is the outline of current and planned content. This is a living document; it changes from day to day --- even hour to hour --- like software.
🌟 You may want to Watch this GitHub repo to be notified of updates and changes. A Star would be nice as well. If you want to contribute open an Issue to discuss it. Much of the content will be drawn from my personal Zettelkasten repo and my learning labs (which you might also want to watch for changes, but they are not always Boost related). You can also help fund this project by clicking Sponsor. Thanks.
- What is the purpose of Beginner Boost?
- Beginner Boost, Day 0, Logistics
- Who is the Beginner Boost for?
- Setup Essential Services
- Problems with Traditional Education
- Help Others Learn, A Social Responsibility
- Become an Autodidact
- Tribute to Aaron Swartz
- What did you learn about the Scientific Method?
- The RWX Method, Refining the Scientific Method
- Read, Research, Reach Out, Repeat
- Write Who, What (If), When, Where, Why, and How
- Execute, Explore, Experiment, and Exercise
- Fail Faster, Fail Better, Fail Often
- Meritocracy in the Workplace
- Zettelkasten (Slips in a Box) Knowledge Management System
- Capture Thoughts as Markdown, The Syntax of Knowledge Source
- What's Linux? History of UNIX and GNU/Linux
- Do Macs Use Linux?
- Does Windows Use Linux?
- The UNIX Philosophy
- How Does Linux Work?
- When and How Should I Install Linux?
Mac: Open and Configure a Mac Terminal
Windows: Install and Configure Modern Windows Terminal
Linux: Open and Configure a Linux Terminal
- What's the Difference Between TUI and CLI?
- Terminal Emulators Replaced Teletype Machines
- The Terminal is Different Than Command Line Shell
- Should I install Git-Bash on Windows?
- What about Alacritty/Kitty or ...?
- My Favorite Theme: GruvBox
- Can't I just use VSCode on Windows?
- Why not just use Vim plugins with VSCode?
- What about WSL2 on Windows?
- What's a Container and Why Should You Care?
- The Difference Between "Container" and "Image"?
- Kubernetes is the New Operating System
- Containers are the New Programs
- Install Docker
- Install Docker on Windows
- Why do I still need WSL2?
- Install Docker on a Mac
- Install Docker on Linux
- Install Docker on Windows
-
Linux Distro Matters Less in Container World
docker run -it --rm ubuntu
docker run -it --rm fedora
docker run -it --rm archlinux
docker run -it --rm opensuse
docker run -it --rm nixos/nix
docker run -it --rm kalilinux/kali-rolling
docker run -it --rm blackarch/blackarch
-
Run Rob's Workspace Linux Container
docker run -it --rm rwxrob/workspace
- Workspace Means Not Optimized (3GB)
-
Use Docker Basic Commands
- Use Docker Pull
- Use Docker Run
- Use Docker Start
- Use Docker Attach and Detach
Ctrl-pq
- Use Docker Stop
- Use Docker Remove
-
Don't Worry About Dockerfile and Compose (For Now)
- Book (free): The Linux Command Line, William Shotts
- The Command Line, Fastest Human-Computer Interface
- Every Command Line Entered is a Line of Shell Code
- Use Bash, Don't Play the Shell Game (For Now)
- Interactive Shell is Not Same as Shell Scripting
- Why Bash and Not Zsh, Fish, or Whatever?
- Use Consistent Supported Bash Tab Completion
- Understand the Parts of the Command Prompt
- Username
- Hostname
- Interesting Origin of Email Addresses
- Current Directory
- Git Branch
- Long Versus Short Prompts
- Navigate Your Command History Efficiently
- Use Up and Down Arrow Keys (For Now)
- Use Initial Spaces to Stop Adding to History
- Use Hashtag to Make One Line Comment Notes
- Don't Learn More for Now (Learn
set -o vi
Later)
- Send Special Terminal Escapes
- Remember, a Terminal is Just a Teletype Emulator
Ctrl-c
to Send Interrupt Signal (Not Copy)Ctrl-[
to Send Exact Same asEsc
KeyCtrl-s
/Ctrl-q
to Buffer and Suspend/Unsuspend- "Help! My Terminal is Frozen!"
Ctrl-z
to Background Current Process (Not Quit)Ctrl-d
to Send EOF (End of File)Ctrl-v
,Ctrl-x
Do Nothing (From Shell)- Silencing the Terminal Bell
- Cut and Paste from Host Operating System
- Depends on Terminal
- First Ever Mouse Had Three-Button, Middle Was Paste
- Windows Right Click to Paste
Ctrl-x|c|v
Don't Usually Work (And Shouldn't)
- Learn Useful and Essential Beginning User Commands
- Use
reset
to Fix Bork Terminal - Use
clear
to Clear Screen (and Alternatives) - Use
watch
to Repeat Things and See Output - Use
man
/help
/info
Commands to Get Help - Use
less
/more
for Paging Output - Use
ls
Command to List Files and Directories - Use
type
to See What Type of Thing It Is - Use
which
to See Where Command Lives - Use
pwd
Command to Show Working Directory - Use
cd
Command to Change Directories- Use
cd foo
to Change Intofoo
Child Directory - Use
cd ..
to Change Into Parent Directory - Use
cd -
to Toggle Change to Last Directory - Use
cd ~
(or Justcd
) to Change to Home Directory - Don't Fall for Silly
cd
Replacements (UseCDPATH
)
- Use
- Use
cal
to View Calendar - Use
date
to View Dates and Times- Use
date -u +%Y%m%d%H%M%S
to Get ISO Second - Use
date -d 'last week'
to Exact Time Last Week
- Use
- Use
bc
for Floating Point Precision Math Calculations- Don't Forget To Set Scale (
scale=2
) - Use Semicolons for Same Line
- Don't Forget To Set Scale (
- Use
top
to See Running Processes- Often Replaced with
htop
- Often Replaced with
- Use
- Create and Name a Workspace Container
docker run -it --name boost -h boost ubuntu
- Difference Between Detach and Exit
- Detach with
Ctrl-pq
- Exit with
exit
- Detach with
- Understand Container States and Storage
- Manage Software Packages from Command Line
- Restoring Documentation and More with
unminimize
- Understand Linux Package Management
- Use
apt update
- Use
apt search
- Use
apt install
- Use
apt remove
- Restoring Documentation and More with
- OverTheWire, Fun Hacker Practice
- Understand the Linux File System
- Use
mkdir
to Make a New Directory - Use
rmdir
to Remove an Empty Directory - Use
touch
to Make a New File (or Update Timestamp) - Use
mv
to Move or Rename a File or Directory - Use
cp
to Copy a File or Directory - Use
rm
to Remove a File or Directory - Use
ln
to Link to a File or Directory- What is the difference between hard and soft link?
- Used
ln
for Multicall Executables (BusyBox)
- Use
file
to See What Details About File - Use
stat
to See Exhaustive Details About File - Use
cat
to Display Lines of a File, First to Last - Use
tac
to Display Lines of a File, Last to First - User
head
to Display Number of Lines at Top - User
tail
to Display Number of Lines at Bottom - Use
grep
to Find Lines of a File - Use
uniq
to Find Unique Lines - Use
sort
to Sort Lines- Use
wc
to Count Lines, Words, Bytes, and Runes
- Use
- Understand Standard Output and Error
- Use
echo
andprintf
to Print Stuff- Difference Between
echo
andprintf
- Never Use
print
(for Printers)
- Difference Between
- Use
>
File Redirect Operator- Fix
find
Command Errors with Redirection
- Fix
- Use
>>
File Append Operator - Use
>|
Force File Overwrite Operator
- Use
- Understand Pipes and Pipeline
- Use
|
Pipe Operator to Connect Out with In - Power of Pipelines and Shell Integration
- Watch Ken Thompson Describe UNIX Pipes
- Pipes are at the Core of UNIX Philosophy
- Use Shell and Pipes from Within Applications
- Transform and Filter Lines
- Use
nl
to Number Lines - Use
rev
to Reverse Line - Use
tee
to Pipe and Redirect Lines - Use
echo
for Arguments andcat
for Lines - Use
xargs
to Transform Lines Into Arguments - Use
cut
to Remove Stuff from Lines of Stream - Use
tr
to Translate Stuff in Lines of Stream - Use
sed
to Edit Lines of Stream (Streameded
) - Use
jq
to Select from JSON Input - Use
yq
to Select from YAML Input
- Use
- Use
- Get Standard Input Into Your Programs
- Input Most Useful After You Know How to Code
- Use
<
File Input Redirect Operator- Always Use
<
Instead ofcat foo | ...
- Always Use
- Use
<<
Here Document Operator - Use
read
to Read Input- Combine
printf
andread
to Create Prompts - Always Use
-r
and Understand Why - Use
for
orwhile
with Read for Line Loops
- Combine
- Use
curl
to Read Input from Internet- Usually Combined with
jq
oryq
- Usually Combined with
- Vi ("Visual Mode") History and Legacy
- Why Vi/m and Not NeoVim/Emacs/Nano/VSCode?
- Appreciate the Difference Between
vi
andvim
- Restore
Esc
Key to Its Original Keyboard Home - Use
Ctrl-[
Instead ofEsc
Key (NeverCtrl-x|z
) - Do the Vim Tutorial (
vimtutor
), But Beware - Other Recommended Learning Resources
- https://openvim.com
- http://vimgenius.com (no
s
) - Vim Adventures is Strongly Discouraged
- Start with Defaults and Zero Configuration
- Complex
.vimrc
is Not for Beginners - Customizing
.vimrc
Requires Scripting Skills - Eventually, Learn a Little Vimscript
- Complex
- Avoid Vim Pane Splitting (Use TMUX Instead)
- How Much User Stuff Do I Need to Know?
- Create and Manage Users and Groups
- Use
adduser
anduseradd
to Create User - Use
su - <user>
to "Login" as User - Use
deluser
anduserdel
to Delete User - Use
usermod
to Modify User Settings - Use
addgroup
andgroupadd
to Create Group - Use
delgroup
andgroupdel
to Delete Group - Use
groupmod
to Modify User Settings - Use
passwd
to Change Passwords - Know the Files Involved
/etc/passwd
/etc/shadow
/etc/group
- Use
id
to Get the User and Group Information - Use
login
to Login- Does Not Register as Logged in User
- Use
su - <user>
to Simulate a Login as Root - Understand
root
Access- Use
sudo
to Grantroot
(SuperUser) Access - Use
sudo su -
to Get Root Shell - use
doas -s
to Do Something As Root
- Use
- Use
who
,w
,whoami
,who am i
,last
to See Users
- Use
- Understand UNIX File and Directory Ownership and Permissions
- Use
ls -l
to See Permissions - Use
stat
to See Even More About File - Read, Write, and Execute Permission
- On Files
- On Directories
- Use
- Modify Ownership and Permissions
- Use
chmod
to Change Permissions - Use
chown
to Change Owner (and Group) - Use
chgrp
to Change Group
- Use
- Know About Setuid, Setgid, and Such, But Don't Use
- You're Already Coding, Every Command is Code
- Commands are Really Just Functions with Arguments
- POSIX Shell is a Universal Command Interpreter
- Shell Started as Bourne Shell, Now Ash and Dash
- Korn Shell Led to Bash and Zsh Interpreters
- Awk, Perl, Python, Ruby, Node Also Shell Scripting
- Create First Script
- Create a File Containing Some Commands
- Know What Interpreted Means
- Use
sh
Interpreter to Run Commands in File - Use
bash
Interpreter to Run Same Commands - Use
perl
to Attempt Same and Note Errors - Use
chmod +x
to Make File Executable - Add
#!/bin/sh
Shebang Line to Specify Interpreter
- Difference Between Running and Sourcing Scripts
- Use Dot (
.
) orsource
to Source a Script - Most Stuff Should Be in Script (Subprocesses)
- Some Stuff Can't Be Done Any Other Way
- Change Current Working Directory
- Modify Current Environment
- Use Dot (
- Put Executables in Your
PATH
to Run From Anywhere- Use
which
to See Which Executable Wins - Understand Difference Between
which
andtype
- Use
- Manage Jobs and Processes
- A Running Program is a Process
- A Backgrounded Program a Job
Ctrl-z
to Background Running Process- Use
jobs
to See All Background Processes - Use
fg
to Bring Background Job Forward - Use
&
to Start Program in Background - Use
pgrep
,ps
,/proc
to See Processes - Use
crontab
to Schedule Jobs
- Know What Syntax Means
- Know What POSIX Means
- Know What Script Means
- Know What Program and Programming Mean
- Use
shellcheck
Throughout to Ensure POSIX - Functions Group Commands
- Know What a Function Is
- Know What an Argument Is
- Know What a Return Value Is
- Commands are Functions
- Functions are Commands
- Use
foo () {}
to Create a Function - Know What a Block Is
- Functions Have Arguments
- Arguments Do Not Go in
()
- Use
$1
for First Argument (And So On)
- Arguments Do Not Go in
- Functions Have Return Values
- Understand UNIX Return Values
- Function Return Values Same as Commands
- Distinguish Return Value from Output
- Use
return
to Set Return Value- Sometime Omitting
return
is Fine
- Sometime Omitting
- Use
set -e
to Exit Program if Anything Fails - Use
exit
to Exit Program Immediately - Write Clean Functions
- Some Functions are Not Functions At All
- Know What a Subroutine or Procedure Is
- Know How True Function Differs from Procedure
- Know What Side Effects Are
- Know What Functional Programming Is
- Separate Functions from Procedure "Functions"
- Variables Save State
- Use
=
With No Surrounding Spaces to Assign Variable - Like Putting Something Into Box or on List
- Know What Scope Means
- Know What Global and Local Mean
- All Variables are Global in POSIX Shell
- Know What Type Means When Programming
- Variables Contain Data of Different Types
- All Types are Ultimately the Same Binary Bits
- Usually Wrap Shell Variables in Quotes (
"$foo"
) - Use
${}
to Disambiguate
- Use
- Conditions Alter Flow
- Use
test
to Check Condition - Avoid Problematic
[]
to Check Conditions - Use
if
to Group Commands If True - Avoid
else
Whenever Possible - Use
case
to Branch Multiple Conditions - Use
set -e
to Add Exit on Any Error Condition - Know and Use Short-Circuit Logic
- Use
- Loops Repeat Commands Until Condition Met
- Use
break
to Break Out of Any Loop - Use
continue
to Start Next Iteration Early
- Use
- Signals Communicate Between Programs
- Know What Interprocess Communication (IPC) Is
- Signals are Just One IPC Method
- Use
kill
,pkill
to Send a Signal - Use
trap
to Handle a Signal - Don't Bother with
nohup
(Usedocker
,screen
/tmux
)
- Some Fun Challenges to Get You Started
More to come (boost is at least 100 days)...