Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    P

    Pádraig Brady

    pixelbeat.org · Personal blog · on HN since 2010

    Pádraig Brady, a GNU coreutils maintainer, writes about Linux command-line tools, shell scripting, stdio buffering, and C/GCC programming details.

    Visit blogRSSHN submissions
    Open Source & LinuxSystems & PerformanceProgramming
    What HN says

    HN commenters point to his pages as useful references on stdio buffering, string buffer and integer overflow checks in GCC, and Linux command lists.

    Stats for nerds
    56HN people shared it
    40linked in comments
    1.8Kstory points
    Apr 2026last shared
    2010people per year2026

    Top posts on HN

    1. 1
      How the GNU coreutils are tested
      6 people · 433 points · first shared 2017 · 30 comments on HN
    2. 2
      Common shell script mistakes (2008)
      12 people · 397 points · first shared 2010 · 79 comments on HN
    3. 3
      Parallel processing with Unix tools
      3 people · 265 points · first shared 2017 · 87 comments on HN
    4. 4
      Coreutils Gotchas (2015)
      8 people · 200 points · first shared 2015 · 41 comments on HN
    5. 5
      The Linux perf command rocks
      1 person · 188 points · first shared 2011 · 26 comments on HN
    6. 6
      Some powerful commands for Linux
      7 people · 181 points · first shared 2010 · 24 comments on HN
    7. 7
      Essential Vim
      2 people · 53 points · first shared 2010 · 23 comments on HN
    8. 8
      The perils of file replacement on *nix
      2 people · 17 points · first shared 2010 · 17 comments on HN
    9. 9
      Buffering in Unix Standard Streams
      5 people · 9 points · first shared 2011 · Discussion on HN
    10. 10
      More Linux Commands
      3 people · 5 points · first shared 2010 · Discussion on HN

    What HN people wrote when they linked it

    • a3nSep 2015

      Read man pages.

      For every command you run, assume there is a man page, and assume there is quick help, there usually and often are both.

      $ man man # The man command has a man page about itself.

      $ man -help # The man command has quick help.

      A lot of this stuff is 40 years of accumulated and evolving conventions. Quick ref might not be available for a particular command, or might be found with -h, -help or --help.

      Read the bash man page. Or whichever shell you're using, but if you haven't set it yourself it's probably bash.

      The bash man page is pretty large, so don't read it all at once. Here's table of contents script that will give you a man page's table of contents. Make yourself a bin directory at /home/yourlogin/bin, then put it and other little tools that you write in there. Make them executable, and put that directory on your path. ("bin" is an old convention for "binary" or compiled programs. Ironically, most of what you put in there will not be binary. :)

      $ cat ~/bin/toc
      #! /usr/bin/env bash

      if [[ $# == 2 ]]; then
      man -S $2 -P "grep -E '^[^ ]'" $1
      else
      man -P "grep -E '^[^ ]'" $1
      fi

      $ toc time
      TIME(1) General Commands Manual TIME(1)
      NAME
      SYNOPSIS
      DESCRIPTION
      OPTIONS
      FORMATTING THE OUTPUT
      EXAMPLES
      ACCURACY
      DIAGNOSTICS
      AUTHOR
      SEE ALSO

      $ toc time 2
      TIME(2) Linux Programmer's Manual TIME(2)
      NAME
      SYNOPSIS
      DESCRIPTION
      …

    • nikisweetingSep 2020

      Here's my full bash reading list:

      - ShellCheck: life-changing BASH linter and testing toolkit https://github.com/koalaman/shellcheck

      - 30 interesting commands for the Linux shell – Víctor López Ferrando https://www.lopezferrando.com/30-interesting-shell-commands/

      - 7 Surprising Bash Variables https://zwischenzugs.com/2019/05/11/seven-surprising-bash-variables/

      - anordal/shellharden https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md

      - barryclark/bashstrap https://github.com/barryclark/bashstrap

      - BashPitfalls : Greg's Wiki http://mywiki.wooledge.org/BashPitfalls

      - Common shell script mistakes http://www.pixelbeat.org/programming/shell_script_mistakes.html

      - Comparison of all the UNIX shells http://hyperpolyglot.org/unix-shells

      - Defensive Bash Programming https://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/index.html or https://jonlabelle.com/snippets/view/markdown/defensive-bash-programming

      - Bash FAQ and Cookbook https://mywiki.wooledge.org/BashFAQ

      - Detecting the use of "curl | bash" server side …

    • codygmanFeb 2013

      Yep, just ran ps_mem.py (http://www.pixelbeat.org/scripts/ps_mem.py) and here's my entire server. Not a busy one, but it lets you see what a running api server and accompanying programs look like.

      Private + Shared = RAM used Program

      184.0 KiB + 31.5 KiB = 215.5 KiB atd
      240.0 KiB + 55.0 KiB = 295.0 KiB cron
      240.0 KiB + 68.0 KiB = 308.0 KiB upstart-socket-bridge
      304.0 KiB + 72.0 KiB = 376.0 KiB upstart-udev-bridge
      392.0 KiB + 79.0 KiB = 471.0 KiB sudo
      696.0 KiB + 26.0 KiB = 722.0 KiB dhclient3
      604.0 KiB + 189.0 KiB = 793.0 KiB getty (6)
      940.0 KiB + 49.0 KiB = 989.0 KiB dbus-daemon
      660.0 KiB + 366.0 KiB = 1.0 MiB udevd (3)
      1.0 MiB + 71.0 KiB = 1.0 MiB rsyslogd
      1.1 MiB + 35.5 KiB = 1.1 MiB redis-server
      1.0 MiB + 122.5 KiB = 1.2 MiB init
      964.0 KiB + 733.0 KiB = 1.7 MiB polkitd
      1.4 MiB + 823.5 KiB = 2.2 MiB console-kit-daemon
      2.5 MiB + 1.1 MiB = 3.6 MiB nginx (5)
      1.3 MiB + 3.2 MiB = 4.6 MiB sshd (5)
      5.4 MiB + 75.5 KiB = 5.5 MiB api_server <==== Go Program
      13.8 MiB + 963.0 KiB = 14.7 MiB bash (2)
      22.5 MiB + 314.0 KiB = 22.8 MiB mysqld
      41.9 MiB + 5.1 MiB = 47.0 MiB python2.7 (2)
      79.4 MiB + 542.0 KiB = 79.9 MiB java
      ---------------------------------
      190.3 MiB
      =================================

    • j1eloJul 2020

      I learnt the same trick some years ago, from an article called Shell Scripts Matter:

      https://dev.to/thiht/shell-scripts-matter

      So I took some of the advice and tips offered in there, and wrote a template file to be used as a baseline when writing scripts for any project that might need one:

      https://github.com/j1elo/shell-snippets/blob/master/template.sh

      Other resources that I link in the readme of that repo, because they were a great guide to write better and more robust scripts, are:

      - Writing Robust Bash Shell Scripts: https://www.davidpashley.com/articles/writing-robust-shell-scripts/

      - Common shell script mistakes: http://www.pixelbeat.org/programming/shell_script_mistakes.html

      - Bash Pitfalls: http://mywiki.wooledge.org/BashPitfalls

      - The Bash Hackers Wiki: https://wiki.bash-hackers.org/

      EDIT: -for anyone who would like to read some actual examples- I have to manage a bunch of scripts so actually a slightly more up to date version of the template is put into practice by means of a common bash.conf file that then gets sourced by all scripts: https://github.com/Kurento/adm-scripts/blob/master/bash.conf.sh

    • collinfunkApr 2026

      Another maintainer and I follow issues and pull requests on a GitHub mirror. But email works fine for us and many other projects.

      Regarding poor UX, it is difficult to dispute with that claim without a specific example. Note that a lot of the features we support are standardized by POSIX. Even if we dislike the behavior, it is better to comply with the standards so the programs don't behave differently than users expect. The sentence you quote isn't meant to put down users. These programs are often much more complex than meets the eye, and there are lots of common gotchas that people have run into (and will continue to do so) [1].

      Of course we would love for these programs to be useful for everyone. However, feature requests are often incompatible with existing behavior, incompatible with other feature requests, or have existing functionality elsewhere. For those reasons we cannot accept every feature request.

      [1] https://www.pixelbeat.org/docs/coreutils-gotchas.html

    • bravetravelerJun 2021

      I'll start by saying... I'm not a developer by any serious sense anymore. I did C over a decade ago and realized it was just not for me

      With that out it the way... This rust infatuation seems like those people using one click tools to interpolate videos with "AI"

      The end result is objectively worse and it's done because of subjective opinion: (gleefully) these artifacts are so SMOOTH!

      Moving coreutils to rust is similar. The unit test coverage is low, and the problems they're seeing don't inspire confidence

      Predictability in the tools is being traded for memory safety. I'd worry about using these behind any scripts, an extra \n from an obscure pipe driven bug could mean portability disaster

      Edit:
      For example, these quirks
      https://www.pixelbeat.org/docs/coreutils-gotchas.html

    Related

    Maizuremaizure.org45 people

    Decoded: GNU coreutils (2019)

    Maizure
    Personal · last shared 2026
    Jonathan Palardyblog.jpalardy.com18 people

    Why Learn Awk? (2016)

    Jonathan Palardy
    Personal · last shared 2025
    Oils Blogoilshell.org156 people

    Kubernetes is our generation's Multics

    Oils Blog
    Company · last shared 2026
    Graham Christensengrahamc.com57 people

    Erase your darlings: immutable infrastructure for mutable systems

    Graham Christensen
    Personal · last shared 2026
    Major Haydenmajor.io46 people

    A New Future for Icanhazip

    Major Hayden
    Personal · last shared 2026
    Richard Kettlewellgreenend.org.uk15 people

    poll() and EOF (2010)

    Richard Kettlewell
    Personal · last shared 2023
    Bryan O'Sullivanserpentine.com49 people

    Github is making me feel stupid(er)

    Bryan O'Sullivan
    Personal · last shared 2021
    Anil Madhavapeddyanil.recoil.org46 people

    Compiling OCaml directly to a new cloud operating system

    Anil Madhavapeddy
    Personal · last shared 2026