The man page reading club: shutdown(8)

This post is part of a series

I would like to write about more interesting things, but I do not have time or energy to do so. I need to shut down for a little while.

Sleeping in a sleepless time

Reading. Learning. Fun. Tired.

$ date 
Thu Jul  7 22:57:50 CEST 2022

Not too late. You should do something.

$ man man
NAME
    man - display manual pages

No, you have already done that one. What should you do?

$ date
Thu Jul  7 22:59:48 CEST 2022

This is not going anywhere. Is it time to go to sleep? Who knows, during the covid lockdown - ahem, nuclear winter - every hour looks the same. Maybe it is time to go to sleep. To shutdown.

shutdown(8)

Follow along at man.openbsd.org

SYNOPSIS
    shutdown [-] [-dfhknpr] time [warning-message ...]

DESCRIPTION
    shutdown provides an automated shutdown procedure for superusers to
    nicely notify users when the system is shutting down, saving them from
    system administrators, hackers, and gurus, who would otherwise not bother
    with such niceties.  When the shutdown command is issued without options,
    the system is placed in single user mode at the indicated time after
    shutting down all system services.

As it sometimes happens, the first few lines of the manual page hint to some arcane background that you cannot quite grasp. However, the bottom line is clear: shutdwon shuts the system down.

The options are as follows:
    -d  When used with -h, -p, or -r causes system to perform a dump.
        This option is useful for debugging system dump procedures [...].

Good to keep in mind. But this time we are not in for an in-depth analysis of a classic UNIX command. We just want to shut down. Let’s skip a few of the other options.

    -p  The system is powered down at the specified time.  The -p flag is
        passed on to halt(8), causing machines which support automatic
        power down to do so after halting.

    -r  shutdown execs reboot(8) at the specified time.

Yes, these sound like things I would like to do. How do I tell it to shut down now?

    time  time is the time at which shutdown will bring the system down and
          may be the word now (indicating an immediate shutdown) or specify
          a future time in one of two formats: +number or yymmddhhmm,
          where the year, month, and day may be defaulted to the current
          system values.  The first form brings the system down in number
          minutes and the second at the absolute time specified.

Great!

    warning-message
        Any other arguments comprise the warning message that is
        broadcast to users currently logged into the system.
    -   If `-' is supplied as an option, the warning message is read from
        the standard input.

Who do we have to warn about the shutdown? We are the only user anyway, right?

# echo 'the hours rise up putting off stars and it is
> dawn' | shutdown -p now -

Conclusions

At the moment of writing this blog post, I am tired. I had a busy week. I wanted to write an interesting blog post about something like sh(1), but I could not find the time. However, shutting down my pc earlier today inspired me to write this short blog entry.

shutdown is an interesting command. It seems like it should be straightforward: “computer, please shut down”. But the syntax for this simple instruction is quite complicated, and it offers us many more options than we would ever want to use, at least in the 21st century. Moreover, as indicated by the # instead of the $ in the last command, one needs superuser privileges to shut down a classic UNIX system.

This is because, in the time of mainframes, shutting down was not such a simple operation: multiple users might have been connected to the main computer, and shutting the whole system down without at least telling them was rude. At least this is my guess, I was not there at the time.

It would certainly be interesting to dig into the history of computer systems, mainframes and how administrators used to shut them down when multiple users were logged in. But I am not going to do it now.

Good night.

Next in the series: sh(1) - part 1: shell grammar