Best products from r/linux

We found 107 comments on r/linux discussing the most recommended products. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 645 products and ranked them based on the amount of positive reactions they received. Here are the top 20.

16. Linux Bible

  • HIGH PERFORMANCE AND HIGH QUALITY WITH SUPER AWESOME FEEL - This high-performance, mechanical keyboard feels amazing on your fingertips and offers two distinct tactile experiences - click and soft. Your fingers will love it. Now includes media controls for quick access to the most common media functions.
  • PREMIUM SOFT TACTILE EXPERIENCE - Best-in-class Cherry MX Brown mechanical key switches provide tactile and audio feedback so accurate it allows you to execute every keystroke with lightning-fast precision.. Enjoy the tactile experience you love from a mechanical keyboard, with just enough sound to satisfy you - and not annoy your coworkers!
  • UP TO 50 MILLION KEYSTROKES - Laser-etched keycaps for maximum durability are paired with Cherry MX Brown switches, giving your new mechanical keyboard life up to 50 million keystrokes. High-performance, gold-plated switches provide the best contact and typing experience because, unlike other metals, gold does not rust, increasing the lifespan of the switch.
  • FULL N-KEY ROLLOVER - Model S allows full N-key rollover with an included PS2 adapter, and 6 keys with USB. Great for fast typists and gamers alike.
  • 2 PORT USB 2.0 HUB & MORE - The convenience to charge USB devices and simultaneously upload content through USB is now right at your fingertips. Extra long 6.5 ft (201 cm) USB cable with single USB type-A connector. Special Media Keys (inscriptions in blue): sleep, brightness +/-, mute, volume +/-, eject, play/pause, next and previous track.
Linux Bible
▼ Read Reddit mentions

Top comments mentioning products on r/linux:

u/coned88 · 1 pointr/linux

While being a self taught sys admin is great, learning the internals of how things work can really extend your knowledge beyond what you may have considered possible. This starts to get more into the CS portion of things, but who cares. It's still great stuff to know, and if you know this you will really be set apart. Im not sure if it will help you directly as a sys admin, but may quench your thirst. Im both a programmer and unix admin, so I tend to like both. I own or have owned most of these and enjoy them greatly. You may also consider renting them or just downloading them. I can say that knowing how thing operate internally is great, it fills in a lot of holes.

OS Internals

While you obviously are successful at the running and maintaining of unix like systems. How much do you know about their internal functions? While reading source code is the best method, some great books will save you many hours of time and will be a bit more enjoyable. These books are Amazing
The Design and Implementation of the FreeBSD Operating System

Linux Kernel Development
Advanced Programming in the UNIX Environment


Learning the actual function of networking at the code level is really interesting. Theres a whole other world below implementation. You likely know a lot of this.
Computer Networks

TCP/IP Illustrated, Vol. 1: The Protocols

Unix Network Programming, Volume 1: The Sockets Networking API

Compilers/Low Level computer Function

Knowing how a computer actually works, from electricity, to EE principles , through assembly to compilers may also interest you.
Code: The Hidden Language of Computer Hardware and Software

Computer Systems: A Programmer's Perspective

Compilers: Principles, Techniques, and Tools

u/wandernotlost · 9 pointsr/linux

You can do it already, and it's not that difficult. Buy a router with dual channels, e.g. the Linksys E3000 (Affiliate Link) (Non-Affiliate Link) (I have no stake in this recommendation other than the Afflink), and put DD-WRT on it:

If you really want, you can configure one channel (e.g. 2.4GHz) as your open network and one (e.g. 5GHz) with encryption. I've been running DD-WRT open for years, but I recently upgraded to one of these and I leave both channels open, but configure Quality of Service (QoS) so that my neighbors have access, but my traffic always takes priority. I live in Manhattan, so I regularly have 5-20 people on my network and it doesn't affect me a bit. Works great, never needs a reboot, and I promote the ideal of allowing open access to the Internet.

If you really want security, you need a secure connection (e.g. https) to your destination anyway. WPA/WEP only encrypt the connection to your router, so anyone between your router and the destination server can sniff your traffic easily.

Note that I'm only using two channels because the 2.4GHz band is so congested here that my network slows down from signal interference. You can open your network and have bandwidth prioritization with a single channel just as easily.

u/wadcann · 12 pointsr/linux

>Why does Linux limit itself to this file name size?

