One of the things that really slows me down in catching on with Linux is the huge difference between the file system in Linux versus Windows. Up until the last 3-4 years I only used Windows systems and its only been the last 2-3 months that I've really worked at getting accustomed to Linux. I think one of the things that really bothers me at this point is that I felt like I could find just about anything I wanted to when I began digging through the various folders in Windows. I had become accustomed to what kinds of things were placed where and when. I don't have that with Linux. I'm learning a few things like the /opt folder is where most third-party programs get installed... but my understanding is limited. What things are important to know to really understand the file system and to be able to locate different files and programs and such?
In some *nix distributions (tested on OpenBSD and Ubuntu) the man page for the file system hierarchy can be useful.
$ man hier
Of course, this will vary depending on platform and how up to date the manual pages are. The man page (on Ubuntu) also references the Filesystem Hierarchy Standard that was pointed to earlier.
I did not find a similar manual entry on solaris.
In general, different linux distributions are free to put things wherever they want to, so it can get confusing quickly. Most executables that the system installs (either as part of the base system or through a package manager) will end up somewhere in your default path (usually in /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin) though some distributions use /opt, /usr/share/bin, among others. A parallel could be drawn to the "Program Files" folder in windows. The "Windows" folder could be somewhat like /usr/lib /usr/include /usr/share and others. Your "My Documents" folder is somewhat parallel to your home directory on linux (/home/user) with the nice addition that most user specific configurations for programs like firefox, thunderbird, etc live here making moving to a new system fairly painless.
The problem with these parallels is they are not exactly accurate. Windows and linux are different in this respect.
The best way forward is to continue poking around with the system, as you probably did when you first started using windows, break things, fix them, ask questions along the way.
In Windows when you install a program, it creates a folder in Program Files that contains everything. It has the binaries, the libraries, the resource files, etc. In Linux, binaries usually go in
/usr/bin, libraries go in
/usr/lib, and resources go in
/usr/share. Specifically with like an icon file, that would go in
/usr/share/icons. Fonts can be found in
/usr/share/fonts. Development headers go in
/usr/include, and lastly, configuration files go in
This layout has some cool advantages. By putting libraries into
/usr/lib, it's much easier to share libraries between applications. In Windows, it's typical to see each program install their own set of libraries into Program Files, and another app may install the same exact library so now you have two exact copies of a .dll file. It also add some consistency to the filesystem layout. In Windows, you know the program will have a folder in Program Files, but there's no guarantee on how it's layed out inside that folder. Maybe the executables will be in a
bin/ folder, maybe not. Maybe it will have a
conf/ folder, again maybe not.