Unix Commands Document
Unix Commands Document
What is Unix ?
The UNIX operating system is a set of programs that act as a link between the computer and the user. The computer programs that allocate the system resources and coordinate all the details of the computer's internals is called the operating system or kernel. Users communicate with the kernel through a program known as the shell. The shell is a command line interpreter; it translates commands entered by the user and converts them into a language that is understood by the kernel.
Unix was originally developed in 1969 by a group of AT&T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Douglas McIlroy, and Joe Ossanna. There are various Unix variants available in the market. Solaris Unix, AIX, UP Unix and BSD are few examples. Linux is also a flavour of Unix which is freely available. Several people can use a UNIX computer at the same time; hence UNIX is called a multiuser system. A user can also run multiple programs at the same time; hence UNIX is called multitasking.
Unix Architecture:
Here is a basic block diagram of a UNIX system:
The main concept that unites all versions of UNIX is the following four basics:
Kernel: The kernel is the heart of the operating system. It interacts with hardware and most of the tasks like memory management, tash scheduling and file management. Shell: The shell is the utility that processes your requests. When you type in a command at your terminal, the shell interprets the command and calls the program that you want. The shell uses standard syntax for all commands. C Shell, Bourne Shell and Korn Shell are most famous shells which are available with most of the Unix variants. Commands and Utilities: There are various command and utilities which you would use in your day to day activities. cp, mv, cat and grep etc. are few examples of commands and utilities. There are over 250 standard commands plus numerous others provided through 3rd party software. All the commands come along with various optional options. Files and Directories: All data in UNIX is organized into files. All files are organized into directories. These directories are organized into a tree-like structure called the filesystem.
System Bootup:
If you have a computer which has UNIX operating system installed on it, then you simply need to turn on its power to make it live. As soon as you turn on the power, system starts booting up and finally it prompts you to log into the system, which is an activity to log into the system and use it for your day to day activities.
UNIX Commands: Command cal [month #] year Description Prints a calendar of the specified year. e.g. cal 2010 If a month number is specified, prints only that month. e.g. cal 3 2010 (for March 2010) Concatenate (join together) specified files and direct the output to the standard output device - the screen. This command is commonly used to display the contents of one file on the screen. (It's simpler than getting in and out of an editor.) Print the current time and date. Lists who is logged into a machine. It provides information such as the user's login name and the time when the user logged on. Lists who is logged into a machine. Provides information such as the user's login name and the time when the user logged on. It also provides information about what the user is curently doing.
date who
sort
Sorts the input stream or the contents of files. To sort the contents of a file, use sort filename. Displays the number of lines, words and characters in a file. To display only the number of lines, you can use wc -l. Perform tests on a file to determine its type. Useful if you want to make sure a file is not an executable before you try to edit it. Compare two files to see if they are the same. Reports just the first difference unless you specify -l Displays the differences between file1 and file2. This lists the changes necessary to convert file1 to file2. Search down directories for a file. e.g. find ./ -name gold.cpp would search in the current directory and in all subdirectories for the file called gold.cpp Search for a string pattern in a file. There are several options. e.g. grep namespace *.cpp would search the current directory for the string "namespace" in all .cpp files and show the lines in each file where the string occurs. e.g. grep -n namespace *.cpp would perform the same search but also give the line numbers in which the string was found. Lists the processes that are running for a terminal. To see all the processes that are running for you. Kill the process specified. e.g. kill -9 1455 would perform a "sure kill" (option 9) on process id "1455". This is a handy command if you change your mind after sending a job to the printer and want to delete it from the queue. See the lpq command to see how you can query the print queue for process ids.
wc
file file
ps
Notes:
Some commands such as sort, cat, and wc will accept input from the keyboard. If you type these commands, without specifying an argument, your command prompt will not return until you press CTRL-d (which indicates an end of file on Unix)
Redirecting: getting input from files and sending output to files Redirect the output of a program to a file. You can also redirect the input of a program so that it reads a file instead of the keyboard. There are four symbols 1. Symbol: > Redirect standard output to a named file. May overwrite the file. $cal 9 2007 > file $cat file September 2007 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2. Symbol: >> Redirect standard output to a named file. Appends to the file. $ cal 9 2006 >> file2 file2: No such file or directory. $cal 9 2006 > file2 $ cat file2 September 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $cal 10 2006 >> file2 $cat file2 September 2006 S M Tu W Th F S
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 October 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 The >> would not create a file, returning an error instead. 3. Symbol: >! Redirect standard output to a named file. Always overwrites the file. eg: $cal 9 2007 >! file3 $cat file3 September 2007 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $cal 10 2007 >! file3 $cat file3 October 2007 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 See how the contents of file3 are completely overwritten by the second command. 4. Symbol: <
Redirect a named file to standard input. The < symbol is used less often than the other 3, but it is still useful. $cat OSlab This is our first OS lab Session. $./hello < OSlab Welcome to the world of C++ What is your name? This is our first OS lab Session. Pipelining: Sending the output of one program to the input of another Sometimes the output of one program is exactly what you want to use as input to another program. If that is the case you could do something like this: program1 > temp program2 < temp but Unix makes it much easier. You have the | symbol, called pipe. It connects the standard output of one program to the standard input of another like so: program1 | program2
Listing Files:
To list the files and directories stored in the current directory. Use the following command:
[amrood]$ls
[amrood]$ls bin ch07 ch07.bak docs hosts hw1 hw2 hw3 lib pub res.01 res.02 res.03 test_results users work
The command ls supports the -1 option which would help you to get more information about the listed files:
[amrood]$ls -l total 1962188 drwxrwxr-x 2 -rw-rw-r-- 1 drwxr-xr-x 2 drwxr-xr-x 2 -rw-r--r-- 1 drwxr-xr-x 8 drwxr-xr-x 2 -rwxr-xr-x 1 -rw-rw-r-- 1 -rw-rw-r-- 1 -rw-rw-r-- 1 drwxr-xr-x 11 [amrood]$ amrood amrood amrood root root root 200 root amrood amrood amrood amrood amrood amrood amrood root root root 300 root amrood amrood amrood amrood 4096 5341 4096 4096 276480 4096 4096 3192 20480 5654 166255 4096 Dec Dec Feb Dec Dec Nov Nov Nov Nov Aug Aug May 25 09:59 uml 25 08:38 uml.jpg 15 2006 univ 9 2007 urlspedia 9 2007 urlspedia.tar 25 2007 usr 25 2007 webthumb-1.01 25 2007 webthumb.php 25 2007 webthumb.tar 9 2007 yourfile.mid 9 2007 yourfile.swf 29 2007 zlib-1.2.3
Here is the information about all the listed columns: 1. 2. 3. 4. 5. 6. 7. First Column: represents file type and premission given on the file. Below is the description of all type of files. Second Column: represents the number of memory blocks taken by the file or directory. Third Column: represents owner of the file. This is the Unix user who created this file. Fourth Column: represents group of the owner. Every Unux user would have an associated group. Fifth Column: represents file size in bytes. Sixth Column: represents date and time when this file was created or modified last time. Seventh Column: represents file or directory name.
In the ls -l listing example, every file line began with a d, -, or l. These characters indicate the type of file that's listed. Prefix b c d Description Regular file, such as an ASCII text file, binary executable, or hard link. Block special file. Block input/output device file such as a physical hard drive. Character special file. Raw input/output device file such as a physical hard drive Directory file that contains a listing of other files and directories.
l p s
Symbolic link file. Links on any regular file. Named pipe. A mechanism for interprocess communications Socket used for interprocess communication.
Meta Characters:
Meta characters have special meaning in Unix. For example * and ? are metacharacters. We use* to match 0 or more characters, a question mark ? matches with single character. For Example:
[amrood]$ls ch*.doc
Displays all the files whose name start with ch and ends with .doc:
ch03-2.doc ch06-2.doc
Here * works as meta character which matches with any character. If you want to display all the files ending with just .doc then you can use following command:
[amrood]$ls *.doc
Hidden Files:
An invisible file is one whose first character is the dot or period character (.). UNIX programs (including the shell) use most of these files to store configuration information. Some common examples of hidden files include the files:
.profile: the Bourne shell ( sh) initialization script .kshrc: the Korn shell ( ksh) initialization script .cshrc: the C shell ( csh) initialization script .rhosts: the remote shell configuration file
[amrood]$ ls -a . .. .emacs .exrc .kshrc [amrood]$ .profile .rhosts bin ch07 ch07.bak docs hosts hw1 hw2 hw3 lib pub res.01 res.02 res.03 test_results users work
Single dot .: This represents current directory. Double dot ..: This represents parent directory.
Note: I have put stars (*) just to show you the location where you would need to enter the current and new passwords otherwise at your system, it would not show you any character when you would type.
Creating Files:
You can use vi editor to create ordinary files on any Unix system. You simply need to give following command:
[amrood]$ vi filename
Above command would open a file with the given filename. You would need to press key i to come into edit mode. Once you are in edit mode you can start writing your content in the file as below:
This is unix file....I created it for the first time..... I'm going to save this content in this file.
Once you are done, do the following steps:
Press key esc to come out of edit mode. Press two keys Shift + ZZ together to come out of the file completely.
Now you would have a file created with filemame in the current directory.
Editing Files:
You can edit an existing file using vi editor. We would cover this in detail in a separate tutorial. But in short, you can open existing file as follows:
[amrood]$ vi filename
Once file is opened, you can come in edit mode by pressing key i and then you can edit file as you like. If you want to move here and there inside a file then first you need to come out of edit mode by pressing key esc and then you can use following keys to move inside a file:
l key to move to the right side. h key to move to the left side. k key to move up side in the file. j key to move down side in the file.
So using above keys you can position your cursor where ever you want to edit. Once you are positioned then you can use i key to come in edit mode. Edit the file, once you are done pressesc and finally two keys Shift + ZZ together to come out of the file completely.
[amrood]$ cat filename This is unix file....I created it for the first time..... I'm going to save this content in this file. [amrood]$
You can display line numbers by using -b option along with cat command as follows:
[amrood]$ cat filename -b 1 This is unix file....I created it for the first time..... 2 I'm going to save this content in this file. [amrood]$
You can give multiple files at a time to get the information about those file. Here is simple syntax:
Copying Files:
To make a copy of a file use the cp command. The basic syntax of the command is:
Now you would find one more file copyfile in your current directory. This file would be exactly same as original file filename.
Renaming Files:
To change the name of a file use the mv command. Its basic syntax is:
Deleting Files:
To delete an existing file use the rm command. Its basic syntax is:
[amrood]$ rm filename
Caution: It may be dangerous to delete a file because it may contain useful information. So be careful while using this command. It is recommended to use -i option along with rm command. Following is the example which would completely remove existing file filename:
Home Directory:
The directory in which you find yourself when you first login is called your home directory. You will be doing much of your work in your home directory and subdirectories that you'll be creating to organize your files. You can go in your home directory anytime using the following command:
[amrood]$cd ~ [amrood]$
Here ~ indicates home directory. If you want to go in any other user's home directory then use the following command:
[amrood]$cd [amrood]$
Absolute/Relative Pathnames:
Directories are arranged in a hierarchy with root (/) at the top. The position of any file within the hierarchy is described by its pathname. Elements of a pathname are separated by a /. A pathname is absolute if it is described in relation to root, so absolute pathnames always begin with a /. These are some example of absolute filenames.
chem/notes personal/res
To determine where you are within the filesystem hierarchy at any time, enter the commandpwd to print the current working directory:
[amrood]$pwd /user0/home/amrood
[amrood]$
Listing Directories:
To list the files in a directory you can use the following syntax:
[amrood]$ls dirname
Following is the example to list all the files contained in /usr/local directory:
[amrood]$ls /usr/local X11 ace atalk bin doc etc gimp include info jikes lib man sbin share ami
Creating Directories:
Directories are created by the following command:
[amrood]$mkdir dirname
Here, directory is the absolute or relative pathname of the directory you want to create. For example, the command:
[amrood]$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory [amrood]$
In such cases, you can specify the -p option to the mkdir command. It creates all the necessary directories for you. For example:
Removing Directories:
Directories can be deleted using the rmdir command as follows:
Changing Directories:
You can use the cd command to do more than change to a home directory: You can use it to change to any directory by specifying a valid absolute or relative path. The syntax is as follows:
[amrood]$cd /usr/local/bin
[amrood]$
Changes to the directory /usr/local/bin. From this directory you can cd to the directory /usr/home/amrood using the following relative path:
Renaming Directories:
The mv (move) command can also be used to rename a directory. The syntax is as follows:
Owner permissions: The owner's permissions determine what actions the owner of the file can perform on the file. Group permissions: The group's permissions determine what actions a user, who is a member of the group that a file belongs to, can perform on the file. Other (world) permissions: The permissions for others indicate what action all other users can perform on the file.
[amrood]$ls -l /home/amrood -rwxr-xr-- 1 amrood users 1024 drwxr-xr--- 1 amrood users 1024
myfile mydir
Here first column represents different access mode ie. permission associated with a file or directory. The permissions are broken into groups of threes, and each position in the group denotes a specific permission, in this order: read (r), write (w), execute (x):
The first three characters (2-4) represent the permissions for the file's owner. For example -rwxrxr-- represents that onwer has read (r), write (w) and execute (x) permission. The second group of three characters (5-7) consists of the permissions for the group to which the file belongs. For example -rwxr-xr-- represents that group has read (r) and execute (x) permission but no write permission. The last group of three characters (8-10) represents the permissions for everyone else. For example -rwxr-xr-- represents that other world has read (r) only permission.
Read:
Grants the capability to read ie. view the contents of the file.
Write:
Grants the capability to modify, or remove the content of the file.
Execute:
User with execute permissions can run a file as a program.
Read:
Access to a directory means that the user can read the contents. The user can look at the filenames inside the directory.
Write:
Access means that the user can add or delete files to the contents of the directory.
Execute:
Executing a directory doesn't really make a lot of sense so think of this as a traverse permission. A user must have execute access to the bin directory in order to execute ls or cd command.
Changing Permissions:
To change file or directory permissions, you use the chmod (change mode) command. There are two ways to use chmod: symbolic mode and absolute mode.
Here's an example using testfile. Running ls -1 on testfile shows that the file's permissions are as follows:
Nov 2 00:10
testfile
Then each example chmod command from the preceding table is run on testfile, followed by ls -l so you can see the permission changes:
[amrood]$chmod o+wx testfile [amrood]$ls -l testfile -rwxrwxrwx 1 amrood users 1024 [amrood]$chmod u-x testfile [amrood]$ls -l testfile -rw-rwxrwx 1 amrood users 1024 [amrood]$chmod g=r-x testfile [amrood]$ls -l testfile -rw-r-xrwx 1 amrood users 1024
[amrood]$chmod o+wx,u-x,g=r-x testfile [amrood]$ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10
testfile
Here's an example using testfile. Running ls -1 on testfile shows that the file's permissions are as follows:
Nov 2 00:10
testfile
Then each example chmod command from the preceding table is run on testfile, followed by ls -l so you can see the permission changes:
[amrood]$ chmod 755 testfile [amrood]$ls -l testfile -rwxr-xr-x 1 amrood users 1024 [amrood]$chmod 743 testfile [amrood]$ls -l testfile -rwxr---wx 1 amrood users 1024 [amrood]$chmod 043 testfile [amrood]$ls -l testfile ----r---wx 1 amrood users 1024
[amrood]$ls -l | grep "Aug" -rw-rw-rw1 john doc -rw-rw-rw1 john doc -rw-rw-r-1 john doc -rw-rw-r-1 carol doc [amrood]$
There are various options which you can use along with grep command: Option -v -n -l -c -i Description Print all lines that do not match pattern. Print the matched line and its line number. Print only the names of files with matching lines (letter "l") Print only the count of matching lines. Match either upper- or lowercase.
Next, let's use a regular expression that tells grep to find lines with "carol", followed by zero or more other characters abbreviated in a regular expression as ".*"), then followed by "Aug". Here we are using -i option to have case insensitive search:
[amrood]$ls -l | grep -i "carol.*aug" -rw-rw-r-1 carol doc 1605 Aug 23 07:35 macros [amrood]$
[amrood]$sort food Afghani Cuisine Bangkok Wok Big Apple Deli Isle of Java Mandalay Sushi and Sashimi Sweet Tooth Tio Pepe's Peppers [amrood]$
The sort command arranges lines of text alphabetically by default. There are many options that control the sorting: Option -n -r -f +x Description Sort numerically (example: 10 will sort after 2), ignore blanks and tabs. Reverse the order of sort. Sort upper- and lowercase together. Ignore first x fields when sorting.
More than two commands may be linked up into a pipe. Taking a previous pipe example usinggrep, we can further sort the files modified in August by order of size. The following pipe consists of the commands ls, grep, and sort:
[amrood]$ls -rw-rw-r--rw-rw-r--rw-rw-rw-rw-rw-rw[amrood]$
-l | grep "Aug" | sort +4n 1 carol doc 1605 Aug 23 1 john doc 2488 Aug 15 1 john doc 8515 Aug 6 1 john doc 11008 Aug 6
This pipe sorts all files in your directory modified in August by order of size, and prints them to the terminal screen. The sort option +4n skips four fields (fields are separated by blanks) then sorts the lines in numeric order.
[amrood]$ls -l | grep "Aug" | sort +4n | -rw-rw-r-- 1 carol doc 1605 Aug 23 -rw-rw-r-- 1 john doc 2488 Aug 15 -rw-rw-rw- 1 john doc 8515 Aug 6 -rw-rw-r-- 1 john doc 14827 Aug 9 . . . -rw-rw-rw- 1 john doc 16867 Aug 6 --More--(74%)
15:56 ch05
The screen will fill up with one screenful of text consisting of lines sorted by order of file size. At the bottom of the screen is the more prompt where you can type a command to move through the sorted text. When you're done with this screen, you can use any of the commands listed in the discussion of the more program.