What should it be? Posix requires it to be capped at NAME_MAX. That could be anything, but on my Linux distro happens to be 255. You could increase that and recompile your libs and apps if you wanted, but the Posix folks happened to choose to put a compile-time constant length on things back when. They probably did that because it makes handling some things more convenient. I imagine that somewhere, there's code that statically-allocates stuff of NAME_MAX + 1 length, so jacking up NAME_MAX to, say, 1MB would probably cause some programs to use a lot of that hasn't been done.

As to why Linux uses 256 instead of NAME_MAX + 1 in the header, go look at your system headers. On my system, /usr/include/x86_64-linux-gnu/bits/dirent.h has the following:

char d_name[256]; / We must not include limits.h! /

I imagine that 256 is used rather than NAME_MAX + 1 because they don't want to have the kernel header depend on that other header; maybe it creates a dependency loop, where limits.h depends on dirent.h and visa versa to find various constants. I'm not sure which standard "owns" NAME_MAX, but perhaps it's something that the kernel provides and libc is responsible for setting based on the kernel. It does seem a bit odd that there isn't a constant defined in the kernel headers (that libc defines NAME_MAX to on Linux) that is also used here and anywhere else a filename might show up, but I expect that the kernel folks had a reason for that.

EDIT: note also that the Windows API has a similar such restriction:

>>What is the maximum length of a file name?
>Windows usually limits file names to 260 characters. But the file name must actually be shorter than that, since the complete path (such as C:\Program Files\filename.txt) is included in this character count. This is why you might occasionally encounter an error when copying a file with a very long file name to a location that has a longer path than its current location.

Huh...I thought that they had a maximum path length of 1024 characters (or bytes; don't recall) but then I haven't done Windows programming for a while now...seems that 260 is correct, though.

>As a side note: any links to really good resources or articles for Unix/Linux systems programming in C would be much appreciated.

Seems like a pretty broad range of material, if you just want articles. I might want to narrow down what you're looking for a bit. I think that Advanced Programming in the Unix Environment is probably a worthwhile book to go through, if you just want a "C on Unix" book.

u/exacube · 2 pointsr/linux

First, you need to learn C and be very comfortable with it -- this happens when you work on a large project with multiple source files, especially when you start one from scratch yourself.

Second, you need to learn about operating system/kernel fundamentals -- C is just a tool/language. You need to know a lot about what you're developing! So get a book on OS -- or , or reading lecture notes from your school (preferrably from a very good Computer Science school). Here's one:

Third, start exploring the kernel source code and try and figure what things are and how things work. Subscribe to linux mailing lists, read more articles on how Linux internals work, etc.

The most important step here is step number 2! It will require the most work and the most effort.

It'll be challenging and fun, and will take quite a lot of time :) Be persistant and good luck!

u/AlienBloodMusic · 3 pointsr/linux

Download and install CentOS. It's the built-from-source version of RedHat Enterprise Linux. They are identical for all intents and purposes. Almost every business that's running linux is running either Cent or RHEL.

Use it as your primary OS, but that's not going to get you the experience you need to be a sysadmin. Use the RHCE Book to learn how to set up an apache server & other sysadmin tasks. Seriously, read the book & do the labs, you'll learn a lot about linux. (If you've got the $800 to spare, you can take the certification exam but IMHO the certifications don't get you much.)

Once you've got that down, check out the BASH Programming guide on tldp for shell scripting, and then maybe MIT's Introduction To Computer Science and Programming - completely free online course.

That ought to be a pretty good start. Good Luck!

u/cheerupcharlie · 2 pointsr/linux

I enjoyed Just For Fun - The Story of an Accidental Revolutionary.

There is an audio-book version available.


Unsure of the audio-book availability but these are recommended as well:

  • The Cathedral and the Bazaar (Eric S Raymond)
  • In The Beginning...was the command line (Neal Stephenson)
  • Free Software, Free Society (Richard Stallman)
  • Hackers: Heroes of the Computer Revolution (Steven Levy)

    EDIT : added some more books
u/mcur · 14 pointsr/linux

You might have some better luck if you go top down. Start out with an abstracted view of reality as provided by the computer, and then peel off the layers of complexity like an onion.

I would recommend a "bare metal" approach to programming to start, so C is a logical choice. I would recommend Zed Shaw's intro to C:

I would proceed to learning about programming languages, to see how a compiler transforms code to machine instructions. For that, the classical text is the dragon book:

After that, you can proceed to operating systems, to see how many programs and pieces of hardware are managed on a single computer. For that, the classical text is the dinosaur book: Alternatively, Tannenbaum has a good one as well, which uses its own operating system (Minix) as a learning tool:

Beyond this, you get to go straight to the implementation details of architecture. Hennessy has one of the best books in this area:

Edit: Got the wrong Hennessy/Patterson book...

u/[deleted] · 1 pointr/linux

FYI, Linux in a Nutshell is a great book, but a large portion of it (1/4) is essentially man pages. I still recommend the book for those interested in learning how to use Linux, but for those interested in how it works, I prefered: Understanding the Linux Kernel. This book details much more of the inner workings of Linux. It is not the caliber of a "in a Nutshell" book, however, and may be a very intellectually challenging read for some. I found myself understanding chapters very quickly, but needing to reread them because of how much information there is to retain.

u/coolhand1 · 13 pointsr/linux

1.) We always post open positions on but if your in the market send me a pm and we can discuss this further.

