An Introduction To UNIX Pinghua Young and Grace Katagiri October 30, 1995 1 Getting Started with UNIX 1.1 Logging In What Is Logging In? Logging in is the process by which you identify yourself to a UNIX system. Before you begin a session at the console, you must use your UNIX account to log in to a workstation emily3,...,emily14. Logging in simply is the process through which you tell the system your username and your password. Why Doesn't My Password Appear on the Screen? Notice that your password does not appear on the screen as you type it. This is just added security provided by the UNIX system, so that curious eyes behind you cannot read your password. Never share your password with anyone, and don't write it down either. In the EML, if we nd that account information has been shared, the account is immediately and permanently revoked. What about Typing Mistakes? If you make a mistake, you must type both your login name and password again. You are given about three to ve more chances to type them incorrectly depending on the system, after which you will be disconnected. Once you successfully log in, the system displays the command-line prompt and waits for your commands. If you log in from the console meaning you are sitting in front of an emily in room 616 Evans, you will default to the SunOS Open Windows environment. You can also use the generic X Windows system if you wish. A windows system is a collection of software that makes it easy for you to take full advantage of the graphics and windowing capabilities of a workstation. The following is a sample login session. This is a dial-up from home example, so it doesn't go into a graphical windows system automatically. login: pinghua Password: Last login: Mon Jan 11 22:45:26 from emily8.Berkeley. SunOS Release 4.1.1 ECON_SSx 5: Wed Aug 5 12:07:41 PDT 1992 You have new mail. TERM = vt100 Erase set to Backspace STUDENT ACCOUNTS MUST BE RENEWED FOR SPRING SEMESTER PRIOR TO 1 19 93. See "news" for details. Much of the stu included here is taken from various materials gathered over the years. If you want to know more, read the book C Shell Field Guide by Anderson and Anderson. 1 The workstations in 616 are reserved for tutorials 1 12-14 93 Tu-Fr from 10:00 a.m. - noon. The air conditioning work in the EML is finished. All the machines are running as usual. The EML is reserved for graduate class use M-F 12:00 n. - 5:00 p.m. Type "help" for help and "news" for news updated Fri 8 Jan 1993. Load: 10:46pm up 4 days, 6:26, 0 user, load average: 0.14, 0.02, 0.00 Date: 01 11 93 Time: 22:46:24 Last logout: Mon Jan 11 20:24:52 PST 1993 501 emily10 Notice the prompt is 501 emily10 , which is likely to be di erent from your prompt. Your default prompt will have a percent sign, which is the prompt for the C shell. Most UNIX systems default to the C shell. Whenever you see the prompt, you know the system is waiting for further instructions from you. 1.2 Changing Your Password When? Every once in a while, you de nitely want to change your password to preserve the security of your account. If you do not change your password for a long time, the system might also refuse your login request. If you are using a class account, then the rst time you login you should change your assigned password immediately. You should also use the chfn command to put your real life name and phone number into the system. Can I Change My Username? No. Once your choose your username when opening your account, it cannot be changed easily. Your username is like your personal name, and it will follow you throughout your career at Berkeley. Changing Your Password|Your password must not be any word found in the English dictionary, your username, or any permutation of your name or initials. To change your password, use the command passwd. Remember, your password does not appear on the screen when you type it. 520 emily8 passwd Changing NIS password for pinghua on econ.Berkeley.EDU. Old password: New password: Retype new password: NIS entry changed on econ.Berkeley.EDU 521 emily8 1.3 Logging Out What Is Logging Out? Logging out ends your session. You must nish each work session by logging out so that no one else can continue working on the system in your account. If a message on the screen indicates there are stopped jobs, be sure to `kill' them before logging out. See Section 5.7 for more information on job control and related commands to kill a job or process. 2 If you are at the console of a Sun, move your mouse pointer to a blank non-window area of the screen, click with the rightmost button, and select Exit". You will be prompted to con rm Exit". This will log you out completely. If you are in a terminal emulation character-based, shell, non-windows, just type logout" or exit" to end your session. 522 emily8 logout 1.4 Getting Information The UNIX Manual|On the EML system, the complete UNIX reference manual is online the printed version takes up roughly ve linear feet and costs close to $2,000. The manual contains descriptions of the UNIX commands online so that you can refer to it on your screen as needed. Unfortunately, you may have to dig around to nd just what you're looking for. The man and apropos commands can help you. The online manual is organized by command; as a novice, you may nd that the di culty is knowing which command you need to read about. As shown in the following example, you can use the -k option for man to obtain a list of topics related to a particular keyword. Also, printed copies of part of the UNIX manual and of the SUN workstation manuals are located in 616 Evans for easy reference. 527 emily8 man man MAN1 USER COMMANDS MAN1 NAME man - display reference manual pages; find reference pages by keyword SYNOPSIS . . . 529 emily8 man -k password xlock 1 - Locks the local X display until a password is entered. .IX xlock1 "" " fLxlock1" xlock 1 - Locks the local X display until a password is entered. .sp chkpw 8 - check password file entries against reality pwget, grget UTIL - get password and group information crypt, _crypt, setkey, encrypt 3 - password and data encryption getpass 3V - read a password getpwaent, getpwanam, setpwaent, endpwaent, fgetpwaent 3 - get password adjun ct file entry getpwent, getpwuid, getpwnam, setpwent, endpwent, setpwfile, fgetpwent 3V - ge t password file entry passwd 5 - password file passwd, chfn, chsh 1 - change local or NIS password information putpwent 3 - write password file entry pwck 8V - check password database entries pwdauth, grpauth 3 - password authentication routines 3 pwdauthd 8C - server for authenticating passwords rfpasswd 8 - change RFS host password vipw 8 - edit the password file yppasswd 1 - change your network password in the NIS database yppasswd 3R - update user password in NIS yppasswd 5 - NIS password file yppasswdd, rpc.yppasswdd 8C - server for modifying NIS password file 531 emily8 man passwd PASSWD1 USER COMMANDS PASSWD1 NAME passwd, chfn, chsh - change local or NIS password informa- tion SYNOPSIS . . . 532 emily8 If you are using Open Windows or the X Window System, you can also use the xman command, which has a much nicer user interface. 2 Working With Files and Directories 2.1 The UNIX File System What Are Files? You can think of computer les as the folders inside a le cabinet. Each le has a name. Files are quite important because they allow you to store information for use at a later time. After you nish your session, the system forgets what you've been doing, unless you save your work in a le to disk.". How Is a File System Organized? UNIX les are organized into groups called directories they are also called folders. Directories are les, but instead of containing data or text as other les do, the directory contains other les. The directories are organized like an inverted tree. The root directory named is at the top. Note that the root directory in a UNIX system is not equivalent to the PC concept of root." For PC users, think of your root" directory as being equivalent to the UNIX user's home directory." The user's home directory usually starts well below the root and other system directories in a UNIX lesystem tree. Branching out from the root directory are the rest of the directories. Any directory can contain both directories and other les. Below is a diagram of a simpli ed lesystem. The lesystems on the EML system are more complex than the ctional one depicted below. 4 | --------------------------------------------- | | | | usr etc srv bin | ------------------------------ | | | scratch accounts archive | ------------------------------ | | | grad undrgrad ucbgrad | -------------------------------------- | | | deng pinghua ddole | -------------------------- | | | bin pub ra | --------- | | tex x11r5 | ------------------- | | intro_unix.tex ucblet.tex 2.2 Directories and Paths The Root Directory|The at the top of the illustration is the root directory. Within this root directory are: usr, etc, srv, and bin. These les just happen to be directories, which contain their own les. These directories-within-a-directory are called subdirectories. Thus, srv is a subdirectory of . Every le on the system is contained in the root directory or in one of its subdirectories. Your Home Directory|When you rst login to a UNIX system, you are in the directory that holds your personal les. This directory is called your home directory. In the example above, the home directory of the user named pinghua is srv accounts grad pinghua. If you are also a graduate student in the Economics Department, your home directory will be srv accounts grad your username. Your Current Working Directory|Whenever you use a UNIX system, you are always working in a speci c directory could be your home directory; could be a subdirectory; could be a public directory elsewhere on the system. That directory is called the current working directory, or simply, the working directory. For example, if you were in the usr directory, your working directory would be usr. If you were in srv accounts projects, then your working directory would be srv accounts projects. Most commands that operate on directories use the working directory as the default, unless you specify otherwise. Therefore, it's important to know what the working directory is; to nd out, use the pwd command you can think of pwd as present working directory: 5 539 emily8 pwd tmp_mnt srv accounts grad pinghua pub tex 540 emily8 2.3 Finding Out What's in a Directory The Directory Listing Command|The command for listing the les and subdirectories contained in a directory is ls. As shown in the following example, di erent information is displayed, depending on what arguments you use. 542 emily8 ls ddole intro_unix.tex short_loc_gid.tex.Z intro_unix.aux local_guide.tex.Z ucblet.tex intro_unix.dvi multi_ucblet.tex.Z intro_unix.log multi_ucblet_body.tex.Z 543 emily8 ls usr 5bin custom kvm openwin ucbinclude 5include demo lang pub ucblib 5lib diag lib sccs wp adm dict local share xpg2bin app dist lost+found spool xpg2include bin etc lpp src xpg2lib blss export man stand boot games mdec sys cchelp hosts new tmp crash include old ucb 544 emily8 ls -l total 63 -rw------- 1 pinghua 6186 Aug 25 11:43 ddole -rw------- 1 pinghua 225 Jan 11 17:16 intro_unix.aux -rw------- 1 pinghua 2800 Jan 11 17:16 intro_unix.dvi -rw------- 1 pinghua 943 Jan 11 17:16 intro_unix.log -rw------- 1 pinghua 13745 Jan 11 23:57 intro_unix.tex -rw-r--r-- 1 pinghua 18401 Mar 12 1992 local_guide.tex.Z -rw-r--r-- 1 pinghua 1040 May 11 1992 multi_ucblet.tex.Z -rw------- 1 pinghua 843 May 9 1992 multi_ucblet_body.tex.Z -rw-r--r-- 1 pinghua 7514 Feb 24 1992 short_loc_gid.tex.Z -rw-r--r-- 1 pinghua 7483 Oct 10 17:41 ucblet.tex 545 emily8 ls -F ddole intro_unix.tex short_loc_gid.tex.Z intro_unix.aux local_guide.tex.Z ucblet.tex intro_unix.dvi multi_ucblet.tex.Z intro_unix.log multi_ucblet_body.tex.Z 546 emily8 Dot Files|Within your home directory are some les whose names begin with a dot or period. Most users don't need to access dot les often. They don't show up on the list supplied when you type the command ls unless you use the option -a. Because they aren't listed on the screen of your terminal, you can nd other les more easily. Here is a list of some dot les: 6 .cshrc The system runs the commands in this le each time you start a shell. Usually a good place for alias commands. See Section 3.1 for more information. .forward Contains addresses where mail for this account should be forwarded, e.g., jbai@athena.mit.edu. This is useful if you want to receive your mail at a di erent location instead of at the EML system. Also used with the vacation mail program see help vacmail". .login The system runs the commands in this le when you login. Usually you don't need to change anything here. .logout The system runs the commands in this le when you logout. .plan An optional le you create that contains personal or work-related information of an arbitrary nature; displayed when your username is ngered. .project An optional le you create that is limited to a short, one line description of your project or course work; displayed when your username is ngered. 548 emily8 ls -a . .login .vacation.dir .. .logout .vacation.msg ... .mailrc .vacation.pag ..forward .mailtool-init .wastebasket ..plan .newsrc .xinitrc.x ..rhosts .newsrc.ucbvax .xinitremoterc .Data .oldnewsrc .xloadimagerc .Splus_history .openwin-init .xsession .Xauthority .openwin-init.BAK .xsession-errors .Xdefaults.x .openwin-menu News .Xresources .plan adm .Xresources.bak .plan.gb bin .article .plan.hz books .aut .plan1 calendar .cetables .plan2 chinese .cshrc .pnewsexpert lib .desksetdefaults .pobox login .fexp .project pub .forward .rnlast sounds .gopherrc .rnsoft stat .history .sh_history tex .kermrc .signature thesis .l123set .std.login.mpy tmp .lastlog .texrc unix .letter .twmrc 549 emily8 2.4 Changing Directories You use the cd command to change to another directory. Just cd" by itself always returns you to your home directory. If you use cd" with one dot ., it means change to your current working directory, and two dots .. means the parent directory that contains your current working directory. So cd ." is relatively meaningless, but cd .." will move you up the directory tree, and cd" alone will always take you home. 7 556 emily8 pwd tmp_mnt srv accounts grad pinghua pub 557 emily8 ls -F tex x11r5 558 emily8 cd tex 559 emily8 pwd tmp_mnt srv accounts grad pinghua pub tex 560 emily8 cd .. 561 emily8 pwd tmp_mnt srv accounts grad pinghua pub 562 emily8 2.5 Creating Directories For organizational purposes, you may want to create a new subdirectory to hold a group of related les, as shown in the following sample session. The command for creating a directory is mkdir. After the new directory is created, you can either create les in that directory or move or copy existing les into it. 566 emily8 mkdir thesis 567 emily8 cd thesis 568 emily8 ls 569 emily8 cd .. 570 emily8 2.6 Removing Directories You can remove a directory by using the rmdir command. Before you do so, make sure the directory is empty, i.e., it contains nothing. See Section 2.7 for information about removing les. 572 emily8 ls thesis 573 emily8 rmdir thesis 574 emily8 ls thesis thesis not found 575 emily8 Absolute Pathnames|To identify a certain le in the le system, you can specify an absolute pathname by telling UNIX where the le is in relation to the root directory. For example, etc test is a le called test located within the etc directory under the root directory. The rst signi es the root directory. Each subsequent directory name is separated by an additional . For more advanced users: Note that on the EML system, all absolute pathnames on the leserver start with srv ...". If an absolute pathname starts simply with ", then the pathname refers to a lesystem on the local workstation for example, tmp" is swap space on the workstation's hard disk, and data1 csrp is a lesystem that is NFS mounted directly on the workstation, not the leserver. Another arcane piece of information: Although pwd" returns pathnames beginning with tmp mnt" on the EML system, you can ignore it in giving absolute pathnames. tmp mnt" is a vestige of the automounting facility in SunOS, and has no real physical existence. Even more arcane: srv" is only a pointer to econ", which is the name of our primary leserver. " is therefore the root directory of the leserver econ". Since we have more than one server, however, we use 8 srv" in pathnames because it always points to the correct server, even though les may move back and forth. For example, srv scratch" is equivalent to econ scratch" when logged into the econ" leserver. On the emlab" server, srv scratch" is equivalent to emlab scratch". 'Nu said. Relative Pathnames|Besides identifying a le by its absolute pathname, you can use a relative pathname. That is, you can tell UNIX where the le is in relation to the working directory. Suppose we are in Pinghua's home directory that contains a subdirectory called pub. pub contains a le called test. Instead of using absolute pathname like srv accounts grad pinghua pub test, we can simply use pub test to refer to it. 581 emily8 pwd tmp_mnt srv accounts grad pinghua 582 emily8 ls pub test tex x11r5 583 emily8 cat pub test This is a test file. 584 emily8 Like one dot . and two dots .., there is also a shorthand for referring to home directories. ~ denotes your own home directory, while ~username denotes username's home directory. For example, ~pinghua refers to Pinghua's home directory, so to go to his home directory from your home directory, you can simply type cd ~pinghua. 2.7 Handling Files Copying Files|The command to copy les is cp. Its rst argument is the source le, that is, the le you are copying. Its second argument is either the name you want for the new, copied le or the destination directory. If a directory is given as the second argument, the le is copied into that directory with the same le name. You can also use wildcards to copy a group of les. See the end of this sub-section for more information about wildcard characters. Warning: When you use the cp command, the system doesn't check to see if a le already has the name you chose for the destination le. If that le name already exists, the system removes the existing le before it copies the le you speci ed. If you want the system to ask you for con rmation, use cp -i instead of simply cp. 601 emily8 ls ddole intro_unix.tex short_loc_gid.tex.Z intro_unix.aux local_guide.tex.Z ucblet.tex intro_unix.dvi multi_ucblet.tex.Z intro_unix.log multi_ucblet_body.tex.Z 602 emily8 cp intro_unix.tex intro_unix_bak.tex 603 emily8 ls ddole intro_unix.tex multi_ucblet_body.tex.Z intro_unix.aux intro_unix_bak.tex short_loc_gid.tex.Z intro_unix.dvi local_guide.tex.Z ucblet.tex intro_unix.log multi_ucblet.tex.Z 604 emily8 cp intro_unix .. cp: intro_unix: No such file or directory 9 605 emily8 cp intro_unix.tex .. 606 emily8 ls .. intro_unix.tex test tex x11r5 607 emily8 Moving Files or Changing Their Names|The command for both moving a le from one directory to another and renaming a le is mv. Its rst argument is the source le, and its second argument can be either the destination directory or the new name of the le. 608 emily8 ls ddole intro_unix.tex multi_ucblet_body.tex.Z intro_unix.aux intro_unix_bak.tex short_loc_gid.tex.Z intro_unix.dvi local_guide.tex.Z ucblet.tex intro_unix.log multi_ucblet.tex.Z 609 emily8 mv intro_unix_bak.tex tmp 610 emily8 ls intro_unix_bak.tex intro_unix_bak.tex not found 611 emily8 ls tmp intro_unix_bak tmp intro_unix_bak not found 612 emily8 ls tmp intro_unix_bak.tex tmp intro_unix_bak.tex 613 emily8 mv intro_unix.log garbage 614 emily8 ls intro_unix.log garbage intro_unix.log not found garbage 615 emily8 Referring to Groups of Files|There are some so-called wildcard characters of which you should be aware. They provide you with a powerful way of referring to a group of les easily. One is the character *, which means any string of characters. Another one is ?, which refers to any single character. For example: 616 emily8 ls ddole intro_unix.tex short_loc_gid.tex.Z garbage local_guide.tex.Z ucblet.tex intro_unix.aux multi_ucblet.tex.Z intro_unix.dvi multi_ucblet_body.tex.Z 617 emily8 ls *.tex ddole intro_unix.tex ucblet.tex 618 emily8 ls *.Z local_guide.tex.Z multi_ucblet_body.tex.Z multi_ucblet.tex.Z short_loc_gid.tex.Z 619 emily8 ls intro_unix.??? intro_unix.aux intro_unix.dvi intro_unix.tex 10 620 emily8 ls intro_unix.* intro_unix.aux intro_unix.dvi intro_unix.tex 621 emily8 ls intro_unix.? ls: No match. 622 emily8 Creating and Removing Files|There are a lot of ways to create les. An obvious way is to use an editor such as vi, emacs, or jove, etc. You can also use UNIX's powerful output redirection to create a le. See Section 4 for more information about this and other powerful tips and tricks like pipes. To remove a le, use the rm command. Be careful with this command. Once the le is removed, it's gone forever. You can't use Norton Utilities to get it back. Just to be on the safer side, use rm -i instead of plain rm. Or better yet, put alias rm rm -i into your .cshrc le. 2.8 Browsing through Files Looking at Files One Screenful at a Time|You can use the more, less, or page commands to display a screenful of the le at a time. To display the next screenful, press the space bar. Type man more, man less for more information. The UNIX command cat also allows you to view les on your screen, but it won't show one screenful at a time. However, you can use it for other purposes. For example, if you want to append le2 to le1, simply type cat le2 le1. For more information, type man cat. Looking at the Beginning or End of a File|You use the commands head or tail to display the beginning or the end of a le. The default is the rst 10 or the last 10 lines, but you can specify how many lines you want, as shown in the following example. 649 emily8 head ~ .cshrc source the standard .cshrc file source usr local skel std.cshrc personal customization set path = $HOME bin ~choices bin $HOME unix mac moby pbmplus bin tmp_mnt mob y b tiff sun4_sunos4.1.1 bin $path usr demo SOUND usr local x11r5 games usr e tc source $HOME ... .cshrc umask 077 650 emily8 tail ~ .cshrc source the standard .cshrc file source usr local skel std.cshrc personal customization set path = $HOME bin ~choices bin $HOME unix mac moby pbmplus bin tmp_mnt mob y b tiff sun4_sunos4.1.1 bin $path usr demo SOUND usr local x11r5 games usr e tc source $HOME ... .cshrc umask 077 651 emily8 tail -5 ~ .cshrc 11 personal customization set path = $HOME bin ~choices bin $HOME unix mac moby pbmplus bin tmp_mnt mob y b tiff sun4_sunos4.1.1 bin $path usr demo SOUND usr local x11r5 games usr e tc source $HOME ... .cshrc umask 077 652 emily8 2.9 Searching and Comparing Files Searching for Text|You can use the grep command to search for a string in a text le. This is actually a very powerful utility, and you might want to learn more about it by typing man grep. 629 emily8 grep grep intro_unix.tex bf Searching for Text ---You can use the bf grep command to search for you might want to learn more about how to use it by typing bf man grep . 630 emily8 grep UNIX intro_unix.tex title An Introduction To UNIX section Beginning UNIX you must use your UNIX account to log in to the computer---Emily1 added protection provided by the UNIX system so that curious eyes bf The UNIX Manual ---On EML UNIX System the reference manual is online in the computer. The manual contains descriptions of the UNIX commands online so that you can refer to it on your screen as needed. Unfortunately, you may UNIX manuals and of the SUN workstation manuals are located in 616 Evans subsection The UNIX File System bf How Is a File System Organized? UNIX files are organized into groups EML UNIX computers are more complex than the fictional one depicted below. bf Your Home Directory ---When you first login to a UNIX system, you are bf Your Current Working Directory ---Whenever you are using a UNIX system, can specify an absolute pathname by telling UNIX where the file is in relation you can use a relative pathname. That is, you can tell UNIX where the file use UNIX's powerful output redirection to create a file. See later sections 631 emily8 Comparing Files|The di and cmp commands allow you to compare two les to see if they are identical. The di command displays the actual lines in each le that di er, whereas the cmp command lists the location in the rst le where the rst di erence between them occurs. If the two les are identical, the prompt reappears. For more information type man di or man cmp. 633 emily8 cp intro_unix.tex garbage overwrite garbage? y 634 emily8 diff intro_unix.tex garbage 635 emily8 cmp intro_unix.tex garbage 636 emily8 2.10 Handling File Security: File Access Permissions UNIX Security|UNIX gives you the ability to protect your work as you see t. You decide what you can 12 do to your work, and what others can do to it. The UNIX security system allows you some control over who can see, alter, and use your les and directories. In the UNIX environment, those who may access a particular le or directory are divided into three classes, as shown in the following: Class of User De nition owner the user who owns the le directory group the group of users who share access to a le. Every user belongs to a group. In general, graduate students belong to the same group. To see what group you are in, type groups. other all other users. Each le or directory has a set of permissions that control access to it. For each class of users above, there are three permissions that may be granted in relation to each le or directory. These are shown here. Permission File Directory readr Allows you to read the le Allows you to list the contents of of the directory writew Allows you to create, delete, Allows you to create and delete les in the directory, and modify the le. since this requires writing to the actual directory. executex Allows you to run a le. Allows you to list only the les whose names you specify, not the directory itself. Finding Out What Permissions a File Has|When you create a le or a directory, it is assigned a default set of permissions, which you can change. With the command ls -l, you can see the permissions associated with a particular le as the rst 10 characters on each line of the output. Be sure to use the correct absolute or relative pathname for the le. 671 emily8 ls -l total 23 -rw------- 1 pinghua 20016 Jan 12 01:05 intro_unix.tex -rw-r--r-- 1 pinghua 21 Jan 12 00:35 test drwxr-sr-x 2 pinghua 512 Jan 12 01:45 tex drwxr-sr-x 2 pinghua 512 Aug 3 17:34 x11r5 672 emily8 The rst character indicates whether this le is a directory d or just a regular le -. The next three groups consisting of three characters each 9 characters total are the permissions granted for the owner, group, and other classes, respectively. A permission is granted if the letter is present, and not granted if the , is there instead. Making Security Changes|You can change the permission modes using the chmod command. The plus + sign indicates access addition and minus , indicates access deletion. For more information type man chmod and man umask. 674 emily8 ls -l total 23 -rw------- 1 pinghua 20016 Jan 12 01:05 intro_unix.tex -rw-r--r-- 1 pinghua 21 Jan 12 00:35 test drwxr-sr-x 2 pinghua 512 Jan 12 01:45 tex drwxr-sr-x 2 pinghua 512 Aug 3 17:34 x11r5 13 675 emily8 chmod go-r test 676 emily8 ls -l test -rw------- 1 pinghua 21 Jan 12 00:35 test 677 emily8 chmod g+rw intro* 678 emily8 ls -l intro* -rw-rw---- 1 pinghua 20016 Jan 12 01:05 intro_unix.tex 679 emily8 3 The Shell Program About the Shell Program|As soon as you log in, the shell program is activated. Providing the interface between you and the system, the shell is the program that reads your commands and invokes other programs to carry them out. The default shell that you will be using is the bin csh or C shell. You can also change it to bin tcsh by using the chsh command. The shell program bin tcsh is an enhanced version of bin csh, allowing you to call back previous commands and edit them. For more information on changing your default shell program, type man chsh. Warning: do not change your default shell unless you really know what you are doing. When the shell is ready for your command, it displays its prompt. In this document, we are using Pinghua's own prompt 680 emily8 in the sample sessions. You can change your default prompt as shown later on in this section. 3.1 Customizing Your Session: De ning Your Shell Environment UNIX allows you to customize your interaction with the shell in many ways. You can: create abbreviations for les or directories or lengthy commands; determine the directories the shell uses to search for the programs and commands to run; create the prompt the shell uses when it interacts with you, and have UNIX try to set your terminal type every time you dial in from home, without having to type the command yourself. 3.1.1 Shell Variables Setting Shell Variables|Shell variables help determine how the shell program interacts with you. You can create your own shell variable and assign it a value with the set command. And you can use the variable in a command line by pre xing the variable name with $. 521 emily5 set workdir = srv accounts projects choices 522 emily5 echo $workdir srv accounts projects choices 523 emily5 ls $workdir News bin hlogit sst_docu workshop README crane nag tar x 14 524 emily5 unset workdir 525 emily5 If you want to use the shell variable every time you interact with the csh or tcsh shell, add the command line to your .cshrc le. This is the C Shell Runtime Commands le, a dot le in your home directory. Looking at Shell Variables|You can also use the set command to see shell variables and their values. 525 emily5 set _etc _mpath usr local x11 man: usr local ow3 man _wpath usr local x11 bin usr local ow3 bin _x11 usr local x11 addsuffix argv cwd srv accounts grad pinghua pub tex echo_style bsd edit filec gid 130 history 500 home srv accounts grad pinghua hostname emily5 ignoreeof mail 2 usr spool mail pinghua_young etc motd usr msgs mdir usr spool mail noclober notify old srv accounts grad pinghua path srv accounts grad pinghua bin srv accounts projects choices bin srv accounts grad pinghua unix mac moby pbmplus bin tmp_mnt moby b tiff sun4_sunos4.1.1 bin usr local x11 bin usr local ow3 bin usr local bin usr lang usr ucb bin us r bin usr hosts . usr app bin usr local wp51 wpbin usr local TeX bin usr de mo SOUND usr local x11r5 games usr etc prompt ! emily5 prompt2 loop: prompt3 CORRECT R y|n|e? savehist 500 shell bin tcsh shlvl 1 status 0 tcsh 6.02.00 term xterm tperiod 5 tty ttyp1 uid 305 user pinghua version tcsh 6.02.00 Cornell 92 05 15 options 8b,nls,dl,al,dir window_menu 526 emily5 15 Some Important Shell Variables|A few shell variables have special meaning to the shell program. By assigning values to these variables, you customize the standard manner in which the shell executes your commands. Those covered here are: path, prompt, history and term. About the Path Shell Variable|One of the most important shell variables is the path shell variable. The value for the path shell variable is a list of directories enclosed in parentheses. This list of directories is called your search path. UNIX searches these directories when it looks for a program that you specify in a command line. If a program is in your search path, you can type just the name of the program. Otherwise, you have to specify its absolute or relative pathname. Suppose your search path is: bin usr local x11r5 bin usr bin Then whenever you type a program name or command, the shell looks rst in the bin directory, second in the directory usr local x11r5 bin and nally in the directory usr bin. It keeps looking until it either nds the program or command with that name or nishes looking through all the directories in your search path. If it cannot nd it among the directories listed in your search path, it's going to give you the error message of Command not found. 526 emily8 nslookup nslookup: Command not found. 527 emily8 set path = usr etc $path 528 emily8 nslookup Default Server: econ.Berkeley.EDU Address: 128.32.105.1 exit 529 emily8 The procedure shown in this example only adds one directory to your search path for your present interaction with the current shell. If you nd that you often use a program or command not speci ed in your default search path, you can edit or add the command line set path = new search directory $path to your .cshrc le. To nd out the value of your path shell variable, simply type echo $path at your shell prompt. About the Prompt Shell Variable|The value for the prompt shell variable is what displays as the shell's prompt. You can customize your shell prompt by using the procedure shown in the following example. 532 emily8 set prompt="what now? " what now? ls intro_unix.tex multi_ucblet.tex short_loc_gid.tex local_guide.tex multi_ucblet_body.tex ucblet.tex what now? In the tcsh, to change the prompt permanently, add the command line set prompt = your desired prompt" in your .cshrc le. About the History Shell Variable|The value associated with the history shell variable is the number of the commands last entered, which UNIX will save when you use the history command. See Keeping Command History later in Section 6. To set the number of commands that UNIX will save for subsequent sessions, add the command line set history = 500 in your .login le 500 is just an example. In this case, UNIX will remember 500 commands for you, but only for the current work session. Once you logout, those 500 commands won't be remembered. To ask UNIX to keep the 500 commands from the previous session 16 available to you for the current session, add set savehist = 500 in your .cshrc le. For more information read man csh. About the Term Shell Variable|The value associated with the term shell variable is the type of terminal you are using. This is important when you are dialing in from home. If you are using vt100 or vt102 emulation mode with your PC or Mac communication software, then you probably don't have to set this variable explicitly. But if you are using some other emulation mode, then you have to set the terminal type explicitly to the type you are using. Otherwise, programs such as text editors won't work properly. 3.1.2 Modifying the .login and .cshrc Files In general, you should be very careful when you start modifying these two les. Make sure you know what you are doing, and remember the lines you are adding. If it doesn't work, put in front of the line so that it won't be executed. Warning: do not blindly copy lines from someone else's dot les, or edit your dot les yourself unless you know exactly what you are doing. Otherwise you will come to grief. Additionally, never put another user's directory into a set path" statement. Think about it: you'll be sorry when that account is closed. The di erence between .login and .cshrc les is: when you login, UNIX executes the .cshrc le rst and then .login. UNIX also executes your .login le once, whereas it executes your .cshrc le whenever you start a subshell. After you add or modify command lines in the .cshrc or .login les, UNIX won't run the commands immediately. Unless you use the source command, you have to logout and then login in order for the changes to take e ect. 532 emily8 source .login 533 emily8 source .cshrc 3.1.3 Environment Variables These are similar to shell variables, but other programs besides the shell use their values. Typically, these environment variable names are all uppercase. An example of an environment variable is PRINTER. The value associated with this environment variable determines the default printer. The commands to set, unset, and look at environment variables are slightly di erent from those used with shell variables. Like shell variables, the command lines can be changed or added to your .login or .cshrc le. 537 emily8 setenv PRINTER lp1 538 emily8 unsetenv PRINTER lp1 539 emily8 printenv HOME= srv accounts grad pinghua SHELL= bin tcsh TERM=vt100 USER=pinghua PATH= srv accounts grad pinghua bin: srv accounts projects choices bin: srv accounts grad pinghua unix mac: usr local x11 bin: usr local ow3 bin: usr local bin: usr lang: usr ucb: bin: usr bin: usr hosts:.: usr app bin: usr local wp51 wpbin: usr loca l TeX bin: usr demo SOUND: usr local x11r5 games: usr etc LOGNAME=pinghua SHLVL=1 PWD= srv accounts grad pinghua pub tex 17 HOST=emily8.Berkeley.EDU HOSTTYPE=sun4 WPTERM51=sunshell LD_LIBRARY_PATH= usr local x11 lib: usr local ow3 lib HELPPATH= usr local x11 lib help: usr local ow3 lib help XFILESEARCHPATH= usr local x11 lib X11 T NC: usr local x11 lib X11 T N: usr local ow3 lib T NS OPENWINHOME= usr local ow3 MANPATH= usr local x11 man: usr local ow3 man: usr local man: usr lang man: usr man: usr app man PAGER=more EXINIT=set redraw TERMINFO= usr share lib local terminfo TERMPATH= usr local etc termcap.local: etc termcap GNUTERM=tek40 TERMCAP=d0|vt100|vt100-am:do=^J:co80:li36:cl=50 E ;H E 2J:le=^H:bs:am:cm=5 E id;dH:nd=2 E C:up=2 E A:ce=3 E K:cd=50 E J:so=2 E 7m:se=2 E m:us=2 E 4;1m:ue=2 E m:md=2 E 1m:mr=2 E 7m:mb=2 E 5m:me=2 E m:is= E ?7h E 1;24r E 24;1H:rf= usr li b tabset vt100:rs= E E ?3l E ?4l E ?5l E ?7h E ?8h:ks= E ?1h E=:ke= E ?1l E :ku = EOA:kd= EOB:kr= EOC:kl= EOD:kb=^H:ho= E H:k1= EOP:k2= EOQ:k3= EOR:k4= EOS:pt:s r=5 EM:vt3:xn:ti= E ?7l:te= E ?7h:sc= E7:rc= E8:cs= E id;dr: MAIL= usr spool mail pinghua VISUAL= usr ucb vi NAME=Pinghua Young ORGANIZATION=University of California at Berkeley 540 emily8 3.2 Creating Shorthand Names for Commands: Aliases Aliases allow you to create shorthand names for frequently used or lengthy command lines, and to create modi ed versions of existing system commands customizing" commands. When the alias appears in the command line that the shell reads, its text is replaced by the de nition of the alias. You use the alias command to create aliases and the unalias command to delete them. To display a de nition of an alias, just type alias and the name. 541 emily8 alias a alias 542 emily8 a f finger 543 emily8 a bai f jushan@athena.mit.edu 544 emily8 bai athena.mit.edu Login name: jbai In real life: Jushan Bai Nickname: Home phone: Office: E52-274B Office phone: 617-253-6217 Electronic mail address: jbai@ATHENA.MIT.EDU 545 emily8 alias bai finger jushan@athena.mit.edu 546 emily8 Arguments in Aliases|Unless you specify otherwise, the C shell assumes that all arguments come at the end of the alias de nition. For example, suppose cx is an alias for chmod +x. Then cx * would expand to chmod +x *. 18 What if we want arguments placed somewhere besides at the end of an alias de nition? For example, let's take a look the nd command. To locate the le intro unix.tex starting from our home directory, we type 521 cox find ~ -name intro_unix.tex -print srv accounts grad pinghua pub tex intro_unix.tex 522 cox We want to create an alias called loc that takes a lename as an argument to the nd command. A way to do this is alias loc 'find ~ -name !* -print' To avoid accidental removal of les, we strongly suggest that you put the following aliases in your .cshrc le: alias rm rm -i alias cp cp -i alias mv mv -i You might also want to add alias ls ls -F to your .cshrc le. 4 Input Output Redirection and Pipes 4.1 Sending Results Where You Want Them: Output Redirection Many UNIX commands, such as who, ls, and date, normally display their output on the terminal screen. Once it is overwritten or scrolls o the screen, you must execute the command again to view it unless, of course, you are using a windows system that allows you to scroll back. Output redirection lets you save output in a le for later reference or for use as the input to another program. Standard Output|We refer to the output that normally appears on the screen excluding error messages as standard output. We may send standard output to a le using output redirection. For example, The command who users.list saves the output from who in a le called users.list. 532 cox ls users.list users.list not found 533 cox who users.list 534 cox cat users.list mcfadden console Jan 13 09:47 goldman ttyp0 Dec 11 11:52 goldman ttyp1 Dec 14 09:17 goldman ttyp2 Nov 23 15:19 goldman ttyp3 Dec 1 09:02 goldman ttyp4 Jan 12 10:53 goldman ttyp5 Jan 4 09:08 goldman ttyp6 Jan 4 11:36 mcfadden ttyp7 Jan 13 09:48 mcfadden ttyp8 Jan 13 09:48 goldman ttyp9 Jan 15 12:01 goldman ttypa Jan 14 11:56 19 mcfadden ttypb Jan 14 15:14 pinghua ttypc Jan 17 17:21 econnet.Berkeley 535 cox We may say that redirects the output. Notice that in the above sample session, the le users.list did not exist. The C shell simply created it and put who's output there. If the le users.list had existed before we issued who users.list command, its previous contents would have been destroyed. If you don't want this to happen, use instead of . For example, 536 cox ps -uax | grep pinghua users.list 537 cox cat users.list mcfadden console Jan 13 09:47 goldman ttyp0 Dec 11 11:52 goldman ttyp1 Dec 14 09:17 goldman ttyp2 Nov 23 15:19 goldman ttyp3 Dec 1 09:02 goldman ttyp4 Jan 12 10:53 goldman ttyp5 Jan 4 09:08 goldman ttyp6 Jan 4 11:36 mcfadden ttyp7 Jan 13 09:48 mcfadden ttyp8 Jan 13 09:48 goldman ttyp9 Jan 15 12:01 goldman ttypa Jan 14 11:56 mcfadden ttypb Jan 14 15:14 pinghua ttypc Jan 17 17:21 econnet.Berkeley pinghua 2934 0.0 0.3 32 208 pc S 18:00 0:00 grep pinghua pinghua 2831 0.0 0.8 360 524 pc S 17:21 0:02 -tcsh tcsh pinghua 2892 0.0 0.0 184 0 pc TW 17:35 0:03 vi intro_unix.tex pinghua 2933 0.0 0.7 200 436 pc R 18:00 0:00 ps -uax 538 cox In the above sample session, the output from ps -aux j grep pinghua is appended to the le users.list. Safer Redirection and Appending|Redirection can easily destroy a valuable le accidentally. To avoid this, the C shell provides a protective version of redirection and appending. This works as follows: It does not allow redirection if the le already exists. It does not allow appending if the le does not already exist. This keeps you from accidentally destroying a valuable le or creating a new le just because of absent- mindedness or typing errors. The command set noclobber activates this additional protection. 539 cox set noclobber 540 cox who users.list users.list: File exists. 541 cox date status status: No such file or directory. 542 cox You may want to put set noclobber in your .cshrc le. Note: in the EML system, noclobber" is already set in the system default standard .cshrc le for all accounts. To overwrite this extra protection, use ! and ! instead of and when redirecting and appending standard output. 20 4.2 Getting the Input You Need: Input Redirection You can redirect input as well as output. For example, the mail command normally reads input from your terminal as shown in the sample session below. 546 cox mail pinghua@econ Subject: test This is a test. Please ignore.