Introduction to Unix

Index


Related Resources


Operating Systems

An Operating System (e.g., Windows 95, Windows 98 etc. from Microsoft; Unix systems like Linux, Irix, and Solaris) organizes your files and talks to the hardware. This means the OS translates from the very crude organization system that really exists on your hard drive to the hierarchical system that it presents to you.

Essentially, it works like this: The Hard Drive has an area set aside that holds a table of addresses or "pointers" to blocks of information on the rest of the HD. The table's content and organization, the number and size of blocks on the HD etc. are dependent upon the particular OS. Although Unix systems are not exactly the same as each other, they are very similar to one another; just as Windows 95 and Windows 98 are very similar to one another.


Files (A Comparison of Windows and Unix)

Under Microsoft Windows, file names consist of two parts: a main part and an extension, separated by a special character, the dot (e.g., bird.jpg, fred.xls). The extension tells Windows which program to use to open the file (e.g., *.xls files are opened by MS Excel). For some popular extensions (*.jpg, *.gif), when you install new programs, they will "steal" the association by registering themselves as the default application for opening that type of file. To view or modify the file associations on Microsoft Windows, open an explorer window, and choose View-->Folder options, then click the tab that says "file types").

Under Unix everything is a file (directories are files too). Unix systems do not use file extensions to associate files with programs. In fact, you can use multiple dots in the names of your files (e.g., fred.tar.gz) or directories (e.g., rc2.d). The only time the dot has special meaning under Unix is when it begins a file name: all hidden files begin with a "." (e.g., .cshrc).

Windows retains case information in file and directory names, but it does not use case to distinguish between files (If you have a file named Fred.txt, and you create a new file in the same directory called FrEd.TXT, Windows will overwrite the first one with the new one)

Under Unix, upper and lower case are functionally different (You could have the following files in one directory, and they would be treated as distinct by the operating system: fred.txt, Fred.txt, FrEd.TXT etc.).

