Unix needs an undo command.
This morning, my roommate and I hauled out some of our “big iron” (a languishing Pentium 4 box) to use as a photo server. Because we had initially planned to use that box to host bitquabit.com and its sister sites—a plan since scrapped—it had a full clone of all the data on my Linode hub. Before my roommate got going, then, I thought I’d quickly clean the box and return it to a neutral state. First stop, hose the duplicates of the websites I host. Fire up SSH, sidle into /var/www
, double-check with pwd
I’m where I think I am, fire off an rm -rf *
, and check that the directory’s clean. It was, so I decided to write
a message to my roommate. Since I couldn’t remember what his Unix login was, and I knew he was logged on, I ran the w
command.
benjamin pts/0 fcfwbeac.fogcree Fri18 2days 1.20s 0.08s citadel
benjamin pts/1 192-168-40-51.c3 21:26 1.00s 0.06s 0.01s w
I don’t remember even installing Citadel on this machine, I thought. And why am I the only one on the server? As very, very dark thoughts started to wander out of my amygdala and set up shop in my frontal lobes, I decided to check that w
wasn’t malfunctioning.
benjamin@bitquabit ~> w
9:43:23 up 18 days, 4:29, 2 users, load average: 0.00, 0.04, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
benjamin pts/0 fcfwbeac.fogcree Fri18 2days 1.20s 0.08s citadel
benjamin pts/1 192-168-40-51.c3 21:26 1.00s 0.21s 0.00s w
benjamin@bitquabit ~>
I wonder why my roommate’s not showing up, I wondered to myself. Maybe if I run it one more time…
And then it hit me. benjamin@bitquabit. benjamin@bitquabit. Oh frak, I hosed my production server!
But no, wait. I’d set up the spare box to be a bitquabit clone; it makes sense it’d think it was bitquabit. So I dropped out of ssh and read back .ssh/config
:
benjamin@bitquabit ~> exit
Good bye
Connection to bitquabit.com closed.
Mungus:~ benjamin$ cat .ssh/config
Host vera
HostName 192.168.1.10
Host bqb
HostName bitquabit.com
Mungus:~ benjamin$
…frak. Sure enough, I hosed all the websites on my production server. Oh, what jolly day.
There were two good things: first, although backup on my server wasn’t automated, I had written a backup script, and it had everything except four images from a very recent article and my hit tracking system, Mint. Second, I got motivated to actually automate my backup system.
Now, every day, at three AM, the server makes a tarball of all relevant data and throws it into a special backup directory. A launchd-powered script on my Mac grabs the tarball daily and puts it in a place on my machine where Mozy can find it. The end result is a system I’m pretty happy with. I shouldn’t lose data that way again.
All that said, it seems to me like this situation shouldn’t even be possible nowadays. I understand that I should’ve been more careful; I won’t argue that. But…shouldn’t Unix have an undo command? I know for a fact that I’m hardly the only person to have hosed data by not paying enough attention while doing sysadmin tasks. Indeed, it’s regarded as a right-of-passage for system administrators, and focusing on the fact that this is the first time I’ve ever done something nearly so stupid on a production system makes me happy. But, still: on a Mac, or even on Windows, I have undo all over the place. I can’t think of any command on Unix that has undo. Isn’t it about time that started changing?
Want to comment on this post? Join the discussion! Email my public inbox.