Winter 2014 - January to April 2014 - Updated 2014-03-20 20:22 EDT
Do not print this assignment on paper!
- On paper, you will miss updates, corrections, and hints added to the online version.
- On paper, you cannot follow any of the hyperlink URLs that lead you to hints and course notes relevant to answering a question.
- On paper, scrolling text boxes will be cut off and not print properly.
12h00 (noon) Tuesday March 18, 2014 (middle of Week 9)
Do not print this assignment on paper! On paper, you cannot follow any of the hyperlink URLs that lead you to hints and course notes relevant to answering a question.
This assignment is based on your weekly Class Notes.
crontab
, and at
.Remember to READ ALL THE WORDS to work effectively and not waste time.
This is an overview of how you are expected to complete this assignment. Read all the words before you start working.
When you are finished the tasks, leave the files, directories, cron
jobs, and at
jobs in place as part of your deliverables. Do not
delete any assignment work until after the term is over! Assignments
may be re-marked at any time; you must have your term work available
right until term end.
The previous term’s course notes are available on the Internet here: CST8207 GNU/Linux Operating Systems I. All the notes files are also on the CLS. You can learn about how to read and search these files using the command line on the CLS under the heading Copies of the CST8207 course notes near the bottom of the page Course Linux Server.
All references to the “Source Directory” below are to the CLS directory
~idallen/cst8177/14w/assignment07/
and that name starts with a
tilde character followed by a userid with no intervening slash.
Do a Remote Login to the Course Linux Server (CLS) from any existing computer, using the name appropriate for whether you are on-campus or off-campus. All work in this assignment must be done on the CLS.
Make the directory ~/CST8177-14W/Assignments/assignment07
, in which you will
create the files and scripts resulting from the following tasks.
This assignment07
directory is the base directory for most pathnames
in this assignment. Store your files and answers below in this base
assignment07
directory.
Run the Checking Program to verify your work so far.
Some of the tasks below ask you to write a small executable shell script, based on the lecture notes and slides. All scripts should begin with the Script Header you used for your previous assignments.
Some scripts contain simple one-line pipelines. You can first create these pipelines on the command line, get them working correctly, then copy the working pipeline into the script file when it works. It is much faster to test and fix the pipeline on the command line instead of editing and saving the script file over and over.
When you have completed each script, ensure that it is executable,
so that it can be run as ./scriptname.sh
.
Scripts must validate their arguments, even if they take no arguments. (A script that takes no arguments must not run if you give it arguments, since clearly you don’t know how to use it.) Error messages must be written in the style of Good Error Message, as you did in the previous assignment. Always follow the Good Error Message with a Usage message that says how the script should be run.
Scripts that have usage errors should exit with a non-zero exit code, indicating something went wrong.
Before you write any scripts, re-read the above section with the title Review of How To Write and Test Scripts.
ps
command and a pipeline of one or more
commands to select only those ps
output lines that match the userid
and the name.
process_id.sh
./process_id.sh
username
process
process
name owned by the given
username
.2
.roo
or oot
. (Test this!)ps
that look like process names.
Often, the script will incorrectly print the grep
command
that is being used to select the right ps
output line inside
the script; don’t do that. Show only the required output.ps
that show all
processes! Use only the two options described next:ps
command has a useful option to display only
processes with a particular command name. Using this option to
select only lines that contain that command name makes the
script much simpler, since otherwise it is tricky to use
grep
to match a process name in the middle of a line of ps
output. If you don’t use this option to ps
(use the option!),
you must select the process name carefully by choosing some
surrounding context from the output lines using grep
.ps
generate
a userid at the start of every output line. See the man page
for either the full-format or user-oriented output format.
Once you have selected lines that have the right command name,
selecting lines containing the correct userid is easy since
the userid field can always be matched anchored at the start of
every line.ps
that you use a pattern that ensures that the entire
userid is matched and not just a prefix or a suffix.
The script should not show any lines for partial userids such
as roo
or oot
. (Test this!)./process_id.sh "$USER" process_id.sh
signaltrap.sh
which is located in the Source
Directory. You’ll notice this script doesn’t print anything –
it just sits there doing nothing, and you don’t get your bash
prompt back because the script isn’t finished yet. The bash
prompt won’t appear until the script process is finished or stopped.^C
to try to interrupt this script process (send it an
INT
signal).
INT
signal. It “caught” the signal and
refused to die.signaltrap_output
.^Z
to send a STOP
signal to the script process.
bash
prompt back and see a message
about the script process being Stopped
by the signal.bg
to resume the script process running in the background.process_id.sh
script from above to find the
process id of this background script process.
process_id.sh
script can’t find signaltrap.sh
you may need to adjust it to find commands that are shell scripts.
(This may be tricky if you aren’t using the ps
option
described in the Hints for the ./process_id.sh
script.)signaltrap.sh
script process a
TERM
signal (terminate) and notice that this too didn’t make
the process do the expected terminate action (clean up and die).signaltrap.sh
process a KILL
signal.
KILL
signals can’t be ignored, so it should be gone – verify this.PID
of any process owned by root
or by another user,
and try sending it a KILL
signal (or any signal).
Run the Checking Program to verify your work so far.
Before you write any scripts, re-read the above section with the title Review of How To Write and Test Scripts.
elinks
with the
given options (reproduced below) to retrieve the current Ottawa
temperature from the given XML RSS feed URL:
elinks -dump -no-numbering -no-references
URL
URL
contains shell meta-characters, such
as ?
, you must
quote the URL to prevent expansion by the shell.
Hide all special characters in the URL from the shell.elinks
defaults to fetching pages using the UTF8 character
set, which may not display well on your screen. You can change
the character set using the elinks
-dump-charset
option
followed by the name of a new character set. (Try the names
ascii
, latin1
or the default utf8
.)elinks
output into fgrep
to extract the line
containing the word Temperature:
from the XML RSS page.
The pipeline will print one line of current temperature from
the XML RSS page.
temperature.sh
that
prints out the current temperature for Ottawa.
alias
in your script; use the full
elinks
command line with the correct URL. (Scripts
never use aliases, since aliases are meant to save typing
by humans, not by scripts.)temperature.sh
script in your
own bin/
directory and name the link otemp
otemp
at a shell prompt to
have the one line of current temperature display. (If this
command isn’t found, perhaps you haven’t set your PATH
in your
.bashrc
as required in
Section 4.4 of Assignment #02?)Run the Checking Program to verify your work so far.
mail
commandIndexSystem administrators often have systems send them automated email. There are many text-mode email clients (“Mail User Agents”) for Linux. This assignment uses the one named
mutt
(man mutt
).
mail
command and try sending yourself email
from the CLS to your own email account:
echo "Testing mail command." | mail -s "Test"
abcd0001
@algonquinlive.com
abcd0001
with your own Algonquin email address.mail
program.temperature.sh
weather script to your Algonquin
email address with the subject: Current Ottawa Temperature
-dump-charset latin1
or -dump-charset ascii
to the elinks
command line in
your temperature.sh
script.-dump-charset latin1
or -dump-charset ascii
to the elinks
command line in
your temperature.sh
script.mail_temperature.sh
that will use your
temperature.sh
script and email the current Ottawa temperature to
your Algonquin email address (or to your phone).
(You already know what command line will do this, from above.)
temperature.sh
script to generate the one line of temperature
data for the script pipeline.elinks
line inside this new mail script;
your new script must email the output created by running your
temperature.sh
script (that contains the elinks
line).temperature.sh
script. (Of course, you won’t
be able to fully test it without a working temperature.sh
script.)temperature.sh
in your script?mail_temperature.sh
script in your
own bin/
directory and name the link mail_temperature
mail_temperature
at a
shell prompt to have the temperature sent to you by email. (If this
command isn’t found, perhaps you haven’t set your PATH
in your
.bashrc
as required in
Section 4.4 of Assignment #02?)mail_temperature
is a very long name to type, find a way to create
another name for this script that is shorter and faster to type.
(You choose the name; nobody is looking.) (Hint: Perhaps another
hard link in your bin/
directory, or perhaps create a shorter shell
alias
?)Run the Checking Program to verify your work so far.
crontab
IndexThe
crontab
command is used to create tasks that are run repeatedly by the systemcron
daemon program. These are commonly calledcron
jobs. You can create personalcron
jobs. There is also a system file containing systemcron
jobs that only the super-user can edit.
Read the course notes and the man page for the crontab
command.
Run the CLS command select-editor
to choose a text editor for
use by the crontab
command. (Isn’t it time you learned some vim
?)
Run crontab -e
to start the selected text editor to edit your personal
crontab
file. In this editor, experiment by creating a crontab
line
that runs in the near future to make sure you know how cron
jobs
work:
crontab
that runs the date
command every minute.crontab
file.crontab
command lines
into a file, the output will be sent to you by email. You will
need to use the mail
program to see the emailed output
generated by your cron
jobs.crontab
command to edit and experiment with other
valid crontab
lines that run in the near future.crontab
command to remove the test crontab
when you
know enough about how to create working cron
jobs.Now, create a crontab
designed to run your mail_temperature
program at 10:14am on the first day of every month.
bin/
directory) and use this time/date.crontab
using times in the near future while
you are testing your cron
job to make sure it works.crontab
file correctly even if you have
not got a working mail_temperature
script. (Of course you
won’t receive the correct output without a working
mail_temperature
script.)Use the crontab
command with option that lists the contents of your
current live crontab
file. Make sure your displayed cron
job is
scheduled for 10:14 on the first day of every month.
Repeat the above command and redirect the contents of your current
live crontab
file into a mail_weather.crontab
text file in the
base directory. (It should be one valid crontab
line.)
In your cron
job, did you use a relative path to the mail_temperature
script name (the name is located in your own bin/
directory)? You need
to know in which directory the cron
job runs, to create the correct
relative path to the mail_temperature
program in your bin/
directory.
Run the Checking Program to verify your work so far.
at
IndexThe
at
command is used to create a task that runs only once at some future date and time. These are commonly calledat
jobs. There is no system file ofat
jobs, since these jobs only run once.
at
command and
note the syntax used to schedule an at
job in the future.
Experiment with some at
command lines that run in the near
future to make sure you know how it works. (If you don’t redirect the
output of your tests, the output will be sent to you by email. You
will need to use the mail
program to see the emailed output
generated by your at
jobs.)at
command to schedule a run of your mail_temperature
program at 09:00am, December 25, 2014.
Use this basename as part of the absolute program pathname and use
this exact time/date to schedule your at
job.
You will need to experiment with times in the near future while you
are testing the at
command to make sure it works, but make sure you
leave one correctly dated at
job queued for marking.
at
job correctly even if you have
not got a working mail_temperature
script. (Of course you
won’t receive the correct output without a working
mail_temperature
script.)at
job
numbers and display the list to make sure your December 25 job is there.In your at
job, did you use an absolute path to the mail_temperature
script name (the name is located in your own bin/
directory)?
at
jobsYou may forget what command is scheduled in a job. What is the command
syntax to show you the content of a scheduled at
job, not just
the job number? (NOTE: The command that lists all your at
job numbers is
not the same as the command that shows you what the content of the job
actually is!)
In other words, use a command to display the actual command line that you
submitted when you created the at
job, along with all the environment
information that the system adds to your at
job.
at
job and redirect it into file atjob.txt
in your base directory.
The file should start with a shebang line and contain about 30 lines
(approximately), most of which are variable assignment statements.Usually we don’t care to see all the environment information at the start
of the queued at
job file. Assuming that the command being run by at
is only one line long (as it is for our December 25 job), how can you show
only the one-line command line itself on your screen and not see all
of the associated shell environment that is created as part of the job?
(Hint: One command with one pipe will show just the last line.)
Run the Checking Program to verify your work so far.
That is all the tasks you need to do.
Check your work a final time using the Checking Program and save the output as described below. Submit your mark following the directions below.
Summary: Do some tasks, then run the checking program to verify your work as you go. You can run the checking program as often as you want. When you have the best mark, upload the marks file to Blackboard.
Since I also do manual marking of student assignments, your final mark may not be the same as the mark submitted using the current version of the Checking Program. I do not guarantee that any version of the Checking Program will find all the errors in your work. Complete your assignments according to the specifications, not according to the incomplete set of the mistakes detected by the Checking Program.
There is a Checking Program named assignment07check
in the
Source Directory on the CLS. Create a symbolic link to this program
named check
under your new assignment07
directory so
that you can easily run the program to check your work and assign
your work a mark. Note: You can create a symbolic link to this
executable program but you do not have permission to read or copy
the program file.
Execute the above “check” program using its new symbolic link. (Review the Search Path notes if you forget how to run a program by pathname from the command line.) This program will check your work, assign you a mark, and display the output on your screen. (You may want to paginate the long output so you can read all of it.)
You may run the “check” program as many times as you wish, to correct mistakes and get the best mark. Some task sections require you to finish the whole section before running the checking program at the end; you may not always be able to run the checking program successfully after every single task step.
When you are done with checking this assignment, and you like what
you see on your screen, redirect the output of the Checking Program
into the text file assignment07.txt
under your assignment07
directory on the CLS. Use the exact name assignment07.txt
in your
assignment07
directory. Case (upper/lower case letters) matters.
Be absolutely accurate, as if your marks depended on it. Do not
edit the file.
YOUR MARK for
Transfer the above assignment07.txt
file from the CLS to your local
computer and verify that the file still contains all the output from
the checking program. Do not edit this file! No empty files, please!
Edited or damaged files will not be marked. You may want to refer
to your File Transfer notes.
YOUR MARK for
Submit the assignment07.txt
file under the correct Assignment
area on Blackboard (with the exact name) before the due date.
Upload the file via the assignment07 “Upload Assignment” facility
in Blackboard: click on the underlined assignment07 link in
Blackboard. Use “Attach File” and “Submit” to upload your
plain text file.
No word-processor documents. Do not send email. Use only “Attach File”. Do not enter any text into the Submission or Comments boxes on Blackboard; I do not read them. Use only the “Attach File” section followed by the Submit button. If you need to comment on any assignment submission, send me email.
You can upload the file more than once; I only look at the most recent. You must upload the file with the correct name; you cannot correct the name as you upload it to Blackboard.
Verify that Blackboard has received your submission: After using the Submit button, you will see a page titled Review Submission History that will show all your submissions.
You will also see the Review Submission History page any time you already have an assignment attempt uploaded and you click on the underlined assignment07 link.
You cannot delete an assignment attempt, but you can always upload a new version. I only mark the latest version.
Your instructor may also mark files in your directory in your CLS account after the due date. Leave everything there on the CLS. Do not delete any assignment work from the CLS until after the term is over!
I do not accept any assignment submissions by email. Use only the Blackboard Attach File. No word processor documents. Plain Text only.
Use the exact file name given above. Upload only one single file of plain text, not HTML, not RTF, not MSWord. No fonts, no word-processing. Plain text only.
Did I mention that the format is plain text (VIM/Nano/Pico/Gedit or TextEdit or Notepad)?
NO EMAIL, WORD PROCESSOR, PDF, RTF, or HTML DOCUMENTS ACCEPTED.
No marks are awarded for submitting under the wrong assignment number or for using the wrong file name. Use the exact 16-character, lower-case name given above.
WARNING: Some inattentive students don’t read all these words. Don’t make that mistake! Be exact.
READ ALL THE WORDS. OH PLEASE, PLEASE, PLEASE READ ALL THE WORDS!