<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: unix</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/unix.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2024-07-07T16:30:55+00:00</updated><author><name>Simon Willison</name></author><entry><title>Reasons to use your shell's job control</title><link href="https://simonwillison.net/2024/Jul/7/reasons-to-use-your-shells-job-control/#atom-tag" rel="alternate"/><published>2024-07-07T16:30:55+00:00</published><updated>2024-07-07T16:30:55+00:00</updated><id>https://simonwillison.net/2024/Jul/7/reasons-to-use-your-shells-job-control/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jvns.ca/blog/2024/07/03/reasons-to-use-job-control/"&gt;Reasons to use your shell&amp;#x27;s job control&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Julia Evans summarizes an informal survey of useful things you can do with shell job control features - &lt;code&gt;fg&lt;/code&gt;, &lt;code&gt;bg&lt;/code&gt;, &lt;code&gt;Ctrl+Z&lt;/code&gt; and the like. Running &lt;code&gt;tcdump&lt;/code&gt; in the background so you can see its output merged in with calls to &lt;code&gt;curl&lt;/code&gt; is a neat trick.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/julia-evans"&gt;julia-evans&lt;/a&gt;&lt;/p&gt;



</summary><category term="unix"/><category term="julia-evans"/></entry><entry><title>Bugs in Hello World</title><link href="https://simonwillison.net/2022/Mar/15/bugs-in-hello-world/#atom-tag" rel="alternate"/><published>2022-03-15T06:14:06+00:00</published><updated>2022-03-15T06:14:06+00:00</updated><id>https://simonwillison.net/2022/Mar/15/bugs-in-hello-world/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.sunfishcode.online/bugs-in-hello-world/"&gt;Bugs in Hello World&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
If a Unix program attempts to send its standard output to /dev/full it should return an error code. Many classic “hello world” programs fail to correctly handle this case.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="unix"/></entry><entry><title>jc</title><link href="https://simonwillison.net/2021/Dec/5/jc/#atom-tag" rel="alternate"/><published>2021-12-05T23:05:11+00:00</published><updated>2021-12-05T23:05:11+00:00</updated><id>https://simonwillison.net/2021/Dec/5/jc/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/kellyjonbrazil/jc"&gt;jc&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is such a great idea: jc is a CLI tool which knows how to convert the output of dozens of different classic Unix utilities to JSON, so you can more easily process it programmatically, pipe it through jq and suchlike. “pipx install jc” to install, then “dig example.com | jc --dig” to try it out.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://blog.kellybrazil.com/2021/12/03/tips-on-adding-json-output-to-your-cli-app/"&gt;Tips on Adding JSON Output to Your CLI App&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jq"&gt;jq&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="json"/><category term="unix"/><category term="jq"/></entry><entry><title>How FZF and ripgrep improved my workflow</title><link href="https://simonwillison.net/2019/Jul/5/fzf/#atom-tag" rel="alternate"/><published>2019-07-05T17:51:09+00:00</published><updated>2019-07-05T17:51:09+00:00</updated><id>https://simonwillison.net/2019/Jul/5/fzf/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://medium.com/@sidneyliebrand/how-fzf-and-ripgrep-improved-my-workflow-61c7ca212861"&gt;How FZF and ripgrep improved my workflow&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’m already a keen user of ripgrep (a crazy-fast grep alternative) but fzf was new to me: it’s a CLI utility that lets you pipe in a list of strings, then gives you a typeahead search interface to search and select a string before returning the selected string to stdout when you hit enter. This means you can pipe it together with other tools to add a dynamic selection step, which has all kinds of delightful combinations. “vi $(find . | fzf)” for example opens vi against the file you selected.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=20360204"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ripgrep"&gt;ripgrep&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="unix"/><category term="ripgrep"/></entry><entry><title>Run the First Edition of Unix (1972) with Docker</title><link href="https://simonwillison.net/2017/Nov/22/unix-1972-with-docker/#atom-tag" rel="alternate"/><published>2017-11-22T15:36:15+00:00</published><updated>2017-11-22T15:36:15+00:00</updated><id>https://simonwillison.net/2017/Nov/22/unix-1972-with-docker/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://nickjanetakis.com/blog/run-the-first-edition-of-unix-1972-with-docker"&gt;Run the First Edition of Unix (1972) with Docker&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is so cool... run &lt;code&gt;docker run --rm -it bahamat/unix-1st-ed&lt;/code&gt; to drop into a simulation of a PDP-11 running genuine 1972 era Unix! If you haven't got into Docker yet, Docker for Mac is a single click install these days and works incredibly well.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://www.reddit.com/r/docker/comments/7eir6v/run_the_first_edition_of_unix_1972_through_docker/"&gt;r/docker&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/docker"&gt;docker&lt;/a&gt;&lt;/p&gt;



