10 Steps To Master Linux Being A Complete Beginner..!!

This article contains some affiliate links. As an Amazon Associate, we earn from qualifying purchases.

In this article I am trying to answer the hard question “How to learn and get proficient at Linux being a complete beginner?” with a simple step by step approach starting from a complete beginner to the field of computer science to a complete expert in Linux. 

Let’s see the plan in more detail with how to start, what to learn, in which order to learn them and possible time estimates for each step in the plan. You can jump to the section of interest using the table of contents below.

A note on recommended resources

Time is valuable so don’t waste it on bad study materials. We have handpicked the best books and online courses we could find and we have divided these recommended resources into 3 categories

  1. Short reads
  2. Reference books and 
  3. Online courses

I suggest you to read the “short reads” cover to cover and keep the “reference books” for when you need to solve specific problems (if you have time you can go ahead and read the references also cover to cover!).

If you are a visual learner and into online courses then I have provided some courses which I believe are high quality. I suggest you give them a look.

Before we see what this long road consists of, let’s start with what lies at the end of this road!

End results

Once you have completed all the steps this, you will be able to do anything in the world of Linux which include, but not limited to, the following

  • Get any Linux certification with minimum preparation
  • Ability to do any job that needs Linux knowledge
  • Starting your own company based on Linux
  • Making your own distro
  • Configuring and compiling the Linux kernel to run on any hardware platform with enough resources
  • Contributing to the Linux source code
  • Work on any and all operating systems not limited to Linux

The path you must take must start with learning all the core concepts of computer science which are used to build Linux before you are ready to start learning Linux. These are the core concepts of computer science that are used to build Linux.

  1. Data structures and algorithms
  2. Computer Programming
  3. Software architecture
  4. Hardware architecture
  5. Operating System Concepts
  6. Software management

Let’s have a brief look at each of the topics mentioned above, the various useful resources to learn them and have a look at a rough estimate on how long it will take to complete this part of the path.

If you are already familiar with some of the topics, you can always skip them and go on with the unfamiliar ones.

STEP#1: Data structures and algorithms

This is the core of computer science. No matter what particular area of computer science you are in and no matter what particular problem you are trying to solve, there will always be some sort of data structure and algorithms involved in it.

This will challenge your ability to solve problems and produce solutions that are the most optimal. If you are a complete beginner to computer science, I suggest you start with this subject..!

Example use of algorithms in Linux is the kernel’s implementation of the scheduler, which schedules processes based on various criteria using algorithms.

Recommended resources for learning Algorithms and Data structures

Short reads

Recommended Short Read 1: Grokking Algorithms: An illustrated guide for programmers and other curious people by Aditya Bhargava

This book focusses on only the basics but gives the reader a good understanding of the topics discussed. It’s considered to be a good book for beginners. I recommend you give it a go.

Estimated time to complete: 50 hours

Recommended Short Read 2: Operating System Algorithms by Nathan Adams 

This is a rather short one at just 110 pages, but it’s a book dedicated to learning algorithms that are used in operating systems so I thought you should have a look at it.

Estimated time to complete: 30 hours

Reference books

Recommended Reference book 1: Ask anybody and they will recommend you this one book on data structures and algorithms for reference.

Introduction to Algorithms  by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein

It’s famously known as the CLRS book, named after the initials of its 4 authors. It is a must-have book for any serious computer science enthusiast..!

This book will take you about a year if you want to read it cover to cover, so if you are excited enough you can do that! I propose you to read just the introductory chapters of each section and try solving a few problems and move on to the next subject/course.

You can always come back to it if you need to refer something!

I suggest you spend no more than 40 hours on this book.

Recommended Reference book 2: Introduction to Algorithms: A Creative Approach by Udi Manber

I have not personally read this one myself but I have heard great things about it and hence I thought it’s worth mentioning. This book doesn’t just show you the available algorithms and explain how it works, instead it focusses on the aspect of designing algorithms and it’s a great book if you want to go do some research on algorithms in the future and not just implement ones that are already available. This is a rather expensive book, if you can’t afford it, I suggest checking it out from your local library or buying a used one.

Online courses

Recommended Online Course 1: The website Coursera has a specialization on algorithms (link to Coursera)

Offered by UNIVERSITY OF CALIFORNIA SAN DIEGO and it worth checking out.

Estimated time to complete: 192 hours (as recommended by Coursera)

Recommended Online Course 2: Data Structures & Algorithms

