Our workstations and servers run Linux. This lesson covers the command-line tools you need every day, from file and process handling to SSH and shell scripts.
Important
Work on this lesson in
advisormode.
Learning goals
- You can look around a Linux system from the shell: files and directories, running processes, disk usage, open network ports, installed packages.
- You can explain file ownership and the nine permission flags, and change them.
- You can make a script executable and run it directly, in bash and in Ruby, using a shebang line.
- You can connect to a server with SSH and copy files to and from it, and you can explain why you log in as the deploy user and what that user may and may not touch.
- You can edit a file in a terminal editor (e.g. vim or nano) and have made it your
$EDITOR. - You use the shell efficiently: history search, tab completion, pipes, and job control to suspend and resume programs.
- You can configure your shell and tools through their dotfiles, e.g.
~/.bashrc,~/.ssh/config,~/.gitconfig. - You can find out how any command works, e.g. with
man,tldror--help.
Resources
Read what's new to you, skim what's familiar, skip what you already master. Stop when you can meet the learning goals.
Your agent can also generate an overview, a tutorial or an explanation for anything here, tailored to what you already know. Just ask.
Pick one introduction
- 📘 Learn Enough Command Line to be Dangerous Show archive.org snapshot — free to read online; also in our library Show archive.org snapshot
- ▶️ The Missing Semester: Course overview + the shell Show archive.org snapshot and shell tools and scripting Show archive.org snapshot — MIT lectures with notes and exercises
For specific goals
- 📄 CLI tricks every developer should know Show archive.org snapshot — history, completion, pipes, aliases
- 📄
Linux file permissions explained
Show archive.org snapshot
— owner, group, the nine flags,
chmod - 📄
Job control
Show archive.org snapshot
—
Ctrl+Z,bg,fg,jobs - 📄 Vim cheat sheet Show archive.org snapshot — enough vim to edit a file on a server; or use nano
- 🎮
tldr— install withsudo apt install tldr;tldr sshshows usage examples for any command (runtldr -ufirst if pages are missing) - 📄 Deployments in our opsComplete deck — why you log in as the deploy user and what that user may touch
Exercises
Basic commands
Experiment and do something useful with the following commands. You might need to use tldr or Google the command.
-
man(Get a more colorful output for man pages] topcatlessdpkg -lapt-cache search <text>apt updateapt dist-upgradeapt install <package-name>sudo <command>sudo susshscpdf -h .du -h .-
ss --listening --tcpor (old)netstat --listen --tcp ln -stouchtelnetcurlpskillkill -9pkill -f <partial-name>envdig-
grep(use with|) zgrep <needle> log/*.log*
Configuration files
Understand what you can do with the following configuration files:
~/.bashrc~/.ssh/config~/.gitconfig
Note that changes to your ~/.bashrc don't affect already opened shells.
Terminal editor
To edit files from within a terminal, you'll need a CLI editor.
- Chose an editor (
vim
Show archive.org snapshot
or
nano
Show archive.org snapshot
)
- If you chose vim, learn
how to exit
Show archive.org snapshot
an open editor:
-
:qto exit -
:wqto save (write) and exit -
:q!to exit without writing
-
- If you chose vim, learn
how to exit
Show archive.org snapshot
an open editor:
- Persist your choice in the
$EDITORvariable. It defines the default for commands likegit commit:
# Example with vim
# open the configuration file
vim ~/.bashrc
# navigate to the end of the file,
# press "i" to switch to insert mode
# then type out the line you want to add
export EDITOR=vim
# persist your changes
:wq
Note
While you could set $EDITOR locally to a graphical to a editor like
gedit, this is not possible for remote shells to our servers. Getting accustomed to a CLI editor will pay off in the long term.
Terminal shortcuts
Understand what the following shortcuts do in a terminal:
- Up-arrow
TabCTRL+R-
CTRL+Z/jobs/fg/bgShow archive.org snapshot- This allows you to faux-multitask within a single shell. E.g. you can temporarily suspend a running vim editor, take a look around the system, then return to your vim editor.
File ownership
Understand access rights and ownership of files:
- What does "ownership" mean for files?
- Each file has 9 flags, 3 read, 3 write, and 3 executable flags. What do they mean?
- Write a simple bash script that prints a message. How can you execute it?
- Write the same script in Ruby. What do you have to do to just call it from the command line without using the
rubycommand directly? Learn about the "shebang".