Nothing Special   »   [go: up one dir, main page]

Unix-Linux Commands and Shell Programming

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 22

Unix/Linux commands and shell programming

Clemson University PARL


Presented by Tim Shelling, UNIX guru

UNIX Overview
Why UNIX?
Control
Commands often provide complete access to the system and its devices Most devices can be manipulated just like files

Flexibility
Commands are just programs Commands have common interface to allow interoperation with other commands The UNIX shells provide the glue for this `

Reliability
Commands are typically lightweight since they typically do little more than invoke operating system calls Individual commands that are broken can easily be replaced

Summary: All the above translate into POWER

UNIX: The Command Line


Accessing UNIX through a terminal
telnet [hostname] [port]

The omnipresent failsafe. Nowadays, turned off due to lack of adequate security.
Secure. Data is encrypted over the wire. What we use. Not always available outside CU due to different versions, implementations, platform availability.

ssh [user@]hostname

Log in!
3 tries to get valid username and password right

Show who is logged in


w or who finger

Logout!
exit CTRL-D

UNIX: Accessing Documentation


Commands are generally documented using the command man.
man pages are subdivided into various sections Example: Documentation of the man command
man man

Example: Documentation of the time command


man time

Example: Documentation of the time C library function


man 3 time

man will present the manual page of the specified entry using more or less.
In Linux, the default is less, but can be overridden less presents a screen-full at a time. spacebar moves forward, b moves backward, $ moves to end, q quits, ? helps.

UNIX: Accessing Documentation


A few commands (such as diff, gcc, awk) are doccumented using info.
info is GNU-specific Uses its own hypertext viewer.
arrow-keys select different links space pages forward u goes back up a hyperlink level, like back in browsers

Most commands have HTML references on the WWW. Dont panic. Just e-mail me or Dan.

UNIX terminal management: screen


Help Copy/Scrollback Paste Lock Detach New Screen Next/Previous Reattach List active CTRL-A ? CTRL-A [ CTRLA ] CTRL-A x CTRL-A d CTRL-A c CTRL-A n / CTRL-A p screen D A r screen -ls

UNIX: Getting around the filesystems


UNIX files are organized just like they are with PCs and MACs
Files are contained in collections of Directories. Directories may contain other Directories Different drives are mounted onto directories there are no drive letters!! The top level directory is called the root directory and is referred to by / The current directory is referred to by . The directory one level up is referred to by .. More dots dont get you more levels up. Shortcuts in Windows are called soft-links. Act just like normal files, directories, or whatever it is they refer to. Other filetypes include named pipes, character devices, block devices, sockets.

UNIX: Getting Around


Commands to navigate the directories:
pwd ls
ls file; ls directory ; ; ls a ; ls l ; ls -R

cd
cd cd cd cd cd .. /home/tim/projects ~/projects ~tim/projects $HOME/projects

mkdir rmdir mv
mv oldfilename newfilename mv file1 file2 file3 newtargetdirectory

cp rm push pop find

-- syntax like mv

cp r dir1 dir1copy

find . ls find . type d print find . type f exec echo {} ;

UNIX: More Standard Commands


echo print out a string echo $HOME is where I want to be cat Output specified files in sequence cat file1 file2 file3 whereis Show where a file can be found printenv Display all environment variables grep Get Regular Expression and Print head first few lines of output head -5 tail last few lines of output tail -8

UNIX command line tricks


Shell glob
# mkdir /tmp/moved # mv * /tmp/moved # cp /tmp/moved/* .

Filename Completion (tcsh, bash)


# ls /tmp/m<TAB>

Command line history (tcsh)


history CTRL-P and CTRL-N, down/up arrows !previous Runs the previous command beginning with the word previous.

UNIX: The SHells


The Shell is simply another program which provides a basic human-OS interface. Shells can run interactively or as a shell script Two main flavors of Shells:
Bourne created what is now known as the standard shell: sh, or bourne shell. Its syntax roughly resembles Pascal. Its derivatives include ksh (korn shell) and now, the most widely used, bash (bourne shell). One of the creators of the C language implemented the shell to have a C-programming like syntax. This is called csh or C-shell. Todays most widely used form is the very popular tcsh.

Unix: SH basics
Modifying environment variables
sh: PAGER=/usr/bin/less; export PAGER bash: export PAGER=/usr/bin/less tcsh: setenv PAGER /usr/bin/less

Execute an external command (sh)


# somecommand somecommand: command not found # echo $PATH /home/tim/bin:/usr/local/bin:/usr/bin:/bin # pwd /home/tim/bin/project1 # ./somecommand Hello world! # /home/tim/bin/project1/somecommand Hello world! # PATH=$PATH:`pwd`; export PATH # somecommand Hello world!

UNIX: Bourne SHell script syntax


The first line of a sh script must start as follows:
#!/bin/sh

Any unquoted # is treated as the beginning of a comment until endof-line Every line is first parsed for shell metacharacters. These include characters that the shell will do something with and include:
#&><$%*[]?!`~;|, {}

