Linux is extremely powerful, robust and flexible, which means it must have a significant amount of complexity. Do you think I learnt everything in a day? I don't know who told you Linux was easy, many times other people make it harder than it has to be by thinking they need to understand everything at once.
Some Preliminary Advice
Some recommendations I would give you before you began with Linux:
- Take it easy. Frustration makes things worse for everyone.
- Never try anything for the first time in a production environment. Always use test environment. For example, iptables firewall or complex security configurations. Always use a test computer or virtual machine to test the various applications, configurations and settings. It will save lots of time. Recommended virtualization software - Vmware or Xen or VirtualBox
- Another option is start your journey with with LiveCDs. See the list of all Linux, BSD, LiveCDs and LiveDVDs here.
- Always refer to hardware compatible list (HCL) and kernel source documentation directory (/usr/src/linux/Documentation/) to check your hardware compatibility.
- Learn to read and search command man pages and vi / vim text editor. Type vimtutor at a shell prompt. The Vimtutor is useful for people that want to learn their first Vim commands.
- Don't try to set or create ultra secure servers / services on your first shot. Mess with test system couple times i.e. play for a while until you understand everything. Don't stress out for the perfect solution, it will slow you down.
- Stay away from advanced stuff until you learn the basic stuff like, ssh, vi text editor, directory structure, log files, searching and greping files, network configuration, package management, patch management, troubleshooting techniques using host, ping, route, ifconfig and other tools.
- Learn regex and text utilities such as sed, awk, grep and others. It will save lots of time in a long run.
- Learn to customize your own login environment. This will give you good idea about many configuration options such as ftp, vi, Gnome, Kde, GUI tools and much more. Get a good Linux book, it will be a big help (see below for recommend books).
- Don't hesitate to ask your questions on the forums and mailing lists. Also help others in the forums when you can. You will be supervised to find out how explaining stuff to someone else helps you understand it better.
- Learn to automate stuff using shell scripts.
- When you run into a problem with a configuration, make sure you read:
- The man pages
- The info pages
- Read package README.txt, INSTALL.txt and other files stored in a current directory or /usr/share/doc/package-name directory.
- Use google / yahoo search engines to do several searches with different terms. My personal experience you may get answer in the forums / websites / mailing lists. Only rarely have my problems not already been answered in the forums.
- Subscribe to security alert mailing lists.
- Learn to compile packages using make, configure and other build tools.
- Once you learnt terminology and basic things, start configuring basic services such as Apache. They idea is simple start by getting something up and visible. Take a time to explore stuff and get comfortable with each service / servers. Always configure one service at a time and get familiar with them one at a time.
- Don't compare Windows utilities / software with equivalent Linux software. Windows is not Linux or vise versa.
- Don't try to replace Windows desktop with Linux desktop. Windows desktop has better applications stack. Similarly, Windows can't replace Linux. You need to consider various factors before migrating from Windows systems.
- Gather experience.
- Finally, always ignore flame wars such as 'vim vs emacs editor' or 'BSD vs Linux'.
References / Recommend Readings:
- Read online: The Linux Cookbook, Linux in a Nutshell, Rute User's Tutorial and Exposition, Slackware Linux Essentials, Linux Documentation Project
- Books - Running Linux, Fifth Edition and Linux Annoyances for Geeks
- Advocating Linux
- Linux man page - intro and standards