</summary><category term="unix"/><category term="docker"/></entry><entry><title>fd</title><link href="https://simonwillison.net/2017/Oct/8/fd/#atom-tag" rel="alternate"/><published>2017-10-08T21:27:06+00:00</published><updated>2017-10-08T21:27:06+00:00</updated><id>https://simonwillison.net/2017/Oct/8/fd/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/sharkdp/fd"&gt;fd&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“A simple, fast and user-friendly alternative to find.” Written in Rust, with a less confusing default command-line syntax than the regular find command. Microbenchmark shows it running 7x faster. Install it on OS X using “brew install fd”.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=15429390"&gt;Show HN&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/homebrew"&gt;homebrew&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;&lt;/p&gt;



</summary><category term="homebrew"/><category term="unix"/><category term="rust"/></entry><entry><title>Is it important for modern programmers to know how to use Unix? Why?</title><link href="https://simonwillison.net/2010/Oct/4/is-it-important-for/#atom-tag" rel="alternate"/><published>2010-10-04T12:34:00+00:00</published><updated>2010-10-04T12:34:00+00:00</updated><id>https://simonwillison.net/2010/Oct/4/is-it-important-for/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Is-it-important-for-modern-programmers-to-know-how-to-use-Unix-Why/answer/Simon-Willison"&gt;Is it important for modern programmers to know how to use Unix? Why?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'd say yes. If you do any kind of server-side development, Linux/&lt;span&gt;Unix etc &lt;/span&gt;&lt;span&gt;&lt;a href="https://www.quora.com/topic/Unix"&gt;UNIX&lt;/a&gt; (links to: &lt;a href="https://www.quora.com/topic/Unix"&gt;/topic/Unix&lt;/a&gt;)&lt;/span&gt;&lt;span&gt;, etc., &lt;/span&gt;is where most of the exciting innovation is happening. Tools like &lt;span&gt;Hadoop&lt;/span&gt;&lt;span&gt;&lt;a href="https://www.quora.com/topic/Apache-Hadoop"&gt;Apache Hadoop&lt;/a&gt; (links to: &lt;a href="https://www.quora.com/topic/Apache-Hadoop"&gt;/topic/Apache-Hadoop&lt;/a&gt;)&lt;/span&gt;, &lt;span&gt;Redis&lt;/span&gt;&lt;span&gt;&lt;a href="https://www.quora.com/topic/Redis"&gt;Redis&lt;/a&gt; (links to: &lt;a href="https://www.quora.com/topic/Redis"&gt;/topic/Redis&lt;/a&gt;)&lt;/span&gt;, &lt;span&gt;MongoDB&lt;/span&gt;&lt;span&gt;&lt;a href="https://www.quora.com/topic/MongoDB"&gt;MongoDB&lt;/a&gt; (links to: &lt;a href="https://www.quora.com/topic/MongoDB"&gt;/topic/MongoDB&lt;/a&gt;)&lt;/span&gt;, &lt;span&gt;nginx&lt;/span&gt;&lt;span&gt;&lt;a href="https://www.quora.com/topic/nginx"&gt;nginx&lt;/a&gt; (links to: &lt;a href="https://www.quora.com/topic/nginx"&gt;/topic/nginx&lt;/a&gt;)&lt;/span&gt;, &lt;span&gt;git etc &lt;/span&gt;&lt;span&gt;&lt;a href="https://www.quora.com/topic/Git-version-control-1"&gt;Git&lt;/a&gt; (links to: &lt;a href="https://www.quora.com/topic/Git-version-control-1"&gt;/topic/Git-version-control-1&lt;/a&gt;)&lt;/span&gt;&lt;span&gt;, etc., &lt;/span&gt;all come from a &lt;span&gt;Unix &lt;/span&gt;&lt;span&gt;UNIX &lt;/span&gt;culture, and not knowing your way around a command line makes it much harder to get to grips with them.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="programming"/><category term="software-engineering"/><category term="unix"/><category term="quora"/></entry><entry><title>Running Processes</title><link href="https://simonwillison.net/2010/Mar/2/running/#atom-tag" rel="alternate"/><published>2010-03-02T09:55:18+00:00</published><updated>2010-03-02T09:55:18+00:00</updated><id>https://simonwillison.net/2010/Mar/2/running/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://dustin.github.com/2010/02/28/running-processes.html"&gt;Running Processes&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’ve been searching for a good solution to this problem (“run this program, and restart it if it falls over”) for years. I’m currently using god which works pretty well, but according to this article I should be learning upstart instead. It never ceases to amaze me how difficult this is, and how obtuse the tools are.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/god"&gt;god&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/processes"&gt;processes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/upstart"&gt;upstart&lt;/a&gt;&lt;/p&gt;



