The "lingo"
- "Terminal"
- "Command-line"
- "Command prompt"
- "Shell"
- "Console"
These are all pretty much the same thing.
What is a Terminal?
A text-based command interpreter
The most common shell is "bash"
For OS X, use the "Terminal" application
Fire it up!
Prompt
Prompt
Usually shows your username and computer name
Indicates that the terminal is ready for a command
Cursor
Cursor
Indicates your current spot in the terminal
Shows you where the stuff you type will go
Your First Command
-
Type pwd into the terminal
-
Press the enter key
Your First Command
clear
The clear command clears the contents
of the terminal and issues a prompt.
This is good for removing previous
output that is unnecessary to the task at hand.
Feel free to use this whenever things get too cluttered.
Directories
Also referred to as "folders"
A container for files or other directories
Nested files and directories
can be referenced using paths
Directory Trees
The set of all folders, taken together,
makes up your entire file system.
This system is organized into a kind of
upside down tree.
At the very top of the tree is the root folder.
Paths
Each directory or file is separated by a forward slash "/"
There are two kinds:
Relative: Desktop/the_project/overview.txt
Absolute: /Users/jcash/Desktop/walk-the-line.mp3
Shortcuts
- Current Directory - .
- Parent Directory - ..
- Home Directory - ~
cd
The cd command changes
the current working directory.
It expects a file path as an "argument".
If no file path is given, it assumes
your home directory by default.
cd
ls
The ls command lists the
contents of a directory.
It expects a file path as an "argument".
If no file path is given, it assumes
the current directory by default.
ls
Flags
The ls command accepts several options flags.
A flag is an special argument that
is used to set an option for the command.
These are commonly a hyphen followed by a single character (e.g. "-g")
Setting the -l flag on the ls command causes it to provide more verbose output.
ls -l
cd & ls
Play with the cd and ls commands.
Be sure to incorporate:
- relative file path
- absolute file path
- the . shortcut
- the .. shortcut
- the ~ shortcut
-
cd without an argument
use pwd to check your location periodically
Making a Directory
Use the mkdir command to create a new empty directory
Pass the path of the directory as the first argument
If the base of the path doesn't already exist,
the command will fail
Use the -p flag to create the full path is non-existent
Removing Directories
Use the rmdir command to remove an empty directory
Use the rm -r to remove a non-empty directory
Exercise
-
cd to your home directory
- create the girl/develop directory path
- navigate into the girl/develop directory
- create the it directory
- view the contents of the it directory
- navigate up two directories
- use the pwd command to verify you are home
- remove the girl/develop/it path
Files
Use cat to output the contents
of a file to the console
Use more to step through the
contents of a file a screen at a time
Use less to step backwards or forwards
Exercise
Explore the /usr/share/misc files
using cat, more, and less
Hidden Files
Filename that begin with a period
are hidden from normal output.
e.g. ".bashrc"
Use the ls command with the -a flag
to see hidden files in addition to the usual output.
Type ls -la into your terminal
Use the -h flag to get human readable file sizes
ls -la
Creating and Removing Files
Use touch to create a blank file or update
the timestamp on an existing file
Use rm to remove files
Permissions
The unix security model breaks up file
permissions into three groups:
rwx r-x r-x
group
others
owner
Changing Permissions
Use chmod to change
permissions on a file/directory
The argument has three sections:
-
u, g, o to signify which level to target
-
+ or - to indicate whether adding or removing
-
r, w, x to indicate what type of permission to change
Examples:
chmod u+w to add write permissions for the file's owner
chmod go-rwx to remove all permissions for
the file's group and everyone else.
Exercise
- Create a new file named testfile in your home directory
- Grant yourself execute permission on the file
- Remove read permission on testfile from
your group and everyone else
- Delete testfile
Standard Output
Most commands display their results to
a mechanism called the
standard output.
By default, this directs its content to the display.
The standard output can be redirected to
a file using the > operator.
e.g.
ls > file_list.txt
Standard Output
In order to append to the file instead of overwriting it, use the
>> operator instead.
e.g.
ls >> file_list.txt
Both the > and >> operator will create the file if it doesn't exist.
Standard Input
Whenever commands accept keyboard input, it's likely they are really just drawing input from a mechanism called
standard input.
By default, this is set to keyboard input.
The input to a command can be redirected to
a file by using the
< operator.
e.g.
sort < file_list.txt
Both input and output can be redirected at the same time.
e.g.
sort < file_list.txt > sorted_file_list.txt
Pipes
The "|" character can be used to allow
commands to communicate during execution
Pipes are placed between commands.
A pipe will cause the output of the
left command to be used as the
input of the right command
ls -l | grep "myfile.txt"
du | sort -nr
grep
The grep command outputs only the
lines from a file that match a given pattern.
This is useful for doing text searches within a file.
The first argument is the pattern to match
The the second, third, and so on are files to search within
e.g. grep "ls" .bash_history
If no file argument is given, it
will expect input from the keyboard
Filters
Commands whose behavior follows the pattern:
- Accept input from standard input
- Perform some operation on it
- Send the results to standard output
Filters
Check out the man pages for the following
sort
uniq
grep
head
tail
fmt
pr
tr
sed
awk
Exercise
ls -a | grep bash
Use the "ls" and "grep" commands to print
out only the files in your home directory that contain the word "bash"
Processes
Whenever a command is executed, a new process is created
top
Provides an up-to-date feed of information
on the most active processes across the machine.
Useful for finding processes that are hogging the CPU
ps
The ps utility displays all of your
processes that have controlling terminals.
ps
Key Sequences
Ctrl+Z Suspend the current process
Ctrl+C Terminate the current process
Suspending a Process
bg & fg
The bg and fg commands bring a suspended process back into a running state.
bg runs it in a background process
fg runs it in the foreground of the current terminal
By default they target the most recently suspended process.
The job number can be provided as an argument.
(The number we saw when we suspended the process)
Exercise
- Run the top command
- Suspend the process
- Bring the process back into the foreground
kill
The kill command terminates
or sends a signal to a process
It takes the process id (PID) as an argument
You can find the PID using top or ps
Exercise
-
Clear your terminal and run the "yes" command
- Use the Ctrl+Z key sequence to suspend the process
- Use the "bg" command to send the process to the background
- Notice the output is still happening even though the process is running in the background
- Open a new terminal window, locate the PID for the "yes" process and use it to kill the process.
Commands
Typing
!
followed by the name of command
will repeat the last line that began with that command
-
ls -la ~ | grep "Desktop"
-
!ls
In both instances, you should get the same
output because the second line is simply repeating the first
Type !! by itself will re-run the last line entered
history
The terminal keeps an ongoing log
of all the commands you've run.
The history command prints the
contents of the history file
history
history
You can run a previous command
using the number in the history.
e.g. !12
Almost no one does this
Key
Ctrl+a
moves the cursor to the beginning of the command
Use the tab key to auto complete file paths
Ctrl+e moves the cursor to the end of the command
Exercise
- Use your up and down arrows to locate a past
command with one or more arguments
- Jump to beginning of the line
- Jump to the end of the line
- Change one of the arguments and run it
- Run the date command
- Re-run the command from step 4 using !
- Time the execution of your original
command by running time !!