LPIC-1 #
About Linux #
Components of Linux
- Boot Loader
- Software manages boot process till the OS starts to load
 
 - The Kernel
- Core of OS, manages OS, CPU and peripherals
 
 - Daemons
- Processes lurking in the background that start during booth or after login (e.g. time)
 
 - Shell
 - Graphical Server
- Subsystem to display graphic
 - AKA x-server
 
 - Desktop Environment
- Actual GUI for the user
 
 - Applications
 
- Boot Loader
 Why Linux ?
- Free
 - Stable
 - Secure
 - Open Source
- Free to run the program for any purpose.
 - Free to study how the program works
 - Free to change how the program works
 - Free to redistribute copies
 
 
Distributions
- What is a distribution ?
- Collection of software
 - Package management system
 - Helps you install, upgrade and remove software
 - Keeps your server up to date
 
 - Popular Examples
- Red Hat
- CentOS (based on red hat)
 - Fedora
 
 - Debian
- Ubuntu
 - Mint
 
 - SuSE
 - Gentee
 - Arch
 - …
 
 - Red Hat
 
- What is a distribution ?
 VirtualBox Bridged Networking
- If you do this, instead of NAT, you can SSH into the box instead of using the VirtualBox UI
 
System Architecture #
Boot the system
- UEFI is the new version of BIOS
- BIOS booting
- -> BIOS boot from particular disk
 - -> This disk has a MBR (Master Boot Record), which stores the Boot Loader
 - -> The boot loader knows where the kernel is on disk and boot the OS
 
 - UEFI
- UEFI Boot Loader (which lives on your disk) (is not in the MBR)
 - This boot loader calls the kernel, which boots the OS
 
 
 - BIOS booting
 - MBR : Information in the first sector of a disk that tells where and how the OS is.
 - GRUB (Grand Unified Bootloader) : Boot loader package that supports multiple OS’s on a ps
- You can modify the settings during bootup and make them persist by directly modifying the config files used by the GRUB
 - For Ubuntu in VirtualBox, tap 
escduring bootup 
 - Kernel is lowest level of replacable software to your hardware
 - Once the Kernel has attached the root file system, it will run a program called 
init initis always the first process ran by a linux system, therefor, it gets always a PID of1- There are a few different 
initprograms that existsysvinit: Which based onsysv, oldest and firstsystemd: Low memory boot process, mainstream, almost used everywhere nowupstart: Created by Ubuntu, but they switched tosystemdin the end.
 
- There are a few different 
 quietfor kernel param issupress most boot messages. So less verbosity for bootup
- UEFI is the new version of BIOS
 Determine and configure hardware settings
udev: Device manager for your kernel- Gives low level access to the linux device tree
 - Handles user space events (happens when hardware is removed or added to the system)
- Eg. Loading firmware
 
 - Provided by temporary filesystem (
tmpfs)- This is how 
udevprovides access, which is mounted to/devon startup 
 - This is how 
 /etc/udev/rules.d: Folder for custom rules for the device managerudev.- You can create rules for what should happen/ran when something is plugged in or unplugged
 
dbus- Inter-process communication mechanism
 - Framework that allows processes to talk to each other
 - Secure
 - Reliable
 - Provides high level OOP interface
 
sysfs- Virtual filesystem
 - Presents information about various kernel subsystems
- Hardware devices
 - Drivers
 
 - Mounted to 
/sys 
procfs- Similar to 
sysfs - Presents information about various processes
 - Presents information about system information
 - mounted to 
/proc- Can be used to interface with the kernel
 - Change parameters on the fly
 
 - Each running process will have a directory in 
/proc/<PID>+ various other stuff- eg. 
/proc/cmdline-> Kernel name from bootup - eg. 
/proc/version-> Kernel version - eg. 
/proc/cpuinfo-> CPU info 
 - eg. 
 
- Similar to 
 lsmod- List all Kernel modules in use and by which modules
 
modprobe- Add or remove loadable kernel modules to/from the kernel
 udevrelies uponmodprobto load drivers for automatically detected hardware
rmmod- Remove kernel module (prob need root for that)
 
lspci- Shows all PCI connected devices to the system
 - Show Device IRQ settings
 
Runlevels and boot targets
- Run Level : Number between 0 <-> 6 (max 9), determines which scripts/programs are run
- Levels :
0- Halt or shut down system1- Single user mode2- Multi user mode without networking3- Normal boot (multi user mode + networking)4- Unused/customizable5- Run level 3 + GUI display manager (if installed, so the graph env)6- Reboot
 - Based on the run level, more or less scripts will be ran which are located in different places (e.g. 
Systemdorsysv)inittab(came withsysv)- Ubuntu : 
/etc/rc0.d…/etc/rc6.dfolders with scripts that are ran based on correlating run level.rcS.dus ran for any run level.- This is still there for compatibility reasons
 
 systemdrun levels :- Also has scripts
 - System scripts 
/etc/systemd/system - Package Scripts 
/usr/lib/systemd/system /etc/systemd/systemtakes precedence over/usr/lib/systemd/systen- Uses targets (similar-ish to the other run level style)
- Run Level - Systemd Target
 0- runlevel0.target, poweroff.target1- runlevel1.target, rescue.target2,4- runlevel2.target, runlevel4.target, multi-user.target3- runlevel3.target, multi-user.target5- runlevel5.target, graphical.target6- runlevel6.target, reboot.targetemergency- emergency.target
 
 
 - Levels :
 - with 
