Simple Unix/Linux commands tutorial
Simple Unix navigation for those new to Unix like systems.
Unix systems have a large amount of documentation that is installed with the base system. I would encourage you to read these manuals frequently and become an expert with the commands that you use in your daily work. Knowing a handfull of commands and all of their options can make you a virtual power user. There is so much to know about each of these commands, and to list them in their entirty would be rediculous here on AO. So I will show you some basic navigation commands and how to read the man pages for yourself for more detail.
1. The man command.
On the command line we can display the manual for any command that we want to know more about by simply entering `man whatever-you-want-to-know'.
$ man ls
# this would display the manual for the ls command.
I would like to just mention the man -k option for the man command. It will come in handy in your journey through this new OS.
$ man -k print
example output: (trimmed down for some degree of brevity in this tut)
grep, egrep, fgrep (1) - print lines matching a pattern
grolbp (1) - groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
hostid (1) - print the numeric identifier for the current host
hpdj (1) - Ghostscript device driver for printers understanding PCL 3+
hpwd (1) - print the full path to the current HFS working directory
infocmp (1m) - compare or print out terminfo descriptions
innstat (8) - print snapshot of INN system
isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit (3) - character classification routines
iswprint (3) - test for printing wide character
ldd (1) - print shared library dependencies
logname (1) - print user's login name
lp (4) - line printer devices
lpc (8) - line printer control program
lpd (8) - line printer spooler daemon
lpr (1) - off line print
lprm (1) - remove jobs from the line printer spooling queue
lptest (1) - generate lineprinter ripple pattern
mailq (1) - print the mail queue
mcprint (3x) - ship binary data to printer
menu_requestname (3x) - handle printable menu request names
The output of `man-k print' is this example gives us a listing of all commands that have the word print in their title. This useful if for example you did not know the command to remove jobs from the print queue, you could skimm through the output and notice that `lprm' does that function. You could then do a `man lprm' to learn how to use the lprm command. Here we see that the output of `man-k' can be long if we just give it a single word to search for. So... that brings me to our first command that all new users shoulld use liberally.
2.`more' and `less'
more Dispalys the contetnts of whatever was entered at the command line one screenfull at a time. Pressing the <ENTER> key will scroll one line down at a time, and pressing the <SPACE> key will scroll down one screenfull at a time. The [b] key skips backwards one screen at a time, and the <q> key quits and returns you to a command prompt. See `man more' for a more complete list of options to use with the more command.
$ man -k print | more
#displays the output of `man -k print' one screen at a time.
less Displays the contents of whatever was entered at the command line one screenfull at a time in the same manner as the more command, and uses the same simple navigation keys to move through the screen and quit. The less command differs from more in advanced functionality. See man less for a more complete list of options to use with the less command.
$ man -k print | less
#displays the output of `man -k print` one screen at a time.
#note : the | is called a pipe, you can make that symbol by pressing the <SHIFT + backslash> key combo. On most displays it looks like a single vertical line, but on your keyboard it will probably look like two vertical dashes one over the other.
3. The `ls' command
The ls command is similar to the `dir' command that you used in DOS.
#displays the contents of your current directory.
$ ls -l
#displays the contents of your directory in long format.
$ ls -a
#displays the contents of your directory including hidden files.
$ ls -F
#displays the contents of your directory, placing an indicator behind the name to tell you what the object is. An * is an an executable, a / is a directory, and no indicator is a text file.
$ ls -t
#display the conents of your directory in order from newest to oldest.
$ ls -alFt
#would display the contents of our current directory with all of the afore mentioned option in effect.
See `man ls' for a more detailed description of the ls command.
4. The `cd' command.
This one that should be familiar to any of you who have used DOS much. The `cd' command simply changes directory to whatever is specified after it. In Unix like systems if we issue the `cd' command all by itself with nothing after it, it changes us to our home directory.
Another thing that is handy to know is about . and .. , . represents our current directory, and .. represents our parent directory. Don't worry if you are confused by this, I will show you an example soon.
Lastly before some examples, the ~ symbol represents our home directory. So.. if I am logged into the system as UberC0der, and my home directory is /home/UberC0der, placing a ~ in front of the rest of the path is the same as typing /home/UberC0der. Here again, i will show an example.
# changes me to my home directory, in this case /home/UberC0der.
$ cd ..
#would change my directory to /home, this is because /home is the parent directory of /home/UberC0der.
Now for example sake, let's say I am in /usr/local/games and I want to go to /home/UberC0der/games with the shortest number of keystrokes. I am lazy, so I am always looking for a shortcut.
$ cd ~/games
#because ~ represents /home/UberC0der all I have to do is type ~/games which would be the same thing as /home/UberC0der/games.
., .., and ~ are part of what is known as a relative path in the Unix world. The reason I mention them is that they are very handy and quick when working on the command line. Once again, I am a very lazy boy and I work mostly on the command line.
Let's say my current directory is /usr/local/games/quake3 and I want to change to /usr/local/games. I could do:
$ cd /usr/local/games
-- or I could take a `relative path' to /usr/local/games --
$ cd ..
# I was in /usr/local/games/quake3 and now I am in /usr/local/games.
Let's make it more interesting. I am in /usr/local/games/quake3/baseq3, and I want to go to /usr/local/games/quake2/baseq2 in the shortest number of keystrokes.
$ cd /usr/local/games/quake2/baseq2
# the long way
-- or --
$ cd ../../quake2/baseq2
# taking a relative path
5. The `mkdir' command
The mkdir command creates a directory wherever you want to put it. Part of being a mutliuser system and the basic Unix security model is that you can only do this in parent directories where you have write premissions. I will cover Unix files permissions in another tut, but for now we are going to use our own home directory for the example.
Ok, I am in my home directory /home/UberC0der. I want to create a directory called AnitOnline where I will store all of my favorite tut's that have been contributed by members. So using the mkdir command...
$ mkdir AnitOnline
Now I want to make a directory called Tutorials under AntiOnline.
$ mkdir AntiOnline/Tutorials
Now I want to make a directory under AntiOnline called Posts.
$ mkdir AntiOnline/Posts
For example and a bit of humor lets make a directory under Posts called Flames where I will store all of my favorite poetry by Negative. :D
$ mkdir AntiOnline/Posts/Flames
#note 1: I only have to put a / at the beginning if I am specifying the path from the root ( / ) directory. If no path is specified it is assumed that I want to make this directory under my current directory. So starting from / the full path of AntiOnline would be /home/UberC0der/AntiOnline
#note 2: I name Directories that I made on the system with a Captial letter at the beginnig of the directory name. The standard Unix converntion is that everything is lower case. This just helps me recognize a directory that I created if I were ever in doubt.
6. The `rm' command
*****WARNING***** Deleting files in Unix systems is PERMANENT. There is no `Recycle Bin' or any such feature. If you delete a file form a Unix system it is GONE. There are ways to recover delted files from a Unix file system, but for newbies you may as well consider the act a permanent thing and get used to the idea of deciding for sure whether you really want to delete that file.
Okay, with that out of the way lets talk about the `rm' command. Once again, if you were a DOS user `rm' is much like `DEL' with some exceptions. It is a very basic deleting utility that has some very powerful options. For more details see `man rm'.
As with many other utilities in Unix systems, the built in security will not allow you to use this command on any files that are not owned by you.
To remove a file we would do:
$ rm filename
To remove a directory and all of it's contents we would do:
$ rm -r directory-name
#the -r option means recursive.
I recommend that you use this command sparingly.
7. The `cp' command
The `cp' command is the copy command in Unix systems. It has some pretty nifty functionality. For more information see `man cp'.
To copy a file and name it something else we would do:
$ cp file1 file2
# this makes an exact copy of one file and names it another name.
To copy the contents of a directory to another location we would do:
# In this example I have made a directory called /home/UberC0der/Good-Posts for example, I already have some posts in that directory and I want to copy the contents of /home/UberC0der/AntiOnline/Posts to this directory.
$ cp -r AntiOnline/Posts Good-Posts
#the -r option means recursive
8. The `mv' command
The `mv' command can do one of two things, it can move a file to a new location, or it can rename a file to another name. See `man mv' for more details on using the mv command.
$ mv AnitOnline/Posts/new-post.txt AntiOnline/Posts/good-post.txt
# renames the file new-post.txt under the directory AntiOnline/Posts to it's new name good-past.txt in the same directory.
$ mv AntiOnline/Posts/good-post.txt ~/Good-Posts/good-post.txt
# moves the file good-post.txt under the AnitOnline/Posts directory to it's new location ~/Good-Posts. Remember that I use the ~ to mean the same thing as /home/UberC0der.
This is a lot to take in and play around with, so I will end this post here and will continue it with some other common Unix commands in a future tut, in addition to a tut on Unix file permissions.
Merry Christmas everyone