Actually, I figured out much of what I know through experimentation, before the class officially learned it. I learn when I get bored. I do have the advantage of being able to play around with actual gear, though. I've used simulators (Boson NetSim, for one) but they aren't always exactly the same. Speaking of which, if you want to try playing with them, give NetSim a shot. It's the best one I've used.
I think the main reason that they don't use Linux on their basic routers is because it'd probably be a lot heavier than their own IOS software. Linux is considerably larger, requiring a larger EEPROM, takes a while to start up (compared to IOS, which starts up in maybe twenty seconds, including performing extensive hardware checks), and has more overhead. IOS also has a much more intuitive way of storing configuration data, setting up interfaces, etc, because it was built specifically for the task at hand. Linux would be nice for an all-in-one sort of device, but most places that would need higher-end routers probably wouldn't want a solution like that -- too much rolling on one device and all.
I dunno about the static routing thing. It would probably take a lot of trial and error if you haven't done it before; it's a little odd. There is a quick reference of sorts available in the IOS software (just key in a question mark after a command) but it is a little vague on a few things.
"no shut" is vital for the interface to actually start talking. IOS is like Windows or *nix in that every interface, by default, starts in a down state. Typing "no shutdown," or, as I abbreviated it, "no shut," brings up the interface.
I don't think I mentioned this in my previous post. IOS supports shortcut commands. The commands are pretty verbose by default (i.e. "enable," "configure terminal," "interface ethernet0/0", "ip address," etc. You can abbreviate the commands as much as you like, so long as the identifier is still unique. For example, instead of "interface ethernet0/0" you could type "int e0/0," since there is no ambiguity. You cannot use "in e0/0," however, because it would conflict with a command such as "invert rxclock."
It's quite nice, really. It's a fairly intuitive input system.
Edit: Ugh, building a toolchain for Linux can be a royal pain in the ass sometimes.
I'm building a i686-pc-linux-gnu toolchain for a project I'm working on (building a distro from scratch) and it's been an interesting ride. I basically used my Gentoo system to put together everything I'd need for a minimal system. I used portage to build binary packages of gcc 4.1.2, binutils 2.18-r1, and glibc 2.6.1, then built a busybox binary. I extracted the toolchain components to my empty directory, threw busybox in place, then chrooted into it. Awesome.
I then started gathering tools to rebuild the toolchain. When it finally got to the point where I'd be able to compile binutils, gcc, and glibc, I attempted it. gcc and glibc, surprisingly, went well, but binutils kept choking on build. I'd already fixed an issue related to texinfo (namely, binutils 2.18's configure script's inability to deal with versions higher than a certain number) but was completely stumped on this one. The solution? Build and install binutils 2.17, then link binutils 2.18 using those tools. WHAT THE FUCK? O.O Oh well, at least it works now, and aquamarine can now truly stand on its own two feet.
Insert obligatory "LOOK MA, I DID IT WITHOUT LFS" happiness here.