</summary><category term="god"/><category term="linux"/><category term="processes"/><category term="ubuntu"/><category term="unix"/><category term="upstart"/></entry><entry><title>The Go Programming Language</title><link href="https://simonwillison.net/2009/Nov/11/go/#atom-tag" rel="alternate"/><published>2009-11-11T07:00:21+00:00</published><updated>2009-11-11T07:00:21+00:00</updated><id>https://simonwillison.net/2009/Nov/11/go/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://golang.org/"&gt;The Go Programming Language&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A brand new systems programming language, designed by Robert Griesemer and Unix/Plan 9 veterans Rob Pike and Ken Thompson and funded by Google. Concurrency is supported by lightweight communicating processes called goroutines. “It feels like a dynamic language but has the speed and safety of a static language.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/concurrency"&gt;concurrency&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/go"&gt;go&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/goroutines"&gt;goroutines&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ken-thompson"&gt;ken-thompson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/plan9"&gt;plan9&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/robert-griesemer"&gt;robert-griesemer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rob-pike"&gt;rob-pike&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="concurrency"/><category term="go"/><category term="google"/><category term="goroutines"/><category term="ken-thompson"/><category term="plan9"/><category term="programming"/><category term="robert-griesemer"/><category term="rob-pike"/><category term="unix"/></entry><entry><title>Python is Unix</title><link href="https://simonwillison.net/2009/Oct/7/python/#atom-tag" rel="alternate"/><published>2009-10-07T11:43:20+00:00</published><updated>2009-10-07T11:43:20+00:00</updated><id>https://simonwillison.net/2009/Oct/7/python/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jacobian.org/writing/python-is-unix/"&gt;Python is Unix&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob ports Ryan Tomayko’s simple prefork network server to Python.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ryan-tomayko"&gt;ryan-tomayko&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="python"/><category term="ryan-tomayko"/><category term="unix"/></entry><entry><title>I like Unicorn because it's Unix</title><link href="https://simonwillison.net/2009/Oct/7/unicorn/#atom-tag" rel="alternate"/><published>2009-10-07T11:42:04+00:00</published><updated>2009-10-07T11:42:04+00:00</updated><id>https://simonwillison.net/2009/Oct/7/unicorn/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://tomayko.com/writings/unicorn-is-unix"&gt;I like Unicorn because it&amp;#x27;s Unix&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ryan Tomayko analyses Unicorn, a new, pre-forking Ruby HTTP server that makes extensive use of Unix syscalls and idioms, and asks why dynamic language programmers don’t take advantage of these more often.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/exec"&gt;exec&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fork"&gt;fork&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ryan-tomayko"&gt;ryan-tomayko&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unicorn"&gt;unicorn&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="exec"/><category term="fork"/><category term="programming"/><category term="ruby"/><category term="ryan-tomayko"/><category term="unicorn"/><category term="unix"/></entry><entry><title>shunit2</title><link href="https://simonwillison.net/2009/Sep/27/shunit/#atom-tag" rel="alternate"/><published>2009-09-27T19:34:03+00:00</published><updated>2009-09-27T19:34:03+00:00</updated><id>https://simonwillison.net/2009/Sep/27/shunit/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/shunit2/"&gt;shunit2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
xUnit style testing for shell scripts.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://delicious.com/jacobian/xunit+bash"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bash"&gt;bash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/shell"&gt;shell&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/shunit2"&gt;shunit2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xunit"&gt;xunit&lt;/a&gt;&lt;/p&gt;



