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
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
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?