A simple but long path to the intrepid adventurer.
Unix as a family of systems, is one of the greatest bodies of intellectual work ever achieved by the human mind! It was the brainchild of Ken Thompson in 1969, because he wanted to play a simple game called Space Travel that he had developed for Multics, and he wanted to be able to run the program in a small computer of its own! With the help of Dennis Ritchie and many others it was born at the Bell Labs and quickly became, in several ways, a creature of all mankind! A free bird to fly by its own means and to be used as a tool for whoever wishes to learn deeper its ways of working. It's a coherent agglomerate of different technologies that never gets old and like a Fenix, re-borns from the ashes.
The objective of this How to is to be a small guide, to give anyone a path to becoming a Linux in depth knowledge person.
First, you will need to have a Linux installed. You should start with Ubuntu Linux, preferably in a secondary machine (or virtual machine [Virtual Box]). Install it and play normally with it, as if it would be your main machine. Play with it for 3 months all days, explore and discover. By then, you will find that you are really comfortable with your Linux Ubuntu system, then, think if you are ready to make it your main system for everyday use. If you are, then install it on your main system and use it all day long, continue to explore and to discover. Then in your secondary machine, install the Debian distribution (rock solid distro) with gnome once, and then with KDE, and use it for 3 months to get a real feeling for it, learn it inside out. Then install an Arch system with rolling release for 3 months. Do all the process of installation and get into all the details that make Linux work and how it works. Go in depth into Linux. Learn to fix it when it breaks. Then choose what you want to install on your main system: a Debian, a Arch Linux or if you would like to try another distro out there.
By this time you will be a more knowledgeable person and you could decide your next move.
You should, from the start, embark on a reading and studying journey, the path is listed below and some of the reading material is listed below.
The major steps are:
- Learn and appreciate the history of Unix, Linux, GNU, X, FreeBSD and C
- Learn by reading the documentation of the 3 major distros Ubuntu, Debian and Arch linux
- Learn to use the shell, and more specific the bash
- Learn how to navigate with the most common editors, vi and Emacs, learn what they represent in context, and learn other editors
- Learn system administration
- Learn how Linux internals works
- Learn about open source and the major software and hardware licenses
- Learn how to program on Linux
- Craftsmanship and software design
- Learn how systems programming works
- Linux kernel development
- Hardware knowledge
- Artificial Intelligence and Machine Learning
- Learn Raspberry Pi and embedded Linux
- FreeBSD knowledge
- Do the NAND To Tetris challenge in Rust, C, C++, GO or Python
- Become an enlightened person in terms of Linux and use it to accomplish your goals in a better way
-
Video - Bell Labs Song
https://www.youtube.com/watch?v=IFfdnFOiXUU -
Video - The Thompson and Ritchie Story
https://www.youtube.com/watch?v=g3jOJfrOknA -
Video - The History of Unix, Rob Pike
https://www.youtube.com/watch?v=_2NI6t2r_Hs -
Video - UNIX: Making Computers Easier To Use -- AT&T Archives 1982, Bell Laboratories
https://www.youtube.com/watch?v=XvDZLjaCJuw -
Video - VCF East 2019 - Brian Kernighan interviews Ken Thompson
https://www.youtube.com/watch?v=EY6q5dv_B-o -
Video - Jon "maddog" Hall talks Unix and Linux history
https://www.youtube.com/watch?v=EZMA3Ge144U -
Video - Revolution OS
https://www.youtube.com/watch?v=4vW62KqKJ5A -
Video - The Origins of Linux - Linus Torvalds
https://www.youtube.com/watch?v=WVTWCPoUt8w -
Video - Why C is so Influential - Computerphile
https://www.youtube.com/watch?v=ci1PJexnfNE -
Video - C Programming Language: Brian Kernighan - Computerphile
https://www.youtube.com/watch?v=de2Hsvxaf8M -
Video - Dennis Ritchie - Write in C
https://www.youtube.com/watch?v=H4YRPdRXKFs -
Harley Hahns Guide to Unix and Linux
by Harley Hahn -
UNIX: A History and a Memoir
by Brian W Kernighan -
Just for Fun: The Story of an Accidental Revolutionary
by Linus Torvalds, David Diamond -
UNIX Philosophy
A program should do one thing and do it well.
Video - Is The Unix Philosophy Still Important? - DistroTube
https://www.youtube.com/watch?v=bWQIBTB695w -
Ken Thompson
https://en.wikipedia.org/wiki/Ken_Thompson -
Dennis Ritchie
https://en.wikipedia.org/wiki/Dennis_Ritchie -
Bell Labs
https://en.wikipedia.org/wiki/Bell_Labs -
GNU Project
https://en.wikipedia.org/wiki/GNU_Project -
Richard Stallman
https://en.wikipedia.org/wiki/Richard_Stallman -
Linus Torvalds
https://en.wikipedia.org/wiki/Linus_Torvalds -
Free Software Foundation
https://en.wikipedia.org/wiki/Free_Software_Foundation -
C (programming language)
https://en.wikipedia.org/wiki/C_(programming_language) -
Brian Kernighan
https://en.wikipedia.org/wiki/Brian_Kernighan -
Plan 9 from Bell Labs
https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs -
Inferno
https://en.wikipedia.org/wiki/Inferno_(operating_system) -
C++ (programming language)
https://en.wikipedia.org/wiki/C%2B%2B -
Bjarne Stroustrup
https://en.wikipedia.org/wiki/Bjarne_Stroustrup -
Python (programming Language)
https://en.wikipedia.org/wiki/Python_(programming_language) -
Guido van Rossum
https://en.wikipedia.org/wiki/Guido_van_Rossum -
Go (programming language)
https://en.wikipedia.org/wiki/Go_(programming_language) -
Video - Google I/O 2012 - Meet the Go Team - Ken Thompson
https://www.youtube.com/watch?v=sln-gJaURzk -
Rust (programming Language)
https://en.wikipedia.org/wiki/Rust_(programming_language)
-
Ubuntu tutorials
https://ubuntu.com/tutorials -
Debian extensive documentation including administration
https://www.debian.org/doc/ -
Arch linux in depth and extensive wiki
https://wiki.archlinux.org/
-
man and info pages, the web, forums and books are all your friends!
-
Video - Shell Scripting Tutorial | Edureka
https://www.youtube.com/watch?v=GtovwKDemnI -
Video - Linux Command Line Full course: Beginners to Experts. Bash
https://www.youtube.com/watch?v=2PGnYjbYuUo -
Video - Shell Scripting Crash Course - Beginner Level - Traversy Media
https://www.youtube.com/watch?v=v-F3YLd6oMw -
Video - Shell Scripting Tutorial - Derek Banas
https://www.youtube.com/watch?v=hwrnmQumtPw -
100 Useful Command-Line Utilities
https://www.oliverelliott.org/article/computing/ref_unix/#mkdirrmdir -
Guia 500 comandos Linux
https://www.linuxpro.com.br/dl/guia_500_comandos_Linux.pdf -
500+ Linux Commands
https://steemit.com/linux/@arshi731/500-linux-commands -
Linux Pocket Guide, 3rd Edition Essential Commands
by Daniel J. Barrett -
The Linux Command Line A Complete Introduction
by William E. Shotts -
Bash Pocket Reference Help for Power Users and Sys Admins
by Arnold Robbins -
Grep Pocket Reference
by John Bambenek, Agnieszka Klus
4. Learn how to navigate with the most common editors, vi and Emacs, learn what they represent in context, and learn other editors
-
nano - How to Use Nano, the Linux Command Line Text Editor
https://linuxize.com/post/how-to-use-nano-text-editor/ -
vi / vim wikipedia
https://en.wikipedia.org/wiki/Vi -
Video Vim Tutorial
https://www.youtube.com/watch?v=IiwGbcd8S7I -
Video - The Vim Tutorial - Part One - Basic Commands
https://www.youtube.com/watch?v=ER5JYFKkYDg -
Video - The Vim Tutorial - Part Two - More Commands
https://www.youtube.com/watch?v=tExTz7GnpdQ -
Video - Managing Your Splits In Vim
https://www.youtube.com/watch?v=Zir28KFCSQw -
Learning the vi and Vim Editors, 7 Edition
by Arnold Robbins, Elbert Hannah, Linda Lamb -
Emacs wikipedia
https://en.wikipedia.org/wiki/Emacs -
Video - Emacs Tutorial
https://www.youtube.com/watch?v=Iagbv974GlQ -
GNU Emacs Manuals Online
https://www.gnu.org/software/emacs/manual/ -
Harley Hahns Emacs Field Guide
by Harley Hahn -
Visual Studio Code
https://code.visualstudio.com/ -
Sublime Text
https://www.sublimetext.com/ -
The geany editor
https://www.geany.org/ -
The Howl editor
https://howl.io/ -
Video - LaTeX Tutorial
https://www.youtube.com/watch?v=VhmkLrOjLsw
-
Linux Command Line and Shell Scripting Bible 4th Edition
by Richard Blum Christine Bresnahan -
Linux Bible 10th Edition
by Christopher Negus -
UNIX and Linux System Administration Handbook 5th Edition
by Evi Nemeth, Garth Snyder, Trent Hein, Ben Whaley, Dan Mackin -
The Debian Administrator's Handbook
by Raphael Hertzog, Roland Mass
https://www.debian.org/doc/manuals/debian-handbook/ -
Wicked Cool Shell Scripts
by Dave Taylor, Brandon Perry
-
How Computers Really Work A Hands-On Guide to the Inner Workings of the Machine
by Matthew Justice -
How Linux Works What Every Superuser Should Know, 3th Edition
by Brian Ward
-
The Open Source Definition
https://opensource.org/osd -
Open Source
https://en.wikipedia.org/wiki/Open_source -
Software license
https://en.wikipedia.org/wiki/Software_license -
GNU General Public License
https://en.wikipedia.org/wiki/GNU_General_Public_License -
MIT License
https://en.wikipedia.org/wiki/MIT_License -
BSD licenses
https://en.wikipedia.org/wiki/BSD_licenses -
Open-source hardware
https://en.wikipedia.org/wiki/Open-source_hardware -
Open Hardware License's
https://en.wikipedia.org/wiki/Open_Hardware_License
-
The Art of UNIX Programming
by Eric Raymond
http://www.catb.org/~esr/writings/taoup/
http://www.catb.org/~esr/writings/taoup/html/ -
The Pragmatic Programmer: Your Journey To Mastery, 20th Anniversary Edition
by David Thomas, Andrew Hunt -
The Jargon File
http://www.catb.org/~esr//jargon/ -
The Cathedral and the Bazaar
http://www.catb.org/esr/writings/cathedral-bazaar/
http://www.catb.org/esr/writings/cathedral-bazaar/cathedral-bazaar/ -
Video - Python Tutorial - Derek Banas
https://www.youtube.com/watch?v=H1elmMBnykA -
Python Crash Course, 2nd Edition
A Hands-On, Project-Based Introduction to Programming
by Eric Matthes -
How to learn modern Python
https://github.com/joaocarvalhoopen/How_to_learn_modern_Python -
An Introduction to GCC: For the GNU Compilers GCC and G++
by Brian J. Gough, Richard M. Stallman
https://www.linuxtopia.org/online_books/an_introduction_to_gcc/index.html -
Video - C programming video tutorial - Derek Banas
https://www.youtube.com/playlist?list=PLGLfVvz_LVvSaXCpKS395wbCcmsmgRea7 -
Simple notes on the C Programming Language
https://github.com/joaocarvalhoopen/Simple_notes_on_the_C_Programming_Language -
C Programming Language, 2nd Edition 1988
by Brian W. Kernighan, Dennis M. Ritchie -
C Programming A Modern Approach 2nd Edition
by K. N. King -
Beginning Linux programming
by Neil Matthew, Richard Stones -
Linux for Developers Jumpstart Your Linux Programming Skills
by William Rothwell -
Regular Expression Pocket Reference Regular Expressions for Perl, Ruby, PHP, Python, C, Java and .NET, 2Th Edition
by Tony Stubblebine -
Ry's Git Tutorial
See the EPUB.
https://github.com/syn-bit/ry-s-git-tutorial -
Pro Git 2th edition
Everything you need to know about Git
by Scott Chacon, Ben Straub
https://git-scm.com/book/en/v2 -
Video - C++ Tutorial 2020 - Derek Banas
https://www.youtube.com/watch?v=6y0bp-mnYU0 -
Programming: Principles and Practice Using C++, 2nd Edition
by Bjarne Stroustrup -
C++ - Crash Course A Fast-Paced Introduction
by Josh Lospinoso -
How to learn modern C++
https://github.com/joaocarvalhoopen/How_to_learn_modern_C_Plus_Plus -
Video - Rust and the Future of Systems Programming
https://www.youtube.com/watch?v=8EPsnf_ZYU0 -
Video - Unlocking the Power of Parallelism with Rust
https://www.youtube.com/watch?v=cNeIOt8ZdAY -
The Rust Programming Language
by Steve Klabnik and Carol Nichols, with contributions from the Rust Community
https://doc.rust-lang.org/stable/book/ -
Video - Rust Crash Course - Rustlang - Traversy Media
https://www.youtube.com/watch?v=zF34dRivLOw -
How to learn modern Rust
https://github.com/joaocarvalhoopen/How_to_learn_modern_Rust
C, C++ and Rust can use the following tools.
-
Tool - GDB: The GNU Project Debugger
https://www.gnu.org/software/gdb/documentation/ -
Tool - The LLDB Debugger
https://lldb.llvm.org/ -
Tool - Valgrind User Manual
https://valgrind.org/docs/manual/manual.html -
Tool - The perf Linux profiler - Examples of use
https://www.brendangregg.com/perf.html -
Tool - American Fuzzy Lop - A good fuzzer
https://lcamtuf.coredump.cx/afl/ -
Tool - QuickCheck - QuickCheck is a way to do property based testing using randomly generated input. Rust
https://github.com/BurntSushi/quickcheck -
Tool - Criterion rs - Statistics-driven Microbenchmarking in Rust
https://github.com/bheisler/criterion.rs -
Video - Go Programming - Derek Banas
https://www.youtube.com/watch?v=CF9S4QZuV30 -
The Go Programming Language
by Alan Donovan, Brian Kernighan -
Video - Lets LISP like it's 1959
https://www.youtube.com/watch?v=hGY3uBHVVr4 -
LISP 1.5 Programmer's Manual - 1962
By John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart, Michael I. Levin
https://direct.mit.edu/books/book/2851/LISP-1-5-Programmer-s-Manual -
Scheme a small dialect of LISP
Structure and Interpretation of Computer Programs - 2nd Edition
by Harold Abelson, Gerald Jay Sussman, Julie Sussman
https://mitpress.mit.edu/sites/default/files/sicp/index.html -
Video - Lectures - MIT Open Courseware
by Harold Abelson, Gerald Jay Sussman
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/ -
Scheme a small dialect of LISP
Software Design for Flexibility: How to Avoid Programming Yourself into a Corner
by Chris Hanson, Gerald Jay Sussman
(In Creative Commons) -
Video - SQL Tutorial - MySQL
https://www.youtube.com/watch?v=XqIk2PwP0To -
Video - The Art of Code - Dylan Beattie
https://www.youtube.com/watch?v=gdSlcxxYAA8
-
The Pragmatic Programmer: Your Journey To Mastery, 20th Anniversary Edition - 2nd Edition
by David Thomas, Andrew Hunt -
The Practice of Programming
by Brian Kernighan, Rob Pike -
Clean Code: A Handbook of Agile Software Craftsmanship
by Robert C. Martin -
The Clean Coder: A Code of Conduct for Professional Programmers
by Robert Martin -
Video - Object Oriented Design - Derek Banas
https://www.youtube.com/playlist?list=PLGLfVvz_LVvS5P7khyR4xDp7T9lCk9PgE -
Video - UML 2.0 Tutorial - Derek Banas
https://www.youtube.com/playlist?list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc -
Video - Design Patterns Tutorial - Derek Banas
https://www.youtube.com/playlist?list=PLF206E906175C7E07 -
Video - Code Refactoring - Derek Banas
https://www.youtube.com/playlist?list=PLGLfVvz_LVvSuz6NuHAzpM52qKM6bPlCV -
Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch -
Head First Design Patterns
Building Extensible and Maintainable Object-Oriented Software 2nd Edition
by Eric Freeman, Elisabeth Robson -
Clean Architecture: A Craftsman's Guide to Software Structure and Design
by Robert Martin -
Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People
by Aditya Bhargava -
Introduction to Algorithms, 3rd Edition
by Thomas H. Cormen -
The Art of Computer Programming, Volumes 1-4A + Facicles
by Donald Knuth and Donald John Fuller -
The Art of Multiprocessor Programming 2nd Edition
by Maurice Herlihy, Nir Shavit, Victor Luchangco, Michael Spear -
C++ Concurrency in Action 2nd Edition
by Anthony Williams
-
The Linux programming interface a Linux and UNIX system programming handbook
by Michael Kerrisk -
Video - Linux System Programming 6 Hours Course
https://www.youtube.com/watch?v=6OSeJFo6GOc -
Operating Systems Three Easy Pieces
by Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
http://pages.cs.wisc.edu/~remzi/OSTEP/ -
Linux system programming talking directly to the kernel and C library
by Robert Love -
Advanced Programming in the UNIX Environment
by W. Richard Stevens, Stephen A. Rago -
Systems Programming in Unix/Linux
by K. C. Wang -
Autotools A practitioners guide to GNU Autoconf, Automake, and Libtool
by John Calcote -
Linux Device Drivers, 3th Edition
https://lwn.net/Kernel/LDD3/ -
Mastering Linux Device Driver Development
Write custom device drivers to support computer peripherals in Linux operating systems
by John Madieu -
Computer Systems A Programmer’s Perspective
by Randal E. Bryant David R. O’Hallaron -
Computer Networking A Top-Down Approach, 7th Edition
by James Kurose, Keith Ross -
The Illustrated Network How TCPIP Works in a Modern Network
by Walter Goralski -
Compilers: Principles, Techniques, and Tools
by Alfred Aho, Monica Lam, Ravi Sethi -
Crafting Interpreters
by Robert Nystrom
https://craftinginterpreters.com -
Writing An Interpreter In Go
by Thorsten Ball -
Writing A Compiler In Go
by Thorsten Ball -
C++ System Programming Cookbook Practical recipes for Linux system-level programming using the latest C++ features
by Onorato Vaticone -
How to learn modern Rust
https://github.com/joaocarvalhoopen/How_to_learn_modern_Rust
-
Understanding the Linux Kernel, Third Edition 3rd Edition
by Daniel P. Bovet, Marco Cesati -
Linux Kernel Development 3rd Edition
by Robert Love -
Linux Kernel Programming: A comprehensive guide to kernel internals, writing kernel modules, and kernel synchronization
by Kaiwan N Billimoria
-
Video - The Evolution Of CPU Processing Power Part 1: The Mechanics Of A CPU
https://www.youtube.com/watch?v=sK-49uz3lGg -
Video - The Evolution Of CPU Processing Power Part 2: Rise Of The x86
https://www.youtube.com/watch?v=kvDBJC_akyg -
Video - The Evolution Of CPU Processing Power Part 3: The Origin Of Modern Operating Systems
https://www.youtube.com/watch?v=NTLwMgak3Fk -
Video - The Evolution Of CPU Processing Power Part 4: The 32 Bit Processor - Pipelines and Caches
https://www.youtube.com/watch?v=qRbDWkOE63I -
Video - The AI Hardware Problem
https://www.youtube.com/watch?v=owe9cPEdm7k -
Digital Design and Computer Architecture 2nd Edition
by David Harris, Sarah Harris -
Computer Organization and Design RISC-V Edition: The Hardware Software Interface 2nd Edition
by David A. Patterson, John L. Hennessy -
The RISC-V Reader: An Open Architecture Atlas
by David Patterson, Andrew Waterman
http://riscvbook.com/ -
Computer Architecture: A Quantitative Approach 6th Edition
by John L. Hennessy, David A. Patterson -
Video - David Patterson - A New Golden Age for Computer Architecture: History, Challenges and Opportunities
Note: See at 22 minutes, 63.000x speed up from Python to optimized C
https://www.youtube.com/watch?v=kFT54hO1X8M -
How to learn modern electronics
https://github.com/joaocarvalhoopen/How_to_learn_modern_electronics -
Most common components in electronics
https://github.com/joaocarvalhoopen/Most_common_components_in_electronics -
How to learn modern Embedded Systems
https://github.com/joaocarvalhoopen/How_to_learn_modern_Embedded_Systems
-
How to learn modern Machine Learning
https://github.com/joaocarvalhoopen/How_to_learn_modern_Machine_Learning -
The Hundred-Page Machine Learning Book
by Andriy Burkov -
scikit-learn - Machine Learning in Python
https://scikit-learn.org/ -
Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition
by Aurélien Géron -
PyTorch Tutorials
https://pytorch.org/tutorials/ -
Deep Learning with PyTorch: Build, train, and tune neural networks using Python tools
by Eli Stevens, Luca Antiga, Thomas Viehmann -
CUDA - Programming Massively Parallel Processors: A Hands-on Approach 3rd Edition
by David B. Kirk, Wen-mei W. Hwu
-
Raspberry Pi User Guide 4th Edition
by Eben Upton, Gareth Halfacree -
Programming the Raspberry Pi, Second Edition: Getting Started with Python 2nd Edition
by Simon Monk -
Raspberry Pi Cookbook: Software and Hardware Problems and Solutions 3rd Edition
by Simon Monk -
Practical Python Programming for IoT
Build advanced IoT projects using a Raspberry Pi 4, MQTT, RESTful APIs, WebSockets, and Python 3 by Gary Smart -
Operating Systems Foundations with Linux on the Raspberry Pi
by Wim Vanderbauwhede, Jeremy Singer -
Learning Computer Architecture with Raspberry Pi
by Eben Upton, Jeffrey Duntemann, Ralph Roberts, Tim Mamtora, Ben Everard -
Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux
by Derek Molloy -
Programming with 64-Bit ARM Assembly Language: Single Board Computer Development for Raspberry Pi and Mobile Devices
by Stephen Smith -
Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux 2nd Edition
by Derek Molloy -
Linux Driver Development for Embedded Processors - Second Edition: Learn to develop Linux embedded drivers with kernel 4.9 LTS
by Alberto Liberal de los Ríos -
Embedded Linux Systems with the Yocto Project
by Rudolf Streif -
Mastering Embedded Linux Programming: Unleash the full potential of Embedded Linux with Linux 4.9 and Yocto Project 2.2 (Morty) Updates, 2nd Edition
by Chris Simmonds
-
Absolute FreeBSD, 3rd Edition: The Complete Guide to FreeBSD
by Michael W. Lucas -
The Design and Implementation of the FreeBSD Operating System
by Marshall McKusick, George Neville-Neil, et al -
FreeBSD Device Drivers: A Guide for the Intrepid
by Joseph Kong
- Building a Modern Computer From First Principles
-
From Nand to Tetris
https://www.nand2tetris.org/ -
Video - Shimon Schocken: The self-organizing computer course
https://www.youtube.com/watch?v=iE7YRHxwoDs -
Video - From Nand to Tetris Part I Course Promo
https://www.youtube.com/watch?v=wTl5wRDT0CU -
Free Course - Build a Modern Computer from First Principles
From Nand to Tetris (Project-Centered Course)
https://www.coursera.org/learn/build-a-computer -
Free Course - Build a Modern Computer from First Principles
Nand to Tetris Part II (project-centered course)
https://www.coursera.org/learn/nand2tetris2
17. Become an enlightened person in terms of Linux and use it to accomplish your goals in a better way
- You will never achieve the complete nirvana, because there will always be something new to learn, and that is something good, but you will become more close to it and to enlightenment.
- The links to all my guides are in:
Guides on Linux - Programming - Embedded - Electronics - Aeronautics
https://github.com/joaocarvalhoopen/Guides_Linux-Programming-Electronics-Aeronautics
Best regards,
João Nuno Carvalho