 | Level: Introductory Chris Walden (dwinfo@us.ibm.com), e-business Architect, IBM
11 Nov 2003 IBM e-business architect Chris Walden is your guide through a nine-part developerWorks series on moving your operational skills from a Windows to a Linux environment. He covers everything from logging to networking, and from the command-line to help systems -- even compiling packages from available source code. In this part, we cover the different shells, as well as some of the most essential Linux commands.
Any administrative task can be done from the console in Linux. In many
cases, using the console is faster than using a graphical program and may
provide additional functionality. Furthermore, any console task can be
placed into a script, and thus automated. To really take control of your
Linux environment, you will want to learn how to do things from the console.
The information here is a guide to get you started at the Linux console if you
have a DOS/Windows background.
Accessing a console
If your system boots into text mode (a common configuration for servers
to conserve overhead for services), then you are already at a console when
you execute a text login. On a typical Linux system, you can get to additional
consoles by pressing
Ctrl + Alt + (F1 - F6). Each console is
a completely different session on the system and can be accessed as
different users at the same time.
This multi-console behavior is different from the multiple-desktop in Windows.
In Linux, each console can be controlled by a completely different user. For
example, you can be logged as root on console 1, and logged in as
joeuser on console 2. Both consoles run different programs in their own
user space. In the same vein, different users can be logged into a Windows
system remotely. In this instance, Linux provides capabilities more like a
mainframe than a simple server or workstation.
If you are in a graphical mode, then you can open a terminal to
get access to a console screen. The terminal will usually have a button on
your desktop's task bar, or you can find it under System Tools in the
Program menu. You can also open a terminal from the context menu (right click on the desktop).
Commands
There are many potential commands available from the console. Some of
these tools are only truly useful when writing scripts. Here are some of
the first ones that you'll probably need. Remember that all commands and
options are case sensitive. -R is different from -r, and
will probably do different things. Console commands are almost always
lowercase.
cd
Moving around in directories uses the familiar cd command. The main trick is to remember that in
Linux the forward-slash (/) is used where you are accustomed to using the
back-slash (\). The back-slash is still used, but it specifies that a command
should be continued on the next line. This is sometimes done for
readability when typing in a particularly long command.
ls
Listing files in a directory can be done with the ls command. There are several switches you can use to
alter the look of the listing:
Listing files
ls -l | Shows a long listing, including files size, date and time, and attributes | ls -t | Sorts files by time | ls -S | Sorts files by size | ls -r | Combined with one of the sorting switches, reverses the
order. ls -lt shows the files with the newest one at the
top of the list. ls -lrt shows the files with the newest
ones at the bottom. | ls -h | Human readable. Uses friendly k, M, and G indicators to show file
size rather than listing them in bytes.
| ls -a | Shows all the files in a directory, even the hidden ones |
cp
Copy files with the cp command. The command
works essentially the same as the DOS copy
command. Essential switches:
Copying files
cp -R | Copies files recursively; required if you are copying an entire directory | cp -f | Forces the copy and overwrites existing files without asking | cp -l | Links files instead of copying; see below |
 |
Creating links with the copy command
The cp command can be used to create a quick
set of hard links to a file, or to an entire file structure. Use the
-l switch to indicate link copying. All directories will be
created as directories, but all files will be set up as hard links.
cp -lR /data/accounting/payroll /data/management/hr
The above command will copy the entire directory structure from
/data/accounting/payroll and below to /data/management/hr/payroll. All
files in the directory structure will be set up as links. This can be
used to provide different views of the same files within a file system.
This is also a helpful security technique, allowing access to files from a
different directory with different access controls.
|
|
mv
Move files and rename files with the mv command. It works
essentially the same as the DOS move command,
except that it will move entire directory structures as well as files.
cat
View files with the cat command. This is the
equivalent of the DOS type command. It will
dump the contents of a file to another file, to the screen, or to another
command. cat is short for concatenate, and can
be used to sequence several files together into a larger file.
more
View information one page at a time with the more command. It works essentially the same as the
DOS more command.
less
Use less to view a text file with the ability
to scroll up and down through the document and search for text patterns.
vi
Some might say that vi stands for "virtually
impossible." It is a text editor that has a long tradition in the Unix
world. vi is not really intuitive, but it is available in almost any
Unix-like environment. There is a built-in tutorial for the version
installed in Linux, and once you get used to it, you can do some truly
incredible things in a few keystrokes. Truly, no editor has managed to replace vi
for editing password and configuration files.
man
View documentation for a command with the man
command. Man is short for manual. Documentation tends to be thorough. To
learn more about man, type:
man man
info
info is like man except it provides
hyperlinked text to make browsing documentation easier.
Which shell?
One critical difference between DOS/Windows and Linux is that the command
shell is a layer separated from the operating system. The shell
environment affects the features you have, such as editable command lines
and scrolling histories. The shell also determines the syntax required to
do functions in scripts. In DOS/Windows, there was only one option for
scripting, the lowly .BAT file. It did a lot, but required a good deal of
creativity on the part of the script writer to do more than basic tasks.
In Linux, scripts can contain loops and do more than basic conditional
statements, including many things that you expect from a
programming language. If you were good at writing .BAT files, shell
scripts are going to let you shine.
The default shell is a parameter in each user account. The typical
default shell in Linux is /bin/bash, though others are available. The
man documentation for each shell is actually
very good and goes into detail about shells and how they work. Rather
than try to paraphrase that information here, select a shell from the list
below and look at its man page.
bash
The bash shell is a free version of the Bourne shell, the first Unix
shell, and includes many additional features. Bash has editable command
lines, a scrollable command history, and tab completion to help avoid
typing long file names.
csh
The C shell uses a "C-like" syntax and has borrowed many features from the
Bourne shell, but uses a different set of internal shell commands.
ksh
The Korn shell uses the same syntax as the Bourne shell and has included
the user-friendly features of the C shell. ksh
is used in many installation scripts and should probably be installed on
the system even if it's not your primary shell.
tcsh
The TC shell is an enhanced version of the C shell and is 100% compatible
with it.
zsh
The Z shell is an enhanced version of the Korn shell with many features
found in the bash shell.
 |
