Teaching Linux/Unix Basics to Microsoft Junkies? 570
flupps asks: "I've been asked to hold a two-day crash course in a class of students that currently are studying to become MCSD certified. I'm looking for ideas how to set this up. I was thinking about starting with some general file system descriptions, where to find what files, the man pages, the tab-button, etc.
After that move on to some of the daemons and just explain what they do." He's got at least one idea to start with (below), but what must-have skills or demonstrations would you add?
I also plan to set a database program in VB (one of the certificates in the MCSD suite) against a MySQL or Postresql db and show that there are free alternatives that works as well as SQL server.
What would you think could be a good addition to teach them?
This is in no way meant to be a very advanced course, but I want to show some of the excellence of *nix and why you sometimes can save time and stability and maybe make them interested and read up more by themselves afterwards.
Any suggestions very welcome.
man pages (Score:5, Informative)
man heir is a good start for disk structure. (if you're on a BSD, i'm not sure Linux distros have that.
Explain the Unix philosophy, with small apps doing one thing well, and how they can be glued together to do complicated things.
make sure to stress ideology (Score:2, Informative)
many windows people when approached with linux view features they don't see as features that don't exist.
Re:Show them the possibilities (Score:4, Informative)
They are developers, for crying out loud. They'll start running after 5 minutes of iptables; why not show them gcc?
Show them the [...] the geniality of config-files, and NO REGISTRY.
Look, config files in
Don't get me wrong, I'm a 100% unix guy; but it seems to me that exactly this kind of arguments makes people stay away from linux. You don't have to crush Windows, you have to give them reasons to make them beleive in linux, and to want to hop in the wagon.
inodes, symlinks, shell, documentation (Score:2, Informative)
Second, teach them about symbolic links and how this makes it possible to separate logical from physical file locations.
Third, show them how to do tasks with shell pipelines (don't forget to explain that file globbing is done by the shell rather that by each command).
Finally, show them that there is complete documentation for everything.
Re:the best combo IMHO (Score:5, Informative)
1) Windows has tab completion. It's just not turned on by default. (Do help cmd from the shell in Win 2K (at least) to get a description of it. You can also configure the completion char to something other than tab..)
2) cat exists, it's called type
3) grep exists, it's called find. If find isn't sufficiently powerful for you, you can always get grep for Windows.
4) piping and redirection works more or less exactly like in UNIX with the same syntax even
Of course all of this stuff isn't as commonly used on Windows as it is in UNIX, but it doesn't mean that it's not there.
Re:man pages (Score:3, Informative)
different
Re:the best combo IMHO (Score:3, Informative)
For example, I had a devil of a time figuring out how to do something simple like "quota username" to see how much quota someone is using without right-clicking the drive, picking quota tab, waiting to resolve 15,000 SIDs so I could find the username I was looking for. There is a perl script in the resource kit, but it runs forever (I stopped it in frustration after 15 minutes) since I assume it's trying to resolve SID to usernames and our NT domain controller has 15,000 accounts... (the server in question was a w2k member server, of a NT 4 domain).
But to get back to topic, I don't understand why. It's not easy moving from unix sys admin to windows or visa-versa. That's mainly why each camp hates the other platform. I'm more comfortable with UNIX admin, and I'm sure if I had the time to invest in learning Windows admin, I could easily throw the needed scripts together to get what I need out of the box.
Two days isn't going to cut it. Just go over basics in philosophy and try to avoid platform wars..
The Unix Philosophy (Score:3, Informative)
I'd suggest teaching them the basics of the Unix philosophy - small is beautiful, make each program do one thing well, avoid captive user interfaces, etc. If you don't already have a copy, pick up Gancarz's The Unix Philosophy which describes the various tenets clearly and concisely. (Hell, if you're allowed to or have a budget, make the text a required purchase. It's cheap.)
Something like this would be far more useful than 'ls|grep' or "/etc is where system-wide configuration files are stored" because it would provide them with a new way of approaching computers.
p.s. For extra points, contrast the Unix philosophy which assumes that you know what you're doing with the DOS/Windows philosophy which assumes that you don't know what you're doing. You might even want to begin your class by reading/assigning Scoville's Unix as Literature [meganet.net] which nicely depicts how different Unix is from other operating systems.
Xargs, find, grep (Score:2, Informative)
These shell commands are good by themselves but great when used together.
will find every config file underDo this from a GUI with three or four shell windows open, so you can grep in one window and keep a file or two open (runing vi, or whatever) in the others. Then do the same thing with NO GUI (yes, Linux runs great like this, esp. on old crapy machines, e.g. my firewall again). Show them how to use ALT-Fn to get multiple screens with out the GUI.
Show them also
to look in the current directory, and will locate only regular files (ignoring links), which is nice for reducing spam.Also show them
for when xargs can't append the commands, or needs to run them singlly.Also, point out http://www.tldp.org/. The Linux Documentation Project isn't the be-all or end-all, but some of their how-to's are invaluable if you have nowhere else to turn.
Good luck!
Re:Not to discourage you .... (Score:3, Informative)
Show them that they can mount remote filesystems and cd to them like a regular directory. I've noticed that that amazes UNIX newbies more than most other things. Show them about their "user space" the home directory and how their files can be protected from other peering eyes (permissions are a little advanced, but that'll help them to undertsand the security aspect of unixen)
Re:the best combo IMHO (Score:5, Informative)
1) Install a distro (preferably one that will have the easiest time with the hardware)
2) Configure a windowing environment (prefereably one that looks the most like Windows)
3) Show them an Office suite (preferably one that's comperable to MS-Office)
4) Fire up some awesome games (preferably XPilot
5) Start up a variety of browsers (preferable w/ Quicktime, Flash, RealPlayer, XMMS)
6) Configure and use an e-mail client, Jabber/Yahoo/AIM client (Gaim's good)
7) Spend some time on XMMS with various skinns -- and point to http://www.jazzradio.net/ and say, "This is coming from Germany"
8) Show them Palm Pilot support (Jpilot's the best)
9) Show them Quanta's HTML, PHP, SQL, Java and C/C++ syntax coloring
10) Show them a GUI file manager (e.g. Konqueror, et al)
Last, but not least, show them SWAT, Webmin and other easy-to-use administrative tools. You want to leave them with the sense that the Linux environment will be friendly, not ominous.
Let them at least start with some motivation to want to learn more!
Windows compatabilty tools (Score:3, Informative)
So you are going to need to show them that it is possible to mix'n'match windows and linux.
1)Winbind
(Mandrake 8.2 comes with winbind mostly setup - see http://mandrakeuser.org/connect/csamba5.html) or at least samba and joining a samba box to a windows domain. Something like LinNeighborhood for accessing shares.
2)Rdesktop or vnc or X on cygwin
The chances are they are going to have windows servers around, so make sure they know they can get into them from linux. From the other side, make sure they know they can get into their linux boxes from windows and run graphical apps, either with vnc or by running X on cygwin. (Need I mention rdesktop and vnc are standard on Mandrake
Show them why unix is better in some regards:
3)Please choose a decent distro. Please don't show them how to resolve dependencies on packages with rpm, but show them the right tool for installing software (apt or urpmi).
4)Show them how to effortlessly setup a firewall. Mail server, web server, proxy server.
Give them something they can apply on windows:
5)Show them that they can run PHP on IIS, and apache on windows (for better security). Show them cygwin.
6)Give them something to tie it all together. Maybe write a small php webpage that can send email to a windows domain account, or something that queries a db (or both).
7)Remind them that they should not be running X on their servers (aka you have a choice not to run a GUI).
8)Remind them not to hit CTRL-ALT-DEL when they want to log in locally
9)Show them the really good gui tools around, things like Kdevelop, OpenOffice, Evo, Konqueror,Gimp etc
10)Show them your favourite command-line features. Bash-completion, vi (they don't need to use it, but show them that a console editor can do syntax-highlighting), mc, lynx, ssh (with password-less key-based logins), X ssh-tunnelled.
11)Show them how easy it is to change hardware (like an ethernet card change with kudzu or similar) with a single reboot and virtually no downtime.
12)Give them CDs for the distro you used, and another CD with similar stuff for windows (cygwin, apache, mysql, mysqlfront etc).
I think your problem is going to be fitting it all into 2 days!
MCSD not MCSE (Score:5, Informative)
Most of the comments I've been reading have been going off about administration and configuration. These are people going for a developer certification. That means they probably already know a lot about programming, and they probably already know a fair bit about programming under Windows.
Going in there and giving them a Linux sales-pitch would be a waste of their time.
Database connectivity sounds like a cool thing to demonstrate, you might want to demonstrate the basic development tools and documentation available at their disposal. Show them an easy editor to use.. something consistent with the editors used in the Windows world, show them gcc and some neat stuff like xxgdb. The ones who are clueful enough to care will pick it up when they leave.
IMHO the most important thing to explain to them is software licensing. It is quick, but when they realize that if they like to develop software, they'll clue in that developing their apps for Linux is easier.
A few tiny things like that would probably take up all the time you have. Cygwin might help them know how to develop apps from Windows to target Linux boxes.
My experience with MCSDs and other Windows developers is that they don't really care about the OS, they just care about writing apps and using OSes to make money by solving problems.
Re:A few thoughts. (Score:3, Informative)