<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>
<div>Highly enjoyable. Today it's at.</div><div><br></div><div><br></div><div id="composer_signature"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><div style="font-size:88%;color:#364f67">David L. Willson</div><div style="font-size:88%;color:#364f67">720-333-LANS</div></div><br><br>-------- Original message --------<br>From: Linux Journal <subs@linuxjournal.com> <br>Date: 12/14/18 5:30 AM (GMT-07:00) <br>To: dlwillson@thegeek.nu <br>Subject: 12 DAYS OF LINUX TECH TIPS #8 <br><br>
<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#f2f2f2">
<tbody><tr>
<td align="center" valign="top">
<table width="650" border="0" cellspacing="0" cellpadding="0" class="mobile-shell">
<tbody><tr>
<td class="td" style="width:650px;min-width:650px;font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="header" style="padding-top:60px;padding-bottom:40px;padding-right:0px;padding-left:0px;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<th class="column-bottom" width="261" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;vertical-align:bottom;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="text-header" style="color:#000000;font-family:'Open Sans', Arial,sans-serif;font-size:12px;line-height:16px;text-align:left;font-weight:bold;text-transform:uppercase;"><p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
12 Days of Tech Tips #8</p>
</td>
</tr>
</tbody></table>
</th>
<th class="column-empty" width="1" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;vertical-align:top;"></th>
<th class="column" width="125" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="img-center" style="font-size:0pt;line-height:0pt;text-align:center;"><a href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-j/" target="_blank" style="color:#dc2427;text-decoration:none;"><img src="http://i8.cmail19.com/ti/j/24/755/399/051327/images/logo.jpg" width="125" border="0" style="-ms-interpolation-mode:bicubic;" id="1544799306064"></a></td>
</tr>
</tbody></table>
</th>
<th class="column-empty" width="1" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;vertical-align:top;"></th>
<th class="column-bottom" width="262" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;vertical-align:bottom;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="text-header right" style="color:#000000;font-family:'Open Sans', Arial,sans-serif;font-size:12px;line-height:16px;font-weight:bold;text-transform:uppercase;text-align:right;"><a href="https://linuxjournal.cmail19.com/t/j-e-phdtkkl-jrhdlhhdjy-n/" class="link" style="color:#dc2427;text-decoration:none;">view in browser »</a></td>
</tr>
</tbody></table>
</th>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td class="main" bgcolor="#ffffff" style="padding-top:50px;padding-bottom:0px;padding-right:0px;padding-left:0px;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="head" style="padding-top:15px;padding-bottom:15px;padding-right:50px;padding-left:50px;border-top-width:1px;border-top-style:solid;border-top-color:#f2f2f2;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#f2f2f2;color:#000000;font-family:'Open Sans', Arial,sans-serif;font-size:16px;line-height:24px;text-align:center;text-transform:uppercase;font-weight:bold;">
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
<span style="font-size:22px;"><strong>12 DAYS OF LINUX TECH TIPS FOR YOU THIS HOLIDAY SEASON! JOIN US TODAY FOR TECH TIP #8</strong></span></p>
</td>
</tr>
</tbody></table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="section" style="padding-top:0px;padding-bottom:40px;padding-right:50px;padding-left:50px;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="fluid-img pb30" style="font-size:0pt;line-height:0pt;text-align:left;padding-bottom:30px;"><a href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-t/" target="_blank" style="color:#dc2427;text-decoration:none;"><img src="http://i1.cmail19.com/ei/j/C6/11F/472/csimport/bigstock--187641571_0.153221.jpg" width="549" border="0" alt="Terminal" height="322" style="-ms-interpolation-mode:bicubic;" id="1544799306065"></a></td>
</tr>
<tr>
<td class="h2 center pb10" style="color:#000000;font-family:'Lateef', Georgia, serif;font-size:40px;line-height:44px;text-align:center;padding-bottom:10px;"><p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Schedule One-Time Commands with the UNIX at Tool</p>
</td>
</tr>
<tr>
<td class="text2 center pb25" style="color:#777777;font-family:'Open Sans', Arial,sans-serif;font-size:12px;line-height:16px;font-style:italic;text-align:center;padding-bottom:25px;"><p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Kyle Rankin</p>
</td>
</tr>
<tr>
<td class="text pb40" style="color:#282828;font-family:'Open Sans', Arial,sans-serif;font-size:14px;line-height:24px;text-align:left;padding-bottom:40px;">
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"><em>Cron is nice and all, but don't forget about its cousin <code>at</code>.</em></p><br>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
When I first started using Linux, it was like being tossed into the deep end
of the UNIX pool. You were expected to use the command line heavily along
with all the standard utilities and services that came with your
distribution. At lot has changed since then, and nowadays, you can use a
standard Linux desktop without ever having to open a terminal or use old
UNIX services. Even as a sysadmin, these days, you often are a few layers of
abstraction above some of these core services.
</p><br>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
I say all of this to point out that for us old-timers, it's easy to take for
granted that everyone around us innately knows about all the command-line
tools we use. Yet, even though I've been using Linux for 20 years, I
still learn about new (to me) command-line tools all the time. In this "Back
to Basics" article series, I plan to cover some of the command-line tools
that those new to Linux may never have used before. For those of you who are
more advanced, I'll spread out this series, so you can expect future
articles to be more technical. In this article, I describe how to use
the <code>at</code> utility to schedule jobs to run at a later date.
</p>
<h3>
<code>at</code> vs. Cron</h3>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
<code>at</code> is one of those commands that isn't discussed very much. When
people talk about scheduling commands, typically cron gets the most
coverage. Cron allows you to schedule commands to be run on a periodic
basis. With cron, you can run a command as frequently as every minute or as
seldom as once a day, week, month or even year. You also can define more
sophisticated rules, so commands run, for example, every five minutes, every
weekday, every other hour and many other combinations. System administrators sometimes
will use cron to schedule a local script to collect metrics every minute or
to schedule backups.
</p><br>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
On the other hand, although the <code>at</code> command also allows you to schedule
commands, it serves a completely different purpose from cron. While cron
lets you schedule commands to run periodically, <code>at</code> lets you schedule
commands that run only once at a particular time in the future. This
means that <code>at</code> fills a different and usually more immediate need
from cron.
</p>
<h3>
Using <code>at</code></h3>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
At one point, the <code>at</code> command came standard on most Linux
distributions, but
these days, even on servers, you may find yourself having to
install the <code>at</code> package explicitly. Once installed, the easiest
way to use <code>at</code> is to type
it on the command line followed by the time you want the command to run:
</p><pre><code>
$ at 18:00
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
The <code>at</code> command also can accept a number of different time formats. For
instance, it understands AM and PM as well as words like "tomorrow", so you
could replace the above command with the identical:
</p><pre><code>
$ at 6pm
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
And, if you want to run the same command at that time tomorrow instead:
</p><pre><code>
$ at 6pm tomorrow
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Once you press enter, you'll drop into an interactive shell:
</p><pre><code>
$ at 6pm tomorrow
warning: commands will be executed using /bin/sh
at>
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
From the interactive shell, you can enter the command you want to run
at that time. If you want to run multiple commands, press enter after each
command and type the command on the new <code>at></code> prompt. Once you're done
entering commands, press Ctrl-D on an empty <code>at></code> prompt to exit the
interactive shell.
</p><br>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
For instance, let's say I've noticed that a particular server has had
problems the past two days at 5:10am for around five minutes, and so far, I'm
not seeing anything in the logs. Although I could just wake up early and log
in to the server, instead I could write a short script that collects data
from <code>ps</code>, <code>netstat</code>, <code>tcpdump</code> and other
command-line tools for a few minutes, so
when I wake up, I can go over the data it collected. Since this is a one-off,
I don't want to schedule something with cron and risk forgetting about it
and having it run every day, so this is how I would set it up with
<code>at</code>:
</p><pre><code>
$ at 5:09am tomorrow
warning: commands will be executed using /bin/sh
at>
at> /usr/local/bin/my_monitoring_script
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Then I would press Ctrl-D, and the shell would exit with this output:
</p><pre><code>
at> <EOT>
job 1 at Wed Sep 26 05:09:00 2018
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<h3>
Managing <code>at</code> Jobs</h3>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Once you have scheduled <code>at</code> jobs, it's useful to be able to pull up a list of
all the <code>at</code> jobs in the queue, so you know what's running and
when. The <code>atq</code>
command lists the current <code>at</code> queue:
</p><pre><code>
$ atq
1 Wed Sep 26 05:09:00 2018 a kyle
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
The first column lists the number <code>at</code> assigned to each job and then lists the
time the job will be run and the user it will run as. Let's say that in
the above example I realize I've made a mistake, because my script won't be able
to run as a regular user. In that case, I would want to use the
<code>atrm</code> command
to remove job number 1:
</p><pre><code>
$ atrm 1
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
If I were to run <code>atq</code> again, I would see that the job no longer exists.
Then I could <code>sudo</code> up to root and use the <code>at</code> command to schedule the job
again.
</p>
<h3>
<code>at</code> One-Liners</h3>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Although <code>at</code> supports an interactive mode, you also can pipe commands to it all
on one line instead. So, for instance, I could schedule the above job with:
</p><pre><code>
$ echo /usr/local/bin/my_monitoring_script | at 5:09am tomorrow
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
<h3>
Conclusion</h3>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
If you didn't know that <code>at</code> existed, you might find yourself coming up with
all sorts of complicated and convoluted ways to schedule a one-off job. Even
worse, you might need to set an alarm clock so you can wake up extra early
and log in to a problem server. Of course, if you don't have an alarm clock,
you could use <code>at</code>:
</p><pre><code>
$ echo "aplay /home/kyle/alarm.wav" | at 7am tomorrow
</code>
</pre>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;"></p>
</td>
</tr>
<tr>
<td align="center">
<table class="center" bgcolor="#dc2427" border="0" cellspacing="0" cellpadding="0" style="text-align:center;">
<tbody><tr>
<td class="text-button" style="color:#ffffff;font-family:'Open Sans', Arial,sans-serif;font-size:16px;line-height:24px;text-align:center;text-transform:uppercase;font-weight:bold;padding-top:12px;padding-bottom:12px;padding-right:30px;padding-left:30px;background-color:#dc2427;background-image:none;background-repeat:repeat;background-position:top left;background-attachment:scroll;"><p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
<a class="link-white" href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-i/" target="_blank" style="color:#ffffff;text-decoration:none;"><span class="link-white" style="color:#ffffff;text-decoration:none;">read more articles</span></a></p>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="section3" bgcolor="#fafafa" style="padding-top:40px;padding-bottom:40px;padding-right:50px;padding-left:50px;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<th class="column" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="h4 pb15" style="color:#000000;font-family:'Lateef', Georgia, serif;font-size:26px;line-height:30px;text-align:left;padding-bottom:15px;"><p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Subscribe to Linux Journal for only $2.88 an issue!</p>
</td>
</tr>
<tr>
<td class="text" style="color:#282828;font-family:'Open Sans', Arial,sans-serif;font-size:14px;line-height:24px;text-align:left;"><p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
<a class="link" href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-d/" target="_blank" style="color:#dc2427;text-decoration:none;"><span class="link" style="color:#dc2427;text-decoration:none;">Subscribe Now »</span></a></p>
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
<a class="link" href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-h/" target="_blank" style="color:#dc2427;text-decoration:none;"><span class="link" style="color:#dc2427;text-decoration:none;">Renew now »</span></a></p>
</td>
</tr>
</tbody></table>
</th>
<th class="column-empty" width="20" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;vertical-align:top;"></th>
<th class="column" width="336" style="font-size:0pt;line-height:0pt;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;font-weight:normal;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="fluid-img" style="font-size:0pt;line-height:0pt;text-align:left;"><img src="http://i2.cmail19.com/ei/j/C6/11F/472/csimport/LJ293-Dec2018-Cover.131504.jpg" width="336" border="0" height="449" style="-ms-interpolation-mode:bicubic;" id="1544799306065"></td>
</tr>
</tbody></table>
</th>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="footer" style="padding-top:50px;padding-bottom:50px;padding-right:40px;padding-left:40px;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="img-center pb30" style="font-size:0pt;line-height:0pt;text-align:center;padding-bottom:30px;"><a href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-k/" target="_blank" style="color:#dc2427;text-decoration:none;"><img src="http://i1.cmail19.com/ti/j/24/755/399/051327/images/footer_logo.jpg" width="104" border="0" style="-ms-interpolation-mode:bicubic;" id="1544799306065"></a></td>
</tr>
<tr>
<td class="pb30" align="center" style="padding-bottom:30px;">
<table border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td class="img" width="56" style="font-size:0pt;line-height:0pt;text-align:left;"><a href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-u/" target="_blank" style="color:#dc2427;text-decoration:none;"><img src="http://i3.cmail19.com/ti/j/24/755/399/051327/images/ico_youtube.jpg" width="42" border="0" style="-ms-interpolation-mode:bicubic;" id="1544799306068"></a></td>
<td class="img" width="56" style="font-size:0pt;line-height:0pt;text-align:left;"><a href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-o/" target="_blank" style="color:#dc2427;text-decoration:none;"><img src="http://i2.cmail19.com/ti/j/24/755/399/051327/images/ico_facebook.jpg" width="42" border="0" style="-ms-interpolation-mode:bicubic;" id="1544799306068"></a></td>
<td class="img" width="42" style="font-size:0pt;line-height:0pt;text-align:left;"><a href="https://linuxjournal.cmail19.com/t/j-l-phdtkkl-jrhdlhhdjy-b/" target="_blank" style="color:#dc2427;text-decoration:none;"><img src="http://i4.cmail19.com/ti/j/24/755/399/051327/images/ico_twitter.jpg" width="42" border="0" style="-ms-interpolation-mode:bicubic;" id="1544799306068"></a></td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td class="text-footer pb25" style="color:#282828;font-family:'Open Sans', Arial,sans-serif;font-size:12px;line-height:22px;text-align:center;padding-bottom:25px;">
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
You are receiving this email because you signed up to receive newsletters from <em>Linux Journal</em>.</p>
<div>You can <a href="https://linuxjournal.updatemyprofile.com/j-phdtkkl-08368EA2-jrhdlhhdjy-r" class="link" style="color:#dc2427;text-decoration:none;">update your preferences</a> or <a href="https://linuxjournal.cmail19.com/t/j-u-phdtkkl-jrhdlhhdjy-y/" class="link" style="color:#dc2427;text-decoration:none;">unsubscribe</a> from this list. </div>
</td>
</tr>
<tr>
<td class="text-footer" style="color:#282828;font-family:'Open Sans', Arial,sans-serif;font-size:12px;line-height:22px;text-align:center;">
<p style="padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;">
Copyright © 2018 Linux Journal LLC, All rights reserved.<br>
Mailing address: 9597 Jones Rd, #331 Houston, TX 77065</p>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td class="pb40 np" style="padding-bottom:40px;"></td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<img src="https://linuxjournal.cmail19.com/t/j-o-phdtkkl-jrhdlhhdjy/o.gif" width="1" height="1" border="0" alt="" style="visibility:hidden !important;display:block !important;height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;-ms-interpolation-mode:bicubic;" id="1544799306068"></body></html>