Other materials

Teasers :-)

The following summaries should give you an idea of how the landscape looks like and what will be covered by each lab.

Lab #1: Agenda, Linux as GUI-oriented end-user system. We will briefly introduce the course goals, rules and grading requirements. We will then explore the graphical interfaces offered by Linux so that we can select the most appealing and further customize it.

Lab #2: Introduction to Linux command-line interface. The true power behind Linux systems lies in their command-line interface. We will see how we can use it for file manipulation but also for advanced tasks such as system monitoring using only few command available on every Unix-based system.

Lab #3: Basic Linux shell scripting and data crunching. In this lab we will uncover the power of shell scripts: the universal and rather powerful duct tape that simplifies repeated everyday tasks but is also able to perform coarse data manipulation (before they are passed to domain specific tools for finer analysis).

Lab #4: Shell building blocks and Git command-line interface. We will advance our knowledge of shell scripts by using exit codes to control the flow of them as well as by expanding the list of known commands: the API of the shell. We will also start using Git locally and from the command-line to unleash its full power.

Lab #5: Working on remote machines with SSH, on-site test I (scripts and pipes). The true power of Linux shell comes when used remotely: we will see how working on servers is easy over SSH and why the command-line interface is so prevalent in the server world. We will also speed-up Git usage by setting up password-less authentication. The lab will start with a short mandatory on-site test.

Lab #6: Shell scripting. We will make our shell scripts more readable by introducing functions and variables and more powerful ways how individual programs communication with each other (such as command substitution).

Lab #7: Git branches and their everyday use. Git branches are the thing that allows multiple developers work on the same project. Without needs for explicit synchronization or fear of overwriting someone elses work. But without disrupting your normal Git flow and virtually with no practical overhead.

Lab #8: Advanced shell scripts and linting tools. This lab contains the final chapter for shell scripting: we will see how loops and conditions are done in shell and we will use ShellCheck and other automated tools to detect issues in our scripts even before they are executed for the first time.

Lab #9: Regular expressions, BATS tests, basic maintenance, on-site test II (Git). While Linux systems can run for years uninterrupted, they still require some maintenance: this lab will guide you through the basics of Linux maintenance. We will also look at regular expressions that can be used for basic as well as rather crazy filtering and modifications of textual data. The lab will start with a short mandatory on-site test.

Lab #10: Build tools and make basics. We will introduce the concepts of build tools in this lab: they are used to capture the process of building complex software so that the developer does not have to remember all the tiny details. We will focus our attention to the make tool. We will also have a look at file archival and basic disk utilities.

Lab #11: Siesta. Because of the state holiday in the middle of this week, there are no new topics. Catch up with your homework or skipped parts of previous labs. Or just relax and make a longer weekend for yourself.

Lab #12: Advanced Python development tools and find and xargs utilities. We will see how Python virtual environment can be used to develop programs in isolation and how to prepare them for further distribution. We will also have a look at two interesting utilities: xargs and find that can be used to search for certain files and work with all of them (even in parallel). And we will see how to use port forwarding with SSH.

Lab #13: Containers with Podman. We will demonstrate how Podman can be used to effectively test programs in various environments yet in isolation without affecting your system. And we will also explain why there are so many tools with similar purpose. And as a purely practical matter we will see how printing and scanning is performed in Linux systems.

Lab #14: Continuous integration, networking and signals, on-site test III (make). We will see that setting up continuous integration that runs automated tests of your program on every commit is super easy in GitLab and you will be able to configure it for your own projects. But we will also introduce several networking tools; we will conclude with a look at signals that are used to communicate unexpected states between different processes. The lab will start with a short mandatory on-site test.