Linux cheat sheet

Help on any Unix command. RTFM!
 man {command}Type man ls to read the manual for the ls command.
 man {command} > {filename}Redirect help to a file to download.
 whatis {command}Give short description of command. (Not on RAIN?)
 apropos {keyword}Search for all Unix commands that match keyword, eg apropos file. (Not on RAIN?)

List a directory
 ls {path}It’s ok to combine attributes, eg ls -laF gets a long listing of all files with types.
 ls {path_1} {path_2}List both {path_1} and {path_2}.
 ls -l {path}Long listing, with date, size and permisions.
 ls -a {path}Show all files, including important .dot files that don’t otherwise show.
 ls -F {path}Show type of each file. “/” = directory, “*” = executable.
 ls -R {path}Recursive listing, with all subdirs.
 ls {path} > {filename}Redirect directory to a file.
 ls {path} | moreShow listing one screen at a time.
 dir {path}Useful alias for DOS people, or use with ncftp.

Change to directory
 cd {dirname}There must be a space between.
 cd ~Go back to home directory, useful if you’re lost.
 cd ..Go back one directory.
 cdupUseful alias, like “cd ..”, or use with ncftp.

Make a new directory
 mkdir {dirname} 

Remove a directory
 rmdir {dirname}Only works if {dirname} is empty.
 rm -r {dirname}Remove all files and subdirs. Careful!

Print working directory
 pwdShow where you are as full path. Useful if you’re lost or exploring.

Copy a file or directory
 cp {file1} {file2} 
 cp -r {dir1} {dir2}Recursive, copy directory and all subdirs.
 cat {newfile} >> {oldfile}Append newfile to end of oldfile.

Move (or rename) a file
 mv {oldfile} {newfile}Moving a file and renaming it are the same thing.
 mv {oldname} {newname} 

Delete a file
 rm {filespec}? and * wildcards work like DOS should. “?” is any character; “*” is any string of characters.
 ls {filespec}
rm {filespec}
Good strategy: first list a group to make sure it’s what’s you think…
…then delete it all at once.

Download with zmodem(Use sx with xmodem.)
 sz [-a|b] {filename}-a = ascii, -b = binary. Use binary for everything. (It’s the default?)
 sz *.zipHandy after downloading with FTP. Go talk to your spouse while it does it’s stuff.

Upload with zmodem(Use rx with xmodem.)
 rz [-a|b] (filename}Give rz command in Unix, THEN start upload at home. Works fine with multiple files.

View a text file
 more {filename}View file one screen at a time.
 less {filename}Like more, with extra features.
 cat {filename}View file, but it scrolls.
 cat {filename} | moreView file one screen at a time.
 page {filename}Very handy with ncftp.
 pico {filename}Use text editor and don’t save.

Edit a text file.
 pico {filename}The same editor PINE uses, so you already know it. vi and emacs are also available.

Create a text file.
 cat > {filename}Enter your text (multiple lines with enter are ok) and press control-d to save.
 pico {filename}Create some text and save it.

Compare two files
 diff {file1} {file2}Show the differences.
 sdiff {file1} {file2}Show files side by side.

Other text commands
 grep '{pattern}' {file}Find regular expression in file.
 sort {file1} > {file2}Sort file1 and save as file2.
 sort -o {file} {file}Replace file with sorted version.
 spell {file}Display misspelled words.
 wc {file}Count words in file.

Find files on system
 find {filespec}Works with wildcards. Handy for snooping.
 find {filespec} > {filename}Redirect find list to file. Can be big!

Make an Alias
 alias {name} '{command}'Put the command in ‘single quotes’. More useful in your .cshrc file.

Wildcards and Shortcuts
 *Match any string of characters, eg page* gets page1, page10, and page.txt.
 ?Match any single character, eg page? gets page1 and page2, but not page10.
 [...]Match any characters in a range, eg page[1-3] gets page1, page2, and page3.
 ~Short for your home directory, eg cd ~ will take you home, and rm -r ~ will destroy it.
 .The current directory.
 ..One directory up the tree, eg ls ...