</summary><category term="bash"/><category term="shell"/><category term="shunit2"/><category term="testing"/><category term="unix"/><category term="xunit"/></entry><entry><title>Perl 6: The MAIN sub</title><link href="https://simonwillison.net/2009/May/28/perl6/#atom-tag" rel="alternate"/><published>2009-05-28T21:32:24+00:00</published><updated>2009-05-28T21:32:24+00:00</updated><id>https://simonwillison.net/2009/May/28/perl6/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://perlgeek.de/blog-en/perl-5-to-6/14-main-sub.html"&gt;Perl 6: The MAIN sub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
"Calling subs and running a typical Unix program from the command line is visually very similar: you can have positional, optional and named arguments." - that's exactly what I was thinking when I came up with &lt;a href="https://github.com/simonw/optfunc"&gt;optfunc&lt;/a&gt;.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://simonwillison.net/2009/May/28/optfunc/#c45364"&gt;Keith Devens&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/optfunc"&gt;optfunc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/perl"&gt;perl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/perl6"&gt;perl6&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="optfunc"/><category term="perl"/><category term="perl6"/><category term="python"/><category term="unix"/></entry><entry><title>python-daemon</title><link href="https://simonwillison.net/2009/May/18/daemon/#atom-tag" rel="alternate"/><published>2009-05-18T10:12:13+00:00</published><updated>2009-05-18T10:12:13+00:00</updated><id>https://simonwillison.net/2009/May/18/daemon/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pypi.python.org/pypi/python-daemon/1.4.5"&gt;python-daemon&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A library for correctly creating Unix daemon processes in Python, implementing the proposed PEP 3143 API.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://holdenweb.blogspot.com/2009/05/python-is-so-versatile.html"&gt;Steve Holden&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/daemon"&gt;daemon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="daemon"/><category term="python"/><category term="unix"/></entry><entry><title>A Unix Utility You Should Know About: Pipe Viewer</title><link href="https://simonwillison.net/2009/Feb/9/unix/#atom-tag" rel="alternate"/><published>2009-02-09T22:15:45+00:00</published><updated>2009-02-09T22:15:45+00:00</updated><id>https://simonwillison.net/2009/Feb/9/unix/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.catonmat.net/blog/unix-utilities-pipe-viewer/"&gt;A Unix Utility You Should Know About: Pipe Viewer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Useful command line utility that adds a progress bar to any unix pipeline.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pipes"&gt;pipes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pipeviewer"&gt;pipeviewer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="pipes"/><category term="pipeviewer"/><category term="unix"/></entry><entry><title>lns</title><link href="https://simonwillison.net/2008/Oct/20/lns/#atom-tag" rel="alternate"/><published>2008-10-20T23:42:19+00:00</published><updated>2008-10-20T23:42:19+00:00</updated><id>https://simonwillison.net/2008/Oct/20/lns/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://interglacial.com/~sburke/pub/lns.html"&gt;lns&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“a friendly program for making symbolic links”—it’s ln -s but it does the right thing no matter what order you put the arguments in. Love it.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.iamcal.com/linklog/1224538502/"&gt;Cal&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ln"&gt;ln&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lns"&gt;lns&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/seanmburke"&gt;seanmburke&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="ln"/><category term="lns"/><category term="seanmburke"/><category term="unix"/></entry><entry><title>The Cron Commandments</title><link href="https://simonwillison.net/2008/Jun/27/cron/#atom-tag" rel="alternate"/><published>2008-06-27T09:48:53+00:00</published><updated>2008-06-27T09:48:53+00:00</updated><id>https://simonwillison.net/2008/Jun/27/cron/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.unixdaemon.net/cgi-bin/blosxom.pl/sysadmin/cron_commandments.html"&gt;The Cron Commandments&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
How to write well-behaved cron scripts, from Dean Wilson.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cron"&gt;cron&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dean-wilson"&gt;dean-wilson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="cron"/><category term="dean-wilson"/><category term="unix"/></entry></feed>