Shell game
You can change your shell at any time by simply executing it from
the console. A script can specify the shell it wants to run by putting a
shebang (#!) at the top of the file pointing to the desired shell. When
the script is executed, it will run in the correct shell, but leave the
user's shell environment alone. Here's an example of a line to get a
script to run in C shell:
#!/bin/csh
|
|
Link me up, Scotty!
One compelling feature in the Linux file system is the file link. A link
is a reference to a file, so that you can let files be seen in multiple
locations of the file system. However, in Linux, a link can be treated as
the original file. A link can be executed, edited, and accessed without
having to do anything unusual. As far as other applications on the system
are concerned, a link is the original file. When you make edits to a file
through the link, you are editing the original. A link is not a copy.
There are two kinds of links: a hard link and a symbolic link.
A hard link can only reference files in the same file system. It
provides a reference to the file's physical index (also called an inode)
in the file's system. Hard links do not break when you move the original
file around because they all point to the file's physical data rather than
its location in the file structure. A hard-linked file does not require
the user to have access rights to the original file and does not show the
location of the original, so it has some security advantages. If you
delete a file that has been hard linked, the file remains until all
references have been deleted as well.
A symbolic link is a pointer to a file's location in the file system.
Symbolic links can span file systems and can even point to files in a
remote file system. A symbolic link shows the location of the original
file and requires a user to have access rights to the original file's
location in order to use the link. If the original file is deleted, all of
the symbolic links become broken. They will point to a non-existent
location in the file system.
Both types of links can be made with the command ln
<source> <target>. By default ln will make a hard link. The -s switch will make a symbolic link.
# Create a hard link from MyFile in the current
# directory to /YourDir/MyFile
ln MyFile /YourDir
# Create a symbolic (soft) link from MyFile in
# the current directory to /YourDir/YourFile
ln -s MyFile /YourDir/Yourfile
In the above examples, MyFile, /YourDir/MyFile, and /YourDir/Yourfile are all
treated as the same file.
Coming out of your shell
Learning to work from the console is a necessary skill for Linux
administration. There are tools to avoid the console, but you will always
be more limited by what you can do through a tool. Accessing a console is
easy, and accessing command documentation is easy too with the man and info commands.
Resources
- Check out the other parts in the Windows-to-Linux roadmap series (developerWorks, November 2003).
- Get started with the vi editor by following the tutorial "vi intro -- the cheat sheet method" (developerWorks, ).
- "Technical FAQ for Linux users" (developerWorks, July 2001) offers another perspective on making the change
from Windows to Linux.
- "What
good is a Linux client?" chronicles one man's experience in changing
his work environment over from Windows to Linux. The companion article, a
"Linux
glossary for Windows users" is also useful as a stand-alone reference.
- You can browse many man pages online at the
GNU Manuals Online page.
- The From
DOS/Windows to Linux HOWTO outlines some good quick-start information
for people with a DOS or Windows background.
- AllCommands.com is an unusual
site which helps to reference and cross-reference commands from various operating systems.
- The tutorial "LPI certification 101 exam prep, Part 1: Linux fundamentals" covers bash, standard Linux commands, and more.
- Learn more about shell scripting in the article series "Bash by
example" (developerWorks, ).
- Although written for AIX users, the System
User's Guide: Operating System and Devices - Shells reference and
book sections including AIX
Commands Reference - man Command cover a great deal of information
that also applies to Linux.
- For getting started with IBM software on Linux, there's no better resource than the Speed-start your Linux app page. You'll find installation tips and links to resources for DB2, Lotus Domino, WebSphere Application Server, WebSphere Studio, and more. You can also sign up to receive a Linux Software Evaluation Kit, containing trial software and training resources.
- Find more resources for Linux developers in the developerWorks Linux zone.
About the author  | |  | Chris Walden is an e-business Architect for IBM Developer Relations Technical Consulting in Austin, Texas, providing education, enablement, and consulting to IBM Business Partners. He is the official Linux fanatic on his hallway and does his best to spread the good news to all who will hear it. In addition to his architect duties, he manages the area's all-Linux infrastructure servers, which include file, print, and other application services in a mixed-platform user environment. Chris has ten years of experience in the computer industry ranging from field support to Web application development and consulting. |
Rate this page
|  |