Distinct commands may be separated by end-of-line, semicolon, or comma Environment variables are $EXPANDED Back-tick subshells are executed and `expanded` Pipelines are created | joining the output of | one program | with the next Any commands left over must be builtins or external commands. An error will fail the pipeline, but the script will continue!

Unix Pipelines: Pipes are smokin!


Pipes take the output of the first program and feed that output into the input of the next program. Also sometimes known as filters. Examples:
last | less last | grep ^root | less last | grep ^root | cut -d -f 2 | less grep error something.out | tail -1

Unix redirection: Lesser and Greater


>&filename redirects the standard output and error to the file called filename:
last | grep ^root >& root-logins.txt less root-logins.txt

>filename redirects just standard output Dont Clobber me! By default, > will overwrite existing files, but you can turn this off using shell settings and/or environment variables. Appendicitis! You can append to existing files this way:
- sh: >>filename >&1 - csh: >>&filename

Use < to redirect a file to a commands standard input


# cat calculation.txt (3+2)*8 # bc < calculation.txt 40

Useful when a program does not already query the command line for files to read

Unix Shell Scripting: Conditional Execution


program1 && program2
Program 2 will execute if and only if program1 exited with a 0 status Example:
project1 && echo Project1 Finished correctly!

program1 || program2
Program 2 will execute if and only if program1 exited with a non-0 status Example:
project1 || echo Project1 FAILED to complete!

Exit a script with an error:


exit 1

UNIX commands for programmers


man k time date test tee diff sdiff wc sort gzip gunzip strings ldd nm Search man pages by topic How long your program took to run print out current date/time Compare values, existence of files, etc Replicate output to one or more files Report differences between two files Report differences side-by-side Show number of lines, words in a file Sort a file line by line Compress a file Uncompress it Print out ASCII strings from a (binary) Show DLLs/SOs program is linked to Show detailed info about a binary obj

Unix Shell scripting: foreach loops


These are useful when you want to run the same program in sequence with different filenames. sh example:
for VAR in test1 test5 test7b finaltest; do runmycode $VAR >$VAR.out done

csh example:
foreach VAR ( test1 test5 test7b finaltest ) runmycode $VAR >$VAR.out end

Unix job control


Start a background process:
program1 & program1 Hit CTRL-Z bg

Where did it go?


jobs ps

Terminate the job: kill it


kill %jobid kill pid

Bring it back into the foreground


fg %1

Start a job in the future


at

Regular Expressions
Powerful language for specifying strings of text to be searched and/or manipulated. Used by
grep sed awk perl Get Regular Expression and Print search files line by line Simple Editing tool, right from the command line Scripting language, executes program on matching lines Pathological Rubbish Lister. Powerful programming language

Note: These are not file-globs. The syntax is similar, but the semantics are slightly different! Cannot be used to match nested structures

Regular Expressions: Summary


Fundamentals:
Match the specified character unless it is a ... . Match any character (except EOL) [character class] Match the characters in character class. [start-end] start to end [^character class] Match anything except the character class. $ Match the end of the line ^ Match the beginning of the line * Match the preceeding expression zero or more times ? Match the preceeding zero or one time | Match the lef hand side OR the right side (regexp) Group the regular expression \ Treat next character literally (not specially)

Examples:
Match a line beginning with a space-padded line number and colon. ^[ \t]*[0-9][0-9]*: Match my name (various spellings) (Tim Shelling)|(TJS)|(T\. Shelling)|(Timothy J\. Shelling) Match if the line ends in a vowel or a number: [0-9aeiou]$ Match if the line begins with anything but a vowel or a number: ^[^0-9aeiou]

Getting files from and to Unix


Windows PC DOS/Win Floppy Disk Internet SAMBA FTP/SFTP mcopy, mdir, mdel, etc FTP, ncftp lwp-download mail ar tar zip, unzip (if available)

Archives

You might also like