You are getting the first edition of all these pages. Please let me know if you find an error!
You are responsible for knowing all the CLI commands in this lab.
By the end of the lab, you should be able to navigate the Linux file system, manage files and directories, manipulate text files, and utilize process management commands.
Mega important:There is no notion of “undo” in the CLI. You run a command, it’s done. So you have to be careful when you do things like delete or move files in the CLI. There is no Trash Can.
Press the Tab key while you are typing. The terminal will attempt to autocomplete the command or filename you are typing. Big typing time saver.
Use the up arrow on your keyboard to cycle through the most-recently used commands you typed in. Good for re-running things.
Program going crazy and the CLI is not responding? Stuck typing and can’t get out? Press Control+C (Linux) or Command+C to stop what is happening. This sends a signal to the OS to kill the current process.
1 - Launching a Terminal
The terminal is the program that lets users access an OS’s Command Line Interface (CLI).
You are getting the first edition of all these pages. Please let me know if you find an error!
Launching a terminal on Mac
The terminal program on Macs is simply called “Terminal”. You can open it in two ways:
Finder –> Applications –> Utilities –> Terminal
Press Command+Spacebar. Type “terminal” in the Spotlight Search popup and you will see an option to open the Terminal.
CMD+Spacebar is a great way to open apps quickly on Mac.
You may wish to drag the Terminal application to your Dock at the bottom.
Ubuntu (on Windows)
Using the Windows Subsystem for Linux
Windows has several terminal programs. Windows PowerShell and Command Prompt are for interacting with Windows CLI directly. We want to open an Ubuntu terminal for interacting with the Ubuntu OS you installed in the previous lab.
Open the Windows menu and search for “Terminal”
It will most likely open a window like this:This is PowerShell (for talking to Windows) and is not what we want.
Click the dropdown to the PowerShell tab. You should see an option for Ubuntu. Select it. After a moment, you should see the Ubuntu Terminal that looks like this:
Using VirtualBox
Open VirtualBox and start your Ubuntu virtual machine.
Once Ubuntu opens, click the “More Apps” icon and find the Terminal.
Alternately, press the Windows key (called the super key in Ubuntu) and start typing “Terminal” and you will see it suggested.
The Windows key and typing a search term is a great way to find things in Ubuntu and usually faster than clicking through a menu.
2 - Navigating the file system
Use the CLI to move through the filesystem and see its contents.
You are getting the first edition of all these pages. Please let me know if you find an error!
Part 1: Navigating the File System
Understanding the File System Structure
Filesystems are follow a “tree” structure for both Windows and Unix-based systems. Specifically, an upside-down or sideways tree.
Key terms and concepts
Course Note: You need to know terms and concepts that look like this.
Directories hold files and other directories. When you use the term subdirectory, you are talking about the directories listed inside the current working directory.
Files represent programs, pictures, audio, video, word processing docs, and the like can be run by the operating system (in the case of programs) or opened by another piece of software, like Photoshop, Microsoft Word, VSCode, etc.
The file system has a root directory. On Linux (and Mac), this directory is named /. On Windows, it is typically C:\.
Linux uses forward slashes (/), whereas Windows uses backslashes (’\’). It matters, and is an endless source of annoyance for developers.
A user’s home directory is where their user-specific content lives, like documents and pictures that you save. On your personal computer, you probably only have one user. A lab machine will have many different users.
On Linux, the home directory for the user named ‘alice’ is /home/alice/
On Mac, it would be /Users/alice/
On Windows, it would be c:\Users\alice\
You can use the Terminal/CLI to navigate the file system, like you would graphically using the Windows Explorer or Mac Finder to navigate to files. As you navigate with the CLI, you are “in” one directory at a time. The directory that you are currently “in” is called the working directory. Commands that you run run in the context of the working directory. If you were to create a file using the CLI, for example using touch newfile.txt, it will create the file in the working directory. Or if you were to try and run a program from the CLI, it will look in the working directory for that program (and other places we will discuss later).
Explore the root directory using the ls and cd commands.
pwdls # This will not show anything because there are no files.cd .. # Go "up" one level in the file tree.pwdls # This should now list some things.ls / # List the files in the root.ls -l / # List the details of files in the root.cd / # Change working directory to root.ls # list files.cd .. # Go up... But it won't go anywhere because you can go higher!ls # You're still in the root. List root's files.
None of these commands change anything on your computer. They give you information and let you navigate between directories.
Mac users: If you encounter a Permission Denied error while running the ls / or cd / commands, try running sudo ls / or sudo cd /. It will prompt you to enter your password. The sudo command makes you an “administrator” in the eyes of the CLI. Mac is protecting the sensitive / directory, and wants to make sure you have permission to do what you’re trying to do.
Key Commands
pwd - Print Working Directory - what is the name of the directory you are currently “in”. Use then when you don’t know where you are.
ls - List contents. Will show both subdirectories and files in the working directory.
ls <target> - List the contents of target directory, e.g., ls /usr/
ls -l - Lists contents and gives you additional information, like the file type. May also do ls -l <target>
ll - Shorthand for ls -l. Can do ll <target>
cd - Change Directory. This is how you navigate.
cd / changes to the root directory
cd ~ or simply cd will navigate to the user’s home directory.
cd .. go “up” one level to the parent of the current directory
cd <target> changes to the <target> directory.
The argument of the ls and cd commands is a directory name or the special .. symbol. You can “jump” directories by putting the directories full name, like ls /usr/bin/. A directory’s full name is called its path.
You can also specify relative paths, which we will discuss more later.
The terminals are capable of autocompleting. Type cd to change to your home directory, then type cd D then hit the Tab key. What happens? The terminal will find all subdirectories (if any) of your working directory that start with capital D.
Extremely important point: all file system names are case-sensitive in Linux. For example, you can have files named user.txt and User.txt and or a directory /usr/ and /Usr/ they are different. Capitalization matters in software development.
Exercise:
Navigate to the /usr/ directory. Use the pwd command to display your current directory. Type ls. What do you see?
Now type ls -l or ll. What do you see?
Use cd ~ or simply cd to navigate to the home directory. Use ls to display the files and folders. What do you see?
Knowledge Check:
Question: What does the pwd command do?
Question: How do you navigate to the root directory?
Question: How do you navigate to your home directory?
3 - File and directory management
Use the CLI to manage files and directories.
You are getting the first edition of all these pages. Please let me know if you find an error!
By the end of the lab, you should be able to navigate the Linux file system, manage files and directories, manipulate text files, understand basic file permissions, and utilize process management commands.
Part 2: File and Directory Management
Reminder: All file system names a case-sensitive.
Now, let’s practice adding and removing files and directories using the CLI.
Creating and Removing Directories
mkdir - Make Directory
rmdir - Remove Directory
rm -r - Remove Directory and its contents recursively. WARNING: This is going to delete the directory and everything below it recursively. Linux does not have ‘undelete’, so be very careful with this command!
The commands below have a # character, which indicated the beginning of a comment. # comments are there for clarification and you do not type them.
Type ls after each command below to see the changes:
bash
cd# switch to your home directorymkdir MyLab
cd MyLab
rmdir MyLab # This should fail because the directory is not emptycd ..
rm -r MyLab
Creating, Copying, and Deleting Files
touch - Create an Empty File
cp - Copy Files and Directories
rm - Remove Files
mv - Move or Rename Files
Type ls after each command below to see the changes:
bash
cd# go to your home directorytouch sample.txt
cp sample.txt sample_copy.txt
mv sample.txt renamed_sample.txt
rm sample_copy.txt
Exercise
Create a new directory named LabDirectory
Navigate into this directory using the cd command
Create a new file named LabFile.txt inside this directory. Use touch
Copy this file to a new file named LabFileCopy.txt. Use cp
Delete LabFileCopy.txt. Use rm
4 - Text files
Use the CLI to manipulate and print text files (like source code).
You are getting the first edition of all these pages. Please let me know if you find an error!
Part 3: Text File Manipulation
You can use the CLI to do simple or complex text manipulation. As developers, you will use a text editor or IDE like IDLE, PyCharm, or VSCode to do such tasks most of the time. However, it can be handy to do from the CLI sometimes, and many scripts used to compile and build software these CLI text-manipulation techniques.
Key terms
Most CLI commands, including the ones you have already seen like ls and pwd have an output that is printed to the terminal. Some commands, like cp, do NOT have an output printed to the screen.
Below you will see the special > and >> operators.
> is the redirect operator. It takes the output from a command and writes it to a file you specify, e.g., echo "hello" > file.txt. It will create the file if it does not exist, and will overwrite the file if it does exist!
>> is the append operator. It will create the file if it does not exist, and will append to the end of the file if it does exist!
Viewing and Editing Text Files
echo - Display a line of text
cat - Concatenate and display file contents
less - View file contents one screen at a time
grep - Search for patterns in Files
bash
echo"Hello, Linux CLI!" > hello.txt
cat hello.txt
echo"Another line" >> hello.txt
cat hello.txt
grep "Hello" hello.txt
grep "o" hello.txt
seq 1110000 >> numbers.txt # making a big file - no need to learn. cat numbers.txt
less numbers.txt # Spacebar goes forward, b goes back, q to quit.
Exercise
Use echo to create a text file with some content. Try echo "this is my first file" > myfile.txt
Use cat will print all of the file’s contents to the screen all at once.
Use echo to append text to the file.
Use grep to search for the word “first” in the file.
Use less to view the file content one screen at a time. Hit q to exit.
Knowledge check
Question: How can you append text to an existing file using echo?
Question: What command would you use to search for a specific word in a file?
5 - Process management
Use the CLI to manipulate the OSes processes.
You are getting the first edition of all these pages. Please let me know if you find an error!
Part 4: Process Management
Key terms
We discussed what a process is when we introduced Operating Systems concepts. Below you will see a reference to PID - Process ID. This is an integer that uniquely identifies the process to the OS. As a user, you use the PID to specify which process you are talking about.
Run the following:
bash
ps
top # hit q or Control+C to quit the program.
Monitoring and Controlling Processes
ps - Report a snapshot of current processes
top - Display Linux processes and how much memory or CPU they are using. Similar to the Activity Monitor on Mac and the Task Manager on Windows. Hit q to exit.
Use the keyboard combo Control+C to kill/quit the current process.
kill - Send a signal to a process
Exercise
We are going to install Python and create a wild task.
On Ubuntu only: Run the command sudo apt install python3
You will be prompted to type your password. The terminal will not show any characters while you are typing.
You will see some text as python3 installs.
Open a second Terminal:
On Mac or in VirtualBox Ubuntu: You can click the + button on the tab in the current Terminal. You should see a second “fresh” terminal pane.
Ubuntu on WSL: Click the drop down next to your Ubuntu tab and make sure to pick Ubuntu again. You should see a second “fresh” Linux pane. If you see Powershell or Command Prompt, you’re in the wrong place.
Now run python3 and create the following infinite loop.
python
whileTrue:print("hello there")
We should now have an out of control Python process gobbling up CPU cycles.
Switch back to the other Terminal tab and run the following commands.
bash
ps
top # find the PID of the python process that is gobbling all the CPUkill <PID> # Replace <PID> with the actual process ID
The terminal will not say anything, but run top again. The runaway Python process should be gone. Switch back to the Terminal tab where you had that Python process and it should say terminated or something similar.
Knowledge Check
Question: How can you view real-time process activity?
Conclusion
Anything you can do with your OS’s GUI, you can do on the command line. It just looks different. Become comfortable with the CLI – you will find that it can be MUCH faster for certain tasks, and will be indispensable to you as a software engineer.
Also, the commands above have equivalent commands on Windows machines (mostly). If you are a regular Windows user, you would do yourself a favor to learn the equivalent commands to things like ls, rmdir, and cd in the Windows CLI (PowerShell).
Final Knowledge Check
Question: Summarize the steps to create a new directory, navigate into it, create a text file, and view it using less.
Question: From the CLI, how would you find the runaway process with a memory leak (probably using the most memory) and terminate it?