The thing I like about udemy is instead of having a subscription model, purchasing courses here is equivalent to buying a book. Buy it once and it’s yours for life. The above course is a good one for beginners in computer science.

Estimated time to complete: 60 hours

Other online content

Other than the above 2 there is always MIT’s open courseware, where you can get world quality lectures for free. Though these are basically videos and not designed for online education, the material delivered there is world-class and I highly recommend them.

MIT 6.006 Introduction to Algorithms, Fall 2011 (link to youtube)

MIT data structure and algorithms 2015, Matt Wong (link to youtube)

STEP#2: Computer Programming

Once you have gathered enough knowledge on algorithms and data structures, computer programming is going to be an easy task!

I recommend you start with the C programming language as it is the language used by Linux and all other operating systems. 

Recommended resources for learning C programming

I believe in using books for learning programming languages as most of the online courses take on a different approach in the sense that they get you used to the language, in other words they give you a good introduction to the language and its features, but not to master it.

If you are a complete beginner then I would recommend the book

Recommended Book 1: Let us C

This book helps the reader get a basic grasp of computer programming in general in a simple to understand manner. This was in fact the first-ever book I read on programming!

Estimated time to complete: 60 hours

If you already had taken some introductory computer programming course already and you wish to improve your skills then I recommend taking a look at

Recommended Book 2: Head first C

Estimated time to complete: 60 hours

If you already have some programming experience in C say through some hobby projects, you can go straight for the book written by the creators of the C language

Recommended Book 3: The C Programming Language by Kernighan and Ritchie

Estimated time to complete: 80 hours

Once you finish this last book you would reach a good level of understanding of C works and how to navigate in the C world.

Once you have mastered C I suggest you proceed to python, the object-oriented programming language with lots of open source software and learning resources online. You can build many powerful Linux apps using python.

Recommended resources for learning Python

Since you already have some experience with programming in general as you have just finished learning C, learning Python will not be a very steep learning curve. The book I would recommend for learning is again from the head first series of books as these books are very good self-learning resources if you are planning to learn a new language.

Object-oriented programming

Recommended Books

Since you are moving from C, which is a procedural language, first you need to understand the philosophy behind object-oriented programming.

Recommended book 1: The Object-Oriented Thought Process

Estimated time to complete: 40 hours

Recommended book 2: Head First Object-Oriented Analysis and Design

Estimated time to complete: 60 hours

These books teach you the basics of object-oriented programming and how the entire philosophy works. Even though I am a big fan of the “Head first” books, this time it did not make it to the top of the list, since the book “The object oriented thought process” by Matt Weisfeld is really a good short one teaches the essence of object oriented programming concepts in a rather nice manner, hence I suggest you go ahead with that one first. Then if you have time you can go ahead and read the second one too, as it will have some exercises to help you solidify the concepts learned.

Python

Now that you have learned object-oriented programming in general, the next step is to start learning the Python language

Head First Python

This is a good book for self-teaching as it makes you think how each step works and as the philosophy behind these “Head first” books says, more you understand the less you need to memorize!

Estimated time to complete: 80 hours

If you like learning through online courses then the below 2 courses are very good.

Recommended course 1: Complete Python Bootcamp: Go from zero to hero in Python 3

Estimated time to complete: 80 hours

Recommended course 2: Learn Python Programming Masterclass

Estimated time to complete: 120 hours

The above 2 courses in udemy teach you the basics of python programming language and both are very good, but one of them is enough for learning python. I suggest you go over to udemy and see the preview of both these courses and select one for yourself.

Now that you have learned C, Python and Algorithms & Data structures, you have crossed the most difficult part of this path. All that you need to do now is to learn some of the engineering concepts and then your basics will be as strong as any computer science graduate!

STEP#3: Software architecture and Design Patterns

Software architecture is all about designing good software which will be easy to read, modify and maintain. It all about learning and applying good engineering principles. I have worked with projects that had good designs and bad designs. I completely hated my job when I was working with poorly designed software and I loved my job when the design was good and I believe this is a universal feeling among software developers. This is due to the fact that nicely designed software is easier to understand, add features to, solve bugs and maintain.

Recommended resources

Recommended Short read: Head first Design patterns

This is a very good book, recommended by many people in the industry. It covers many important design patterns which are used in the industry and provides you a lot of opportunities to practice these skills through lots of fun exercises so that you can understand things better.

