I'd also add Love's Linux Kernel Development[2], published in 2010. Great resource overall for someone wanting to go developing the internals of the kernel.
Would you recommend those books to someone who is just familiar with the Linux command line and knows the basics of C? I want to start understanding the system I use everyday, in depth, but am not sure where to start.
I bought "Beginning Linux Programming" and I think it's a great book for beginner and intermediate C programmers looking to get a deeper knowledge of Linux. A bit basic if you've been working with C for some time tho.
After buying it I found The Linux Programming Interface... and I certainly regretted having bought the former rather than the later. But for beginners I recommend the first.
I encountered many of these while reading through Understanding The Linux Kernel [0] and The Linux Programming Interface [1].
Both are great books which are primarily about the "how" of the kernel, but cover a lot of the "why" of the design and algorithms as well.
0: http://www.amazon.com/dp/0596005652
1: http://www.amazon.com/dp/1593272200