Training > Linux Kernel Development > Introduction to Linux, Open Source Development, and GIT (LFD301)
INSTRUCTOR-LED COURSE

Introduction to Linux, Open Source Development, and GIT (LFD301)

Linux is exploding, and the demand for Linux developers has never been stronger. This course will introduce you to the world of Linux development and give you the background and training you need to start working with Linux. If you’ve been thinking about getting into Linux development, this is the best place to start!

Who Is It For

This course is for students who are already experienced computer users on another operating system, but have limited or no experience working in a Linux environment. The information in this course will work with any major Linux distribution.
read less read more
What You’ll Learn

In this course you will learn about the history of Linux and what differentiates it from other UNIX-like operating systems, what the main ingredients of a Linux system are and how to use them, the essentials of system administration, such as user accounts and groups, essential commands, filesystems, security, and more, networking and threading models, aspects of compiling and using libraries, working with Java under Linux, and more.
read less read more
What It Prepares You For

The Linux job market is hot, and Linux developers are being offered better paying, more flexible, and more fulfilling jobs than many of their peers. This course will prepare you to join the ranks of professional Linux developers.
read less read more
Course Outline
Introduction
Objectives and Audience
The Linux Foundation
Linux Foundation Training
Certification Programs and Digital Badging
Where Does the Software Come From?
Is it Difficult to Migrate to Linux?
Migration Considerations
Migration Aids and Documentation
Scope and Coverage of System Administration
Preparing Your System
Procedures
Things change in Linux
Course Registration
Labs
Open Source Software
What is Open Source Software?
What is Proprietary (Closed Source) Software?
Pragmatism vs Idealism
History of Open Source Software
Open Source Governance Models
Labs
Why Use Open Source Software?
Collaborative Development
Security and Quality of Source Code
Users: Flexibility
Business: Collaborative Development
Business: Marketing
Education: El-Hi, Public Systems
Education: University
Developers: Greater Visibility
Labs
Examples of Successful OSS Projects
Linux Kernel
git
Apache
Python, Perl and Other Computer Languages
Tex and LaTeX
GNU: gcc, gdb, etc.
X and Desktop Managers
OpenStack, Kubernetes, and other Projects
Labs
How to Work in OSS Projects
Overview on How to Contribute Properly
Study and Understand the Project DNA
Figure Out What Itch You Want to Scratch
Identify Maintainers and Their Work Flows and Methods
Get Early Input and Work in the Open
Contribute Incremental Bits, Not Large Code Dumps
Leave Your Ego at the Door: Don’t Be Thin-Skinned
Be Patient, Develop Long Term Relationships, Be Helpful
Labs
Continuous Integration
Why Continuous Integration?
Continuous Delivery and Continuous Deployment
Cost and Benefits
Tools
Example: Linux Kernel Continuous Integration Project
The Continuous Delivery Foundation
OSS Licensing and Legal Issues
Restrictive vs Permissive Licensing
FUD
Software Patents
Patents and Licenses
Choosing a License
Combining Licenses
Labs
Leadership vs Control and Why Projects Fail
Leadership vs Control
Loosen the Chains
Mentoring
Building Trust
Why do many OSS projects fail
Labs
Respecting and Encouraging Diversity in OSS
Diversity and Open Source Software
Sex and Gender Identity
National Origin, Geography and Language
Religion and Politics
Differences of Opinion
Labs
GitHub and Other Hosting Providers
GitHub
Public vs Private
GUI vs command line
Labs
Linux and the Operating System
Kernel vs Operating System and Tools
History of Linux
UNIX and Linux
Linux Distributions
Linux Standard Base (LSB)
Labs
Graphical Environments and Interfaces
Graphical Layers
X Window System
Window Managers
Desktop Managers
Terminal Window Options
Labs
Getting Help
Sources of Documentation
man Pages
info
{–}help and help
Graphical Interfaces
Labs
Text Editors
Available Text Editors
vi
emacs
Labs
Shells, bash, and the Command Line
Shells
Shell Initialization
Aliases
Environment Variables
Customizing the Command Line Prompt
Special Characters
Redirection
Pipes
Command Substitution and Expressions
{15.10}Labs
Filesystem Layout, Partitions, Paths and Links
Filesystem Layout
Partitions
Partitioning Considerations
Paths
Hard and Soft (Symbolic) Links
Labs
System Initialization
System Boot
System Initialization
Labs
Memory
Memory
Swap
Threading Models
Labs
Networking
Networking and Network Interfaces
Labs
Command Details
Basic Commands and Utilities
File Transfer Tools
Monitoring and Performance Utilities
Graphical Monitoring Tools
Loading/Unloading Kernel Modules
Device Management
Managing System Services
Labs
System Administration
Installation
Software Management and Packaging
Upgrading and Patching
User Directories, Environments, etc.
Logging Files
Labs
Users and Groups
Basics of Users and Groups
Adding and Removing Users and Groups
Files, Users and Permissions
root (super) user, su and sudo
Labs
Linux Filesystems
Filesystems and the VFS
ext2, ext3, and ext4 Filesystems
Journaling Filesystems
btrfs
Mounting Filesystems
RAID
LVM
Labs
Essential Command Line Tools
Listing, Creating, Deleting and Renaming Files and Directories
Finding Files: find and locate
Finding Strings: grep
String Substitution: sed
Labs
Bash Scripting
Script Basics
Conditionals
Loops
Functions
Labs
Files and Filesystems
Types of Files
Permissions and Access Rights
Changing Permissions and Ownership
Labs
Compiling, Linking and Libraries
gcc
Other Compilers
Major gcc Options
Static Libraries
Shared Libraries
Linking To Libraries
Debugging with gdb
Labs
Java Installation and Environment**
Write Once and Use Anywhere?
Installing Java on Linux
Handling Multiple JRE}s and JDK}s: the alternatives System
Environment Variables and Class Paths
Integrated Development Environments
Building RPM and Debian Packages
Why Use Package Management
Packaging System Benefits
Linux Distributions and Package Management
RPM Creation
The RPM spec File
Details on RPM spec Sections
RPM Dependencies
Debian Package Creation Workflow
Labs
Introduction to GIT
Revision Control
Available Revision Control Systems
Graphical Interfaces
Documentation
Labs
Git Installation
Binary Installation
Installing from Source
Labs
Git and Revision Control Systems
Converting Between Different Systems
RCS and CVS
Subversion
git
git and Distributed Development
Labs
Using Git: an Example
Basic Commands
A Simple Example
Labs
Git Concepts and Architecture
Concepts
Design Features
Repositories
Objects and Index
Content vs Pathnames
Committing vs. Publishing
Upstream and Downstream
Forking
Labs
Managing Files and the Index
File Categories
Basic File Commands
Labs
Commits
Making a Commitment
Identifiers and Tags
Viewing the Commit History
Reverting and Resetting Commits
Tidying Repositories
Who is to Blame?
Bisecting
Labs
Branches
What is a branch?
Branch Names vs Tags
Branch Creation
Branch Checkout
Getting Earlier File Versions
Labs
Diffs
Differencing Files
Diffing in Git
Labs
Merges
What is Merging?
Merge Commands
Rebasing
Labs
Managing Local and Remote Repositories
Working with Others
Cloning
Publishing Your Project
Fetching, Pulling and Pulling
Labs
Using Patches
Why Use Patches?
Producing Patches
Emailing
Applying Patches
Labs
Advanced Git Interfaces: Gerrit
Modes of Distributed Development
Gerrit
Review Process
Labs
Closing and Evaluation Survey
Evaluation Survey

Reviews
Oct 2020
Definitely a good course for people who lack an understanding of Linux and Git. Every section had clear, well thought out content.
Oct 2020
Overall this was a great class. Everyone in our team had different experience levels, and the instructor was able to work with the more advanced players, as well as the learners. Clearly this training has had a lot of work put into it and it shows.