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 Small (1.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)
- 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
) (More Later) - Use
jq
to Select from JSON Input (More Later) - Use
yq
to Select from YAML Input (More Later)
- 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
Please note that I mistakenly say Ctrl-C
many times in this video
where I actually mean Ctrl-[
. See if you can catch all the times I get
it wrong. It will be a good way to learn from my mistake.
- 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
- Know What Syntax 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
python3
to Attempt Same and Note Errors - Use
chmod +x
to Make File Executable - Add
#!/bin/sh
Shebang Line to Specify Interpreter- Even If Others Work, Use to Communicate to Others
- Sets Vi/m Syntax So Suffix Not Needed
- What's Up with
/usr/bin/env
? - Use
set -e
to Exit Program if Anything Fails - Use
set -x
When Needed for Debug Tracing
- 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
- Never Put
./
in Your Path
- 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
&
andnohup
to Start and Keep Program in Background - Use
pgrep
,pkill
,kill
,ps
,/proc
to See Processes - Use
crontab
to Schedule Jobs in the Background- Editing Your
crontab
is Not Really Beginner
- Editing Your
- Get and Use
shellcheck
Throughout to Ensure POSIX - Know What POSIX Means POSIX Standard
- Know What Script Means
- Know What Program and Programming Mean
- A Universe of Stateful, Composable Objects with Actions, Interacting
- Not Specifically Talking About OOP, Much Bigger
- On Programming Humans ...
- Routines, Procedures, and Commands in the Real World
- What About Algorithms?
- It All Started with Math, Know Why Linear Algebra Matters
f(x,y) = 3x + 2y + 3
x
,y
are Parameters=
,+
are Operators3x
,2y
,3
are Operands- Function Parameter Variables Receive Argument Values
- "This functions returns the value ..."
- Same in JS:
let z = (x,y) => 3*x + 2*y +3
- True Functions are Not Procedures
- What About Subroutines?
- What About Methods?
- What About Operations?
- What About Commands?
- Even If Language Allows, Group Code Into Either
- Know Advantages of One Over the Other
- Know What Functional Programming Is
- Know What Side Effects Are
- Shell Functions Are Not Functions, They Are Subroutines
- Use Action Verb When Naming
- Use
foo() {}
to Create a Subroutine (Function)
- All Objects Have States: Mutable, Immutable, Persistent, Dynamic, Static
- Variables Save Data as State
- Types Declare How to View State Data
- Same Data, Different Type
- Binary (Base 2, Ones and Zeros, Digital)
- Number
- Symbol or Letter
- String
- Bit Field
- POSIX Shell Only Has Strings and Integers
- Use Strings for Everything
- Function Parameter Variables Receive Argument Values
- Like Putting Something Into Box or on List
- Use
=
to Declare and Assign Variable- No Spaces Around Operator (
=
)
- No Spaces Around Operator (
- Use
$foo
to Use Variable After Assigned - Always Wrap with Double Quotes (
"$foo"
) - Use
"${foo}bar"
to Disambiguate - Don't Forget to Check with
shellcheck
- Use
bc
When Numbers and Math are Actually Needed - Understand Scope and Considerations
- Know What Scope Means
- Know What a Block Is
- Know What Global Means
- Know What Local Means
- All Variables are Global in POSIX Shell
- Calling to Communicate
- Know What to Call a Function or Subroutine Means
- Arguments Contain Incoming Communication
- Return Values Produce Outbound Communication
- Calls Must Come After Declarations
- Arguments Passed as Special Parameter Variables:
$1
, ...- No Parameters Between Parens
()
- Unlike Most Other Languages
- No Parameters Between Parens
- Use
$0
to Get Name/Path of Executable Script - Use
$#
to Get the Total Number of Arguments Passed - Use
"$@"
for"first" "second" "third"
- Use
"$*"
for"first second third"
- Reminder About Necessity of Quoting (
"foo"
) Everything - Shell Functions Only Return Integers
- Use
return [RVALUE]
to Set Return Value - Omitting
return
is Fine - Return Values are Not Output
- Use
echo
/printf
and$(foo)
to "Return" Strings
- Use
- Use
$?
for Last Return Value - Use
exit [RVALUE]
to Return Value for Program Itself
- Conditions Alter Flow
- Use
test
to Check Condition (Readtest
Man Page)- Remember,
test
Not Needed for Single Command
- Remember,
- Use
&&
and||
to Create Compound Conditions - Know and Use Short-Circuit Logic
- Use
test
to Keep it Clear to Read - Use
&&
to Join (not||
)
- Use
- Use
set -e
to Assert Every Line or Exit- Use
|| true
to Make Assertion Optional
- Use
- Avoid Problematic
[]
to Check Conditions - Use
if
to Group Commands If True - Avoid
else
Whenever Possible, Return Early Instead - Use
case
to Branch Multiple Conditions
- Use
- Loops Repeat Commands Until Condition Met
- Use
while
to Repeat While Condition True - Use
while true
for Infinite Loops - Use
until
to Repeat Until Condition True - Use
for
to Repeat for Sequence or Number of Items- Use
seq
Instead of Bash{1..10}
Notation
- Use
- Use
break
to Break Out of Any Loop - Use
continue
to Start Next Iteration Early
- Use
- Know What Inter-Process Communication (IPC) is and Methods
- Signals Communicate Between Programs
- Signals are Just One IPC Method
- Use
kill
,pkill
to Send a Signal - Use
trap
to Handle a Signal
- Use Loops,
nohup
, and&
to Create Daemons - Conclusion of POSIX Shell Scripting Material
- Other Resources
- Some Fun Challenges to Get You Started
Coming ...
Remember purpose of Boost is not to cover in depth, but to give a sense of what you need to know and why. Mastering these topics (SQL, for example) could take several months alone, writing your own language grammar in PEGN, a year or more
- Delimited (WS, Tab, Bar, CSV, Properties)
- Universal JSON Standard and YAML Superset
- What About TOML? (I Made the Logo, BTW)
- Regular Expressions (BRE, PCRE)
- Structured Query Language (SQL)
- Parsing Expression Grammar Notation (PEGN)
Coming ...
Coming ...
Coming ...
Coming ...
Coming ...
More to come (boost is at least 100 days) including ...
- Create Minimal Web Sites Using Simple, Standard Tech
- Code in C for Understanding Modern Computers
- Code Perl for Practical Prototyping
- Code Go for Building Big Stuff
- Code Python for Math, ML, and Automation
- Know the Problem, Peril, and Practicality of Paradigms