2.) You don't need to be certified however it is a requirement that before you start supporting customers that you have your RHCE. We have some great instructors here and the one who taught me is Chris Negus author of the Linux Bible

3.) Didn't eat breakfast but the new cafeteria is amazing!!

u/zyrkan · 7 pointsr/linux

As you can imagine, the kernel is a gigantic project, so it's hard to jump in and understand how things are working. If this is your first exposure to any operating system stuff, I would suggest backing up and learning a bit more of the basics. You'll find information like that under the terms "computer architecture" and "computer organization". Modern Operating Systems by Tanenbaum is a classic read to get started.

If you really want to dig at the kernel code, I'd recommend Robert Love's Linux Kernel Development. It gets into the details of process scheduling, interrupts, memory management, file systems, etc. and looks at the code. But I'd warn you that it's pretty complex and can be quite slow to learn.

There are a few free linux kernel books online such as Advanced Linux Programming and Linux Device Drivers. Even if some of the information is outdated, you'll get a lot of information about how the kernel works in general from these resources.

Hope that helps, and enjoy.

u/the_gnarts · 1 pointr/linux

> However, I've never done any development work for it. At my company, we will start to have some Linux work for our embedded processors. Before that work comes along, I'd like to start getting an appreciation for it and getting myself a good grounding in it.

Is it really going to be actual kernel work like writing drivers?
Most embedded platforms are vendor supported anyways
so there’s little to do kernel side unless your company has
very specific requirements.

