Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F96085927
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Dec 22, 11:39
Size
45 KB
Mime Type
image/svg+xml
Expires
Tue, Dec 24, 11:39 (1 d, 18 h)
Engine
blob
Format
Raw Data
Handle
23122748
Attached To
R4368 ScITS UniBe Training
View Options
diff --git a/assets/incident.png b/assets/incident.png
new file mode 100644
index 0000000..c4c9fba
Binary files /dev/null and b/assets/incident.png differ
diff --git a/assets/mount.svg b/assets/mount.svg
new file mode 100644
index 0000000..2ee197d
--- /dev/null
+++ b/assets/mount.svg
@@ -0,0 +1,2 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="661px" height="291px" viewBox="-0.5 -0.5 661 291" content="<mxfile modified="2019-01-15T20:48:51.544Z" host="www.draw.io" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" version="10.0.41" etag="PH30YfowH-HbxvlUZqgt" type="google"><diagram id="AV7xGsnJl9lvWWj9r5ga">7VlLj9sgEP41OW5k8CPe4+bVHrbSSntoe6qITWxabFJMEru/vmDj+JlVpLUTNdtcAh/DwMx8A0wyMRdR+omjXfiF+ZhOoOGnE3M5gRBY0JFfCskKxAVGAQSc+FqoAl7JH6zBUmxPfJw0BAVjVJBdE/RYHGNPNDDEOTs2xbaMNlfdoQB3gFcP0S76lfgi1FbYRoV/xiQIy5WBoUciVAprIAmRz441yFxNzAVnTBStKF1gqpxX+qWYtz4zetoYx7G4ZAIsJhwQ3WvbJtChcurcJwe1P5Fpo53fe7WpucCpeECUBPHEfFI+lithXo3LVqC/cz3JDsW9irYsFg9JHlulR+467WpZE4qTLBE4kiKg1CntKdQ2l5JwvusShY11IWf72MfKcEMOH0Mi8OsOeWr0KHkqsVBEVPaAbB4wF0RG/KmwdCmYEqBog+kLS4ggTKHa+Er8uSUQEd9X68+1x5YUb7VXPBIHz3lv6Sh3EEoXjDKeb1ZiK3u9Ppmh9OP0bJDBiToy5zCLsOCZFNETSrJlJzoW/WPFXcfRWFjjLXzUINL5EpxUV5SSDc2qfoaZ/xLD4Adi2Ho9t+e2khSc/cK1EX/2uDGMYbhnArtBPmh0yQdNu0s+4AxAPuss+RQ3LiIN7CON2kBFiULXEJxohWi7xY7njR6i9vkAuyGyeo4Ha4AA2SMFSF3p+ZlxhRht4ZkYORvHdoaJEWjFqC+N3JFi5HT8hX35HNJdxkXIAhYjuqrQedOjNe/hlIhvCp7auve9NrJM9Yy8k5WdWO64Nkl1v9fHqml5r5z3EwuR6dcj2gsmoWq3z0ydt/nKhX3KqEZ0ErbnnoZm+pWJeIDLgM0uDiLHFAlyaKp/T0hmI6UNipkIMf9xb+ljuq30sbrpA/qeQEPkj3ul/HkjSwbMBKubCfbtEuHx3n07wiGTT33iHGU1gR0jsUhqml8UUMsgq/VIcFuFZUvect6Ul41iB1WUT6ZcFPiyhvnQtxIAXcIA93bZWO5n8Hsp2W/u7UqyWzeS23MjwZFuJACHTJ4BCW338Plyzw7P5/M/XryzPCFy1hWo7NvY9a0+KrtwYzpDFSft19VVuWzd1ROgLwPMG2bAWAX6dDq90lkuP30JYOSfgc7ydgJcsToH1yrPb/YEBjesL8DolfZd3QTtOtvsSYTR6uzy5fv/rHorRLNWhHp+CRnoqJLd6o/MosSr/g42V38B</diagram></mxfile>" style="background-color: rgb(255, 255, 255);"><defs/><rect x="0" y="0" width="660" height="290" fill="#d6e5ff" stroke="#000000" pointer-events="none"/><g transform="translate(8.5,7.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="112" height="22" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 113px; white-space: nowrap; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="text-align: center"><span style="font-size: 20px">Filesystem 1</span></div></div></div></foreignObject><text x="56" y="17" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="295" y="90" width="235" height="160" fill="#ffb5b5" stroke="#d79b00" pointer-events="none"/><g transform="translate(303.5,97.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="112" height="22" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 113px; white-space: nowrap; overflow-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="text-align: center"><span style="font-size: 20px">Filesystem 2</span></div></div></div></foreignObject><text x="56" y="17" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="300" y="10" width="40" height="40" fill="#ffe6cc" stroke="#d79b00" pointer-events="none"/><g transform="translate(316.5,17.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="6" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 8px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">/</font></div></div></foreignObject><text x="3" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="100" y="90" width="80" height="40" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(111.5,97.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="56" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 56px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">folder</font></div></div></foreignObject><text x="28" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 440 170 L 440 183.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 440 188.88 L 436.5 181.88 L 440 183.63 L 443.5 181.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="360" y="130" width="160" height="40" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(368.5,137.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="142" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 142px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">another_folder</font></div></div></foreignObject><text x="71" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica"><font style="font-size: 22px">another_folder</font></text></switch></g><path d="M 320 50 L 320 70 L 140 70 L 140 83.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 140 88.88 L 136.5 81.88 L 140 83.63 L 143.5 81.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 320 50 L 320 70 L 440 70 L 440 123.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 440 128.88 L 436.5 121.88 L 440 123.63 L 443.5 121.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 90 210 L 90 223.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 90 228.88 L 86.5 221.88 L 90 223.63 L 93.5 221.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="30" y="170" width="120" height="40" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/><g transform="translate(44.5,177.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 92px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">subfolder</font></div></div></foreignObject><text x="45" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 140 130 L 140 150 L 90 150 L 90 163.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 90 168.88 L 86.5 161.88 L 90 163.63 L 93.5 161.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="160" y="170" width="120" height="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(205.5,177.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="28" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 30px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">file</font></div></div></foreignObject><text x="14" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 140 130 L 140 150 L 220 150 L 220 163.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 220 168.88 L 216.5 161.88 L 220 163.63 L 223.5 161.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="560" y="90" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(590.5,97.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 20px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">...</font></div></div></foreignObject><text x="9" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 320 50 L 320 70 L 600 70 L 600 83.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 600 88.88 L 596.5 81.88 L 600 83.63 L 603.5 81.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="360" y="190" width="160" height="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(382.5,197.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="114" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 116px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">another_file</font></div></div></foreignObject><text x="57" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="50" y="230" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(80.5,237.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="18" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 20px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 22px">...</font></div></div></foreignObject><text x="9" y="18" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g></svg>
\ No newline at end of file
diff --git a/assets/sandwich.png b/assets/sandwich.png
new file mode 100644
index 0000000..d148872
Binary files /dev/null and b/assets/sandwich.png differ
diff --git a/assets/server_problem.png b/assets/server_problem.png
new file mode 100644
index 0000000..c754244
Binary files /dev/null and b/assets/server_problem.png differ
diff --git a/assets/universal_install_script.png b/assets/universal_install_script.png
new file mode 100644
index 0000000..15aeefd
Binary files /dev/null and b/assets/universal_install_script.png differ
diff --git a/css/common.css b/css/common.css
index b912405..4c5d015 100644
--- a/css/common.css
+++ b/css/common.css
@@ -1,149 +1,183 @@
@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
@import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
@import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
body { font-family: 'Droid Serif'; }
h1, h2, h3 {
font-family: 'Yanone Kaffeesatz';
font-weight: normal;
}
.remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
.remark-code-line .hljs-constant { color: #5BFF68 }
.remark-slide-content { font-size: 24px; }
table.stack {
border-collapse: collapse;
table-layout: fixed;
width: 100%;
margin: auto;
}
.stack tr td:first-child {
border: 1px black solid;
height: 3em;
width: 60%;
}
.stack .bluebg {
background: SkyBlue
}
table.quiz {
width: 100%;
margin: auto;
}
.quiz td {
border: 1px black solid;
padding-top: 0.4em;
padding-bottom: 0.4em;
}
.quiz .clicked.Y {
background: #CCFFCC;
}
.quiz .clicked.N {
background: #FFCCCC;
}
.two-columns table {
table-layout: fixed;
}
.two-columns td {
width: 50%;
}
.mnemonic {
border: 1px solid firebrick;
border-radius: 0.3em;
margin-bottom: 0.5em;
}
.mnemonic::before {
content: "Mnemonic:";
margin-left: 0.25em;
font-style: italic;
color: firebrick;
}
.mnemonic p {
margin: 0.5em;
}
.acronym {
border: 1px solid #007b37;
border-radius: 0.3em;
margin-bottom: 0.5em;
}
.acronym::before {
content: "Acronym:";
margin-left: 0.25em;
font-style: italic;
color: #007b37;
}
.acronym p {
margin: 0.5em;
}
+.advice {
+ border: 1px solid #00027b;
+ border-radius: 0.3em;
+ margin-bottom: 0.5em;
+}
+
+.advice::before {
+ content: "Advice:";
+ margin-left: 0.25em;
+ font-style: italic;
+ color: #00027b;
+}
+
+.advice p {
+ margin: 0.5em;
+}
+
+.note {
+ border: 1px solid #694d00;
+ border-radius: 0.3em;
+ margin-bottom: 0.5em;
+}
+
+.note::before {
+ content: "Note:";
+ margin-left: 0.25em;
+ font-style: italic;
+ color: #694d00;
+}
+
+.note p {
+ margin: 0.5em;
+}
+
.exercise {
border: 1px solid blue;
border-radius: 0.3em;
margin-bottom: 0.5em;
}
.exercise::before {
content: "Exercise:";
margin-left: 0.25em;
font-style: italic;
color: blue;
}
.exercise p {
margin: 0.5em;
}
.highlight {
color: red;
font-weight: bold;
}
.middle img {
vertical-align: middle;
}
.small {
font-size: smaller;
}
.minusmargin {
margin-left: -10%;
margin-right: -10%;
}
div.blinking {
-webkit-animation: 1s blink step-end infinite;
-moz-animation: 1s blink step-end infinite;
-ms-animation: 1s blink step-end infinite;
-o-animation: 1s blink step-end infinite;
animation: 1s blink step-end infinite;
display: inline-block;
}
@-webkit-keyframes blink {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
@keyframes blink {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
\ No newline at end of file
diff --git a/linux_owners.html b/linux_owners.html
new file mode 100644
index 0000000..317e8c2
--- /dev/null
+++ b/linux_owners.html
@@ -0,0 +1,1175 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Linux for Owners</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="css/common.css">
+ </head>
+ <body>
+<textarea id="source">
+
+class: center, middle
+
+# Linux for Owners
+
+`https://goo.gl/auQmRB`
+
+---
+
+# Agenda
+
+1. Owning a Linux system
+2. Course expectations
+3. Linux landscape
+4. Accessing `root`
+5. Linux filesystem structure
+6. Mounting filesystems
+7. Working with the package manager
+
+
+---
+
+# Owning a Linux system
+
+## What do we mean by that?
+
+--
+
+.highlight[Administrative privileges] vs a normal account only.
+
+--
+
+ Symptoms:
+
+* access to the `root` user, or
+* access to `sudo` (or `su`) commands
+* having installed the system yourself (optional)
+* physical access to the machine (optional)
+
+--
+
+Having admin access usually means you are responsible for
+.highlight[maintenance and configuration] of the system.
+
+For that, you need a deeper knowledge of how it works.
+
+---
+
+# Typical ownership scenarios
+
+--
+
+* Linux installed as main OS on a desktop or laptop machine
+
+ * Scenarios: work requirement, curiosity, alternative OS
+ * Typically means a graphical environment
+
+--
+
+* Linux used as a virtual machine guest
+
+ * Scenarios: experimentation, sandbox, development
+ * Safe way to try OSes and configurations
+
+--
+
+* Linux used as a server
+
+ * Can be bare-metal or virtualized
+ * Typically means a CLI environment (over SSH)
+
+--
+
+* Linux appliance / IoT
+
+* Android (which you usually don't own!)
+
+---
+
+# Typical responsibilities
+
+--
+
+* Installing new software as needed
+
+* Configuring software and access to hardware
+
+* Updating software & OS
+
+* Securing the system and installed software
+
+* Solving problems as they appear
+
+---
+
+# Course expectations
+
+This is a crash-course limited to one day.
+
+* You are expected to know the basics of working with Linux.
+ At a minimum, working with command line and editing files from it.
+
+* You were asked to prepare a VM with Linux, that way you can
+ safely try admin commands and reboot the OS without affecting
+ your main system.
+
+* Some commands can differ per Linux "flavour". The course sticks
+ to Ubuntu / Debian, and may need to be adapted to other
+ distributions.
+
+* The course is intended to be an introduction; to dig deeper
+ into topics you'll need to do your own research.
+
+---
+
+# Linux landscape: What's a distribution?
+
+"Linux" is the name of the OS kernel, and needs a lot of other software
+ to be a functional operating system.
+
+One can, in principle, assemble this collection of software themselves:
+ such an approach is called Linux From Scratch.
+
+--
+
+It's long, requires in-depth knowledge of the system and most importantly
+ leaves keeping the system up to date to the user.
+
+A better approach is to use a .highlight[distribution], which offers:
+
+* A curated collection of software tested to work together.
+* A .highlight[package manager] to automate software install tasks.
+* Pre-compiled software for faster installation.
+* Security updates and fixes for critical bugs.
+* Varying balance between stability and faster updates.
+* _Optional:_ paid support.
+
+---
+
+# Linux landscape: Popular distributions
+
+There are many families of distributions, sharing package managers
+ and maybe parts of the package collection.
+--
+
+* Debian (package manager: `apt` / .deb packages)
+ * Ubuntu
+ * Kubuntu, Lubuntu, ...
+ * Linux Mint
+ * Kali, Tails, Devuan
+--
+
+* RHEL (package manager: `yum` / .rpm packages)
+ * Fedora
+ * CentOS, Scientific Linux
+ * SUSE, OpenSUSE
+--
+
+* Arch Linux (package manager: `pacman`)
+ * Manjaro Linux
+* Gentoo (package manager: Portage / `emerge`)
+ * Chrome OS
+* Alpine Linux
+* ...
+
+---
+
+# Linux landscape: Rolling / Static / LTS
+
+Various Linux distributions take different approaches to software updates.
+
+Programs update at their own pace, called "upstream".
+
+--
+
+.highlight[Rolling distributions] try to keep up with upstream version
+ updates, with minimal changes to keep it compatible with
+ the rest of the software stack.
+
+--
+
+.highlight[Static distributions] lock down software versions at the time
+ of release, in order to provide more testing and stability.
+
+--
+
+However, critical bugfixes and security patches have to be ported back
+ "downstream" to those "frozen" versions.
+
+Some static distributions have .highlight[Long Term Support] releases that
+ guarantee longer availability of such patches.
+
+---
+
+# Assuming superpowers
+
+How do administrative powers work in Linux?
+
+Compared to regular users, the user with ID 0, or .highlight[`root`],
+ is treated as .highlight[superuser]: it has the ability
+ to bypass all usual access restrictions.
+
+--
+
+In some Linux distributions a password for `root` is set
+ at install time and can be used to log in directly.
+
+However, most of the time users with administrative privileges
+ will have access to use .highlight[`sudo` command].
+
+.mnemonic[
+`sudo` stands for ".highlight[su]peruser .highlight[do]", because it executes some
+ other command as superuser instead of current user.
+]
+
+---
+
+# Assuming superpowers: `sudo`
+
+.center[
+ ![XKCD on sudo](assets/sandwich.png)
+]
+
+_Image credit:_ [XKCD #149](https://xkcd.com/149/)
+
+---
+
+# Assuming superpowers: `sudo`
+
+`sudo [command]` executes the command as `root` instead of the current user:
+
+```
+owner@linux:~$ whoami
+owner
+owner@linux:~$ sudo whoami
+[sudo] password for owner:
+```
+
+--
+
+Normally, `sudo` asks for authentication: it requires you to supply
+ .highlight[your own] password (not the `root` password!).
+
+```
+owner@linux:~$ sudo whoami
+[sudo] password for owner: <type in owner's password>
+root
+owner@linux:~$
+```
+
+---
+
+# Assuming superpowers: `sudo`
+
+`sudo` remembers that you have authenticated,
+ and subsequent commands do not require password for 15 minutes:
+
+```
+owner@linux:~$ sudo whoami
+root
+owner@linux:~$
+```
+
+--
+
+If you need to do a lot of stuff as root, you can use `sudo -i`
+to start a login shell as `root`:
+
+```
+owner@linux:~$ sudo -i
+root@linux:~# whoami
+root
+root@linux:~#
+```
+
+.mnemonic[
+`-i` is short for .highlight[interactive]
+]
+
+_Reference:_ `man sudo_root`
+
+---
+
+# To root or not to root
+
+Forgetting `sudo` before a command that requires it
+ can be jarring. Therefore, there is great temptation
+ to use a `root` shell when mostly admin tasks are involved.
+
+--
+
+Problem is, there are no "handrails" on what the `root` user can do.
+ It's far too easy to shoot oneself in the foot.
+
+An error in a program run under `root` can break critical parts
+ of the system, which won't happen under a regular user.
+
+--
+
+From a security perspective, running complex, or untrusted,
+ programs under `root` opens you up for malicious actions as well.
+
+---
+
+# To root or not to root: a horror story
+
+Running this command as a `root` is a classic mean prank:
+
+```
+root@linux:~# rm -rf /
+rm: it is dangerous to operate recursively on '/'
+rm: use --no-preserve-root to override this failsafe
+```
+
+Fortunately, as written it doesn't work, there's a failsafe.
+
+--
+
+However, consider this line:
+
+```
+(DO NOT RUN THIS)
+root@linux:~# rm -rf $FOLDER/*
+```
+
+This is supposed to delete everything in folder `$FOLDER`.
+
+But in case that variable is unset, it will happily destroy everything on the system — if run as `root`.
+
+---
+
+# To root or not to root
+
+In addition, if files are created while running as `root`
+ it usually leads to them being inaccessible by normal users.
+
+This can lead to errors when running the same commands later
+ as a normal user.
+
+--
+
+Most workflows are a mixture of commands that require superuser and those that don't.
+
+It's good practice to be aware of it and run only those parts that need it with `sudo`.
+
+--
+
+It's not a hard rule. Running a set of commands as `root` has its place,
+ but one needs to be careful and mindful of the above nuances.
+
+---
+
+# root and SSH
+
+By default, even if you set a password for the `root` user,
+ you won't be able to connect via SSH with this password.
+
+This is done to discourage brute-forcing the `root` password.
+
+--
+
+This encourages people to connect as their user and elevate
+ with `sudo` if necessary. This creates more meaningful logs.
+
+
+Also, if your SSH key is compromised but your user password is not,
+ the attacker won't be able to elevate to `root` even if
+ they can connect.
+
+--
+
+It's still possible to connect directly as `root` by weakening
+ the security (bad idea) or adding an SSH key to the `root`
+ account. However, previous warnings apply.
+
+---
+
+# How is `sudo` configured?
+
+What enables certain users to use `sudo`?
+
+By default, members of a specific group
+ (e.g. `sudo`, `admin`, `wheel`)
+ are allowed all `root` privileges after verifying their password.
+
+--
+
+There's a `/etc/sudoers` file describing the system policy.
+
+It can be fine-tuned to allow some users access only to
+ specific commands, or dropping the password requirement.
+
+.advice[
+ When editing `sudoers` file, always use the `visudo` script.
+ It sanity-checks changes so that you don't lock yourself out.
+]
+
+_References:_ `man sudoers`,
+ [Understanding the sudoers file](https://medium.com/@viraj.khatavkar/understanding-the-sudoers-file-8d71961b28ac)
+
+---
+
+# Exercise: inspect the `sudoers` file
+
+.exercise[
+1. Try examining the contents of `/etc/sudoers` file:
+
+ ```
+ owner@linux:~$ less /etc/sudoers
+ ```
+
+2. Explain the problem
+
+3. Fix the problem (using `sudo`)
+]
+
+---
+
+# Bonus: violating the `sudoers` policy
+
+.center[ ![](assets/incident.png) ]
+
+_Image credit:_ [XKCD #838](https://xkcd.com/838/)
+
+---
+
+# Linux filesystem map: what goes where?
+
+Before we proceed, it's important to understand
+ common filesystem locations in Linux.
+
+It differs a little from distribution to distribution,
+ but generally systems adhere to the
+ .highlight[Filesystem Hierarcy Standard], or FHS (3.0 currently).
+
+Not every entry in the standard will be explained, but "points of interest"
+ will be shown.
+
+_References:_
+ [Wikipedia entry on FHS](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard),
+ [FHS 3.0 specification](http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html)
+
+---
+
+# Linux filesystem: a common tree
+
+Under UNIX conventions, there's only a single filesystem tree visible in the system.
+
+There can be multiple disks, or multiple partitions on those disks, each with its
+ own filesystem trees, but to be usable they are inserted in the common file tree
+ as subtrees:
+
+.center[ ![](assets/mount.svg) ]
+
+---
+
+# Linux filesystem: a common tree
+
+.center[ ![](assets/mount.svg) ]
+
+This process is called .highlight[mounting].
+You can examine currently mounted filesystems with the `mount` command:
+
+```
+owner@linux:~$ mount
+sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
+proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
+[...]
+```
+
+---
+
+# Linux filesystem: `/home` sweet home
+
+As a user, you're probably familiar with .highlight[`/home`].
+
+Home directories for each user are usually stored there:
+
+```
+owner@linux:~$ echo $HOME
+/home/owner
+owner@linux:~$ ls -l /home/
+total 6
+drwxr-xr-x 4 owner owner 4096 Jan 14 00:03 owner
+drwxr-xr-x 2 user user 4096 Jan 15 18:31 user
+```
+
+The `root` user is an exception:
+
+```
+owner@linux:~$ sudo -i
+root@linux:~# echo $HOME
+/root
+```
+
+This is done to help with troubleshooting, if `/home` is a separate filesystem
+ and something goes wrong with it.
+
+---
+
+# Linux filesystem: configuration, _et cetera_
+
+We have already saw .highlight[`/etc`] mentioned
+ when we looked at `sudoers` policy.
+
+In fact, by convention all .highlight[system-wide configuration] files
+ are stored there, often grouped into folders by topic/program.
+
+Most files are only writable by `root`, and some highly-sensitive
+ ones, like `/etc/sudoers`, are not readable by anyone else.
+
+.note[
+ User-specific configuration (and persistent state) is usually stored
+ in the user's home folder as hidden files/folders,
+ e.g. `/home/owner/.bashrc`
+
+```
+owner@linux:~$ ls -a ~
+. .. .bash_history .bash_logout .bashrc .cache .gnupg .local .ssh ...
+```
+]
+
+---
+
+# Linux filesystem: where software lives
+
+Executable (.highlight["binary"]) files for software installed system-wide is read-only
+ for regular users and is organized in (up to) 3 tiers of hierarchy of .highlight[`sbin`/`bin`] folders:
+
+* .highlight[`/`]`sbin`, .highlight[`/`]`bin` - essential system software
+
+--
+* .highlight[`/usr/`]`sbin`, .highlight[`/usr/`]`bin` - more software that's part of the OS
+
+--
+* .highlight[`/usr/local/`]`sbin`, .highlight[`/usr/local/`]`bin` - additional software
+
+--
+
+These locations can have `lib` and `include` folders
+ for library and header files, and `share` folders
+ for program data.
+
+--
+
+Finally, .highlight[`/opt`] provides a location for installing extra
+ software without interfering with `/usr`.
+
+--
+
+In practice, the difference between these locations is not very well
+ defined. Some distributions don't differentiate at all.
+
+---
+
+# Linux filesystem: not-quite-files
+
+Several locations on the filesystem contain virtual "files"
+ that can be read and/or written to, but represent something else.
+
+--
+
+* .highlight[`/dev`] contains .highlight[device] files that serve
+ as interfaces to hardware that the kernel sees and has drivers for;
+
+--
+
+* .highlight[`/proc`] contains information and interfaces to control
+ running .highlight[processes] and some kernel systems;
+
+--
+
+* .highlight[`/sys`] contains kernel and .highlight[system] information
+ and interfaces to control it. It's a newer method than `/proc`.
+
+Those locations are, again, usually read-only (or not accessible)
+ to regular users.
+
+---
+
+# Linux filesystem: variable and temporary
+
+Besides fixed program data, the filesystem has locations for
+ .highlight[variable] data, like temporary files and persistent state.
+
+--
+
+* .highlight[`/var`] represents variable data. A couple notable folders:
+ * .highlight[`/var/log`] for system logs
+ * .highlight[`/var/lib`] for data modified by programs, e.g. databases
+
+
+--
+
+* .highlight[`/run`] contains state information since startup.
+* .highlight[`/tmp`] is for temporary data, and is user-writable.
+
+Both `/run` and `/tmp` locations are emptied on boot, and in fact usually exist only in memory.
+
+--
+
+* .highlight[`/var/tmp`] is also for temporary data, but it survives reboot.
+
+---
+
+# Linux filesystem: other storage
+
+When extra storage is connected to the system, there are conventional
+ places to add it to the filesystem.
+
+--
+
+* .highlight[`/media`] is populated with filesystems from removable storage
+ added to the system: USB drives, CD disks, etc.
+
+ Often, such devices are added to `/media` automatically.
+
+--
+
+* .highlight[`/mnt`] is the traditional place to mount additional filesystems
+ temporarily.
+
+---
+
+# Linux filesystem: where everything starts
+
+Last but not least, .highlight[`/boot`] contains essential files to initialize Linux
+ when the computer starts up.
+
+Typical contents:
+
+* `/boot/grub/` contains .highlight[bootloader] components
+* `/boot/vmlinuz*` files are compressed Linux kernels
+* `/boot/initrd*` files are initial filesystems that are used until "real" root becomes available
+
+--
+
+.note[
+ On some OS configurations, `/boot` is a small separate filesystem. Since it usually contains
+ several versions of the kernel as a backup, in worst case it can run out of space.
+
+ In that case, you'll need to clean up older kernels before installing new versions.
+]
+
+---
+
+# Linux filesystem: parts, assemble!
+
+As mentioned, the .highlight[`mount`] command can be used to list currently-mounted filesystems.
+
+--
+
+To mount a filesystem, .highlight[`mount [WHAT] [WHERE]`] format is used.
+
+Here, `[WHAT]` identifies where the filesystem can be accessed (e.g. a physical drive partition),
+ and `[WHERE]` identifies the directory where its contents should be mapped.
+
+--
+
+To unmount a filesystem, .highlight[`umount [WHAT]`] (or `umount [WHERE]`) command can be used.
+Typically, only `root` can mount or unmount.
+
+--
+
+For permanent mount rules, e.g. what gets mounted on boot, see the .highlight[`/etc/fstab`] file.
+
+_References:_ `man mount`, `man umount`, `man fstab`
+
+---
+
+# Exercise: adding a filesystem
+
+Let's see `mount` and `fstab` in action. We'll create a file that holds a small
+ filesystem, mount it, and then set it up to mount automatically at boot.
+
+Let's create a 100MB file and an ext4 filesystem on it:
+
+```
+owner@linux:~$ truncate -s 100m loop_file
+owner@linux:~$ mkfs.ext4 loop_file
+```
+
+Then, let's create a mount point (where the filesystem will be mapped):
+
+```
+owner@linux:~$ sudo mkdir /mnt/tiny
+owner@linux:~$ ls -la /mnt/tiny/
+total 8
+drwxr-xr-x 2 root root 4096 Jan 16 09:50 .
+drwxr-xr-x 3 root root 4096 Jan 16 09:50 ..
+```
+
+---
+
+# Exercise: mounting a filesystem
+
+Let's mount our tiny filesystem.
+
+```
+owner@linux:~$ sudo mount /home/owner/loop_file /mnt/tiny
+owner@linux:~$ mount | grep tiny
+/home/owner/loop_file on /mnt/tiny type ext4 (rw,relatime,data=ordered)
+```
+
+As a regular user, we can't write to it:
+```
+owner@linux:~$ touch /mnt/tiny/test
+touch: cannot touch '/mnt/tiny/test': Permission denied
+```
+
+Let's make it writable:
+```
+owner@linux:~$ sudo chmod a+w /mnt/tiny/
+owner@linux:~$ touch /mnt/tiny/test
+owner@linux:~$ ls -la /mnt/tiny/
+total 17
+drwxrwxrwx 3 root root 1024 Jan 16 10:56 ./
+drwxr-xr-x 3 root root 4096 Jan 16 09:50 ../
+drwx------ 2 root root 12288 Jan 16 09:49 lost+found/
+-rw-r--r-- 1 owner owner 0 Jan 16 10:56 test
+```
+
+---
+
+# Exercise: unmounting a filesystem
+
+```
+owner@linux:~$ ls -la /mnt/tiny/
+total 17
+drwxrwxrwx 3 root root 1024 Jan 16 10:56 ./
+drwxr-xr-x 3 root root 4096 Jan 16 09:50 ../
+drwx------ 2 root root 12288 Jan 16 09:49 lost+found/
+-rw-r--r-- 1 owner owner 0 Jan 16 10:56 test
+```
+
+Let's unmount the filesystem and examine the situation again:
+
+```
+owner@linux:~$ sudo umount /mnt/tiny/
+owner@linux:~$ ls -la /mnt/tiny/
+total 8
+drwxr-xr-x 2 root root 4096 Jan 16 09:50 .
+drwxr-xr-x 3 root root 4096 Jan 16 09:50 ..
+```
+
+Our file is not there.
+
+Note that the mount point is not writable by all,
+ as our `chmod` command affected the tiny filesystem's root folder
+ and not the mount point.
+
+---
+
+# Exercise: add to `fstab`
+
+Let's add our mount to `fstab`.
+
+.advice[
+ You can edit configuration files with `sudo nano <FILENAME>` (or other editor),
+ but it's better to use `sudoedit <FILENAME>`.
+
+ See [sudoedit: why use it over sudo vi?](https://superuser.com/questions/785187/sudoedit-why-use-it-over-sudo-vi) for an explanation.
+]
+
+```
+owner@linux:~$ sudoedit /etc/fstab
+```
+
+It opens a file with already one or more records present.
+We need to add one.
+
+---
+
+# Exercise: `fstab` format
+
+An `fstab` record contains whitespace-separated fields:
+
+* [file system] - where to find the filesystem
+* [mount point] - where to map it in the system
+* [type] - what type of filesystem it is (`-t` flag)
+* [options] - various settings you can tweak (`-o` flag)
+* [dump] - 0/1, setting for a very old backup solution
+ **In practice, always 0**
+* [pass] - order to check the filesystem for errors on boot
+
+Let's add our filesystem, at the end of the file:
+
+```
+/home/owner/loop_file /mnt/tiny ext4 defaults 0 2
+```
+
+Take care not to modify other entries. Save and exit.
+
+---
+
+# Exercise: filesystem in `fstab`
+
+Now that our example is in `fstab`, we can mount it easier:
+
+```
+owner@linux:~$ sudo mount /mnt/tiny/
+owner@linux:~$ ls /mnt/tiny
+lost+found test
+```
+
+You can mount all filesystems in `fstab` at once with `mount -a`.
+
+Further, our example should now be accessible after a reboot.
+To prevent automatic mounting at boot time, use `noauto` option.
+
+.note[
+ To be able to mount a filesystem, corresponding drivers/utilities need
+ to be installed. If you fail to mount something, like a network drive,
+ check installed packages.
+]
+
+---
+
+# Working with the package manager
+
+To simplify software installation, updates and removal,
+ distributions provide a .highlight[package manager]
+ and a collection of "official" packages.
+
+Command examples for `apt`, Debian/Ubuntu package manager,
+ will be shown, but principles apply to other managers.
+
+---
+
+# Packages: software sources
+
+To install software, `apt` needs up-to-date information
+ about packages that are available.
+
+.highlight[`/etc/apt/sources.list`] contains the information
+ on .highlight[repositories] to get information from for system packages.
+
+--
+
+A command needs to be run to update a local catalog
+ of package information:
+
+```
+owner@linux:~ $ sudo apt update
+[...]
+Get:8 http://ch.archive.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [112 kB]
+Fetched 1798 kB in 1s (1768 kB/s)
+Reading package lists... Done
+Building dependency tree
+Reading state information... Done
+12 packages can be upgraded. Run 'apt list --upgradable' to see them.
+```
+
+---
+
+# Packages: upgrading installed packages
+
+Use .highlight[`apt upgrade`] command to install updates `apt` is aware of.
+
+--
+
+```
+owner@linux:~$ apt upgrade
+Reading package lists... Done
+Building dependency tree
+Reading state information... Done
+Calculating upgrade... Done
+The following packages will be upgraded:
+ gjs gnome-software gnome-software-common gnome-software-plugin-snap gvfs
+ gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-fuse gvfs-libs libgjs0g
+ libsmbclient libwbclient0 linux-firmware samba-libs ubuntu-software
+17 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Need to get 71.6 MB/74.6 MB of archives.
+After this operation, 3'258 kB of additional disk space will be used.
+Do you want to continue? [Y/n]
+```
+
+After confirmation, `apt` will download and apply updates.
+
+--
+
+.note[
+ Sometimes, an upgrade needs to remove some (replaced) packages.
+ In that case, `apt dist-upgrade` is used.
+]
+
+---
+
+# Packages: to upgrade or not to upgrade?
+
+Static distributions like Ubuntu only update packages
+ when serious bugfixes or security fixes are needed,
+ with little to no functionality changes.
+
+As such, it's usually safe to upgrade OS-provided packages.
+
+--
+
+If you're using a rolling distribution, or a third-party
+ repository, they can introduce breaking changes.
+Be prepared and read available changelogs to determine when to upgrade.
+
+--
+
+If you need to stop a particular package from upgrading,
+ you can put it on .highlight[hold]:
+
+```
+owner@linux:~$ sudo apt-mark hold bash
+bash set on hold.
+owner@linux:~$ sudo apt-mark unhold bash
+Canceled hold on bash.
+```
+
+---
+
+# Packages: when to upgrade?
+
+For most updates, upgrades will not disrupt normal workflow
+ and can be applied at any time.
+
+Note that upgrading running services (e.g. a web server)
+ requires them to restart, briefly becoming unavailable.
+ You may need to plan your maintenance in advance.
+
+--
+
+Some upgrades (mostly kernel updates) can't be applied without
+ a reboot. The system will nag you about it, but you won't
+ be forced to reboot.
+
+--
+
+General advice for any software updates: be prepared
+ to spend some time dealing with unexpected problems.
+
+---
+
+# Packages: Finding system packages
+
+If you're missing some software and it's available
+ in OS repositories, it's very easy to install.
+
+The shell can even .highlight[suggest the package] you're missing:
+
+```
+owner@linux:~$ fortune
+
+Command 'fortune' not found, but can be installed with:
+
+sudo apt install fortune-mod
+```
+
+Otherwise, you can .highlight[search known packages] by package name or description
+ with .highlight[`apt search`]:
+
+```
+owner@linux:~$ apt search cow
+[..long list..]
+owner@linux:~$ apt search --names-only cow
+[..shorter list..]
+```
+
+---
+
+# Packages: Installing system packages
+
+Once you know the name of the package(s), you can install them with
+ .highlight[`apt install`]:
+
+```
+owner@linux:~$ sudo apt install fortune-mod cowsay
+Reading package lists... Done
+Building dependency tree
+Reading state information... Done
+The following additional packages will be installed:
+ fortunes-min librecode0
+Suggested packages:
+ filters cowsay-off fortunes
+The following NEW packages will be installed:
+ cowsay fortune-mod fortunes-min librecode0
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Need to get 638 kB of archives.
+After this operation, 2'220 kB of additional disk space will be used.
+Do you want to continue? [Y/n]
+```
+
+After confirmation, `apt` will download and install them.
+
+---
+
+# Bonus: just what did we just install?!
+
+Let's test the software we just installed.
+
+```
+owner@linux:~$ fortune | cowsay
+
+ _____________________________________
+/ Truth is the most valuable thing we \
+| have -- so let us economize it. |
+| |
+\ -- Mark Twain /
+ -------------------------------------
+ \ ^__^
+ \ (oo)\_______
+ (__)\ )\/\
+ ||----w |
+ || ||
+```
+
+.exercise[
+ This could look better: we're missing some pretty colors.
+
+ Find the package that provides the `lolcat` application,
+ install it and pipe the output through it.
+]
+
+---
+
+# Packages: dependency resolution
+
+Let's look at that `apt install` output again.
+
+```
+The following additional packages will be installed:
+ fortunes-min librecode0
+Suggested packages:
+ filters cowsay-off fortunes
+The following NEW packages will be installed:
+ cowsay fortune-mod fortunes-min librecode0
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+```
+
+Often, packages require other packages (e.g. libraries, data files)
+ to be installed to function. The package manager's job is to find
+ and install everything that's needed.
+
+.note[
+ Rarely, a package is incompatible with already installed ones.
+ You will then be offered to remove packages to resolve this.
+ In that case, proceed with caution.
+]
+
+---
+
+# Packages: getting rid of them
+
+If you no longer need a package, you can use .highlight[`apt remove`]:
+
+```
+owner@linux:~$ sudo apt remove fortune-mod
+Reading package lists... Done
+Building dependency tree
+Reading state information... Done
+The following packages were automatically installed and are no longer required
+ fortunes-min librecode0
+Use 'sudo apt autoremove' to remove them.
+The following packages will be REMOVED:
+ fortune-mod
+0 upgraded, 0 newly installed, 1 to remove and 12 not upgraded.
+After this operation, 110 kB disk space will be freed.
+Do you want to continue? [Y/n]
+```
+
+After confirmation, the program will be removed,
+ but its configuration files will remain in case you reinstall.
+
+--
+
+If you want to completely clean up the package, use .highlight[`apt purge`]:
+
+```
+owner@linux:~$ sudo apt purge fortune-mod
+```
+
+---
+
+# Packages: orphaned dependencies
+
+Take note of these lines in `apt remove` output:
+
+```
+The following packages were automatically installed and are no longer required
+ fortunes-min librecode0
+```
+
+`apt` is informing you that `fortunes-min` and `librecode0` were installed
+ as dependencies, but .highlight[nothing requires them anymore].
+
+Therefore, it's highly likely that they can be removed without affecting anything.
+ However, `apt` does not do that automatically.
+
+To allow `apt` to do that, use .highlight[`apt autoremove`]:
+
+```
+owner@linux:~$ sudo apt autoremove
+[...]
+```
+
+---
+
+# Bonus: Universal Install Script
+
+.center[
+ ![:scale 50%](assets/universal_install_script.png)
+]
+
+_Image credit:_ [XKCD #1654](https://xkcd.com/1654/)
+
+---
+
+class: middle, center
+
+# The Great TODO Gap
+
+\*crickets\*
+
+<!-- ############################################################################################ -->
+
+---
+
+# Where to get help?
+
+If you know the command, or the config file that you're trying to use, .highlight[`man`] is your friend.
+
+--
+
+Also, Google is your friend! There's no shame in learning what you don't know yet or looking up
+ what you don't remember.
+
+--
+
+Some notable sites that are very helpful:
+
+* StackExchange network: https://stackoverflow.com/, https://superuser.com/, https://askubuntu.com/, https://unix.stackexchange.com/, https://serverfault.com/
+* DigitalOcean tutorials: https://www.digitalocean.com/community/tutorials/
+* nixCraft tutorials: https://www.cyberciti.biz/
+
+--
+
+When searching for solutions, specifying your OS version is helpful.
+ Old advice sometimes does not apply to newer systems!
+
+---
+
+class: center
+
+# That's it!
+
+## Go forth and administrate!
+
+--
+
+..try not to break stuff, though.
+
+![](assets/server_problem.png)
+Image credit: [XKCD #1084](https://xkcd.com/1084/)
+
+</textarea>
+ <script src="js/vendor/remark.min.js"></script>
+ <script src="js/vendor/jquery-3.2.1.min.js"></script>
+ <script src="js/terminal.language.js"></script>
+ <script src="js/common.js"></script>
+ </body>
+</html>
\ No newline at end of file
Event Timeline
Log In to Comment