Estimated time to complete: 40 hours

Recommended Reference book: Design patterns: Elements of reusable object-oriented software

Keep this book as reference as it is a very thorough book on design patterns, so that in the future if you look at a problem with no obvious pattern for solutions, you can refer to this one to give you one, and code out your solution in a professional manner.

STEP#4: Computer Hardware

You may be thinking when you are working with an operating system like Linux, why you should learn hardware. The main job of any operating system is to abstract the hardware and as such basic knowledge of hardware is essential. You don’t need to learn this one in too much detail, just get the basics strong and then you can move on to the next one.

Recommended resources

Recommended book 1: Essential Computer Hardware Second Edition: The Illustrated Guide to Understanding Computer Hardware (Computer Essentials)

This is a very short and simple read and it will give you a gentle introduction of the various hardware that is used in computers.

Estimated time to complete: 10 hours

Recommended book 2: Make: Electronics: Learning Through Discovery (Optional)

This book is an excellent book if you are interested in learning electronics, but you never managed to find the correct resource. It is an optional read if your main aim is to learn Linux as it basically teaches you stuff which is at a very low level, like how the components in your motherboard work, but its a fun read!

STEP#5: Operating System Concepts

Linux is an operating system and hence it is absolutely essential to start learning what operating systems are, what is their place in computer science and what features and capabilities they provide to the end-user.

What is an operating system? Academia people gave the name “Operating Systems” but these are just a group of programs and algorithms, whose collective duty is to virtualize the available hardware resources and manage them. 

To give you a simple analogy, operating systems are similar to managers in a modern office environment. Its duty is to manage the work performed by all the employees of the organization. A good manager will be able to satisfy the clients of a company. Similarly, a good operating system will provide a nice experience for the end-users(us) to use the computer and make it do what we want it to.

It basically does the below 3 activities

  1. Virtualization: So that the application programmer need not worry about CPU and Memory
  2. Concurrency: To run multiple programs in a parallel manner. 
  3. Persistence: To keep the files and data from getting corrupted and to maintain a good working condition. 

Remember those days where you need to reinstall the operating system and reinstall all the apps and copy the data from backup every few months to keep the computer working smoothly! This last point is about avoiding that..!

Recommended resources

Recommended book 1: Operating System Concepts

This book, also known as “The Dinosaur Book” (due to the pictures of dinosaurs on the cover) is considered to be one of the best books on operating systems for beginners as it uses easy to understand language and covers all the important concepts.

Estimated time to complete: 120 hours

Recommended book 2:

I got the 3 points, mentioned a little above, from the book on operating systems  “Operating Systems: Three Easy Pieces”  by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. This is a very good book that lays a strong foundation of knowledge about operating systems and I completely recommend it.

You can also read this book for free at this link as the authors

Estimated time to complete: 80 hours

This is a rather thorough book of about 600 pages on operating systems that will probably take you about 60 to 100 hours to complete (The exact time duration depends upon your reading speed, concentration, etc. )

STEP#6: Software management

So the next step in the path is to learn software management skills. When I say software management, I don’t mean project management (development plans and meetings), rather I mean version control and DevOps.

What is version control? Tool and techniques used for managing and keeping track of the changes you make during software development. 

In software engineering, when you building a project, you can often find yourself in a place where something which was working perfectly fine suddenly breaks because you changed some lines of code recently. This is where version control software like git comes in.

Here every change you make will be recorded and you can easily see the exact changes you did and undo those changes if needed. This will save you tons of time, so I recommend you to learn a bit about it. I myself had wasted days trying to figure out the change I made that crashed the machine, but once I started using a version control system I was much more efficient! Now I can’t imagine writing code without a version control system!

I recommend you learn git, the opensource version control system developed by Linus Torvalds, who started it as a supporting project for Linux, but now git is used in everything from writing computer programs to poetry!

Recommended resources for Git

Recommended course:Git & GitHub Complete Masterclass: Beginner to Git Expert” on git is a good informative course

Estimated time to complete: 25 hours

What is DevOps? DevOps stand for development operations, which involves 2 steps namely Continuous Integration and Continuous Delivery.

When you are working on a large team(like say on the Linux Kernel project) you need to be able to test the code from the contributors before adding them to the project. Manually testing each and every change is a time consuming and inefficient process. This is where DevOps comes in.

DevOps help you automate this process of testing and integrating changes made by your team members to the project and then releasing the software to the end customers.