In the rest of this introduction I adhere to 3 simple conventions for teaching you commands:

  • > = shell prompt (You don't type this, it simply stands in for whatever the system displays in the command window when it is ready for you to type something.)
  • The rest of the bolded characters are what you actually type.
  • An explanation in () may follow, but it will not be bolded and you should not type it.

To display a list of files at the shell prompt:

>ls (Think of this as standing for "list")

To display a list including hidden files (those that begin with a dot):

>ls -a (Think of this as standing for "List all")

To display maximal information about the file types and content:

>file *

Wild Cards: If you want a command to work on multiple files, then you need to know about wildcards (metacharacters). You may be familiar with the *. The * matchs zero or more characters:

Thus *.txt = all files in this directory that end with the characters .txt

P10201*=all files in this directory that begin with P10201 followed either by nothing or by any other number of characters.

Other metacharacters are:

? matches one and only one character (e.g. P1??01 would match any file that started P1 followed by any two charcters followed by 01.)

[abc] matches any one character in the bracket. (e.g. joe[abc] would match joea, joeb, joec, but not joed or joeab; joe[abc]? would match joeab)

[a-d] matches any one character in the range abcd. Note that the "range" is defined by the sequence of characters in the ascii character chart. All lower case letters are separate from the upper case letters in the ascii chart.

Other wildcards exist, but are not so useful as these.


Unix File System

In order to move around the file system, you should think of it as an inverted tree:


The tree above displays several selected directories and files on merlin. At the highest level is root "/". Below root, in green, are several important directories:

/data3 is the directory corresponding to the raid tower on merlin. It is permanantly mounted on merlin. It can be automounted from the other machines as /merlin/data3/. However, it is important to recognize that if you automount /merlin/data3/ from another machine, you are still technically on that machine, not merlin.

/buddy is a special directory. It is a mountpoint for the automounted raid tower /data which is permanantly mounted on buddy (hence the directory name). If you are logged on to merlin and you automount /buddy/data/, you are still on merlin NOT buddy. Automounting a raid tower or hard drive does not change which machine you are on, it just gives you access to that storage area. If you want to be on a different machine, you must login to the machine, either by sitting at the terminal and logging in or by using ssh to contact and login to the other machine. To automount /data from merlin, simply type:

>cd /buddy/data (Think of "cd" as standing for "change directory")

All unix systems have /etc, a special directory for system administrators. Understanding some of what it contains will help you understand a lot about how unix works. The three files listed in red in the tree diagram are particularly interesting:

"passwd" is a file containing all the "user" (programs can also be users) names and ID numbers. User ID numbers identify each user to the system and are used to control access to files and directories. Each user has an ID number, a group ID number, a home directory and a default shell specified. Nowadays, passwords are actually stored in a different file called the "shadow" file.

Sample line: fred:x:60111:10:Fred Faker:/home/fred:/bin/tcsh

"group" is a file that contains the names and ids of all groups on the system. Again, some groups are for programs, not people, and the system identifies groups by their ID numbers, not their names. Most users will belong to the group "user". But root (superuser) belongs to the group "sys". Some users may belong to special groups that correspond to individual projects, (e.g., "catprod" is such a group on our core machines). Some users may belong to more than one group. Like the user ID, group IDs are used to control access to files and directories, either by granting special access to group members, or by denying access to those who are not group members.

Sample line: user::10:

"hosts" is a file that lists the ip addresses of a select group of machines and the names that the system is to treat as equivalent to those ip addresses. By including short names for machines that one frequently needs to contact, processes like telnet, ftp, ssh and scp can be made easier (i.e., one can say ssh merlin, rather than ssh merlin.psych.arizona.edu or ssh 128.196.98.209 from any machine that lists merlin as equivalent to 128.196.98.209). Note that on MSWindows there is a similar file, hosts, somewhere on the C drive that allows you to do the same thing. If the machine in question has a DNS entry somewhere on the internet, that serves a similar purpose and you may not need the host file. The host file does give you more control though.

Sample line: 128.196.98.209 merlin merlin.psych.arizona.edu

/home is the directory on most unix machines that contains the home directories of individual users. From anywhere on the system, you can go home by typing the command to change directory to home:

>cd ~ (~= twiddle)

The Path

You can find out where you are in the system by typing the command to print working directory:

>pwd

Every directory contains two hidden directories by default:

"." and ".."

A single dot refers to the directory itself "here". Two dots refer to the parent directory in the tree (e.g., in our tree above / is the parent of the home directory; home is the parent of the lryan directory; / is the grandparent of lryan, etc.)

To go up one directory in the tree (i.e., to go to the parent directory):

>cd ..

To copy a file from /home/joe/public_html/HOWTO to the current working directory (i.e., "here", wherever you are when you type the command):

>cp /home/joe/public_html/HOWTO .

To navigate through the tree, you specify a "path".

An absolute path starts with / because it specifies the instructions for getting to the target, starting at the top of the tree and specifying every intermediate directory from root "/" to the target. Intermediate directories are separated by "/" in unix. Such paths can be quite long, but they can get you to the destination from anywhere in the system:

>cd /home/joe/public_html/HOWTO/

This tells the system: Go to the root directory. From root, find your child "home". Go there. From "home", you will find that one of your children is "joe". Go there. From "joe", you will find that one of your children is "public_html". Go there. From "public_html", you will find that one of your children is "HOWTO". Go there and stop.

A relative path does not start with "/". Relative paths have the advantage of being short, but the disadvantage of being dependent on the current starting place:

If I am in /home/joe/ and I want to go to HOWTO, I can type:

>cd public_html/HOWTO/

From /home/joe, I can also specify a relative path to a sibling directory or any child of that sibling:

>cd ../mary/public_html/

If I want to, I can use a relative path to move up the tree to the top

>cd ../../ (This would take me up two levels in the tree)

>whereis ls (This asks the system to tell me the absolute path to the ls command.) >which ls (This asks the system to tell me which version of the ls command I am using, often, this simply means the system will tell me the absolute path to the ls command.)

Some paths are specified in your shell configuration file (like the paths to basic commands). To find out which paths are specified there, type:

>echo $PATH

The paths specified in the shell configuration file can be altered. Read more about the shell below.

The Shell

Experienced unix users become attached to particular shells. A shell is a command window under unix. Machines may default to providing you with a bourne shell, bash shell (bourne-again shell), csh (c-shell), tcsh (t-shell), or any one of several other shells. Most of us use the tcsh because it has command completion and history features that are extrememly handy. Each user's shell customization file is a hidden file in their home directory.

>ls -la (in your home directory this will show you all hidden files, including your .cshrc; Think of it as standing for "list -long -all").

The tcsh uses the .cshrc as its customization file, unless a .tcshrc is available in the same directory. The .cshrc contains information about the paths to look for commands, the way the prompt looks, shortcuts called "aliases", and environment variables. The .cshrc is a text file that you can examine or edit. Similar "rc" files exist for the other shells: .bashrc for the bash shell, etc. Sometimes, there is an additional profile for the shell that sets up default paths and hides in the /etc directory. You might wish to examine the aliases, for example, and add new ones.

After you make changes to your .cshrc, they don't apply until you source the file

>source .cshrc (typed from your home directory, this will refresh the shell and apply your new changes. Keep in mind that your changes will apply only in the shell window you actually typed in or in any new windows you open. If you have other windows open at the time you source the .cshrc, they will not be refreshed.).

If you login to a machine and want to know which shell you are in

>echo $SHELL

To verify that tcsh exists on the machine

>which tcsh

If you want to start a tcsh (providing that it exists on the machine)

>tcsh

Your system administrator can alter the passwd file for you to make tcsh (or any other shell on the machine) your default shell (if you like it and it is not your default).


Ownership and Permissions in Unix

Ownership

Under Unix, every file is owned by a user and a group. To see the user and group to whom a file belongs:

>ls -l

Below is a sample result of ls -l. "silly" belongs to the user "joe" and the group "user".

-rw-r--r-- 1 joe user 0 Apr 7 02:37 silly

The purpose of user and group ownership is to control permissions on files and directories: whether you can read , write (change, delete, rename), or execute (run a program).

Superuser: Every system has one user called "superuser" or "root" who can do anything. This user can become any other user, read and alter any files and directories, change passwords, add and remove users etc.

To change ownership of a file or directory if you are not superuser, you must be the current owner. So, for "silly", joe can give the file to another user, thus:

>chown lryan silly

To change the group that owns "silly" from "user" to "catprod":

>chgrp catprod silly

Who am I? You may sometimes operate as different users at the same time (e.g., You might want to be yourself in one window and ryanlab in another window).

>su joe (this switches you to being joe...you must know the ryanlab password)

>exit (if you switched to being joe, and now you want to go back to being yourself)

>whoami (tells you who you are at the moment)

Groups: You may belong to more than one group. If this is true, there will be a default group you belong to when you login, and one or more secondary groups.

>id (Tells you which groups you belong to)

>id -a (Tells you what group you are in at the moment)

>newgrp catprod (changes your group from the current group to "catprod" if you belong to that group)

Permissions

These appear as a sequence of 10 characters: -rw-r--r--.

The first character tells you what kind of file it is (e.g., - = file, d=directory, l=link).
The next 3 characters are the ordered read, write and execute permissions for the user who owns the file:
read permission ( - =no, r=yes, read permission),
write permission (- =no, w=yes,write permission),
execute permission (- =no, x=yes, execute permission);
Next, the 3 ordered permissions for the group,
Finally, the 3 ordered permissions for others, (everyone who is not that user or a member of that group).
-rw-r--r-- 1 joe user 0 Apr 7 02:37 silly

In the above example, the first character indicates that "silly" is the default "-" (a basic file, not a link, directory or something else).
joe can read and write to "silly", but does not have permission to execute silly.
Members of the group "user" can read "silly", but do not have permission to write to or execute it.
Others can read "silly", but cannot write to or execute silly.
Directory permissions have interesting (and not immediately obvious) consequences:

You need read permissions on a directory to list its contents.
You need write permissions on a directory to create, copy or remove files and directories in it.
You need execute permission on a directory to cd to it.
Changing permissions: chmod (Change Mode?) is used to change permissions. This can be done in many ways, but here is a straightforward one. Remember that:

Permissions are r (read), w (write), and x (execute).
Permissions can be added (+) or taken away (-).
Permissions apply to u (user), g (group), and o (other).
Examples:

>chmod u+x silly (Adds execute permissions to the file "silly" for the user, "joe" in the above example)

>chmod go-r silly (Removes group and other read permissions from the file "silly")

>chmod -R g+w Stupid (Adds group write permissions recursively to a directory "Stupid" and all files and subdirectories in it.)

Trouble with Permissions:

If you are encountering permissions problems as a result of sharing and transferring information. Consider the following: If you are both in the same group (e.g., "users") then you want to make sure that the owner and the group have write permissions. Use umask in your .cshrc to change the default permissions for everything you create:

e.g., umask 000
(This line in your .cshrc will make sure you create the most open possible permissions for user group and other for everything you create at a regular shell prompt)

umask 002
(This line in your .cshrc will make sure you create the most open possible permissions for owner and group for everything you create at a regular shell prompt)

Summary of umask permissions (Note they are exactly opposite to chmod permissions):

0 files rw-; dir rwx
1 files rw-; dir rw-
2 files r--; dir r-x
3 files r--; dir r--
4 files -w-; dir -wx
5 files -w-; dir -w-
6 files ---; dir --x
7 files and dirs --- no permissions

Transferring Files:

When you ftp files, the master ftp configuration file determines the permissions that those files will have. To set the permissions yourself, use a version of the umask command:

ftp>site umask 000

Will give everyone permission to do anything with the files and directories on the remote machine. If you enter different numarical values after the umask command, the results will differ in accordance with the umask summary above. For example, you might wish to use:

ftp>site umask 002

When you scp files, scp uses its own master set of default permissions to set your permissions on the destination machine. The ownership of files and directories transferred with scp is determined by who you are logged in as on the destination machine:

Example 1:
Permissions and ownership of original file:
-rw-rw-r-- 1 mary user 139504 Oct 11 18:53 1727.5.1.9.app

scp command:
merlin 22% scp 1727.5.1.9.app tommy:/home/joe/

Permissions and ownership of resulting file:
-rw-r--r-- 1 joe users 139504 Oct 11 12:46 1727.5.1.9.app

If you wish to have different permissions on the destination machine, you can preserve the ugo permissions from the source machine by adding -p to your scp command:

Example 2:
Permissions and ownership of original file:
-rw-rw-r-- 1 mary user 139504 Oct 11 18:53 1727.5.1.9.app

scp command:
scp -p 1727.5.1.9.app tommy:/home/joe/

Permissions and ownership of resulting file:
-rw-rw-r-- 1 joe users 139504 Oct 11 09:53 1727.5.1.9.app


Copy, Move and Remove Files and Directories

Files

>cp silly funny (Copy the file "silly" to the file "funny", resulting in two copies of the file with different names)

>cp silly /home/joe/public_html/ (Copy the file "silly" to the directory /home/joe/public_html/, resulting in a copy in the original location and in the specified directory, both named "silly")

>cp silly /home/joe/public_html/crazy (Copy the file "silly" to the directory /home/joe/public_html/ and name it "crazy", resulting in a copy in the original location named "silly"and a copy in the specified directory, named "crazy")

>mv silly funny (Move the file "silly" to the file "funny", resulting in only one file, "funny". Note that mv is functioing like some sort of rename command in this case. It is ALWAYS more dangerous to move something under unix than it is to copy it, because there is no undo function in the shell.)

>mv silly /home/joe/public_html/ (Move the file "silly" to the specified directory)

>rm silly (Remove the file "silly")

>rm *.MR (Remove all files in the current directory that end with .MR)

Directories

>mkdir Stupid (Make a directory in the current location named "Stupid")

>rmdir Stupid (Remove the empty directory "Stupid" from the current location. This only works if the directory is empty. Remember that hidden files in "Stupid" could prevent you from removing "Stupid")

>rm -r Stupid (Remove the directory "Stupid" and all of its contents recursively. rm -r is a VERY dangerous command. Most systems will prevent this command from applying to the hidden directory .. since this would start deleting files from the parent directory of "Stupid"...and then the grandparent of "Stupid" etc. etc ad infinitum. Systems are less likely to protect you from the consequences of removing a linked file. A linked file is like a shortcut to a file somewhere else in the system. Recursive commands can thus jump from the current directory to somewhere else via a linked file. It is always better to take a long time and check carefully what you are deleting, rather than going for the quick option. Your home area and the various system areas (bin, etc, var ...) might well have linked files. Your data directories on the Raid towers usually won't.

>rm -rf Stupid (Like the above command, but the "f" forces the removal without asking you about each file)

>cp -R Stupid Nuts (Copy the directory "Stupid" and all of its contents to the directory "Nuts", resulting in two complete copies of the directory and its contents.)

>mv Stupid Nuts (Move the directory"Stupid" to the directory "Nuts". This is like renaming the directory if Nuts does not already exist. You end up with one directory called "Nuts" which contains all the content of the original "Stupid" directory.

However, if Nuts does exist, then Stupid (and all of its contents) are moved into Nuts.


Archiving and Zipping

Because the gzip utility is intended to be used for files, if you wish to zip up a directory, you must first archive (tar) it to turn it into a file. If you want to zip up specific files in a bunch of directories and subdirectories, click here learn more about the find command:

>tar cvf NewPackages.tar Packages (Tar the directory "Packages" to create the file "NewPackages.tar"; c=create, v=verbose, f=file)

>gzip NewPackages.tar (Zip up NewPackages.tar to reduce its size. This will create the file NewPackages.tar.gz)

>gzip -r temp (Zip up all files under temp, recursively looking through subdirectories for files to zip).

Now if you want to unzip and untar Packages:

>gunzip NewPackages.tar.gz (This unzips "NewPackages.tar.gz" and leaves you with the file "NewPackages.tar" instead.

>tar xvf NewPackages.tar (This untars "NewPackages.tar" and creates the directory "Packages" which contains all the original files and subdirectories. It also leaves the original "NewPackages.tar", so now you have both. x=extract, v=verbose, f=file)

>gzip bird.tiff (gzip a file)

>gunzip bird.tiff.gz (unzip a zipped up file)

Sometimes there is a problem opening up a tarred gzipped file. You can start gunzip and immediately pipe the results into tar to get out as much as possible (way better than nothing):

>gunzip -dcf filename.tar.gz | tar xvf -

Apparently on linux the f (in tar xvf -) is not necessary. You could use this for extraction generally, to make it a one step process instead of a two step process.


Viewing and Editing a Text File

>cat silly (To view a short text file named "silly")

>nedit silly (On the sgis this brings up the file "silly" in a notepad-like editor. If you have permission, you can make and save changes to the file. Note that this ties up your shell prompt so you have to either finish and exit nedit to use the shell, or open another shell)

>nedit silly & (On the sgis: like the above command, but the "&" tells the system to run the process [i.e., nedit] in the "background", so it doesn't tie up the shell prompt. You can open new files from the nedit menu without starting new copies on nedit.)

>less silly.txt A viewer, much easier to use and more flexible than "more". Less is the default viewer for man pages on buddy, holly, merlin and charlie. You can view binary files with less, without fear of damaging them. You can use less to search files for words and you can switch into vi from less by typing "v". Less can be used over a telnet or ssh connection.

>less --help or >man less will show you options. h while in less will bring up the help screen.

Starting less: less <filename> (e.g., >less cheatsheet.txt)
q (for quit)

Moving:
- Scroll up and down using the arrows (this depends on the machine.
- j and k can be used to scroll as in vi if the arrows don't work).
- Spacebar takes you down one screen, enter down a line (as in "more").
- g takes you to the first line in the file, G takes you to the last
line in the file.

Other:
- v (while in the viewer, puts you into vi)
- /word (while in the viewer, a forward slash followed by a word or regular expression will search for the first occurrence of the word and will highlight it. n will find the next instance etc. See various
flags for the search, /word* looks through multiple files, but you need to choose Ctrl-n to switch to the next file, and n to search for the next occurrence. ESCAPE-u will turn off highlighting from
the current search.
- less can be used to view or search multiple files e.g. >less *.txt

 

On the sun, right click on the background, go to "Applications" on the popup menu, and choose text editor.


Size Matters

Sometimes you will want to know how big a file (or a directory) is. This gets confusing, because the numbers are huge...like counting Lira. In addition, systems are not always clear about what units they are presenting size information in. For example, many Linux systems default to bytes, but allow you to choose Kilobytes or megabytes. Irix allows you to choose kilobytes but not megabytes. This table shows you how the different units of measurement are related. Below are discussions of how big different media and applications are. Also, crucial commands and what they return are described.

Bit Byte Kilobyte Megabyte Gigabyte Terabyte
2 states 8 bits 8,000 Bits 8,000,000 Bits 8,000,000,000 Bits 8,000,000,000,000 Bits
1 Byte 1,000 Bytes 1,000,000 Bytes 1,000,000,000 Bytes 1,000,000,000,000 Bytes
1 KB 1000 Kb 1,000,000 Kb 1,000,000,000 Kb
1 MB 1000 Mb 1,000,000 Mb
1 GB 1000 Gb
1 Terabyte

In the above table, all items in a column are equivalent:

A bit = 2 states, positive and negative.
A Byte = 8 bits.
A Kilobyte (KB) = 8,000 bits or 1000 bytes.
A Megabyte (MB) = 8 million bits or 1 million bytes or 1000 Kilobytes.
A Gigabyte (GB)= 8 billion bits or 1 billion bytes or 1 million Kilobytes or 1000 Megabytes.
A Terabyte = 8 trillion bits, 1 trillion bytes, 1 billion kilobytes, 1 million Megabytes or 1000 Gigabytes.
Beginning with bytes, each level is 1000 times as large as the previous level (A byte is only 8 times as big as a bit, BUT a Kilobyte is 1000 bytes, a Megabyte is 1000 Kilobytes etc.)

Storage Media
To give you some perspective:

A floppy disk holds 1.44 MB
A zip disk may hold 100 MB or 250 MB
A CD holds about 650 MB (but some are bigger)
Most of us have hard drives that are between 40 and 120 GB.
The RAID towers hold about 200 GB each.
All 3 CNL raid towers + whatever hard drive space is actually on our sgis amounts to over 1/2 a terabyte of data storage (~600 Gb or 600,000 Mb).

Stuff you Store
So how big are the things we actually store around here?

A typical exam (a set of raw MR files and some P-files) is about 200 Mb, so it easily fits on a CD.
An MR file is ~ 136 KB
A P-file might be between 20 and 60 MB.
When you list files on Unix, "ls -l" represents the size in bytes.

Applications vary considerably in size, but big ones are sometimes up around 200 MB.

Other examples (obtained by right clicking a folder under Windows 98 and choosing "Properties"):

Matlab: Almost 170 MB
Norton Antivirus: 15 MB
Office 97: Almost 100 MB
SPSS: 85 MB
WinZip: 2 MB

Figuring it Out
On Unix:
>du -ks Fred
This will give you a Disk Usage Summary in Kilobytes of the space used by the directory Fred.

>ls -l
This will give you the size in bytes of all files. Directory sizes do NOT reflect the contents of the directory.

>df -k
This will give you the free (and used) space on the devices (partitions) on the system in Kilobytes.

On Windows:
The size of files is displayed in the Explorer.
The size of directories (folders) can be obtained by right clicking and selecting "Properties".
The size (and free space) on a partition can by found by right clicking on the drive letter and choosing "Properties".


Unix Help

You have already been introduced to many of the important commands you will need for navigating the file system and understanding permissions. Below are some hints for finding help and a review of several crucial commands not already covered.

Opening a Shell: Sometimes you may have a graphical user interface available (where you can drag files with a mouse), but you will always have a shell or "window" available where you can type commands. On the sgis, you can open a new shell window by going to the Toolchest (upper left corner of screen) and clicking on "Desktop", then choose "Open Unix Shell" from the popup menu. On other systems, you can try right clicking on the background and looking through the options on the popup menu, or click likely looking icons on the desktop. On the sun, try right clicking on the background, then choose "Tools" and "Terminal" from the popups. See "History" and "Filename Completion" below to learn more about shell features.

Help for Commands: All unix systems have man (manual) pages for the standard commands:

>man ls (This will display the manual page for "ls" using a standard viewer like "more". Hit the SPACE bar to scroll down a screen at a time and "q" to quit)

Man pages can be frustrating to read, and they are probably not the best way to learn a command, but they are always available.

>man man (to learn more about man pages).

For commands that require arguments (e.g. cp requires an argument, because you cannot copy unless you specify the file to be copied and where it will be copied), you can type the name of the command without any arguments and hit ENTER to display a brief usage message. Try this for many of the imaging routines (especially MGH routines like inorm):

>inorm

We have two useful books in the dataroom for general unix commands:

Ray, DS and EJ Ray. (1998). Visual QuickStart Guide: Unix. Peach Pit press.
Gilly et al., (1992). Unix in a Nutshell. O'Reilly & Associates.


Peachpit Press books are great learning tools. O'Reilly makes a whole line of excellent computer books, but they assume a bit more knowledge than the Peachpit Press Visual QuickStart books. Unix in a Nutshell is an alphabetical reference to commands.

Check out the "help" in the toolchest on the sgis. There is a similar reference facility available on suns.


Tips and Tricks

Cut and Paste
You can use the left mouse button to highlight text in the shell and then move anywhere else (another shell, an nedit window etc.) and click the middle mouse button to paste the text at the current cursor location.

Unix also has a couple of useful command line utilities called "cut" and "paste":

CUT
Cut and paste are available on most unix systems. Cut identifies columns of data to keep. By default, it assumes the delimeters are tabs, but you can specify a different delimeter (below -d ' ' specifies a space...note that there is a space between the two single quotes). -f identifies the fields to keep:

 

merlin 13% more test1
1 2 3 4 5
6 7 8 9 10
merlin 7% cut -d ' ' -f1 test1 > test1b
merlin 8% more test1b
1
6
merlin 9% cut -d ' ' -f2 test1 > test2
merlin 10% more test1b
2
7
merlin 11% cut -d ' ' -f1,2 test1 > test1c
merlin 12% more test1c
1 2
6 7
_______________________________
PASTE
Paste is like concatenate (cat) in the horizontal direction. As with cut, the default delimiter is a tab when you paste two files together (see test1d example below). However, you can specify a delimiter (for test1e, I specify a space), and that will look better if spaces separate the rest of your columns.


merlin 18% more test1b
1
6
merlin 19% more test1c
1 2
6 7
merlin 20% paste test1b test1c >test1d
merlin 21% more test1d
1   1 2
6   6 7
merlin 24% paste -d ' ' test1b test1c > test1e
merlin 25% more test1e
1 1 2
6 6 7


Filename Completion
This is another feature of t-shell. If you begin to type the name of a file and press TAB, the shell will complete the name of the file for you. If there is more than one file that starts with a similar sequence (i.e., study1_reg_norm+orig.BRIK and study1_reg_norm+orig.HEAD), and you type st TAB, the shell will complete as much of the name as it can (study1_reg_norm+orig.) and then beep at you to give it more input. In this example, if you type a B and TAB it will complete the name of the fil
e.

Find Command
The find command is useful, but its syntax is difficult. Here we illustrate several examples of the find command.

One great way to reduce the size of a directory without tarring it up, is to gzip all the files individually. Of course, this can take a long time if you do it manually, so here is a useful find command that will gzip everything in the current directory and below (make sure you are in the right place before you run it).

First, you might wish to do a "fake" run of the command, to find out what it will do (use the -ok flag instead of the -exec flag)

So here is the fake run version:

>find . \! -name '*.img' -ok gzip -v {} \;

And here is the real version:

>find . \! -name '*.img' -exec gzip -v {} \;

Note that this won't zip up directories, just the files inside directories. It'll warn you that it can't zip up directories (that's fine). These commands will find all files here (.) and below that are not (\!) *.img files and gzip them up. You could remove the "not" and find and zip all img files:

>find . -name '*.img' -exec gzip -v {} \;

Here's another example, to give you some idea of the power of find:

>find . -group catprod

This command finds and lists all files and directories, here and below, belonging to the group catprod.

History
Your default shell on the sgis is set to remember the last 100 commands you entered at the shell prompt. Use the up and down arrows to scroll through the commands. You can also edit the commands after you find them and before you run them, just use the left and right arrows to move through the command, then insert and delete all you want. Note that this is a setting on our sgis that you won't find set up on every unix machine. If you don't seem to have it, you may want to ask your system administrator about tcsh (t-shell) and whether you can access it.


Clients and Servers

You should understand the difference between a machine that serves up services (like ssh, scp, telnet, and ftp) and a machine that is simply a client for such services.

Servers: Most unix machines (unlike most Windows PCs) come with server capability. When the machine starts, the server daemons start. Each daemon (e.g., telnetd, sshd, ftpd etc.) listens for incoming calls on its port. A file called inetd.conf in /etc lists all the daemons that the system administrator allows to listen (the system administrator may choose to turn these daemons off if they represent a security threat).

Most machines can act as clients. The client program is like a telephone that only allows you to make outgoing calls, but not receive them. So our PCs all have telnet and ftp clients built in, and we've added ssh and scp clients. Because our PCs do not run servers for these services, we cannot sit at home or at a unix station and ftp, telnet, ssh or scp to the PCs.

Let's consider an example: The telnet client can telnet to a remote machine...but it does not listen for telnet requests from remote machines. If your machine has a telnet server and a permanant IP address (think of this as its telephone number)...then it can receive an incoming telnet request (it has a daemon listening on the telnet port). Otherwise, it simply acts as a telnet client, allowing only outgoing telnet requests.

In the case of our CNL machines, very few daemons are running. In particular, telnet and ftp daemons are turned off (they are not allowed to listen). However, our machines are still clients for such services...so you can telnet to a remote machine from buddy, but no remote machine can telnet to buddy.