Commit 45a815ec authored by nilsl's avatar nilsl
Browse files

Merge branch 'master' of

parents 5271f71f b0a8fb30
Cloudflare Server,13.2
Cloudflare Server,16.0
# for the slide detailing that cryptography/security should be FOSS
No preview for this file type
\title{Free and Open Source Software}
\author{Horea Christian}
\author{Alexander Schoch}
\institute{SSC TheAlternative | ETHZ and UZH}
......@@ -340,7 +340,7 @@
\caption{Web Server Market Share 2020-02-26 via \href{}{w3techs}}
\caption{Web Server Market Share 2020-10-06 via \href{}{w3techs}}
......@@ -349,7 +349,7 @@
\caption{Website OS Market Share 2020-02-26 via \href{}{w3techs}}
\caption{Website OS Market Share 2020-10-06 via \href{}{w3techs}}
......@@ -436,7 +436,7 @@
\item Come to the next “Linux Days” events:
\item Join the next “Stammtisch”:\\
\textcolor{lg}{18:00 Thursday, March 5 - Katholische Hochschulgemeinde Zürich AKI, 2nd floor, Hirschengraben 86, 8001}
\textcolor{lg}{This will not take place due to the coronavirus}
\item Give us feedback!\\
......@@ -448,7 +448,7 @@
%separate sources from info so it looks nicer
\item \textcolor{lg}{License:} \href{}{CC BY-SA 4.0}
\item \textcolor{lg}{License:} \href{}{Slides by Alexander Schoch/Christian Horea, CC BY-SA 4.0}
This is a public repository that contains a collection of our current (and past) LinuxDays courses.
# Downloading the course material
# Courses
Our course material (slides and several guides) are available as PDFs:
- [Free and Open Source Software](
- [Introduction to Linux](
- [Install Guide](
- [Console Toolkit Part 1](
- [Console Toolkit Part 1&2](
- [Console Toolkit Exercises](
- [Bash Course (Slides)](
- [Bash Course (Guide)](
- [Bash Course Exercises]( and [Solutions](
This is a public repository that contains a collection of our current (and past) LinuxDays courses.
- [Free and Open Source Software (.pdf)](
- [Introduction to Linux (.pdf)](
- [Install Guide](
- [Bash Guide](
Console & Bash:
- [Console Toolkit Part 1 (.pdf)](
- [Console Toolkit Part 1&2 (.pdf)](
- [Console Toolkit Exercises (.pdf)](
- [Bash Course (Slides) (.pdf)](
- [Bash Course (Guide) (.pdf)](
- [Bash Course Exercises (.pdf)]( and [Solutions](
- [Git](
# Cloning the repository
No preview for this file type
# Welcome to the Bash Workshop!
* If you prefer to work on your own, already know programming or are confident in your abilities, please **sit in the back**.
<!-- -->
* If you prefer guided exercises, are completely new to programming, or want to have your hands held, please **sit in the front**.
* Please turn of your camera for the lecture part of the course, we only have 2GB of RAM on this server
* If there are any technical problems, let me know!
- Aline Abler
- Nicolas König
title: Bash Workshop
......@@ -78,19 +78,19 @@ title: Bash Workshop
### Meaning of strings
echo Hello World
ls my file
* `echo`, `Hello` and `World` are single strings
* `ls`, `my` and `file` are single strings
* The first string becomes the command, all following become
<!-- -->
echo 'Hello World'
ls 'my file'
* Here, `Hello World` is just one string
* Here, `my file` is just one string
### Repeat after me
### Remember!
\bigtext{Every word is a single argument unless you use quotes.}
......@@ -111,7 +111,7 @@ title: Bash Workshop
* Bash's answer:
* Bash's answer:
bash: [[1==3]]: command not found
......@@ -119,7 +119,7 @@ title: Bash Workshop
[[ 1 == 3 ]]
### Repeat after me
### Remember!
\bigtext{If there's brackets, you probably need spaces.}
......@@ -151,7 +151,7 @@ title: Bash Workshop
* What bash sees
### Why is that important?
* *&&*, *||*, *if* and *while* all act based on the return value of something
......@@ -207,10 +207,41 @@ becomes
rm "$var"
### Repeat after me:
### Remember!
\bigtext{If there's a dollar, you probably need quotes!}
## Piping
### Glueing programs together
* Pipes allow us to connect different programs
* The output of one program is used as the input for another
### Glueing programs together
du -b
lists the size of all directories within the current one
sort -n
sorts the input numerically. So
du -b | sort -n
gives us a list of all subdirectories sorted by size.
### Glueing programs together
ls -l | cut -d' ' -f3 | sort | uniq
Complicated functionality can be created from very simple programs.
### Remember!
\bigtext{If you want to connect programs, you probably want pipes!}
# What bash is used for
## The whole point of bash
......@@ -252,22 +283,20 @@ becomes
## What happens now?
### Hands on!
#### Guided exercises
* Solve easy exercises in plenum
* Tailored to complete beginners
#### Self-driven exercises
* Self study using a guide
* Try some of our exercises
* Choose the exercises you find interesting! No need to go in order.
#### Guided exercises
* Solve easy exercises in plenum
* Tailored to complete beginners
* Please sit in the front
### Course material
* These slides, exercise sheet and bash guide: \
* Please leave some feedback! \
<!-- -->
* \soft{Theme by} Christian Horea, [CC BY](
* \soft{Original Presentation by} Aline Abler
No preview for this file type
TEXOPTS=-output-directory=build \
-pdf \
-latexoption=-interaction=nonstopmode \
# Set PREVIEW=1 to enable preview. Make sure an appropriate viewer is
# configured in $HOME/.latexmkrc.
# Example usage: make PREVIEW=1 opendata
defaul: exercises
# To include the current git revision in the header, write it to 'GIT_TAG'
# file, which the LaTeX source can include.
@printf "r%s.%s" "$$(git rev-list --count HEAD)" "$$(git rev-parse --short HEAD)" > GIT_TAG
# Create build directory if it doesnt exist
@[ -d build ] || mkdir build
# All documents need to be compiled twice.
# This is because some necessary information is only available after
# the first compiler run, like \pageref{LastPage}.
exercises: exercises.tex gitrev builddir
mv build/exercises.pdf .
@rm -rf build/*
% vim: set ft=tex:
% packages
\LoadClass[11pt]{scrartcl} % Base class: KOMA script article
\RequirePackage[utf8]{inputenc} % Support for german 'umlaut' (ä, ö, ü)
\RequirePackage{lastpage} % \pageref{LastPage}
\RequirePackage{scrlayer-scrpage} % KOMA Script header/footer package
\RequirePackage{graphicx} % \includegraphics{...}
% helvetica font
% \RequirePackage[scaled]{helvet}
% \RequirePackage[T1]{fontenc}
% \renewcommand\familydefault{\sfdefault}
% header / footer
\setkomafont{pagehead}{\normalfont\normalcolor} % non-italic header font
\setkomafont{pagefoot}{\normalfont\normalcolor} % non-italic footer font
\newcommand{\builddate}{\footnotesize Revision: \input{GIT_TAG} \\ Build: \DTMNow}
\cofoot[\footnotesize \thepage~/~\pageref{LastPage}]{\thepage~/~\pageref{LastPage}}
\setlength{\voffset}{-1.2cm} % space before header
\setlength{\textheight}{1.15\textheight} % height of text
\newtcolorbox[auto counter, number within=section]{exercisebox}[2][]{%
fuzzy shadow={1mm}{-1mm}{0mm}{0.1mm}{black!50!white},
title=Task~\thetcbcounter: #2,#1}
fuzzy shadow={1mm}{-1mm}{0mm}{0.1mm}{black!50!white},
segmentation at break=true,
lefthand ratio=0.06,
\title{Console Toolkit Exercises}
Welcome to this exercise session! This is a practical exercise on the Linux
command line. If you have any question about the exercises, feel free to ask
the helpers for assistance.
The exercises are designed in such a way that you will have to find solutions
by reading the manuals and using search engines. You are expected to come up
with appropriate solutions on your own, there will be no step-by-step guided
There will be quite simple exercises for complete beginners at the start,
but there are also some much more difficult ones further into the exercise.
Feel free to skip ahead!
By taking part in this exercise, you acknowledge that you alone are responsible
for your computer. TheAlternative and its parent organisation, the Student
Sustainability Commission, will not be held liable for any damages or loss of
To solve some of the exercises, you will need to download some files. Whenever
you see an orange box like below, this means you have a task to solve.
\begin{exercisebox}{Getting the repository}
Open a terminal and enter the following (all on one line): \\
-o} \\\\
Then extract the zip archive like this: \\
\subsection{Running a command}
To run a command, you just type it into the console and hit enter. Most useful
commands require some arguments. Arguments are given after the name of the
command, separated by spaces. There are also so-called \emph{flags}, which set
some options to alter the behaviour of a command. They have the form
\texttt{-x} (single letter form) or \texttt{--long-option} (long format).
An example of a more involved command:
\texttt{ls -l --human-readable \textasciitilde/Downloads}
\subsection{Getting help}
\texttt{man} is a command you will need throughout the following
exercises. It stands for ``manual'' and shows you what almost any given
command can do and which options are available for it. Almost all commands
provide such a ``manpage'', which is typically written by the developers
\begin{exercisebox}{The manual's manual}
The \texttt{man} command itself has its own manpage. Type \texttt{man man}
to access it, use the arrow keys to scroll, and press \keys{q} to exit.
Have a look around, especially at the different section numbers.
What is the section number for system calls?
An alternative to using the man pages is to try and see if a command has a help
option. This is usually displayed by appending the option \texttt{--help} after
the name of the command, which will often display much shorter and concise
on how to use a command.
\begin{exercisebox}{The help option}
Look at the help output of \texttt{ls}. What is the flag to see hidden
\subsection{Navigating directories}
You can navigate your file system in the terminal, just like you could with
a graphical program. Below are the most important commands.
fuzzy shadow={1mm}{-1mm}{0mm}{0.1mm}{black!50!white},
title={Commands for navigating directories}]
\textbf{Command} & \textbf{Description} \\
\texttt{pwd} & Display the current working directory. \\
\texttt{tree DIR} & Get a visualization of the directory tree under
\texttt{DIR}. \\
\texttt{ls DIR} & List all files and directories in the current
working directory. \\
\texttt{cd DIR} & Change the current working directory to the given
directory. \\
\begin{exercisebox}{Making yourself at home}
Have a look around your home directory and try out the mentioned commands.
You will most likely recognise the layout from your graphical file browser.
Remember you can always return to your home directory by running
\texttt{cd} without any arguments.
\subsection{Modifying directories}
Just like in graphical programs, you can create and delete directories on the
command line.
fuzzy shadow={1mm}{-1mm}{0mm}{0.1mm}{black!50!white},
title={Commands for modifying directories}]
\textbf{Command} & \textbf{Description} \\
\texttt{mkdir DIR} & Create a new directory with the given name. \\
\texttt{rmdir DIR} & Remove a directory. Will not work with
non-empty directories. \\
\texttt{rm -r DIR} & Remove a directory and its contents.
{\color{exclamred}Attention! There is no trashcan on the command
line! Files and directories will be deleted irrevocably.} \\
\texttt{cp -r SOURCE TARGET} & Copy a source directory
(recursively with all its contents) to a target. \\
\texttt{mv SOURCE TARGET} & Move a file or directory.
Also used to rename files/directories. \\
\begin{exercisebox}{Creating your first directory}
Create a directory for the following exercises (you can call it
\texttt{console-toolkit}). Change into that directory and create a file
called \texttt{notes}. Then move the exercise file directory you downloaded
in task 2.1 into your newly created directory.
\subsection{Viewing files}
If you want to view the contents of a text file, you have the following
fuzzy shadow={1mm}{-1mm}{0mm}{0.1mm}{black!50!white},
title={Commands for viewing files}]
\textbf{Command} & \textbf{Description} \\
\texttt{cat FILE} & Output a file to the terminal. \\
\texttt{head FILE} & Output the first couple of lines to the terminal. \\
\texttt{tail FILE} & Output the last couple of lines to the terminal. \\
\texttt{less FILE} & Browse a file in a visual viewer. \\
\begin{exercisebox}{Log files}
\texttt{tail} is often used to inspect errors log files. Use tail to find the
last three lines of \texttt{dmesg\_log} (in the exercise files).
\hintbox{\texttt{dmesg} is tool to view the log output of your kernel.}
\subsection{Console tips \& tricks}
There are many small things that can make your life when using the terminal
little bit easier. Following is a table with the most important keyboard
shortcuts you can use to speed up your workflow.
fuzzy shadow={1mm}{-1mm}{0mm}{0.1mm}{black!50!white},
title={Terminal keyboard shortcuts}]
\keys{\ctrl}+\keys{w} & Delete one word backwards. \\
\keys{\ctrl}+\keys{u} & Delete the entire line. \\
\keys{\ctrl}+\keys{l} & Clear the terminal. \\
\keys{\ctrl}+\keys{a} & Go to the beginning of the line. \\
\keys{\ctrl}+\keys{e} & Go to the end of the line. \\
\keys{\ctrl}+\keys{c} & Terminate the currently runnig process. \\
\keys{\ctrl}+\keys{d} & Quit the shell. \\
\section{Files \& Permissions}
This section introduces you to basic commands related to files. We will first
look at a command that can be used for creating empty files.
The \texttt{touch} command is most frequently used for creating new, empty
files. If you check the manual, you will see that it can also change certain
file timestamps (access and modification times).
\begin{exercisebox}{The magic touch}
Switch to your home directory. Execute \texttt{touch file}. A new file
should have been created. Confirm that this is the case.
We already saw \texttt{cat} in the previous section. Anothe