What is Continuous Integration? Continuous Integration, the first step of DevOps, refers to the various steps involved in automating and testing. It involves code quality checks and unit tests that need to be done for source code that is added to a big repo.

What is Continuous Delivery? Continuous delivery, the last step of DevOps refers to the various steps involved in automating the delivery of tested and integrated code to the end-users.

Recommended resources for DevOps

Recommended online course: Gitlab CI: Pipelines, CI/CD and DevOps for Beginners

This one will give you a brief overview of what can be done using CI/CD and gitlab. It teaches you enough of the basics to get yourself started with automating your hobby project’s build and deploy process.

Estimated time to complete: 20 hours

Recommended book: Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation

Estimated time to complete: 80 hours

Prerequisites have been mastered, Its Time to Master Linux!

Once you have learned all these concepts, your skillset is at the level of any software developer. The next step is to join the big boys and start learning Linux. This road will be an easy one as you have already a very good foundational knowledge on computer science.

Linux is basically 5 parts

  1. The Linux kernel
  2. Drivers
  3. GNU utilities that come with the operating system
  4. Bash scripting to control and automate the system using the GNU utilities
  5. The various APIs for writing your own apps on Linux, be it a command-line app, desktop app, smartphone app, embedded app or a cloud app.

Let’s have a brief look at each of the topics mentioned above, the various useful resources to learn them and have a look at a rough estimate on how long it will take to complete this path of the road.

STEP#7: GNU utilities and Bash scripting

Even though this is the 4 on our list I recommend learning this one first.  Basically, as you learn bash you will learn a lot about Linux and the GNU utilities that it comes with and it’s a lot of fun..!

What is GNU? The name “GNU” is a recursive acronym for “GNU’s Not Unix.” “GNU” is pronounced g’noo,  It is a collection of many programs, applications, libraries, developer tools, and games whose source code is on the internet for everyone to see and improve upon.

As Linus Torvalds was working on Linux Kernel, there was another team of people in another corner of the planet trying to make a free replacement for the then famous “Unix operating system”. They made the apps for it, but they needed a kernel to run it on. And that’s where Linus Torvald’s Linux kernel came in..! The kernel and the apps were made to work together and modern-day Linux (or as its officially called GNU-Linux) was born. 

If you are going to be using Linux the odds are you are going to be working with a lot of GNU utilities, so it is important to practice using them to get to know their capabilities.

What is Bash? Bash is the GNU’s replacement for the famous Unix shell “bsh” which stands for Bourne Shell named after its developer. Bash stands for Bourne Again Shell(Again a wordplay..!). It is a text-based user interface for users to interact with the operating system. 

What is a shell? In olden days there was no graphical desktop user environment and users only had a text-based interface to the operating system called a shell. 

These days, Professional users still prefer the shell to the graphical user interface because of its simplicity and efficiency.  It is a powerful tool for interacting with the operating system and hence it’s very important to learn it.

Recommended resources

Recommended book: Linux Command Line and Shell Scripting Bible 

This book is a rather long read, but it will take you from being a beginner to an expert in using the Linux command line. I recommend reading this book cover to cover and try to understand the concepts that this book teaches. You don’t need to understand everything, as this is a skill gained through practice, so read it, understand the concepts and come back to this book from time to time when you need some specific information.

I myself have tried some short reads, but they left me with a feeling of incompleteness, and since our goal is learning Linux, this book is a must-read IMHO.

Estimated time to complete: 120 hours

Linux application programming

So now you have learned how to play in the command line and automate tasks using the shell and GNU utilities. This is the next piece of the puzzle which is to learn how to write your own Linux apps. Examples of application programs or apps include word processors, image editors, video editors, web browsers, etc.

To develop apps on Linux, the operating systems provide several APIs to make full use of the capabilities of the machine. By learning those you will be able to write your own apps on your machine. The difficulty level of this step depends on the app you are planning to write but compared to the other steps this one is a rather easy task.

What are application programs? These are simple executables, that can utilize the system resources and run code. They have limited capabilities when it comes to hardware access, in the sense that they need to ask the kernel for access to the hardware resources, and the kernel keeps the control over the level of access given to the application.

Recommended book: Linux Application Development

Estimated time to complete: 120 hours

This book teaches you linux app development with some good information of practical skills needed and some potential mistakes you can make as you work on some projects.

Recommended reference book: The Linux Programming Interface: A Linux and UNIX System Programming Handbook

