Start Up: |
This manual was written with the intention of being a helpful guide to Linux users who are trying |
to become familiar with the Bash shell and basic Linux commands. To make this manual useful to |
the widest range of people, I decided to release it under a free documentation license, with the |
hopes that people benefit from it by updating it and re-distributing modified copies. You have |
permission to modify and distribute this document, as specified under the terms of the GNU Free |
Documentation License. Comments and suggestions for improvement may be directed to: |
vic@gedris.org |
. |
This document was created using an Open Source office application called |
Open Office |
. The file |
format is non-proprietary, and the document is also published in various other formats online. |
Updated copies will be available on Vic Gedris' web site [ |
http://vic.dyndns.org/ |
]. For |
more information on Open Office, please visit |
http://www.openoffice.org/ |
. |
Copyright © 2003 Victor Gedris. |
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU |
Free Documentation License, Version 1.1 or any later version published by the Free Software |
Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover |
Texts. A copy of the license is available from the Free Software Foundation's website: |
http://www.fsf.org/copyleft/fdl.html |
Document Version: 1.2, 2003-06-25 |
1.0 Introduction |
The purpose of this document is to provide the reader with a fast and simple introduction to using |
the Linux command shell and some of its basic utilities. It is assumed that the reader has zero or |
very limited exposure to the Linux command prompt. This document is designed to accompany an |
instructor-led tutorial on this subject, and therefore some details have been left out. Explanations, |
practical examples, and references to DOS commands are made, where appropriate. |
1.1 What is a command shell? |
A program that interprets commands |
|
Allows a user to execute commands by typing them manually at a terminal, or automatically |
|
in programs called |
shell scripts |
. |
A shell is |
not |
an operating system. It is a way to interface with the operating system and run |
|
commands. |
1.2 What is BASH? |
BASH = |
B |
ourne |
A |
gain |
SH |
ell |
|
Bash is a shell written as a free replacement to the standard Bourne Shell (/bin/sh) |
|
originally written by Steve Bourne for UNIX systems. |
It has all of the features of the original Bourne Shell, plus additions that make it easier to |
|
program with and use from the command line. |
Since it is Free Software, it has been adopted as the default shell on most Linux systems. |
|
1.3 How is BASH different from the DOS command prompt? |
Case Sensitivity: |
In Linux/UNIX, commands and filenames are case sensitive, meaning |
|
that typing “EXIT” instead of the proper “exit” is a mistake. |
“\” vs. “/”: |
In DOS, the forward-slash “/” is the command argument delimiter, |
|
while the backslash “\” is a directory separator. In Linux/UNIX, the |
“/” is the directory separator, and the “\” is an escape character. More |
about these special characters in a minute! |
Filenames: |
The DOS world uses the “eight dot three” filename convention, meaning |
|
that all files followed a format that allowed up to 8 characters in the |
filename, followed by a period (“dot”), followed by an option extension, |
up to 3 characters long (e.g. FILENAME.TXT). In UNIX/Linux, there is |
no such thing as a file extension. Periods can be placed at any part of the |
filename, and “extensions” may be interpreted differently by all |
programs, or not at all. |
1.4 Special Characters |
Before we continue to learn about Linux shell commands, it is important to know that there are |
many symbols and characters that the shell interprets in special ways. This means that certain |
typed characters: a) cannot be used in certain situations, b) may be used to perform special |
operations, or, c) must be “escaped” if you want to use them in a normal way. |
Character Description |
\ |
Escape character. If you want to reference a special character, you must “escape” it |
with a backslash first. |
Example: touch /tmp/filename\* |
/ |
Directory separator, used to separate a string of directory names. |
Example: /usr/src/linux |
. |
Current directory. Can also “hide” files when it is the first character in a filename. |
.. |
Parent directory |
~ |
User's home directory |
* |
Represents 0 or more characters in a filename, or by itself, all files in a directory. |
Example: pic*2002 can represent the files pic2002, picJanuary2002, |
picFeb292002, etc. |
? |
Represents a single character in a filename. |
Example: hello?.txt can represent hello1.txt, helloz.txt, but not |
hello22.txt |
[ ] |
Can be used to represent a range of values, e.g. [0-9], [A-Z], etc. |
Example: hello[0-2].txt represents the names hello0.txt, |
hello1.txt, and hello2.txt |
| |
“Pipe”. Redirect the output of one command into another command. |
Example: ls | more |
> |
Redirect output of a command into a new file. If the file already exists, over-write it. |
Example: ls > myfiles.txt |
>> |
Redirect the output of a command onto the end of an existing file. |
Example: echo “Mary 555-1234” >> phonenumbers.txt |
< |
Redirect a file as input to a program. |
Example: more < phonenumbers.txt |
; |
Command separator. Allows you to execute multiple commands on a single line. |
Example: cd /var/log ; less messages |
&& |
Command separator as above, but only runs the second command if the first one |
finished without errors. |
Example: cd /var/logs && less messages |
& |
Execute a command in the background, and immediately get your shell back. |
Example: find / -name core > /tmp/corefiles.txt & |
1.5 Executing Commands |
The Command PATH: |
Most common commands are located in your shell's “PATH”, meaning that you can just |
|
type the name of the program to execute it. |
Example: Typing “ ls” will execute the “ ls” command. |
Your shell's “PATH” variable includes the most common program locations, such as |
|
/bin, /usr/bin, /usr/X11R6/bin, and others. |
To execute commands that are not in your current PATH, you have to give the complete |
|
location of the command. |
Examples: /home/bob/myprogram |
./program (Execute a program in the current directory) |
~/bin/program (Execute program from a personal bin directory) |
Command Syntax |
Commands can be run by themselves, or you can pass in additional arguments to make them do |
|
different things. Typical command syntax can look something like this: |
command [-argument] [-argument] [--argument] [file] |
Examples: ls List files in current directory |
|
ls -l Lists files in “long” format |
ls -l --color As above, with colourized output |
cat filename Show contents of a file |
cat -n filename Show contents of a file, with line numbers |
2.0 Getting Help |
When you're stuck and need help with a Linux command, help is usually only a few keystrokes |
away! Help on most Linux commands is typically built right into the commands themselves, |
available through online help programs (“man pages” and “info pages”), and of course online. |
2.1 Using a Command's Built-In Help |
Many commands have simple “help” screens that can be invoked with special command flags. |
These flags usually look like “-h” or “--help”. |
Example: grep --help |
2.2 Online Manuals: “Man Pages” |
The best source of information for most commands can be found in the online manual pages, |
known as “man pages” for short. To read a command's man page, type “man command”. |
Examples: man ls Get help on the “ls” command. |
man man A manual about how to use the manual! |
To search for a particular word within a man page, type “/word”. To quit from a man page, just |
type the “Q” key. |
Sometimes, you might not remember the name of Linux command and you need to search for it. |
For example, if you want to know how to change a file's permissions, you can search the man page |
descriptions for the word “permission” like this: |
man -k permission |
If you look at the output of this command, you will find a line that looks something like: |
chmod (1) - change file access permissions |
Now you know that “chmod” is the command you were looking for. Typing “man chmod” will |
show you the chmod command's manual page! |
2.3 Info Pages |
Some programs, particularly those released by the Free Software Foundation, use info pages as |
their main source of online documentation. Info pages are similar to man page, but instead of |
being displayed on one long scrolling screen, they are presented in shorter segments with links to |
other pieces of information. Info pages are accessed with the “info” command, or on some |
Linux distributions, “pinfo” (a nicer info browser). |
For example: info df Loads the “df” info page. |
3.0 Navigating the Linux Filesystem |
The Linux filesystem is a tree-like hierarchy hierarchy of directories and files. At the base of the |
filesystem is the “/” directory, otherwise known as the “root” (not to be confused with the root |
user). Unlike DOS or Windows filesystems that have multiple “roots”, one for each disk drive, the |
Linux filesystem mounts all disks somewhere underneath the / filesystem. The following table |
describes many of the most common Linux directories. |
3.1 The Linux Directory Layout |
Directory Description |
The nameless base of the filesystem. All other directories, files, drives, and |
devices are attached to this root. Commonly (but incorrectly) referred to as |
the “slash” or “/” directory. The “/” is just a directory separator, not a |
directory itself. |
/bin |
Essential command binaries (programs) are stored here (bash, ls, mount, |
tar, etc.) |
/boot |
Static files of the boot loader. |
/dev |
Device files. In Linux, hardware devices are acceessd just like other files, and |
they are kept under this directory. |
/etc |
Host-specific system configuration files. |
/home |
Location of users' personal home directories (e.g. /home/susan). |
/lib |
Essential shared libraries and kernel modules. |
/proc |
Process information pseudo-filesystem. An interface to kernel data structures. |
/root |
The root (superuser) home directory. |
/sbin |
Essential system binaries (fdisk, fsck, init, etc). |
/tmp |
Temporary files. All users have permission to place temporary files here. |
/usr |
The base directory for most shareable, read-only data (programs, libraries, |
documentation, and much more). |
/usr/bin |
Most user programs are kept here (cc, find, du, etc.). |
/usr/include |
Header files for compiling C programs. |
/usr/lib |
Libraries for most binary programs. |
/usr/local |
“Locally” installed files. This directory only really matters in environments |
where files are stored on the network. Locally-installed files go in |
/usr/local/bin, /usr/local/lib, etc.). Also often used for |
software packages installed from source, or software not officially shipped |
with the distribution. |
/usr/sbin |
Non-vital system binaries (lpd, useradd, etc.) |
/usr/share |
Architecture-independent data (icons, backgrounds, documentation, terminfo, |
man pages, etc.). |
/usr/src |
Program source code. E.g. The Linux Kernel, source RPMs, etc. |
/usr/X11R6 |
The X Window System. |
/var |
Variable data: mail and printer spools, log files, lock files, etc. |
3.2 Commands for Navigating the Linux Filesystems |
The first thing you usually want to do when learning about the Linux filesystem is take some time |
to look around and see what's there! These next few commands will: a) Tell you where you are, |
b) take you somewhere else, and c) show you what's there. The following table describes the basic |
operation of the pwd, cd, and ls commands, and compares them to certain DOS commands that |
you might already be familiar with. |
Linux Command DOS Command Description |
pwd |
cd “Print Working Directory”. Shows the current |
location in the directory tree. |
cd, chdir “Change Directory”. When typed all by itself, it |
cd |
returns you to your home directory. |
cd directory |
cd directory Change into the specified directory name. |
Example: cd /usr/src/linux |
cd ~ |
“~” is an alias for your home directory. It can be |
used as a shortcut to your “home”, or other |
directories relative to your home. |
cd .. |
cd.. Move up one directory. For example, if you are in |
/home/vic and you type “cd ..”, you will end |
up in /home. |
cd - |
Return to previous directory. An easy way to get |
back to your previous location! |
dir /w List all files in the current directory, in column |
ls |
format. |
ls directory |
dir directory List the files in the specified directory. |
Example: ls /var/log |
dir List files in “long” format, one file per line. This |
ls -l |
also shows you additional info about the file, such |
as ownership, permissions, date, and size. |
ls -a |
dir /a List all files, including “hidden” files. Hidden files |
are those files that begin with a “.”, e.g. The |
.bash_history file in your home directory. |
ls -ld |
A “long” list of “directory”, but instead of showing |
the directory contents, show the directory's detailed |
directory |
information. For example, compare the output of |
the following two commands: |
ls -l /usr/bin |
ls -ld /usr/bin |
ls /usr/bin/d* |
dir d*.* List all files whose names begin with the letter “d” |
in the /usr/bin directory. |
4.0 Piping and Re-Direction |
Before we move on to learning even more commands, let's side-track to the topics of piping and |
re-direction. The basic UNIX philosophy, therefore by extension the Linux philosophy, is to have |
many small programs and utilities that do a particular job very well. It is the responsibility of the |
programmer or user to combine these utilities to make more useful command sequences. |
4.1 Piping Commands Together |
The pipe character, “|”, is used to chain two or more commands together. The output of the first |
command is “piped” into the next program, and if there is a second pipe, the output is sent to the |
third program, etc. For example: |
ls -la /usr/bin | less |
In this example, we run the command “ls -la /usr/bin”, which gives us a long listing of all |
of the files in /usr/bin. Because the output of this command is typically very long, we pipe the |
output to a program called “less”, which displays the output for us one screen at a time. |
4.2 Redirecting Program Output to Files |
There are times when it is useful to save the output of a command to a file, instead of displaying it |
to the screen. For example, if we want to create a file that lists all of the MP3 files in a directory, |
we can do something like this, using the “>” redirection character: |
ls -l /home/vic/MP3/*.mp3 > mp3files.txt |
A similar command can be written so that instead of creating a new file called mp3files.txt, |
we can append to the end of the original file: |
ls -l /home/vic/extraMP3s/*.mp3 >> mp3files.txt |
5.0 Other Linux Commands |
The following sections describe many other commands that you will find on most Linux systems. |
I can't possibly cover the details of all of these commands in this document, so don't forget that you |
can check the “man pages” for additional information. Not all of the listed commands will be |
available on all Linux or UNIX distributions. |
5.1 Working With Files and Directories |
These commands can be used to: find out information about files, display files, and manipulate |
them in other ways (copy, move, delete). |
Linux |
DOS |
Description |
Command |
Command |
file |
Find out what kind of file it is. |
For example, “file /bin/ls” tells us that it is a Linux |
executable file. |
type Display the contents of a text file on the screen. For |
cat |
example: cat mp3files.txt would display the file we |
created in the previous section. |
head |
Display the first few lines of a text file. |
Example: head /etc/services |
tail |
Display the last few lines of a text file. |
Example: tail /etc/services |
tail -f |
Display the last few lines of a text file, and then output |
appended data as the file grows (very useful for following |
log files!). |
Example: tail -f /var/log/messages |
copy Copies a file from one location to another. |
cp |
Example: cp mp3files.txt /tmp |
(copies the mp3files.txt file to the /tmp directory) |
rename, |
mv |
Moves a file to a new location, or renames it. |
ren, move |
For example: mv mp3files.txt /tmp |
(copy the file to /tmp, and delete it from the original |
location) |
rm |
del Delete a file. Example: rm /tmp/mp3files.txt |
mkdir |
md Make Directory. Example: mkdir /tmp/myfiles/ |
rmdir |
rd, rmdir Remove Directory. Example: rmdir /tmp/myfiles/ |
5.2 Finding Things |
The following commands are used to find files. “ls” is good for finding files if you already know |
approximately where they are, but sometimes you need more powerful tools such as these: |
Linux |
Description |
Command |
which |
Shows the full path of shell commands found in your path. For example, if |
you want to know exactly where the “grep” command is located on the |
filesystem, you can type “which grep”. The output should be something |
like: /bin/grep |
whereis |
Locates the program, source code, and manual page for a command (if all |
information is available). For example, to find out where “ls” and its man |
page are, type: “whereis ls” The output will look something like: |
ls: /bin/ls /usr/share/man/man1/ls.1.gz |
locate |
A quick way to search for files anywhere on the filesystem. For example, you |
can find all files and directories that contain the name “mozilla” by typing: |
locate mozilla |
find |
A |
very |
powerful command, but sometimes tricky to use. It can be used to |
search for files matching certain patterns, as well as many other types of |
searches. A simple example is: |
find . -name \*mp3 |
This example starts searching in the current directory “.” and all sub- |
directories, looking for files with “mp3” at the end of their names. |
5.3 Informational Commands |
The following commands are used to find out some information about the user or the system. |
Linux Command Explanation |
ps |
Lists currently running process (programs). |
w |
Show who is logged on and what they are doing. |
id |
Print your user-id and group id's |
df |
Report filesystem disk space usage (“Disk Free” is how I remember it) |
du |
Disk Usage in a particular directory. “du -s” provides a summary |
for the current directory. |
top |
Displays CPU processes in a full-screen GUI. A great way to see the |
activity on your computer in real-time. Type “Q” to quit. |
free |
Displays amount of free and used memory in the system. |
cat /proc/cpuinfo |
Displays information about your CPU. |
cat /proc/meminfo |
Display lots of information about current memory usage. |
uname -a |
Prints system information to the screen (kernel version, machine type, |
etc.) |
5.4 Other Utilities |
Here are some other commands that are useful to know. |
Linux Command Description |
clear |
Clear the screen |
echo |
Display text on the screen. Mostly useful when writing shell scripts. For |
example: echo “Hello World” |
more |
Display a file, or program output one page at a time. Examples: |
more mp3files.txt |
ls -la | more |
less |
An improved replacement for the “more” command. Allows you to scroll |
backwards as well as forwards. |
grep |
Search for a pattern in a file or program output. For example, to find out |
which TCP network port is used by the “nfs” service, you can do this: |
grep “nfs” /etc/services |
This looks for any line that contains the string “nfs” in the file “/etc/services” |
and displays only those lines. |
lpr |
Print a file or program output. Examples: |
lpr mp3files.txt - Print the mp3files.txt file |
ls -la | lpr - Print the output of the “ls -la” command. |
sort |
Sort a file or program output. Example: sort mp3files.txt |
su |
“Switch User”. Allows you to switch to another user's account temporarily. |
The default account to switch to is the root/superuser account. Examples: |
su - Switch the root account |
su - - Switch to root, and log in with root's environment |
su larry - Switch to Larry's account |
5.5 Shortcuts to Make it all Easier! |
When you start using the Bash shell more often, you will appreciate these shortcuts that can save |
you very much typing time. |
Shortcut Description |
Up/Down Arrow Keys Scroll through your most recent commands. You can |
scroll back to an old command, hit E |
, and execute the |
NTER |
command without having to re-type it. |
“history” command Show your complete command history. |
T |
Completion If you type a partial command or filename that the shell |
AB |
recognizes, you can have it automatically completed for |
you if you press the T |
key. Try typing the first few |
AB |
characters of your favourite Linux command, then hit T |
AB |
a couple of times to see what happens. |
Complete recent commands with “!” Try this: Type “!” followed by the first couple of letters |
of a recent command and press E |
! For example, type: |
NTER |
find /usr/bin -type f -name m\* |
...and now type: |
!fi |
Search your command history with |
Press CTRL-R and then type any portion of a recent |
CTRL-R |
command. It will search the commands for you, and once |
you find the command you want, just press E |
. |
NTER |
Scrolling the screen with Shift- |
Scroll back and forward through your terminal. |
PageUp and Page Down |
6.0 Further Reading |
Link Address Description |
http://www.oclug.on.ca |
Ottawa Canada Linux Users Group. A |
group with an active mailing list, monthly |
meetings, and much more. |
http://www.exitcertified.com |
Ottawa's source for Sun training, and the |
host of OCLUG's technology seminars. |
http://www.fsf.org |
The Free Software Foundation. |
Documentation, source code, and much |
more for many programs commonly |
found on Linux systems. |
http://linux.org.mt/article/terminal |
“A Beginner's Bash”. Another very good |
introduction to Bash. |
http://www.oreilly.com/catalog/bash2 |
An excellent book if you want to learn |
how to customize Bash and use it for shell |
script programming. |
No comments:
Post a Comment