I've worked on *nix environments for the last four years as a application developer (mostly in C).
Please suggest some books/blogs etc. for improving my *nix internals knowledge.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
Here are some suggestions on how to understand the "spirit" of Unix, in addition to the fine recommendations that have been done in the previous posts:
"The Unix Programming Environment" by Kernighan and Pike: an old book, but it shows the essence of the Unix environment. It will also help you become an effective shell user.
"Unix for the Impatient" is a useful resource to learn to navigate the Unix environment. One of my favorites.
If you want to become a power user, there is nothing better than O'Reilly's "Unix Power Tools" which consists of the collective tips and tricks from Unix professionals.
Another book that I have not seen mentioned that is a fun light and education reading is the "Operating Systems, Design and Implementation", the book from Andy Tanenbaum that included the source code for a complete Unix operating system in 12k lines of code.
You definitely want to read Advanced Programming in the Unix Environment by Stevens. Don't let the Advanced title scare you away, its very readable.
Books/sites/manuals that I am using frequently:
The Linux Kernel: This book is published online as a part of TLDP (The Linux Documentation Project). It is not up-to-date and not an internal manual, but provides useful information and introductory materials about principles and mechanisms of the kernel.
Understanding Linux Kernel: IMHO, it is the best book for beginners who has background about the operating systems' design and concept. It is accepted as up-to-date, covers version 2.6 of the kernel. There is an HTML version of the book on the web, but I think it is most probably warez.
While studying linux kernel internals, you usually need to learn how hardware works and what hardware provides in abstract manner. Intel has great manuals for this.
Intel 64 and IA-32 Architectures Software Developer's Manuals: Up-to-date, detailed information.
Intel 80386 Programmer's Reference Manual: I know this is a little bit old but I've learned so many things from this manual.
If you need to study about operating systems' design and concept, I suggest following book: Operating System Concepts.
Linux Systems Programming or any other book by Robert Love (these are all O'Reilly books):
Well, for BSD Unices, there's The Design and Implementation of the 4.4BSD Operating System, parts of which are now apparently available for free at http://www.freebsd.org/doc/en/books/design-44bsd/
Linux Device Drivers is another good resource. It would give you another way to get into the inner workings. From the preface:
This is, on the surface, a book about writing device drivers for the Linux system. That is a worthy goal, of course; the flow of new hardware products is not likely to slow down anytime soon, and somebody is going to have to make all those new gadgets work with Linux. But this book is also about how the Linux kernel works and how to adapt its workings to your needs or interests. Linux is an open system; with this book, we hope, it is more open and accessible to a larger community of developers.
May I suggest the following two books as well (besides the others):
I have referred the first one extensively (If i had better memory, and had more time, I would know a lot more than I do now; but that's another story). I am currently reading the second one.
To get a sense of the why and what the kernel is meant to support, have a look at The Art of Unix Programming by Eric Raymond. It takes things at a fairly high, philosophical level, but it would go well with the nitty-gritty details of other books.