Pipes and Redirection(You pipe a command to another command, and redirect it to a file.)
 {command} > {file}Redirect output to a file, eg ls > list.txt writes directory to file.
 {command} >> {file}Append output to an existing file, eg cat update >> archive adds update to end of archive.
 {command} < {file}Get input from a file, eg sort < file.txt
 {command} < {file1} > {file2}Get input from file1, and write to file2, eg sort < old.txt > new.txt sorts old.txt and saves as new.txt.
 {command} | {command}Pipe one command to another, eg ls | more gets directory and sends it to more to show it one page at a time.

Permissions, important and tricky!
 Unix permissions concern who can read a file or directory, write to it, and execute it. Permissions are granted or withheld with a magic 3-digit number. The three digits correspond to the owner (you); the group (?); and the world (everyone else).Think of each digit as a sum:

 execute permission= 1
 write permission= 2
 write and execute (1+2)= 3
 read permission= 4
 read and execute (4+1)= 5
 read and write (4+2)= 6
 read, write and execute (4+2+1)= 7
 Add the number value of the permissions you want to grant each group to make a three digit number, one digit each for the owner, the group, and the world. Here are some useful combinations. Try to figure them out!
 chmod 600 {filespec}You can read and write; the world can’t. Good for files.
 chmod 700 {filespec}You can read, write, and execute; the world can’t. Good for scripts.
 chmod 644 {filespec}You can read and write; the world can only read. Good for web pages.
 chmod 755 {filespec}You can read, write, and execute; the world can read and execute. Good for programs you want to share, and your public_html directory.

Permissions, another way
 You can also change file permissions with letters:

 u = user (yourself)g = groupa = everyone
 r = readw = writex = execute
 chmod u+rw {filespec}Give yourself read and write permission
 chmod u+x {filespec}Give yourself execute permission.
 chmod a+rw {filespec}Give read and write permission to everyone.

Applications I use
 finger {userid}Find out what someone’s up to.
 gopherGopher.
 ircIRC, but not available on RAIN.
 lynxText-based Web browser, fast and lean.
 ncftpBetter FTP.
 pico {filename}Easy text editor, but limited. vi and emacs are available.
 pineEmail.
 telnet {host}Start Telnet session to another host.
 tinUsenet.
 uudecode {filename}
uuencode {filename}
Do it on the server to reduce download size about 1/3.
 ytalk {userid}Chat with someone else online, eg ytalk mkummel. Please use w first so you don’t interrupt a big download!

System info
 dateShow date and time.
 dfCheck system disk capacity.
 duCheck your disk usage and show bytes in each directory.
 more /etc/motdRead message of the day, “motd” is a useful alias..
 printenvShow all environmental variables (in C-shell% – use set in Korn shell$).
 quota -vCheck your total disk use.
 uptimeFind out system load.
 wWho’s online and what are they doing?

Unix Directory Format

Long listings (ls -l) have this format:


    - file
    d directory,                                            * executable
    ^   symbolic links (?)  file size (bytes)   file name   / directory
    ^           ^               ^                  ^        ^
    drwxr-xr-x 11 mkummel      2560 Mar  7 23:25 public_html/
    -rw-r--r--  1 mkummel     10297 Mar  8 23:42 index.html
                                            ^
     ^^^        user permission  (rwx)      date and time last modified
        ^^^     group permission (rwx)
           ^^^  world permission (rwx)

How to Make an Alias

An alias lets you type something simple and do something complex. It’s a shorthand for a command. If you want to type “dir” instead of “ls -l” then type alias dir ‘ls -l’. The single quotes tell Unix that the enclosed text is one command.Aliases are more useful if they’re permanent so you don’t have to think about them. You can do this by adding the alias to your .cshrc file so they’re automatically loaded when you start. Type pico .cshrc and look for the alias section and add what you want. It will be effective when you start. Just remember that if you make an alias with the name of a Unix command, that command will become unavailable.

Here are a few aliases from my .cshrc file:

            # enter your aliases here in the form:
	    # alias     this    means this

            alias       h       history         
            alias       m       more
            alias	q	quota -v
            alias       bye     exit
            alias 	ls 	ls -F
            alias       dir     ls
            alias 	cdup	cd ..
            alias	motd	more /etc/motd

How to Make a Script

