<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:schema="http://schema.org/" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="https://www.linuxjournal.com/tag/command-line">
  <channel>
    <title>command line</title>
    <link>https://www.linuxjournal.com/tag/command-line</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>The Best Command-Line-Only Video Games</title>
  <link>https://www.linuxjournal.com/content/best-command-line-only-video-games</link>
  <description>  &lt;div data-history-node-id="1340673" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/SSHTron.png" width="721" height="436" alt="SSHTron" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/bryan-lunduke" lang="" about="https://www.linuxjournal.com/users/bryan-lunduke" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Bryan Lunduke&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;A rundown of the biggest, most expansive and impressive games that you can run entirely
in your Linux shell.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
The original UNIX operating system was created, in large part, to
facilitate porting a video game to a different computer. And, without
UNIX, we wouldn't have Linux, which means we owe the very existence
of Linux to...video games.
&lt;/p&gt;

&lt;p&gt;
It's crazy, but it's true.
&lt;/p&gt;

&lt;p&gt;
With that in mind, and in celebration of all things shell/terminal/command
line, I want to introduce some of the best video games that
run entirely in a shell—no graphics, just ASCII jumping around the
screen.
&lt;/p&gt;

&lt;p&gt;
And, when I say "best", I mean the &lt;em&gt;very&lt;/em&gt; best—the terminal games that
really stand out above the rest.
&lt;/p&gt;

&lt;p&gt;
Although these games may not be considered to have "modern fancy-pants
graphics" (also known as MFPG—it's a technical term), they are
fantastically fun. Some are big, sprawling adventures, and others are
smaller time-wasters. Either way, none of them are terribly large (in
terms of drive storage space), and they deserve a place on any Linux rig.
&lt;/p&gt;

&lt;h3&gt;
&lt;em&gt;AsciiPatrol&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;
&lt;em&gt;AsciiPatrol&lt;/em&gt; is, in my opinion, one of the most impressive terminal games
out there. A clone of the classic &lt;em&gt;Moon Patrol&lt;/em&gt;, which is a ton of fun
already, this terminal-based game provides surprisingly good visuals for
a game using only ASCII characters for artwork.
&lt;/p&gt;

&lt;p&gt;
It has color, parallax scrolling backgrounds, animated enemies, sound
effects—I mean, even the opening screen is impressive looking in a terminal.
&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/AsciiPatrol.png" width="650" height="318" alt="AsciiPatrol" class="image-max_650x650" /&gt;&lt;p&gt;
&lt;em&gt;Figure 1. Shooting Aliens and Dodging
Potholes in &lt;em&gt;AsciiPatrol&lt;/em&gt;&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
For a quick round of arcade-style fun, this one really can't be beat.
&lt;/p&gt;

&lt;h3&gt;
&lt;em&gt;Cataclysm: Dark Days Ahead&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;
&lt;em&gt;Cataclysm: Dark Days Ahead&lt;/em&gt; is absolutely huge in scale. Think of it as a
top-down, rogue-like, survival game with zombies, monsters and real
end-of-the-world-type stuff.
&lt;/p&gt;

&lt;p&gt;
The game features a crafting system, bodily injuries (such as a broken
arm), bionic implants, farming, building of structures and vehicles, a huge
map (with destructible terrain)—this game is massive. The visuals may
be incredibly simple, but the gameplay is deep and open-ended.
&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/Cataclysm.png" width="650" height="387" alt="Cataclysm" class="image-max_650x650" /&gt;&lt;p&gt;
&lt;em&gt;Figure 2. Running from zombies in &lt;em&gt;Cataclysm&lt;/em&gt;&lt;/em&gt;
&lt;/p&gt;

&lt;h3&gt;
&lt;em&gt;SSHTron&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;
The &lt;em&gt;Tron&lt;/em&gt;-inspired light-cycle games (and non-&lt;em&gt;Tron&lt;/em&gt;-themed variants, such as
&lt;em&gt;Snake&lt;/em&gt;) have been a staple of gaming since the 1980s. And,
&lt;em&gt;SSHTron&lt;/em&gt; provides
a four-player version right in your terminal.
&lt;/p&gt;

&lt;p&gt;
Simply open your terminal and type in the following:

&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/best-command-line-only-video-games" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 07 Aug 2019 17:00:00 +0000</pubDate>
    <dc:creator>Bryan Lunduke</dc:creator>
    <guid isPermaLink="false">1340673 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Arduino from the Command Line: Break Free from the GUI with Git and Vim!</title>
  <link>https://www.linuxjournal.com/content/arduino-command-line-break-free-gui-git-and-vim</link>
  <description>  &lt;div data-history-node-id="1340463" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/assorted-microcontrollers1.jpg" width="800" height="1067" alt="assorted micro controllers" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/matthew-hoskins" lang="" about="https://www.linuxjournal.com/users/matthew-hoskins" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Matthew Hoskins&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Love Arduino but hate the GUI? Try arduino-cli.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
In this article, I explore a new tool released by the Arduino team
that can free you from the existing Java-based Arduino graphical user
interface. This allows developers to use their preferred tools and
workflow. And perhaps more important, it'll enable easier and deeper
innovation into the Arduino toolchain itself.
&lt;/p&gt;

&lt;h3&gt;
The Good-Old Days&lt;/h3&gt;

&lt;p&gt;
When I started building hobby electronics projects with microprocessors in
the 1990s, the process entailed a discrete processor, RAM, ROM and masses of glue logic
chips connected together using a point-to-point or "wire wrapping"
technique. (Look it up kids!) Programs were stored on glass-windowed
EPROM chips that needed to be erased under UV light. All the tools were
expensive and difficult to use, and development cycles were very slow.
Figures 1–3 show some examples of my mid-1990s
microprocessor
projects with discrete CPU, RAM and ROM. Note: no Flash, no I/O, no DACs,
no ADCs, no timers—all that means more chips!
&lt;/p&gt;


&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/12626f1.jpg" width="578" height="650" alt="""" class="image-max_650x650" /&gt;&lt;p&gt;&lt;em&gt;
Figure 1. Example Mid-1990s Microprocessor&lt;/em&gt;&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/12626f2-smaller.jpeg" width="650" height="508" alt="""" class="image-max_650x650" /&gt;&lt;p&gt;&lt;em&gt;
Figure 2. Example Mid-1990s Microprocessor&lt;/em&gt;&lt;/p&gt;