This book is a rather hefty one at 1552 pages, but the intent  of this book is to be used as a reference while you are working on a project and I hope it is widely accepted in the industry as a good reference.

STEP#8: Linux systems programming

So now you know how to use bash and other GNU utilities to automate processes and how to write your own Linux apps. This is the next piece of the puzzle which is to learn how to talk to the kernel and the hardware to make the hardware do what we need it to do. Essentially here you are learning to build programs that are on the same level as the GNU utilities. Examples of system programs include disk management utility, network management utility, task manager, device manager, GUI interface, etc. 

What are system programs? These are programs that talk directly to the kernel and can control, manage and monitor the hardware of a given computer system. 

Recommended book: Linux System Programming: Talking Directly to the Kernel and C Library

This book by Robert Love is considered to be the industry standard for Systems programming in Linux. It teaches you file handling, I/O handling, Memory and process management, Interprocess communications as it is implemented on Linux, both basic and advanced. Since you are already familiar with these topics as you learned them as you went through step 5 while learning Operating systems concepts, this one will be a rather easy read and you would be able to go through it and understand the material presented in a much faster time frame, which is one of the advantages of going through this step by step process.

Estimated time to complete: 40 hours

STEP#9: Drivers

So far you have mastered the command line, you can make your own user applications and system programs. The next step is to learn how to add hardware to your system. In order for the kernel to control the newly added hardware, it needs a program to talk to that can act as an interface between the kernel and the hardware and these programs are called drivers.

What are device drivers? These are programs that act as an interface between given hardware and the kernel of the operating system.

Just as are system programs are considered part of the operating system, device drivers are a part of the kernel.

In other words, if you want to add some custom hardware to your Linux machine, then you need to write the driver code for it and load the code into the machine so that the kernel can control your custom hardware. So to do that you need to learn how to write Linux drivers.

Recommended book: Essential Linux Device Drivers

This book starts with looking at the Linux kernel and the facilities it provide to device drivers. It goes on to explain the various kinds of devices from i2c to PCI to USB and network cards and shows you how to write drivers for these various devices. I recommend you to read the first 7 chapters completely and keep the rest of the book as reference to when you actually need it as you work on projects that need a particular protocol and a particular driver for it.

Estimated time to complete: 40 hours

STEP#10: The Linux kernel

This is the last piece of the puzzle, the Linux kernel. So far you have learned to talk to the kernel directly (via system programs), indirectly (via user applications) and you have managed to add your own pieces of code into the kernel (via Linux drivers). The next step is to understand the inner mechanisms of the kernel itself so that you can understand it better and you can port the kernel to other hardware if you need to.

What is a kernel? It is the core of any operating system and its duty is to the management of resources like CPU, memory, and IO and allocates them to the processes that ask for it in an efficient manner so that high priority processes and low priority processes can coexist and share the system resources.

If you ever need to port the Linux kernel to some custom hardware that has limited resources like CPU and RAM, then you need to know the inside working of the Linux kernel, so that you can port only the modules that you actually need to make it run on resource-constrained hardware. Hence it is important to learn about the Linux kernel.

Recommended book: Linux Kernel in a Nutshell: A Desktop Quick Reference (In a Nutshell (O’Reilly))

This is a rather short read and it teaches you how to download and compile the kernel source code and how to optimize and configure it for your particular use case. It will show you the potentials and possibilities of using the Linux kernel.

Estimated time to complete: 40 hours

So if you are interested in the end results listed at the beginning of this article and want to master Linux, then this is what it takes to get there..!! You can either look at it as a lot of pending work or as endless hours of fun over the next couple of years..!

But hey once you have done it, you are as knowledgeable as any computer science graduate is and you will be able to do pretty much anything in the world of Linux!

Alright, I guess that covers all the steps, I hope you found this article valuable.

Feel free to share it with your friends and colleagues!

Related Articles

4 Steps To Become a Linux Professional!

A Step By Step Plan To Learn Linux The Fun Way..!

How To Get A User-Level Understanding Of Linux For Your Hobby Projects

Photo of author
Editor
Balaji Gunasekaran
Balaji Gunasekaran is a Senior Software Engineer with a Master of Science degree in Mechatronics and a bachelor’s degree in Electrical and Electronics Engineering. He loves to write about tech and has written more than 300 articles. He has also published the book “Cracking the Embedded Software Engineering Interview”. You can follow him on LinkedIn