A Unix script is a text file of commands that can be executed, like a .bat file in DOS. Unix contains a powerful programming language with loops and variables that I don’t really understand. Here’s a useful example.Unix can’t rename a bunch of files at once the way DOS can. This is a problem if you develop Web pages on a DOS machine and then upload them to your Unix Server. You might have a bunch of .htm files that you want to rename as .html files, but Unix makes you do it one by one. This is actually not a defect. (It’s a feature!) Unix is just being more consistent than DOS. So make a script!

Make a text file (eg with pico) with the following lines. The first line is special. It tells Unix what program or shell should execute the script. Other # lines are comments.

    #! /bin/csh
    # htm2html converts *.htm files to *.html
    foreach f ( *.htm )
      set base=`basename $f .htm`
      mv $f $base.html
    end

Save this in your home directory as htm2html (or whatever). Then make it user-executable by typing chmod 700 htm2html. After this a * will appear by the file name when you ls -F, to show that it’s executable. Change to a directory with .htm files and type ~/htm2html, and it will do its stuff.Think about scripts whenever you find yourself doing the same tedious thing over and over.


Dotfiles (aka Hidden Files)

Dotfile names begin with a “.” These files and directories don’t show up when you list a directory unless you use the -a option, so they are also called hidden files. Type ls -la in your home directory to see what you have.Some of these dotfiles are crucial. They initialize your shell and the programs you use, like autoexec.bat in DOS and .ini files in Windows. rc means “run commands”. These are all text files that can be edited, but change them at your peril. Make backups first!

Here’s some of what I get when I type ls -laF:

.addressbookmy email addressbook.
.cshrcmy C-shell startup info, important!
.gopherrcmy gopher setup.
.historylist of past commands.
.loginlogin init, important!
.lynxrcmy lynx setup for WWW.
.ncftp/hidden dir of ncftp stuff.
.newsrcmy list of subscribed newsgroups.
.pinercmy pine setup for email.
.plantext appears when I’m fingered, ok to edit.
.profileKorn shell startup info, important!
.projecttext appears when I’m fingered, ok to edit.
.signaturemy signature file for mail and news, ok to edit.
.tin/hidden dir of my tin stuff for usenet.
.ytalkrcmy ytalk setup.

DOS and UNIX commands

ActionDOSUNIX
change directorycdcd
change file protectionattribchmod
compare filescompdiff
copy filecopycp
delete filedelrm
delete directoryrdrmdir
directory listdirls
edit a fileeditpico
environmentsetprintenv
find string in filefindgrep
helphelpman
make directorymdmkdir
move filemovemv
rename filerenmv
show date and timedate, timedate
show disk spacechkdskdf
show filetypecat
show file by screenstype filename | moremore
sort datasortsort

Unix cheat sheet

Telnet Telnet allows you to login, albeit insecurely, to any remote machine running a telnet server. Telnet will allow you to open a shell and use simple command line unix tools on the remote machine.

>telnet fred

In this example, imagine you are telnetting to a machine named “fred”. Sometimes you may have to use the fully qualified name of the machine (e.g., Fred.arizona.edu) or use Fred’s IP address: 128.196.99.1. You will need to login to Fred and provide your password.


FtpFTP is the file transfer protocol. Like telnet, it is an old insecure protocol. It is being replaced by scp, but is still in use on some machines. FTP can operate in text or binary mode, with the prompt on or off. It can get files from the remote machine or put files on the remote machine, either singly or in large batches. By default, ftp operates in text mode with the prompt on, we usually alter these defaults at the beginning of a new ftp session. FTP will allow you to cd between directories, but it may have trouble with listing, copying, moving and removing files and directories. Telnet is better suited for these general unix commands.

To start an ftp connection from a unix machine:

>ftp Fred

As with telnet above, you may sometimes need to use Fred’s fully qualified domain name or IP address and you will need to login.

ftp>bin (this will tell ftp to transfer the data in binary mode instead of text mode. You will typically be tranferring image data, so you want to be in binary mode. In fact, it never hurts to be in binary mode, even if you are transferring text files.)

ftp>prompt (this will tell ftp not to ask you about transferring each individual file. If you are about to move dozens of files, you will want to type “prompt”).

Local and Remote Machines (Understanding get and put)

In the simplest scenario, I sit down at one machine (e.g., “Mary”) and I ftp to another machine (e.g., “Fred”):

>ftp Fred