&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/12626f3-smaller.jpeg" width="595" height="650" alt="""" class="image-max_650x650" /&gt;&lt;p&gt;&lt;em&gt;
Figure 3. Example Mid-1990s Microprocessor&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
It all changed in 2003 with Arduino.
&lt;/p&gt;

&lt;p&gt;
The word "Arduino" often invokes a wide range of opinions and
sometimes emotion. For many, it represents a very low bar to entry into the
world of microcontrollers. This world before 2003 often required costly,
obscure and closed-source development tools. Arduino has been a great
equalizer, blowing the doors off the walled garden. Arduino now represents
a huge ecosystem of hardware that speaks a (mostly) common language and
eases transition from one hardware platform to another. Today, if you
are a company that sells microcontrollers, it's in your best interest to
get your dev boards working with Arduino. It offers a low-friction path
to getting your products into lots of hands quickly.
&lt;/p&gt;

&lt;p&gt;
It's also important to note that Arduino's simplicity does not inhibit
digging deep into the microcontroller. Nothing stops you from directly
twiddling registers and using advanced features. It does, however, decrease
your portability between boards.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/arduino-command-line-break-free-gui-git-and-vim" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 16 Jul 2019 11:30:00 +0000</pubDate>
    <dc:creator>Matthew Hoskins</dc:creator>
    <guid isPermaLink="false">1340463 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>In the End Is the Command Line</title>
  <link>https://www.linuxjournal.com/content/end-command-line</link>
  <description>  &lt;div data-history-node-id="1340687" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/Neal-Stephenson-in-the-beginning_0.jpg" width="620" height="310" alt="Neal Stephenson's In the Beginning Was the Command Line" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/doc-searls" lang="" about="https://www.linuxjournal.com/users/doc-searls" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Doc Searls&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Times have changed every character but one in Neal Stephenson's classic. That one is
Linux.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
I was wandering through &lt;a href="https://www.keplers.com/"&gt;Kepler&lt;/a&gt;'s, the &lt;a href="https://en.wikipedia.org/wiki/Kepler%27s_Books"&gt;legendary bookstore&lt;/a&gt;, sometime late in 1999, when
I spotted a thin volume with a hard-to-read title on the new book table. &lt;em&gt;In the
Beginning...Was the Command Line&lt;/em&gt;, the cover said.
&lt;/p&gt;

&lt;p&gt;
The command line was new to me when I started writing for &lt;em&gt;Linux Journal&lt;/em&gt; in 1996. I
hadn't come from UNIX or from programming. My tech background was in ham radio and
broadcast engineering, and nearly all my hacking was on RF hardware. It wasn't a joke
when I said the only code I knew was Morse. But I was amazed at how useful and
necessary the command line was, and I was thrilled to see &lt;a href="https://en.wikipedia.org/wiki/Neal_Stephenson"&gt;Neal Stephenson&lt;/a&gt; was the author
of that book.
(Pro tip: you can tell the commercial worth of an author by the size of his or her name
on the cover. If it's bigger than the title of the book, the writer's a big deal.
Literally.)
&lt;/p&gt;

&lt;p&gt;
So I bought it, and then I read it in one sitting. You can do the same. In fact, I command
that you do, if you haven't already, because (IMHO) it's the most classic book ever
written about both the command line and Linux itself—a two-fer of the first order.
&lt;/p&gt;

&lt;p&gt;
And I say this in full knowledge (having re-read the whole thing many times, which is
easy, because it's short) that much of what it brings up and dwells on is stale in the
extreme. The MacOS and the Be operating systems are long gone (and the Be computer was
kind of dead on arrival), along with the Windows of that time. Today Apple's OS X is BSD
at its core, while Microsoft produces lots of open-source code and contributes mightily
to The Linux Foundation. Some of Neal's observations and complaints about computing and
the culture of the time also have faded in relevance, although some remain enduringly
right-on. (If you want to read a section-by-section critique of the thing, &lt;a href="http://garote.bdmonkeys.net/"&gt;Garrett
Birkel&lt;/a&gt; &lt;a href="http://garote.bdmonkeys.net/commandline/index.html"&gt;produced
one&lt;/a&gt; in the mid-2000s with &lt;a href="http://garote.bdmonkeys.net/commandline/permission.html"&gt;Neal's permission&lt;/a&gt;. But do read the book
first.)
&lt;/p&gt;

&lt;p&gt;
What's great about &lt;em&gt;Command Line&lt;/em&gt; is how well it explains the original virtues of UNIX,
and of Linux as the operating system making the most of it:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The file systems of Unix machines all have the same general structure. On your
flimsy operating systems, you can create directories (folders) and give them names like
Frodo or My Stuff and put them pretty much anywhere you like. But under Unix the
highest level—the root—of the filesystem is always designated with the
single character "/" and it always contains the same set of top-level directories:
&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/end-command-line" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 03 Jul 2019 11:30:00 +0000</pubDate>
    <dc:creator>Doc Searls</dc:creator>
    <guid isPermaLink="false">1340687 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>The Command-Line Issue</title>
  <link>https://www.linuxjournal.com/content/command-line-issue</link>
  <description>  &lt;div data-history-node-id="1340693" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/LJ300-July2019-Cover-1400-wide.png" width="2000" height="1000" alt="Command line issue cover" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/bryan-lunduke" lang="" about="https://www.linuxjournal.com/users/bryan-lunduke" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Bryan Lunduke&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
Summer. 1980-something. An elementary-school-attending, &lt;em&gt;Knight Rider&lt;/em&gt;-T-Shirt-wearing version of myself slowly rolls out of bed and shuffles to the living
room. There, nestled between an imposingly large potted plant and an
over-stocked knick-knack shelf, rested a beautifully gray, metallic case powered
by an Intel 80286 processor—with a glorious, 16-color EGA monitor resting
atop.
&lt;/p&gt;

&lt;p&gt;
This was to be my primary resting place for the remainder of the day: in front
of the family computer.
&lt;/p&gt;

&lt;p&gt;
That PC had no graphical user interface to speak of—no X Window System, no
Microsoft Windows, no Macintosh Finder. There was just a simple command
line—in this
case, MS-DOS. (This was long before Linux became a thing.)
Every task I wished to perform—executing a game, moving files—required me to type the commands in via a satisfyingly loud, clicky keyboard.
No, "required" isn't the right word here. Using the computer was a joy.
"Allowed" is the right word. I was &lt;em&gt;allowed&lt;/em&gt; to enjoy typing those commands in.
I never once resented that my computer needed to be interacted with via a
keyboard. That is, after all, what computers do. That's what they're
for—you type in commands, and the computer executes them for you, often with a
"beep".
&lt;/p&gt;

&lt;p&gt;
For a kid, this was empowering—taking my rudimentary understanding of
language (aided, at first, by a handy DOS command cheat sheet) and weaving
together strings of words that commanded the computer to do my bidding. It was
like
organizing runes to enact an ancient spell. It was magic. And I was a wizard.
Did I miss not being able to "double click" or "drag and drop"? Of course not.
I'd seen some such, mouse-driven user interfaces (like the early Macintoshes)
but—from my vantage—that wasn't how computers really worked. I viewed
such things as cool-looking, but not necessary. Computers use words. Powerful,
magical words.
&lt;/p&gt;

&lt;p&gt;
But this isn't 1980-something. In fact, it's barely 2010-something. (Did anyone else
just realize that it's almost 2020?) For better or worse, how people
use—and view—computers has changed dramatically since the days of
&lt;em&gt;Knight Rider&lt;/em&gt;.
Modern operating systems are, often, belittled if they require users to interact
with the machine via a command line. The graphical user interface is king.
Which is, perhaps, the inevitable evolution of how we all interact with our
computers.
&lt;/p&gt;

&lt;p&gt;
Yet the value of the command line (or terminal, shell and so on) is still there.
For many, it makes using computers more accessible. For others, it provides
streamlined workflows that a mouse or touch-driven interface simply can't
compete with. And, for others still, the blinking cursor provides a bit of
nostalgic joy—or an aesthetically simple, and distraction free, environment.
&lt;/p&gt;

&lt;p&gt;
This issue of &lt;em&gt;Linux Journal&lt;/em&gt; celebrates the cursor—that wonderful blinking
underscore and all the potential that it holds.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/command-line-issue" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 01 Jul 2019 15:00:00 +0000</pubDate>
    <dc:creator>Bryan Lunduke</dc:creator>
    <guid isPermaLink="false">1340693 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Without a GUI--How to Live Entirely in a Terminal</title>
  <link>https://www.linuxjournal.com/content/without-gui-how-live-entirely-terminal</link>
  <description>  &lt;div data-history-node-id="1340674" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock--224038156_3.jpg" width="900" height="900" alt="command line" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/bryan-lunduke" lang="" about="https://www.linuxjournal.com/users/bryan-lunduke" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Bryan Lunduke&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Sure, it may be hard, but it &lt;em&gt;is&lt;/em&gt; possible to give up graphical interfaces
entirely—even in 2019.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
About three years back, I attempted to live entirely on the command line for 30
days—no graphical interface, no X Server, just a big-old terminal and me,
for a month.
&lt;/p&gt;

&lt;p&gt;
I lasted all of ten days.
&lt;/p&gt;

&lt;p&gt;
Why did I attempt this? What on Earth would compel a man to give up all the
trappings and features of modern graphical desktops and, instead,
artificially restrict himself to using nothing but text-based, command-line
software, as if he were stuck in the early 1980s?
&lt;/p&gt;

&lt;p&gt;
Who knows. Clearly, I make questionable decisions.
&lt;/p&gt;

&lt;p&gt;
But you know, if I'm being honest, the experience was not entirely
unpleasant. Sure, I missed certain niceties from the graphical side of things,
but there were some distinct benefits to living in a shell. My computers, even
the low-powered ones, felt faster (command-line software tends to be a whole
lot lighter and leaner than those with a graphical user interface). Plus, I
was able to focus and get more work done without all the distractions of a
graphical desktop, which wasn't bad.
&lt;/p&gt;

&lt;p&gt;
What follows are the applications I found myself relying upon the most during
those fateful ten days, separated into categories. In some cases, these are
applications I currently use over (or in addition to) their graphical
equivalents.
&lt;/p&gt;

&lt;p&gt;
Quite honestly, it is entirely possible to live completely without a GUI (more
or less)—even today, in 2019. And, these applications make it
possible—challenging, but possible.
&lt;/p&gt;

&lt;h3&gt;
Web Browsing&lt;/h3&gt;

&lt;p&gt;
Plenty of command-line web browsers exist. The classic Lynx
typically comes to mind, as does ELinks. Both are capable of browsing
basic HTML websites just fine. In fact, the experience of doing so is rather
enjoyable. Sure, most websites don't load properly in the "everything is a
dynamically loading, JavaScript thingamadoodle" future we live in, but the
ones that do load, load &lt;em&gt;fast&lt;/em&gt;, and free of distractions, which makes reading
them downright enjoyable.
&lt;/p&gt;

&lt;p&gt;
But for me, personally, I recommend w3m.
&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/w3m.png" width="564" height="563" alt="w3m" class="image-max_650x650" /&gt;&lt;p&gt;
&lt;em&gt;Figure 1. Browsing Wikipedia with Inline Images Using w3m&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
w3m supports inline images (via installing the &lt;code&gt;w3m-img&lt;/code&gt;
package)—seriously, a web browser with image support, inside the terminal. The future is now.
&lt;/p&gt;

&lt;p&gt;
It also makes filling out web forms easy—well, maybe not easy, but at least
doable—by opening a configured text editor (such as nano or vim) for
entering form text. It feels a little weird the first time you do it, but
it's surprisingly intuitive.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/without-gui-how-live-entirely-terminal" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Fri, 28 Jun 2019 11:00:00 +0000</pubDate>
    <dc:creator>Bryan Lunduke</dc:creator>
    <guid isPermaLink="false">1340674 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>FreeDOS's Linux Roots</title>
  <link>https://www.linuxjournal.com/content/freedoss-linux-roots</link>
  <description>  &lt;div data-history-node-id="1340718" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/blinky.jpg" width="1200" height="600" alt="blinky" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/jim-hall" lang="" about="https://www.linuxjournal.com/users/jim-hall" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Jim Hall&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;
On June 29, 2019, the FreeDOS Project turns 25 years old. That's
a major milestone for any open-source software project! In honor of this
anniversary, Jim Hall shares this look
at how FreeDOS got started and describes its Linux roots.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
The Origins of FreeDOS&lt;/h3&gt;

&lt;p&gt;
I've been involved with computers from an early age. In the late 1970s, my
family bought an Apple II computer. It was here that I taught myself how to
write programs in AppleSoft BASIC. These were not always simple programs. I
quickly advanced from writing trivial "math quiz" programs to more
complex "Dungeons and Dragons"-style adventure games, complete with
graphics.
&lt;/p&gt;

&lt;p&gt;
In the early 1980s, my parents replaced the Apple with an IBM Personal
Computer running MS-DOS. Compared to the Apple, the PC had a much more
powerful command line. You could connect simple utilities and commands to do
more complex functions. I fell in love with DOS.
&lt;/p&gt;

&lt;p&gt;
Throughout the 1980s and into the early 1990s, I considered myself a DOS
"power user". I taught myself how to write programs in C and created
new DOS command-line utilities that enhanced my MS-DOS experience. Some of my
custom utilities merely reproduced the MS-DOS command line with a few extra
features. Other programs added new functionality to my command-line
experience.
&lt;/p&gt;

&lt;p&gt;
I discovered Linux in 1993 and instantly recognized it as a &lt;em&gt;Big Deal&lt;/em&gt;. Linux
had a command line that was much more powerful than MS-DOS, and you could
view the source code to study the Linux commands, fix bugs and add new
features. I installed Linux on my computer, in a dual-boot configuration with
MS-DOS. Since Linux didn't have the applications I needed as a working
college student (a word processor to write class papers or a spreadsheet
program to do physics lab analysis), I booted into MS-DOS to do much of my
classwork and into Linux to do other things. I was moving to Linux, but I
still relied on MS-DOS.
&lt;/p&gt;

&lt;p&gt;
In 1994, I read articles in technology magazines saying that Microsoft planned to do
away with MS-DOS soon. The next version of Windows would not use DOS. MS-DOS
was on the way out. I'd already tried Windows 3, and I wasn't
impressed. Windows was not great. And, running Windows would mean replacing
the DOS applications that I used every day. I wanted to keep using DOS.
I decided that the only way to keep DOS was to write my own. On June 29,
1994, I announced my plans on the Usenet discussion group comp.os.msdos.apps,
and things took off from there:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
ANNOUNCEMENT OF PD-DOS PROJECT:
&lt;/p&gt;

&lt;p&gt;
A few months ago, I posted articles relating to starting a public
domain version of DOS. The general support for this at the time was
strong, and many people agreed with the statement, "start writing!"
So, I have...
&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/freedoss-linux-roots" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Thu, 27 Jun 2019 11:30:00 +0000</pubDate>
    <dc:creator>Jim Hall</dc:creator>
    <guid isPermaLink="false">1340718 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Text Processing in Rust</title>
  <link>https://www.linuxjournal.com/content/text-processing-rust</link>
  <description>  &lt;div data-history-node-id="1340474" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/rust-logo_0.png" width="1200" height="1200" alt="Rust Programming Language Logo" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/mihalis-tsoukalos" lang="" about="https://www.linuxjournal.com/users/mihalis-tsoukalos" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Mihalis Tsoukalos&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Create handy command-line utilities in Rust.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
This article is about text processing in Rust, but it also contains a
quick introduction to pattern matching, which can be very handy when
working with text.
&lt;/p&gt;

&lt;p&gt;
Strings are a huge subject in Rust, which can be easily realized by
the fact that Rust has two data types for representing strings as well
as support for macros for formatting strings. However, all of this also
proves how powerful Rust is in string and text processing.
&lt;/p&gt;

&lt;p&gt;
Apart from covering some theoretical topics, this article shows how to develop
some handy yet easy-to-implement command-line utilities that let you
work with plain-text files. If you have the time, it'd be great to
experiment with the Rust code presented here, and maybe develop your own
utilities.
&lt;/p&gt;

&lt;h3&gt;
Rust and Text&lt;/h3&gt;

&lt;p&gt;
Rust supports two data types for working with strings: &lt;code&gt;String&lt;/code&gt;
and &lt;code&gt;str&lt;/code&gt;.
The &lt;code&gt;String&lt;/code&gt; type is for working with mutable strings that
belong to you, and it has length and a capacity property. On the other
hand, the &lt;code&gt;str&lt;/code&gt; type is for working with immutable strings that you want
to pass around. You most likely will see an &lt;code&gt;str&lt;/code&gt; variable be used as
&lt;code&gt;&amp;str&lt;/code&gt;. Put simply, an &lt;code&gt;str&lt;/code&gt; variable is accessed as a reference to some
UTF-8 data. An &lt;code&gt;str&lt;/code&gt; variable is usually called a "string slice" or, even
simpler, a "slice". Due to its nature, you can't add and remove any
data from an existing &lt;code&gt;str&lt;/code&gt; variable. Moreover, if you try to call the
&lt;code&gt;capacity()&lt;/code&gt; function on an &lt;code&gt;&amp;str&lt;/code&gt; variable, you'll get an error message
similar to the following:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
error[E0599]: no method named `capacity` found for type
 ↪`&amp;str` in the current scope
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Generally speaking, you'll want to use an &lt;code&gt;str&lt;/code&gt; when you want to pass a string
as a function parameter or when you want to have a read-only version
of a string, and then use a &lt;code&gt;String&lt;/code&gt; variable when you want to have a mutable
string that you want to own.
&lt;/p&gt;

&lt;p&gt;
The good thing is that a function that accepts &lt;code&gt;&amp;str&lt;/code&gt; parameters can
also accept &lt;code&gt;String&lt;/code&gt; parameters. (You'll see such an example in the
&lt;code&gt;basicOps.rs&lt;/code&gt; program presented later in this article.)
Additionally, Rust supports the &lt;code&gt;char&lt;/code&gt; type, which is for representing
single Unicode characters, as well as string literals, which are
strings that begin and end with double quotes.
&lt;/p&gt;

&lt;p&gt;
Finally, Rust supports what is called a &lt;code&gt;byte&lt;/code&gt; string. You can define a new
&lt;code&gt;byte&lt;/code&gt; string as follows:

&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/text-processing-rust" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 18 Mar 2019 13:07:07 +0000</pubDate>
    <dc:creator>Mihalis Tsoukalos</dc:creator>
    <guid isPermaLink="false">1340474 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Command-Line Tip: Put Down the Pipe</title>
  <link>https://www.linuxjournal.com/content/put-down-pipe</link>
  <description>  &lt;div data-history-node-id="1340359" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bash-148836_960_720_13.png" width="400" height="316" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/kyle-rankin" lang="" about="https://www.linuxjournal.com/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Kyle Rankin&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Learn a few techniques for avoiding the pipe and making your command-line commands more efficient.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
Anyone who uses the command line would acknowledge how powerful the pipe
is. Because of the pipe, you can take the output from one command
and feed it to another command as input. What's more, you can chain
one command after another until you have exactly the output you
want.
&lt;/p&gt;

&lt;p&gt;
Pipes are powerful, but people also tend to overuse them.
Although it's not necessarily wrong to do so, and it may not even be
less efficient, it does make your commands more complicated.
More important though, it also wastes keystrokes! Here I highlight a few
examples where pipes are commonly used but aren't necessary.
&lt;/p&gt;

&lt;h3&gt;
Stop Putting Your Cat in Your Pipe&lt;/h3&gt;

&lt;p&gt;
One of the most common overuses of the pipe is in conjunction with
&lt;code&gt;cat&lt;/code&gt;. The &lt;code&gt;cat&lt;/code&gt; command concatenates multiple files from input into a
single output, but it has become the overworked workhorse for piped
commands. You often will find people using &lt;code&gt;cat&lt;/code&gt; just to output the
contents of a single file so they can feed it into a pipe. Here's
the most common example:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
cat file | grep "foo"
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Far too often, if people want to find out whether a file contains a
particular pattern, they'll &lt;code&gt;cat&lt;/code&gt; the file piped into a &lt;code&gt;grep&lt;/code&gt; command.
This works, but &lt;code&gt;grep&lt;/code&gt; can take a filename as an argument directly,
so you can replace the above command with:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
grep "foo" file
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
The next most common overuse of &lt;code&gt;cat&lt;/code&gt; is when you want to sort the
output from one or more files:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
cat file1 file2 | sort | uniq
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Like with &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;sort&lt;/code&gt; supports multiple files as arguments, so you
can replace the above with:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
sort file1 file2 | uniq
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
In general, every time you find yourself catting a file into a pipe,
re-examine the piped command and see whether it can accept files directly
as input first either as direct arguments or as STDIN redirection.
For instance, both &lt;code&gt;sort&lt;/code&gt; and &lt;code&gt;grep&lt;/code&gt; can accept files as arguments as
you saw earlier, but if they couldn't, you could achieve the same
thing with redirection:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
sort &lt; file1 file2 | uniq
grep "foo" &lt; file
&lt;/code&gt;
&lt;/pre&gt;


&lt;h3&gt;
Remove Files without xargs&lt;/h3&gt;

&lt;p&gt;
The &lt;code&gt;xargs&lt;/code&gt; command is very powerful on the command line—in particular,
when piped to from the &lt;code&gt;find&lt;/code&gt; command. Often you'll use the &lt;code&gt;find&lt;/code&gt;
command to pick out files that have a certain criteria. Once you
have identified those files, you naturally want to pipe that output
to some command to operate on them. What you'll eventually discover
is that commands often have upper limits on the number of arguments
they can accept.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/put-down-pipe" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 22 Jan 2019 12:30:00 +0000</pubDate>
    <dc:creator>Kyle Rankin</dc:creator>
    <guid isPermaLink="false">1340359 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Back to Basics: Sort and Uniq</title>
  <link>https://www.linuxjournal.com/content/back-basics-sort-and-uniq</link>
  <description>  &lt;div data-history-node-id="1340356" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock--187641571_2.jpg" width="600" height="600" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/kyle-rankin" lang="" about="https://www.linuxjournal.com/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Kyle Rankin&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Learn the fundamentals of sorting and de-duplicating text on the command line.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
If you've been using the command line for a long time, it's easy
to take the commands you use every day for granted. But, if you're
new to the Linux command line, there are several commands that
make your life easier that you may not stumble upon automatically.
In this article, I cover the basics of two commands
that are essential in anyone's arsenal: &lt;code&gt;sort&lt;/code&gt; and &lt;code&gt;uniq&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
The &lt;code&gt;sort&lt;/code&gt; command does exactly what it says: it takes text data as input
and outputs sorted data. There are many scenarios on the command
line when you may need to sort output, such as the output from a command
that doesn't offer sorting options of its own (or the sort arguments
are obscure enough that you just use the &lt;code&gt;sort&lt;/code&gt; command instead). In
other cases, you may have a text file full of data (perhaps generated
with some other script), and you need a quick way to view it in a
sorted form.
&lt;/p&gt;

&lt;p&gt;
Let's start with a file named "test" that contains three lines:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
Foo
Bar
Baz
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;sort&lt;/code&gt; can operate either on STDIN redirection, the input from a pipe,
or, in the case of a file, you also can just specify the file on the
command. So, the three following commands all accomplish the same
thing:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
cat test | sort
sort &lt; test
sort test
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
And the output that you get from all of these commands is:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
Bar
Baz
Foo
&lt;/code&gt;
&lt;/pre&gt;


&lt;h3&gt;
Sorting Numerical Output&lt;/h3&gt;

&lt;p&gt;
Now, let's complicate the file by adding three more lines:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
Foo
Bar
Baz
1. ZZZ
2. YYY
11. XXX
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
If you run one of the above &lt;code&gt;sort&lt;/code&gt; commands again, this time, you'll
see different output:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
11. XXX
1. ZZZ
2. YYY
Bar
Baz
Foo
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
This is likely not the output you wanted, but it points out an
important fact about &lt;code&gt;sort&lt;/code&gt;. By default, it sorts alphabetically, not
numerically. This means that a line that starts with "11." is
sorted above a line that starts with "1.", and all of the lines that
start with numbers are sorted above lines that start with letters.
&lt;/p&gt;

&lt;p&gt;
To sort numerically, pass &lt;code&gt;sort&lt;/code&gt; the &lt;code&gt;-n&lt;/code&gt; option:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
sort -n test

Bar
Baz
Foo
1. ZZZ
2. YYY
11. XXX
&lt;/code&gt;
&lt;/pre&gt;


&lt;h3&gt;
Find the Largest Directories on a Filesystem&lt;/h3&gt;

&lt;p&gt;
Numerical sorting comes in handy for a lot of command-line output—in particular, when your command contains a tally of some kind, and
you want to see the largest or smallest in the tally. For instance,
if you want to find out what files are using the most space in a
particular directory and you want to dig down recursively, you would
run a command like this:

&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/back-basics-sort-and-uniq" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 08 Jan 2019 13:00:00 +0000</pubDate>
    <dc:creator>Kyle Rankin</dc:creator>
    <guid isPermaLink="false">1340356 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Schedule One-Time Commands with the UNIX at Tool</title>
  <link>https://www.linuxjournal.com/content/schedule-one-time-commands-unix-tool</link>
  <description>  &lt;div data-history-node-id="1340203" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock--187641571_0.jpg" width="600" height="600" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/kyle-rankin" lang="" about="https://www.linuxjournal.com/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Kyle Rankin&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;Cron is nice and all, but don't forget about its cousin &lt;code&gt;at&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
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.
&lt;/p&gt;

&lt;p&gt;
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 &lt;code&gt;at&lt;/code&gt; utility to schedule jobs to run at a later date.
&lt;/p&gt;

&lt;h3&gt;
&lt;code&gt;at&lt;/code&gt; vs. Cron&lt;/h3&gt;

&lt;p&gt;
&lt;code&gt;at&lt;/code&gt; 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.
&lt;/p&gt;

&lt;p&gt;
On the other hand, although the &lt;code&gt;at&lt;/code&gt; command also allows you to schedule
commands, it serves a completely different purpose from cron. While cron
lets you schedule commands to run periodically, &lt;code&gt;at&lt;/code&gt; lets you schedule
commands that run only once at a particular time in the future. This
means that &lt;code&gt;at&lt;/code&gt; fills a different and usually more immediate need
from cron.
&lt;/p&gt;

&lt;h3&gt;
Using &lt;code&gt;at&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;
At one point, the &lt;code&gt;at&lt;/code&gt; command came standard on most Linux
distributions, but
these days, even on servers, you may find yourself having to
install the &lt;code&gt;at&lt;/code&gt; package explicitly. Once installed, the easiest
way to use &lt;code&gt;at&lt;/code&gt; is to type
it on the command line followed by the time you want the command to run:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
$ at 18:00
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
The &lt;code&gt;at&lt;/code&gt; 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:

&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/schedule-one-time-commands-unix-tool" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 19 Nov 2018 12:30:00 +0000</pubDate>
    <dc:creator>Kyle Rankin</dc:creator>
    <guid isPermaLink="false">1340203 at https://www.linuxjournal.com</guid>
    </item>

  </channel>
</rss>