init/telinityou can tell what level to run 
- Run Level : Number between 0 <-> 6 (max 9), determines which scripts/programs are run
 

systemctl- How you drive/control 
systemd - How you start, stop, restart applications (just like 
kubectl) - E.g.
- Status sound card : 
sudo systemctl status sound.target - stop sound card : 
sudo systemctl stop sound.target - Status sound card : 
sudo systemctl status sound.target - start sound card : 
sudo systemctl start sound.target - Status sound card : 
sudo systemctl status sound.target 
 - Status sound card : 
 
- How you drive/control 
 Commands
ps: List active processesps aux | head: Shows the top processes where you will seee/sbin/initdmesg: Kernel messages logged from the last bootuphead: take firstnlinestail: take lastnlinesless: page through a long resultman: manualsudo wall: Send a message to anyone logged in/has open shell (like announce a reboot)which: Where is an app running from?
Linux Installation and Package Management #
Design hard disk layout
/: root/usr: user binaries installed/home:/boot: All related to booting/var: Variable data (e.g. system logs …)/tmp: Everyone on the system can write to
Partitions
- Divide storage in multiple pieces
 - Allows dual booting
 - Separation of files
 - Data organization
 - System protection
 - e.g. Separate partition for each user to separate and safeguard
 - When you create a partition you need to mount them to directories.
 - Every path in linux can be mounted to
- We can mount to :
/home/var/tmp/home/nick/blah/
 - Remember like with Docker. You can have a folder 
/home/ian/dbdatawith data in it.- When you mount a partition to 
/home/ian/dbdata, the data in there will be hidden and overtaken with this mounted partition (like a volume with docker) - Once you unmoun the partition from that folder, the original data is again visible and accessible.
 
 - When you mount a partition to 
 
 - We can mount to :
 
Swap
- Swap is a partition, used in case the RAM is full, Swap is used
 - Unused pages fo the RAM will be saved in the SWAP partition
 
LVM
- Logical Volume Manager
 - (like Disk Manager windows, on steroids)
 - Allows to split disks into pools (Pools are also known as PE, Physical Extends)
 - Create partitions from pools
 - Can grow or shrink partitions
 

Install a boot manager
Boot Loader
- Boots a linux system
 - Runs before the OS
 - Can be configured from the operating system
 - common boot loaders :
- LILO
 - GRUB Legacy
 - GRUB2
 
 
Configuring the
/boot/grub/grub.cfgresults in editing your boot loader logicAlthough the above is the auto generated result of
/etc/grub.dand/etc/default/grubusinggrub-mkconfiggrub-probegrub-install: To install grub to the MBR of the specified disk (in case that didn’t happen yet)Revise
- update 
sudo vi /etc/default/grubfile - run 
sudo update-grub - restart to see changes in action
 
- update 
 
Manage Shared Libraries
- Libraries : So typical libs/packages that bash scripts or actual code can use
 - Key properties
- Shared
 - Reusable
 
 - Linking
- When your application wants to use these libraries, they should be linked to them
- Static Linking : Library is included in the application (each app has its own copy)
 - Dynamic Linking : Different applications using the exact same copy of the library
- Update libraries in a single place
 /etc/ld.so.conflists the locations of the shared libraries on your system.includestatements means it was split into other linked files
 
 ldd: ldd prints the shared objects (shared libraries) required by each program or shared object specified on the command line.- e.g. 
ldd /bin/ls 
- e.g. 
 
 - When your application wants to use these libraries, they should be linked to them
 
Use debian package manager
dpkg: Debian Package Manager- install/upgrade/remove software
 - low level tool
 - (Does not automatically installes dependencies)
 
apt- Advanced packaging tool
 - high level tool
 - install/upgrade/remove software
 - handles upgrading of entire system
 - Handle all package dependencies automatically
 - Uses online repositories
 
/etc/apt/sources.listis the list for mirrors ofaptand specifics on which repos per mirror to usemain: Officially supported softwarerestricted: supported software (not free under completely free license)xenial: current versionuniverse: community maintained softwaremultiverse: Not free software
apt-get update: update local package listsapt-get install <name>: Install softwareapt-get remove <name>: Uninstall software- ! does not remove remaining config files, use 
dpkg --purge <name>for cleanup 
- ! does not remove remaining config files, use 
 apt-cache depends <name>: Show what a app depends onapt-cache search <name>: Search for packages with a particular nameapt-get upgrade: Upgrade all current installed packages (respecting semver)apt-get dist-upgrade: upgrade everything and remove anything unused
wgetDownload a file to current locationUse RPM and YUM package manager
- RPM
- RedHat Package Manager
 - rpm command
 - Low level tools
 - install/upgrade/remove software
 
 - YUM
- Yellowdog update/modifier
 - replaced YUP (yellowdog updater)
 - Utilites online repositories
 - manages dependencies
 
 
- RPM
 Quiz
- How do you temporarily add a directory to your shared library path? - 
LD_LIBRARY_PATH 
- How do you temporarily add a directory to your shared library path? -