In this case, Mary is my local machine and Fred is the remote machine.

However, it can be much more complicated. Suppose I’m sitting at home at my PC and I telnet to Mary. After logging in to Mary, I ftp Fred. Again, Mary is the local machine (the machine where I started the ftp session) and Fred is the remote machine.

Let’s make it even worse. I telnet from home to Mary. Then I telnet from Mary to Fred, and then ftp from Fred to Mary. Now Fred is the local machine and Mary is the remote machine.

To understand when to use “get” or “mget” versus “put” or “mput”, you must understand these abstract concepts of the remote and local machines. However, it does get confusing, so if you try “put” and get back a message like “no such file or directory”, then try “get” instead.

Let’s go back to the simplest case, I ftp from Mary to Fred. Mary is my local machine.

  • I should use “put” or “mput” to transfer files from Mary (local) to Fred (remote).
  • I should use “get” or “mget” to transfer files from Fred (remote) to Mary (local).

You should start your ftp session in the directory on the local machine where files to transfer reside or where you intend to place them.

You can use the “cd” command to move around on the remote machine once you have ftp’d there

ftp>cd /data/tmp

Examples

ftp>put P01000

In this example “put” is used to copy a single specified file from the local machine (specifically, from the directory you started the ftp session in) to the remote machine (the directory you are in on the remote machine).

ftp>mput P*

“mput” [multiple puts] tells ftp to copy all files that meet the criterion, in this case, all files beginning with a capital P, from the current directory on the local machine to the current directory on the remote machine.

ftp>get bird.jpg

Copy a single file “bird.jpg” from the current directory on the remote machine to the current directory on the local machine.

ftp>mget *.jpg

Copy all “*.jpg” files from the current directory on the remote machine to the current directory on the local machine.

ftp>bye

Exits the ftp session

>man ftp

Tells you more about the options and flags available with ftp.


SSHssh=secure shell (secure telnet)
To use these programs, they must be installed on both communicating machines. For a machine to receive an ssh or scp request (i.e., for it to answer when you request a connection to it) it must be running an ssh server (sshd). Typically only unix machines will run ssh servers. If you have trouble connecting to a machine with ssh, you should check to see if it is running an ssh server (or daemon):

>which sshd

>ps -ef | sshd

Same user on local and remote machines

The commands you are most likely to need:

ssh machinename (where the name of the machine or IP address is substituted for the term “machinename”), e.g.,

>ssh buddy

ssh assumes you want to be the same user on the machine you are sshing TO

as you are on the machine you are coming FROM. This can be annoying.

Different user on local and remote machines

If you want to login as a different user, use the following scheme:

ssh -l username machinename

e.g.

>ssh -l joe buddy

or

>ssh -l joe buddy.psych.arizona.edu

(-l = “login as”)

You will be asked for the password.


SCPsame user on local and remote machines

scp=secure copy (secure binary mode ftp)

Unix: You can use scp at the command line whether or not have used ssh to connect to another machine.

Windows PC: If you are using the university ssh and scp on a Windows PC, then you have a separate scp program as well as being able to use scp at the command line once you have connected with ssh.

SCP move files to or from your current location. It always uses binary mode. You can work as either the current user on the starting machine or a different user. It always asks for the user’s password. Here are some examples in which I move the file bird.jpg from one place to another. The first three examples assume you are the same user on the local and remote machines. The last example shows you how to login as someone else on the remote machine:

Put a file on a remote machine:

>scp bird.jpg buddy:/data/joe/

Get a file from a remote machine:

>scp buddy:/data/joe/bird.jpg . (the “.” means “here”)

>scp buddy:/data/joe/bird.jpg /home/fred/

(does the same thing, but just substitutes the path for “.”)

You can scp -r so that an entire directory can be copied at a time:

>scp -r e12345 buddy:/data/joe

different user on local and remote machines

Log in as someone other than who you are locally, then copy a file from your current directory to a directory (/data/fred/) on the remote machine:

>scp bird.jpg joe@buddy:/data/fred

(you will be asked for joe’s password)

Copy a file (bird.jpg) from a directory (/data/fred/) on a remote machine (buddy) where you will login as someone else (joe) to here (.)

>scp joe@buddy:/data/fred/bird.jpg .