Title: Unix Lecture 4
1Unix Lecture 4
2File Management with Shell Commands
- The verbose listing shows the file permissions of
a given file - -rwxr-xr-x
- directories have a "d" in the first column
- regular files have a "-".
- the remaining 9 characters indicate owner, group,
and world permissions of the file - An "r" indicates it's readable
- "w" is writable,
- "x" is executable
- A dash in the column instead of a letter means
that particular permission is turned off.
3File Management with Shell Commands
- r readable
- w writable
- x executable
- - permission is turned off
- -rwxr-xr-x
- a plain file that is read-write-execute by
the owner, and read-execute by group and world. - drwx------
- a directory that is read-write-execute by
owner, and group and world have no permissions at
all.
4File Management with Shell Commands
- chmod permissions file
- Changes the permissions of the named file.
- You can use numbers
- chmod 755 index.html
- The first number translates to permissions by the
owner. The second is permissions for the group. - The third is permissions for everyone.
- Number Perms
- 0 --- no permissions
- 1 --x executable only
- 2 -w- writable only
- 3 -wx writable and
executable - 4 r--- readable only
- 5 r-x readable and
executable - 6 rw- readable and
writable - 7 rwx readable, writable,
and executable
5File Management with Shell Commands
- A second way of setting permissions is with
letters - chmod urwx index.html
- chmod gorx index.html
- u is the owner's ("user's") permissions
- g is the group permissions
- o is "other" or world permissions.
- The sign turns the stated permissions on
- the sign turns them off
- If you want to change a file so that it's group
writable, but not readable or executable, you'd
do - chmod gw,g-rx index.html
6Example of a simple shell script
- This script displays the date, time,
- username and current directory.
- echo "Date and time is"
- date
- echo "Your username is whoami"
- echo "Your current directory is"
- pwd
7Example of a simple shell script
- This script displays the date, time,
- username and current directory.
- echo "Date and time is"
- date
- echo "Your username is whoami"
- echo "Your current directory is"
- pwd
8Example of a simple shell script
- This script displays the date, time,
- username and current directory.
- lines beginning with a hash () are comments and
are not interpreted by the Shell.
9Example of a simple shell script
- This script displays the date, time,
- username and current directory.
- echo "Date and time is"
- When used as a Shell command echo echo prints its
argument - When echoing multiple words, they must be placed
within quotes (single or double)
10Example of a simple shell script
- This script displays the date, time,
- username and current directory.
- echo "Date and time is"
- date
- echo "Your username is whoami"
- The backquotes () around the command whoami
illustrate the use of COMMAND SUBSTITUTION To
include the output from one command within the
command line for another command, enclose the
command whose output is to be included within
backquotes.
11Executing the shell script
- Before using a file as a shell script you must
change its access permissions so that you have
execute permission on the file, otherwise the
error message Permission deniedis displayed. - To give yourself execute permission for the file
containing the script use the command - chmod urwx display
- To run the shell script, simply type its name at
the prompt. The commands in the script will then
execute one at a time as though you were typing
them in at the terminal.
12Executing the shell script
- chmod u-x display
- display
- display Permission denied.
13Searching for something in a fileGREP
- The grep family is a collection of three related
programs for finding patterns in files. Their
names are grep, fgrep, and egrep. - The name grep has its origin in the phrase "Get
Regular Expression and Print - grep is a full-blown regular-expression matcher
- fgrep "fixed string grep only searches for
strings - egrep extended grep
14Searching for something in a filefgrep
- fgrep the easiest (but not fastest) one to use
- Syntax
- fgrep options 'search string filenames
- Interpretation
- In the name fgrep the f stands for "Fixed
string", and not "Fast" (contrary to what the man
page may tell you). The fgrep program finds all
the lines in a file that contain a certain fixed
string. So, for example, I could find all
occurrences of CA in the files in the current
working directory simply by typing this command - fgrep CA
15Searching for something in a filefgrep
- Like many UNIX filters, it can take as many file
names as you like to supply. And of course it
permits various adverbs that specify options two
useful ones are - -i ignore the difference between upper case and
lower case when deciding what is a match - -v reverse the effect of the search by
outputting only the lines that don't match - fgrep -i CA
- fgrep -v CA
16Searching for something in a filefgrep
- The key limitation of fgrep is that you cannot
use it to get approximate matches, or matches of
more complicated patterns that cannot be
described by just giving a fixed string.
Sometimes you are not quite sure what string you
are looking for for example, you might know only
that the word you are seeking begins with z and
ends with -ic, and had the sequence gm in it
somewhere. What you need, then, is not a program
that will find the matching lines for you if you
give it the exact string you need to find, but
rather a program that can understand a language
in which you can say things like "begins with z
and ends with -ic or -ics and had gm in it
somewhere."
17Searching for something in a filegrep
- called up by giving a command that has this form
- grep options pattern description
files_to_search_in - grep -i 'pullaeioumn shakespeare
bad_phone_numbers display - This means, "without distinguishing between upper
and lower case, search the files shakespeare
bad_phone_numbers display for lines that contain
pull followed by a vowel letter followed by an m
or an n". Thus it is looking for Pullum, Pullam,
Pullen, PULLUN, pullum_at_grove.ufl.edu, etc., etc. - The expression pullaeioumn is a pattern
description covering the name Pullum and most
common variants of it. Thus it is looking for
Pullum, Pullam, Pullen, PULLUN,
pullum_at_grove.ufl.edu. - The pattern descriptions used with grep are in a
language called the language of regular
expressions. This is one of the most important
and fruitful developments in modern computer
science, and in order to use grep you need to
understand regular expressions thoroughly.
18Searching for something in a filegrep
- There are various dialects of the regular
expression language that are used by various UNIX
programs. - Here we will be talking about grep and its
extended cousin egrep. (Read the excellent
summary with examples in Unix in a Nutshell,
particularly chapter 6, and do man grep on a
NetBSD machine to check the details of the GNU
grep that runs on those machines. - (GNU pronounced guh-noo, approximately like
canoe launched in 1984 to develop a complete
Unix-like operating system which is free
software, often referred to as LINUX) - Note that the grep that runs on other machines
may be a different program, with lots of
differences in its behavior from the GNU version.
19Searching for something in a filegrep
- There are various dialects of the regular
expression language that are used by various UNIX
programs. - Here we will be talking about grep and its
extended cousin egrep. (Read the excellent
summary with examples in Unix in a Nutshell,
particularly chapter 6, and do man grep on a
NetBSD machine to check the details of the GNU
grep that runs on those machines. - (GNU pronounced guh-noo, approximately like
canoe launched in 1984 to develop a complete
Unix-like operating system which is free
software, often referred to as LINUX) - Note that the grep that runs on other machines
may be a different program, with lots of
differences in its behavior from the GNU version.
20Searching for something in a filegrep
- Example The match the phrase that begins
with z at the beginning of a line and ends in -ic
or -ics at the end of the line, and it has gm in
it somewhere, is expressed in the language of
regular expressions in this form - z.gm.ics
- To be more precise, what this regular expression
means is - "beginning of line followed by z followed by
optional other material followed by gm followed
by optional other material followed by -ic
followed by zero or more occurrences of s
followed by end of line" - It can therefore be used in a grep command to
search for a word in a dictionary where each word
is on a separate line meeting the description - grep 'z.gm.ics' dictionary
- Search result zeugmatic
21Searching for something in a filegrep
- The most trivial case of a regular expression is
that of a fixed string of the sort that fgrep
recognizes. Fixed strings are regular
expressions that are matched only by strings
identical to themselves. - The regular expression Z is matched by any
occurrence of Z. There happens to be only one
line in The Great God Pan (/class/lin6932/c6932aab
/machen.txt) that matches it, namely the middle
line of these three - remained. These three, however, were 'good
lives,' but yet - not proof against the Zulu assegais and typhoid
fever, and so - one morning Aubernoun woke up and found himself
Lord - Because the middle line matches the expression Z,
you can fetch (a copy of) that line out of the
file like this - grep Z machen.txt
- not proof against the Zulu assegais and typhoid
fever, and so
22Searching for something in a filegrep
- fgrep Z machen.txt
- fgrep would do the same thing.
- But what fgrep cannot do is to call for all lines
with Au possibly followed by some other
lower-case letters and then an n. That is
accomplished by the regular expression - Aua-zn
- this RE is matched by any sequence of a capital A
followed by a lower-case u followed by zero or
more letters in the range lower-case a to
lower-case z followed by lower-case n. This means
it will be matched by any string containing a
word like word like any of these Aubernoun,
Augustine, Austin, etc.
23Searching for something in a filegrep
- fmt -1 machen.txt tr -d 'punct ' grep
'Aua-zn' sort -u - The fmt command is to break the words up and put
them one on each line - the tr -d 'punct' command erases all
punctuation, and spaces - the sort -u command sorts the search result
alphabetically
24Searching for something in a filegrep
- grep 'Aua-zn' machen.txt
- Aus t r a l a b r a c a d a b r a l a l i o l a
s i an - Au a-z n
25Searching for something in a filegrep
- Example
- The zipcodes in the near vicinity of the UC
campus are 95060 (Santa Cruz west of the river),
95062 (Live Oak), 95064 (UCSC), 95065 (East Santa
Cruz), 95066 (Scotts Valley). - Suppose you wanted to extract from a file called
addresses, containing one full name and address
on each line, just the addresses of people living
in these areas. Assume some people type a space
after CA and others don't, and some write several
spaces. - The following regular expression describes the
set of zipcodes you want - CA 9506024-6.
- This grep command will find just the lines in the
file addresses that contain zipcodes for people
who live in near the campus - grep 'CA 9506024-6' addresses
26Searching for something in a filegrep
- Example
- Suppose you want only the 9-digit zipcodes,
that's easy too - grep 'CA 9506024-6-0-9\4\' addresses
27Searching for something in a filegrep
- Example
- Suppose you were looking to see whether there
were any words beginning with a in a file called
shakespeare. - You might type
- grep a shakespeare
28Searching for something in a fileegrep
- Some simple tasks would be a bit of a chore just
using grep. Suppose we wanted to add Ben Lomond
(CA 95005), Davenport (CA 95017), and Felton
(CA 95018). What we need here is the disjunction
for the 5-digit zipcodes, the strings we want
will match either CA 9506024-6 or CA 95005 or
CA 950178 or. - Now, we can certainly do that we can simply call
grep three separate times, and amalgamate all the
results. We cannot amalgamate all the searches
into something like CA 950016024-8, because
that defines a set that is too big it lets in
95004, for example, and that's Aromas, way the
other side of Watsonville. - The way to do it is to use the extended regular
expressons provided by the egrep program. In
egrep, you can use parentheses to group parts of
the expression and the pipe symbol to mean or. So
(AB)C means "either AB or C", while A(BC) means
"A followed by either B or C", and so on. Thus we
could use egrep 'CA 950((05)(6024-6)(178)
)' addressesThere are a few other things that
egrep allows but grep does not. For example, in
egrep regular expressions you can say a to mean
"a sequence of one or more as", or a-z to mean
"a sequence of one or more lower-case letters".
In grep regular expressions you would have to say
aa and a-za-z respectively to get these
effects.
29Searching for something in a fileegrep
- The way to do it is to use the extended regular
expressons provided by the egrep program. In
egrep, you can use parentheses to group parts of
the expression and the pipe symbol to mean or. So
(AB)C means "either AB or C", while A(BC) means
"A followed by either B or C", and so on. Thus we
could use egrep 'CA 950((05)(6024-6)(178)
)' addressesThere are a few other things that
egrep allows but grep does not. For example, in
egrep regular expressions you can say a to mean
"a sequence of one or more as", or a-z to mean
"a sequence of one or more lower-case letters".
In grep regular expressions you would have to say
aa and a-za-z respectively to get these
effects.
30Searching for something in a fileegrep
- So we can use
- egrep 'CA 950((05)(6024-6)(178))'
addresses - There are a few other things that egrep allows
but grep does not. For example, in egrep regular
expressions you can say a to mean "a sequence of
one or more as", or a-z to mean "a sequence of
one or more lower-case letters". In grep regular
expressions you would have to say aa and
a-za-z respectively to get these effects.
31File Management with Shell Commands
- Changing to another directory
- cd .. RETURN go up a directory tree
- cd DIRECTORY RETURN change to a
subdirectory - cd /tmp to change to some other
directory on the system, - you must type the full path name
32File Management with Shell Commands
- Create a directory
- mkdir DIRECTORY.NAME RETURN
- Remove a directory
- rmdir DIRECTORY.NAME RETURN
33Searching for something in a file
- cd ..
- cd c6932aab
- ls
- display shakespeare
- cp shakespeare c6932aad
- cd
- ls
- shakespeare
34Searching for something in a file
- grep options pattern filenames
- fgrep options string filenames
- fgrep (or "fast grep") only searches for strings
- grep is a full-blown regular-expression matcher
- Some of the valid options are
- -i case-insensitive search
- -n show the line along with the matched line
- -v invert match, e.g. find all lines that do
NOT match - -w match entire words, rather than substrings
35Searching for something in a filewith GREP
- grep -inw thou" shakespeare
- find all instances of the word though" in the
file shakespeare, case-insensitive but whole
words and display the line numbers
36Grep
- grep 'smug' files 'smug' at the start
of a line - grep 'smug' files 'smug' at the end of
a line - grep 'smug' files lines containing
only 'smug' - grep '\s' files lines starting with
's' - grep 'Ssmug' files search for 'Smug' or
'smug' - grep 'BoObB' files search for BOB, Bob,
BOb or BoB - grep '' files search for blank
lines - grep '0-90-9' file search for pairs of
numeric digits
37Grep
- grep 'a-zA-Z0-9 anything not a
letter or number - grep '0-9\3\-0-9\4\' 999-9999,
like phone numbers - grep '.' lines with
exactly one character - grep '"smug"' 'smug'
within double quotes - grep '"smug"' 'smug', with or
without quotes - grep '\.' any line that
starts with "." - grep '\.a-za-z' line start with "."
and 2 lc letters
38Egrep
- The version of grep that supports the full set of
operators mentioned above is generally called
egrep - (for extended grep)
- egrep '(minemy)' shakespeare