If instead you’re going to do low-level userspace things,
the best resources for learning kernel APIs are the [Kerrisk]
( as a reference
and a LWN subscription to stay up to date.

u/CannedCorn · 5 pointsr/linux

"Linux Kernel Development 3rd Edition" is fairly modern (2010) and really good:

Also... not kernel internals specific but an AMAZING book about programing against the linux kernel is "The Linux Programming Interface":

It was written by the guy who wrote a lot of the linux man pages and is one of the best books about how linux works from a programming interface perspective that I've ever read.

u/ghostrider176 · 1 pointr/linux

>Any good books you would recommend?

I never really read any technical books on Linux. Most of my training on Linux has come from working for various vendors and institutions as well as a fair bit of hands on experience (both on the job and off in my lab at home).

I've seen the UNIX and Linux System Administration Handbook mentioned in this subreddit a few times so I assume it's gotta be decent. I remember reading the sample of it somewhere and confirming that what was inside was exactly what I would expect from such a book.

If you're looking for online help then I can help you a bit more with that. First off, the Linux From Scratch project is really time consuming, tedious, and probably over your head (it's still over mine, don't get discouraged). I went through the project once and didn't even come close to finishing it. Towards the end of my attempt I was really just skipping large sections of text and going through the motions of compiling things. However, I still learned some good points about the inner workings of a GNU/Linux system and recommend the project to all people who want an advanced understanding of it; Even if you abandon your lab of it or fail it miserably, I'd wager you'd still walk away with something of value.

The Arch Linux Wiki, or "ArchWiki" as it's referred to on their website, is a surprisingly informative community information repository. It has its faults: You won't find everything you're looking for, some tutorials are little more than hastily pasted step by step guides with absolutely no explanation, and as expected it's written for the Arch Linux distribution. However the utilities and programs Arch uses are the same that every other Linux distribution uses and, much like the Linux From Scratch project, visiting and poking around a bit my steer you on the way to a stronger understanding.

Finally, The Linux Documentation Project is a good bookmark to have (though I don't go there much any more).

u/TheQueefGoblin · 7 pointsr/linux

Sure, see the Wikipedia article on UTM parameters.

Basically they allow companies to track how people arrive at their website. If they share a link on Twitter, for example, it could contain tracking parameters identifying Twitter as the original source, and/or the name of the company's current advertising campaign.

When someone clicks the link the website owner can check these parameters to see where that person came from (e.g. Twitter).

Identifying tracking parameters in links is straightforward once you know what to look for:

  1. Anything beginning with utm_ is virtually always a tracking parameter and can be removed from the URL.
  2. Clearly-named tracking parameters such as source, src, trk, referrer etc. can also be removed.
  3. Other parameters whose values look nonsensical (e.g. huge strings of random characters) are often (but not always) tracking data too.

    Let's look at an example from an Amazon search for "teddy bear":

    In the above URL everything from /ref... onwards is unnecessary tracking rubbish and can be removed. ref probably tracks the section of the website the link was found; keywords contains the search term used to find the product. qid is probably "query id". sr is probably "source" meaning the position on the page where the product was seen (e.g. in a slideshow).

    The above URL without tracking parameters is:

    And it can actually be further shortened to:

    So in summary a good rule of thumb is you can remove most text from a link which looks like garbage. If it looks worthless, it probably is.

    To further avoid such links you can use the following Firefox extensions, which attempt to remove known tracking parameters from URLs as you browse the web:

  • ClearURLs

  • Link Cleaner

    Reddit tracking

    While you're reading this, you should also know Reddit tracks the links you click too. You should:

  1. Go to the Reddit preferences page.
  2. Un-tick the box "allow reddit to log my outbound clicks for personalization"
  3. Un-tick the box "allow my data to be used for research purposes"
  4. Click the "save options" button

    You should also:

  5. Visit Reddit's personalization preferences page
  6. Un-tick all of the boxes on that page
  7. Save
u/Herdo · 2 pointsr/linux

I just bought "How Linux Works" published by no starch press.

Excellent so far, and while I was familiar with all the topics in the book to begin with, I still learn something new every chapter. It's listed as an "Intermediate" level book, but there is a wide range of topics from absolute beginner to some more advanced stuff, all with easy to understand explanations. The topics build on themselves nicely, so you aren't just dropped into a chapter having no idea what the author is talking about.

Supposedly most of the no starch press books are great. /u/C0rn3j mentioned "The Linux Command Line" as well.

u/theevilsharpie · 0 pointsr/linux

> I want to learn how linux (and computers) work.

If you want to learn how Linux (and computers) work, take a course on operating system design and development. It's offered at any university that has a respectable computer science program, and you can probably find online courses that teach it for free. If you're more of a self-starter, grab a textbook and work your way through it. A book on the internal workings of Linux in particular might also be helpful, but IMO the development of the Linux kernel is too rapid for a book to provide a useful up-to-date reference.

If you want to learn Linux as a day-to-day user (which is what I suspect you're looking for), pick Ubuntu or one of its derivatives. They are easy to get up and running, while still allowing you to "spread your wings" when you're ready.

u/SweatyAcademic · 1 pointr/linux

>shell prompt

If you have money, this one is a good option

These two are good and available for free, I suggest you start with them.

> administration

This one is the best.

u/scialex · 3 pointsr/linux

Well this reddit is mostly about Linux news not help. The forums and irc are where that belongs.

As for books I would suggest getting one that deals heavily in the command line. Much quicker and easier than a gui and it changes slower.

This got good reviews on amazon but really for bash any book on Linux or unix shell scripting will do fine. (I for example used a unix book from the late 80's to learn how to use bash)

As for one on the guy I would just take whatever one They have at your local barnes and noble, just make sure it's recent

u/perfecthashbrowns · 8 pointsr/linux

This has been one of my favorite books:

And I read through this entire book:

They are both great!

Edit: I can't type much because my internet is going out regularly at the moment, otherwise I'd love to elaborate further.

u/kramer314 · 3 pointsr/linux is super high quality (and free! although if you have the money I think it's well worth donating and / or purchasing a hard copy)

I also like and

u/ggpigg · 3 pointsr/linux

Yes, Michael Jang's book - RHCSA/RHCE, this book is not cheap BUT it may be one of the best I have ever used. I've almost finished this and am hoping to try for my red hat cert in December. The book is literally step by step.

u/peppajiggapuff · 3 pointsr/linux

I find reading books is the best way to expand ones horizon on a certain topic. UNIX and Linux System Administration Handbook should be an excellent read for you.

u/enroxorz · 6 pointsr/linux

No, and I'll tell you why. Arch isn't a horrid distro, I just don't like the Arch philosophy or mentality that a lot of the newbies have. People use Arch for the wrong reasons, mainly "to learn Linux", which kinds grinds my gears. Hell, I just had this talk with someone today so it's kinda fresh in my mind.

  • Some people think you get a "performance" gain from switching. The only distro I know that you can get that claim is Gentoo, and it's minimal compared to the hassles inherited in getting the system up and running (last time I touched Gentoo was 2005).

  • Rolling Release sounds nice until a tool that you have been using for ages goes away (ifconfig, route). I want stability and the choice to not upgrade to the latest and greatest, especially on teh server side (sarge has been keeping one of my sites up and running for ages and never had an issue)

  • "Learning Linux" is misleading. I hear this a lot, and it's malarkey. Any distro can "teach you linux". Just because your installation is a hassle doesn't mean you are a good teacher. If you want to learn how a distro works, Linux From Scratch is a way better project. Other than that Learning Linux, for the average user, should be centralized to knowing your system in a high level AND understanding your CLI and Shell

    Also, if you want to learn OS concepts, read Operating Systems Concept by Silberschatz or Modern Operating Systems by Tanenbaum, both better sources of learning what an OS does than Arch.

    My final word before I get downvoted to oblivion, just because something is harder than it should be doesn't mean it's a good educational tool. If that were true, you'd be using a BSD derivative over Arch Linux.
u/ccondon · 2 pointsr/linux

Well yes. It has a lot of features, and it was O(1). The scheduler has to be able to support nicety, among other things that I can't think of at the moment. For a good introduction, see this book by Robert Love. I used the second edition. The third edition talks about the newer, O(log n) scheduler. The O(1) scheduler performs better for servers with many tasks and little user interaction, whereas the newer one is apparently much better at minimizing latency for applications with a lot of user interaction, as a desktop would have.

Granted, a round-robin scheduler is O(1), and certainly much faster than the O(1) linux scheduler, but it lacks all sorts of important behavior.

u/idontchooseanid · 1 pointr/linux

Do you want to know which parts make an OS or how it's actually run in runtime. Former, is easy just install Arch, Gentoo or Linux From Scratch. Latter is a lot complicated nowadays but is a great start or there's if you want to go deep.

If you do both and combine the knowledge, your beard will grow 100x.

Source: I did but I am hairless 0*100 = 0 :/.

u/too_many_puppies · 2 pointsr/linux

In college I took a class that used this book as the text book. I loved that class and my knowlege and love of linux/unix definately benefited.

u/rpetre · 2 pointsr/linux

Read a lot. Man pages, guides, examples, source code. Experiment. True, with only one machine you probably won't get to get exposed to, say, networking stuff (you can emulate complex networks using VMs, but you still need to know a lot to set up such an environment). Still, there's a lot of things to learn about the system just by mucking with it. Having a machine you can reinstall whenever you want helps a lot, get an old PC or laptop and use it as a test bed if you don't have a spare server, making it a webserver today, a mailserver tomorrow, a firewall the next day and so on.

Take any problem as a challenge to dig deeper and understand why. Granted, in the Google age, the solution to most problems are just a search and a copy-paste away, but getting to understand what happens with the machine and what's the most elegant way to control it takes a lot of research and practice and failures. Learning "why" is way more important than learning "how", since tools evolve and change and the manuals are always close, but knowing what to look for is a skill that takes time to develop.

Speaking of failures, try to come up with as many ways as you can to make things fail and try to find solutions to most of them. Good sysadmins understand failure and actively explore ways to prevent or handle it.

If you don't mind reading thick books, I heartily recommend Evi Nemeth's Linux Administration Handbook (pretty hands-on) and Tom Limoncelli's Practice of System and Network Administration (about the mentality and processes and non-technical stuff). You might find the latter a bit boring, since it has zero scripts and commands in it, but sooner or later in your career you'll love it.

I'll stop because I ranted too much already, but as a final word, keep in mind that SA is primarily about maintaining infrastructure that helps people, so don't get too caught up by the tech to forget that service availability comes first, shiny toys second ;)

u/flexmyclock · 6 pointsr/linux

I've heard good things about "The Linux Programming Interface"

"Modern Operating Systems" like others suggested is also fantastic.

u/chadillac83 · 5 pointsr/linux

Read this, found it amazingly useful and packed full of knowledge, I recommend this book even to Linux noobs that are trying to get a better feel of the system for desktop use... once they have the basics down that is.

u/paradigmarson · 2 pointsr/linux

You'll need a good book and a good community (university? Linux User Group in your area?).

Don't try to learn from crappy outdated tutorials. Don't try to learn it all on your own. Choose a distribution carefully and be loyal to it for a while -- no novelty-seeking, optimistic "This distro will be so much better" distro-switching. Don't get obsessed with it -- it's a set of tools, not a way of life (hopefully).

I highly recommended:

u/LvS · 23 pointsr/linux

Linus wrote a book called Just for fun about this whole thing. It's a pretty nice read if you like Linus' style of storytelling.

u/appleade280 · 3 pointsr/linux

You might be interested in trying gentoo, especially before trying LFS.

Edit: Also, if you'd like to read about the kernel itself you could check out this book, I enjoyed it.

u/thegamereli · 1 pointr/linux

I would recommend getting a few "Linux" for dummies books. They provide a really good base of knowledge.

This is one I've read before, highly recommend:

u/cubicledrone · -2 pointsr/linux

Look at me, everyone! I'm smarter than the authors of:

Please lecture us. After all, those men are only a Harvard graduate decorated by the president of the United States and a Princeton professor with a PhD in Electrical Engineering.

u/JoCoLaRedux · 1 pointr/linux

I just started reading this, and it's excellent so far; an accessible clear, concise, well-written, comprehensive guide.

u/hanshagbard · 1 pointr/linux

Best thing there is to do is learn the basics of the operating system and how everything works first, that is if you really want to know how everything works and have a chance of doing something in linux.

Check out

I used it when i got to really learn linux and it really helped me understand exactly what everything was.

u/nbrenckle · 1 pointr/linux

Any of the OReilly books are excellent. And if you are looking to learn programming/scripting, I'd go with whatever installs easiest on your iMac, which might be OSX. Also, you can check out Linux Administration Handbook (or the general 'Unix' one)

u/Sileni · 1 pointr/linux

The industry standard is Red Hat. Get this book and study with your own box set up with either CentrOS, (the free Red Hat) or Scientific Linux (which is very much like Red Hat).



After you have done this, and proved to yourself that this is what you want, there are plenty of pay for training, exams and certifications to spend your money on.

u/EirrinGoBragh · 5 pointsr/linux

Read here:

Program. Then read here:

Program some more. Then maybe read here:

And program some more. Yes, I know two of the links are to amazon. I'm sure if you look real hard you can find other formats.

u/Lunarblu · 2 pointsr/linux

I recommend this book to everyone I taught Linux to. As some people have already commended on learn to program first. Linux knowledge will come.

u/AnthonyJBentley · 1 pointr/linux

A lot of Kernighan’s (co‐authored) books age surprisingly well. It’s a real testament to his writing style that they are still relevant today despite examples tending to be in PL/I or Fortran.

u/rowboat__cop · 0 pointsr/linux

The Linux Programming Interface by Michael Kerrisk.
Hands down the best systems programming resource ever.

u/CameronNemo · 5 pointsr/linux

Haha, sorry it is a commonly referenced book I did not even think about it.

Brian Kernighan and Dennis Ritchie (early developers / creators of UNIX) wrote a book called The C Programming Language. Make sure you get the second edition though.

u/guffenberg · 3 pointsr/linux

I second this one

It could be a good idea to check which books some well regarded universities are using.

u/off_z_grid · 4 pointsr/linux

First off, what are you doing now?

Here is some advice from a 20-year sysadmin who does devops and hobbyist development stuff:

Buy this book. You won't get better advice from anyone anywhere. It's expensive, but BUY THE FREAKIN BOOK:

Install some VM system like VitualBox and start playing with either Debian OR Ubuntu, AND CentOS. Install both numerous times and give yourself some extra partitions to format and play with. Read about some feature or thing and then go mess with it.

Eventually go after RHCSA/RHCE.

Learn the bash shell. Learn how to write real scripts with while/until loops and if/thens, arrays, and other stuff. That'll take time, but put some focus on it.

Don't get overwhelmed. Just start learning one thing, then the next, and go from there. The rabbit hole goes deep.

u/BigDallasJohn · 2 pointsr/linux

You might want to read Just For Fun, it explains his stock holdings in some parts of the book, specifically in relation to Red Hat, SUSE, and how stock splits work from a kernel developer's perspective.

He was given EARLY Red Hat stock and they've gone on to gorilla the market in revenue.

u/IWentOutside · 6 pointsr/linux

I've found The Linux Programming Interface to be one of the best in-depth books I've ever tried to read on Linux. Only issues with it is it's not too hands-on, so it's a bit difficult to retain, and maybe the price, bit would have to say it's still totally worth it.

u/daniel48 · 2 pointsr/linux

You're one of the coauthors of Linux Device Drivers, published in 2005... Are there any plans of releasing a more organized, updated edition? Would you recommend any other texts for programmers wanting to learn driver development?

u/vekrin · 3 pointsr/linux

Around my office this is known as our bible: UNIX and Linux System Administration Handbook (5th Edition)

It might be overkill as some of the topics aren't important if you aren't working as an engineer or devops.

Check out the table of contents and summary it might be interesting. It's one of the best no nonsense safari books out there.

u/hbdgas · 2 pointsr/linux

Also Red Hat study guides like this one.

u/ryanklee · 3 pointsr/linux
  • Read books. Like this.
  • Try other *NIXs.
  • Compile your kernel.
  • Build (and maybe maintain) a package for your distro.
  • Learn some shell scripting in bash.
  • File detailed bug reports.
u/jbod-e · 1 pointr/linux

Load it onto an old computer and play with it.

Checkout this book: How Linux Works: What Every Superuser Should Know

Checkout this book: The Linux Command Line: A Complete Introduction

u/trabant00 · 2 pointsr/linux

Find an intern job at a small company that does linux based IT consulting, there are plenty of those. The pay will be shit, the hours will be long but what you'll really looking for is a good tutor. Read

u/Sergio89BSD · 1 pointr/linux

I strongly recommend Understanding the Linux Kernel, 3rd Edition:

Although it's based on version 2.6 of Linux, I think its level of detail is unmatched.

u/iovnow · 2 pointsr/linux

I had professionaly been a linux admin for 10ish years before i took my rhcsa. I found it very easy but still learned some in my two weeks of classes before the test.

u/jabjoe · 0 pointsr/linux

I hope that is sarcasm, if not, here's some bed time reading.

Unix is more than a simplified Multric knock off and C is more than some language cobbled together.

u/SyrianRefugeeRefugee · 0 pointsr/linux

"The" book CS students read, and would be good for you, is:

It goes deep into OS design, but if you read it, then all the mysterious tips, explanations, and pointers you find online will make sense.

u/hilaryyy · 1 pointr/linux

lol, i should probably link to the study guide that's out and not the practice exams that aren't. XD

Fix't link

u/RMSBeardedLesbian · 0 pointsr/linux

I'm working my way through Damian Tommasino's RHCSA/RHCE book right now. It's fine for me (I've got some experience), but a lot of people on Amazon hate it.

This book has better reviews.

As others have said, Linux+/LPIC-1 is decent, but Red Hat certifications are where it's at.

u/derpological · 0 pointsr/linux


u/ashayh · 1 pointr/linux

No one has mentioned this (and it's predecessors) so far???
Unix and Linux administration handbook.

u/CatZeppelin · 8 pointsr/linux

I always find myself looking at man pages while programming in C, the illusion of speed while using Google can be counter-productive -- blog posts are always filled with misinformation that hampers your ability.

I recommend spending quite a bit of time in userland first. In kernel land the stakes are much higher, after all who's going to look after the kernel. To name a few issues:

  • 8K stack on 32bit kernels, or 16K stack on 64 bit kernels (I believe it can be changed via a config). This means you need to use vmalloc and kmalloc to have a large array.

  • If you corrupt memory in the kernel, your system will crash.

  • No FPU. Only use integers. Remember you're executing in a process context.

    I would start with something very simple, look at the linked-list structure of task_struct and thread_info in <linux/sched.h>


    struct task_struct {
    volatile long state; / -1 unrunnable, 0 runnable, >0 stopped /
    void stack;
    atomic_t usage;
    unsigned int flags; /
    per process flags, defined below */
    unsigned int ptrace;

    ifdef CONFIG_SMP

      struct llist_node wake_entry;<br />
      int on_cpu;<br />


    and thread_info

    struct thread_info {
    struct task_struct task; / main task structure /
    struct exec_domain
    exec_domain; / execution domain /
    u32 flags; / low level flags /
    u32 status; / thread synchronous flags /
    __u32 cpu; / current CPU /
    int preempt_count; / 0 =&gt; preemptable,
    &lt;0 =&gt; BUG

    To learn Linux, or any large software project you need to get your hands dirty. Hack the kernel as you please, after all that's why linux is open source.

    Book recomendations:

    Linux Kernel Development

    Modern Operating Systems

    Have fun hacking!

u/RussJancewicz · 9 pointsr/linux

People might argue that you really don't need to learn C. They are lying to you. Go buy this read it over the summer, it will do nothing but help you with anything else you ever decide to code in even if you never touch C again.

u/_Guinness · 15 pointsr/linux

You're asking a very, very very large question here. I'll try and directly answer this but I may go off on some detail. Also these details will be summarized so anyone reading this, you can pick it apart. It isn't meant to be exact.

&gt; What exactly is a packet?

Its just a chunk of data. This chunk of data contains all types of things it will need to get where it is going safely. Source. Destination. Checksums. Settings. And of course the data within. In TCP this chunk of data can be up to 64 kilobytes. However before this chunk of data hits the physical wire, it has to be split up into its Maximum Transmissible Unit. Which is just a fancy way of saying "this is the agreed upon maximum chunk of data size for this network". Typically the MTU is around 1500 bytes. It is also known as a "frame" since an MTU of 9000 is also called "jumbo frames"

Think of an MTU size like the gears in a car. A lower MTU size is like a lower gear. It gets you going faster, since once you have 1500 bytes of data you can fire that packet off, instead of sitting around waiting for 9000 bytes of data to fill up.

The downside to this is that each packet sent requires a series of interrupts. And interrupts can be costly (especially back in the day!). When an interrupt fires, it goes to the kernel and says "HEY! I NEED SOMETHING DONE!". The kernel says "alright little buddy, lets get you what you need." and then the kernel assigns a core to handle the interrupt. When the interrupt is being handled, nothing else on the core gets done. It has a full lock on that core until the job is done or the interrupt itself (depending on the type of interrupt) is interrupted itself. And yes before you ask, certain types of interrupts cannot be interrupted.

So you can imagine back in the day of single core systems, this could really suck. Because if you have a single core servicing interrupts for 1500 MTU sizes instead of 9000 MTU sizes, you're servicing 6* as many interrupts. Which means your processor literally stops what it is doing to handle the interrupt, and then once done goes back to what it was doing. I could go into kernel preemption and interrupting interrupts but I won't. Too long.

These days interrupts aren't so bad as we have many many cores to service them. If you've ever run into the irqbalance service, it is responsible for basically round-robining interrupts across all cores (cat /proc/interrupts to see).

&gt; how do different linux OSes manage them

All linux distros use some version of the Linux kernel. How the network is managed can vary little to a lot from version to version. There are also local settings for the kernel. Things in sysctl like packet buffer sizes. You also have hardware buffers like the NIC ring buffer/NIC buffer/send/receive queue (I've seen it referred to as all of those) which is set by tools like ethtool. Then you have deeper level settings like congestion algorithms, congestion windows, etc etc. There are entire books written on this. Two of my favorites are Understanding the Linux Kernel and Understanding Linux Network Internals. But to crudely summarize the answer here, the kernel manages all of this for the most part.

&gt; how this packet of data is physically sent over the internet

Basically, buffers and interrupts (hardware/software). These chunks of data sit in a buffer somewhere until either the buffer fills up, and the owner of the buffer sends an interrupt to the kernel saying "hey I need attention, I'm running out of buffer space, can you pick up some packets for me and free up some space?" to software just repeatedly polling a memory address to check for new packets in said buffer. Things like kernel bypass allow userspace programs to read the memory directly on the NIC. But usually a packet goes from the NIC, to the kernel, to the application.

The internet is really just a big conga line of buffers and interrupts. There are tons of places a packet can be dropped. Throughout the process a packet moves through the "7 layers of the OSI model" moving from the physical medium all the way up to the end user application.

The details of how this works are endless. I've literally spent 5 hours in interviews talking about all this and how it works. So like I said your question is pretty huge :)