There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.
If this question can be reworded to fit the rules in the help center, please edit the question.

1

with your experience only reading kernel source would help .)
–
EimantasAug 10 '10 at 20:06

I am currently following Matt Might's advice in his article, What Every Computer Science Major Should Know. He recommended The Unix Programming Environment by Kernighan and Pike, Linux Server Hacks, UNIX and Linux System Administration Handbook by Nemeth, Synder, Hein and Whaley, Linux Kernel Development by Love, and Unix Network Programming by Stevens, Fenner and Rudoff.
–
AnthonyAug 5 '12 at 2:34

1

@Anthony, those are excellent resources, but more oriented to the userland/command line. Also, particularly Linux is changing very fast right now, you'd need to keep up to date. Nice resources are LWN and kernelnewbies.
–
vonbrandMar 15 '13 at 14:05

11 Answers
11

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.

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.

Linux kernel in a nutshell is about how to build and install the kernel, not really about the internals of Linux/Unix. Not to say it's not a good book, but I'm a bit biased. Oh, both of these books are free online if you want to look at them there.
–
Greg KHAug 10 '10 at 21:54

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.

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.

I agree with all the others and I have to say that Stevens' APUE (I have the second edition) is a classic. I would also like to add that Eric Raymond's The Art of UNIX Programming ranks right up there with Stevens on my list.