CS 279 - Week 11 Lecture 1 - 2022-10-31
TODAY WE WILL:
* announcements
* intro to the find command
* intro to tar and gzip/gunzip
* (if time) intro to head and tail
* [did not get to today] (if time) intro to sed
* prep for next class
* Should be working on Homework 7!
* attempts due by 11:59 pm November 4
* Exam 2 will be given in class on Wednesday, November 9
* So: example solutions will hopefully be posted
by 12:01 am on Monday, November 7
* So: any improved versions of non-Canvas-question
problems on Homeworks 4-7 need to be submitted
by 11:59 pm on Sunday, November 6
* (We'll review for Exam 2 in class on Wednesday, November 2,
then there is NO LAB on THURSDAY, NOV 3rd,
because I'll be traveling to a conference)
=====
intro to find!
=====
* find can be used to locate files on a UNUX/Linux system
It will search any set of directories you specify
for files that match the supplied search criteria
* You can search for files by name, owner, group, type,
permissions, date, and other criteria
* its search is recursive -- it WILL search subdirectories,
subdirectories of subdirectories, etc.
* The basic structure of its syntax:
find where-to-look desired-criteria what-to-do
* there are often defaults if you don't specify all 3
of where-to-look, desired-criteria, and what-to-do --
BUT these defaults can vary on different Linux/UNIX
versions/distributions
* for example: if not specified, where-to-look often
defaults to . <-- the current directory
criteria often defaults to all files
what-to-do defaults to -print (display the names of
found files to standard output)
* another popular criteria option:
-name desired-filename # searches for files with that filename
* FOR EXAMPLE...
find ~ -name moo.txt -print
* this WILL complain for directories you don't have permission
to read --
2> is useful for redirecting these error messages elsewhere
(indeed, to /dev/null if you really don't care about ever
checking out all of them...)
find ~ -name moo.txt -print 2> /dev/null
find ~/public_html -name index.php -print | wc -l
* counts the number of files named index.php in the
public_html directory and all of its subdirectories
* NOTE: you CAN use file globbing wildcards in the
files you want to look for,
BUT you need to escape them or quote them (single and double
quotes both SEEM to work) so they won't be expanded too soon
(so they won't be expanded before "giving" them to the find command)
find ~ -name \*.cpp -print
find ~ -name "*.cpp" -print
find ~ -name '*.cpp' -print
* a taste of a few more find criteria:
-type - look for files of the specified type
find . -type d -print # listing directories reachable from
# the current directory
and -type f would search for regular files, etc.
-perm - look for files with specified permissions
-mtime - last modified time
-mmin - modified number of minutes ago
=====
tar
=====
* (in UNIX/Linux)
archive - a collection of files in which each file is
labelled with information about its origin
two main purposes:
* backing up a group of files so they can be restored if
they are lost or damaged
* packaging a group of files (including whole directories of
files) for transmission to another computer
* tar is ONE such program for creating archives
tar - the name DOES stand for "tape archive"
* because WAS originally used to read and write archives
stored on magnetic tape...! BUT tapes are not required to
use tar!!!
* another command with MANY options --
I am focusing on the 4 I've used most often
My most frequent use of tar: to package a directory of files
to send somebody
tar cvf desired-archive-name.tar original-directory
* c - create this new archive desired-archive-name using this
file/directory original-directory
* v - optional option - verbose - output info about
the tarring in progress
* f - take the archive pathname from the next argument
* to list the contents of a tar file/tarball,
can use the t and options (t: list the contents of the archive)
tar tf blah.tar
* to extract all of the files from a tar file?
option x, for extract, is what you want
tar xvf desired_tar.tar
* ...and there are more options...! see man tar
* fun fact: tar in general does not provide data compression,
at least according to my possibly-old sources;
BUT that's ok, you CAN compress the resulting archive!!
* for fun:
https://xkcd.com/1168/
=====
gzip, gunzip
=====
* the GNU versions of the commands zip and unzip
(two of SEVERAL programs for file compression)
* uses Lempel-Ziv compression (in case you'd like to
Google that!)
* "UNIX for the Impatient" claims typical compression rates
are 60-70% for natural language files and computer source code
files
* gzip desired_file
...results in a compressed file desired_file.gz
gunzip desired_file.gz
...results in the uncompressed file desired_file
(if the gzipped file happens to be a tar file,
tar xvf IS "smart" enough to note the .gz suffix
and uncompress it, also...)
* a few options:
* there are options for also keeping the original file unchanged,
changing the suffix, specifying not to keep the original date
and time stamp while compressing, etc.
* -v - (verbose) display the name of each compressed or expanded
and percentage by which it was reduced
=====
head and tail!
=====
* head extracts the beginning of a file, or several files
head [-n num] [files....]
* by default, it grabs the first 10 lines
(and with -n num, it grabs the first num lines)
* tail extracts the end of a file, or several files
tail [-n num] [files...]
* by default, does it grab the last 10 lines of the file
(and with -n num, it grabs the last num lines)