Lab 01
- Introduction to the NSWI177 paper
- Attendance
- Single source of truth -> NSWI177 paper
- Be Active
- Questions:
    - Is there any one, who had this paper last year?
- Who is using Linux?
- Who is using Git?
 
- Course guide:
    - No lectures
- Before class reading & Quizzes
- (Virtual) Labs & Practical assignment
- Bigger assignment in the exam period
- Highlight deadlines
- Technical issues Gitlab Forum
- Plagiarism
 
- Motivation
    - Purpose of this course -> practical knowledge
- 
        Last year feedback: Předmět byl asi ze všech dosud zapsaných časově nejnáročnější, ale zato byl ze všech alespoň nejvíce prakticky zaměřený. Jeden z nejnarocnejsich predmetu druheho semestru. Latka by si zaslouzila vice casu (prednasky a cviceni). Informace byly vsak spise z tech zajimavejsich. Nechci porovnavat s konkretnimi predmety. Rozhodně tady bylo více praxe a hodně jsem se toho naučil. Tento předmět mě zatím bavil nejvíce hlavně kvůli té praxi. Zdaleka nejtěžší z nich (ať už rozsáhlostí, časovou náročností, či domácími úkoly). Oproti Prog1/2 je předmět mnohem zajímavější a prakticky využitelnější, mám pocit, že jsem si vyzkoušel Python/Ruby víc prakticky než pomalu za celý semestr Prg1+2. Linux byl zatím suverénně nejhorší předmět za oba semestry. Mnohem více časově náročný než jakýkoliv jiný předmět. Kdyby MFF měla showcase nejlepších předmětů, tak bych NSWI177 hledal na jeho nejviditelnějším místě! :) Docela mě udivuje, že jsem Linux nezačal nenávidět. Místo toho ho teď umím mnohem lépe využít. 
- Linux philosophy -> Open source & Modularity
 
- Getting Linux
    - 😍 Main system
- 😇 Dual Boot
- 🙂 USB Disk
- 😐 Virtual Machine
- 🤮 WSL
 
- Desktop environments -> focus to sway/i3(i3 Reference Card)
- Git essentials -> what it is, why we will use it
- Using MFF GitLab -> everyone will log in now!*
- Show GitLab CI/CD Pipeline -> how to read pipeline output
- Graded assignments
Lab 02
- I will be ⛷️ -> The lab will be led by Vojta Horký
Lab 03
- Questions:
    - How was the lab 02?
- Do you know how to submit {quizzes,tasks,issues}?
- How much time do you spend on {quizzes,tasks}?
- Do you have any problems?
 
- Code style
    - Always write code in English, including comments and docstrings!
- Use functions!
- Use withcontext manager
- No global variables
- Custom exception - why not ValueError?
 
- Scripts:
    - Answer Q2, Q3
- Repeat command structure
- What is script, hashbang and executable bit -> examples
- Show environment PATH - explain
- Demo with .in PATH
- Explain cd /proc && cat cpuinfoandcd -
- manvs- help(why- typeis important)
- Experimenting with shebang (follow the lab)
 
- Git:
    - Answer Q4
- Small lecture about vim
- Individual work follow Git on the commandline
 
- (Optional) Command-line Parsing (see also PS: Zpracování příkazové řádky - TL;DR — Lukáš Bařinka).
- (Optional) Introduction to Vim (see also Vim na 20 min — Petr Hodač).
- (Optional) Explaining if __name__ == "__main__":
Lab 04
- Questions:
    - Do you have any problems?
- How much time do you spend on {quizzes,tasks}?
- How was the before reading?
 
- Before reading
    - Standard input/output/error
- Standard I/O redirection
- Exit code
 
- I/O redirection
    - Merge two files
- Appending with >>
- Utility tee
- Input redirection
- Generic redirection
- Special files /dev/full,/dev/null,/dev/random,/dev/zero
 
- Pipes
    - What it is?
- Differences between cut filevs<file cut
 
- Using &&and||- Exit codes
- Explain what it does
- Fast failing set -ueo pipefail
 
- Shell customization
    - Aliases
- Colors in BASH
- ~/.bashrc
 
- Examples
Lab 05
- Questions:
    - Do you have any problems?
- How much time do you spend on {quizzes,tasks}?
- How was the before reading?
 
- Before reading
    - Shell variables (export,env)
- Bash arithmetic
- envin hashbang
- Control flow (for,if,!,switch)
 
- Shell variables (
- Shell Scripting
    - Variables
- BASH parameter expansions (${parameter:-})
- shopt -s nullgloband- shopt -s failglob
- Command substitution
- Redirection of bigger shell portions
- readcommand + how to read from file (More details)
- Script parameters
 
- Exercises
Lab 06
- Questions:
    - Do you have any problems?
- How much time do you spend on {quizzes,tasks}?
- How was the before reading?
 
- Shell Scripting
    - Misunderstanding from previous lab
- geopt- type the example with- :
- Functions
- Subshells and variable scoping
- Here documents and here string
- Bash [[ ]](More details)
- Bash arrays (More details)
- (Optional) Variable IFS(More details)
 
- Exercises
Lab 07
- Questions:
    - Do you have any problems?
- What do you think about BASH?
 
- Before reading:
    - Networking 101
- Unix-style access rights + root access
- chownand- ls -laexplanation
- Asymmetric cryptography and SSH
 
- Using SSH
    - SSH example to alpine-local
- Explain SSH fingerprint and how to get it (~/.ssh/known_hosts)
- SSH run one command
- SSH Key generation + ssh-copy-id
- SSH Config
- scpand- rsync
- (Optional) Rsync tutorial
 
- SSH example to 
- Git over SSH
    - Add SSH Key to GitLab
- Clone repository with SSH URL
 
- Networking
    - ip,- ping,- traceroute,- mtr
 
- Access Rights
    - Examples
 
Lab 08
- Questions:
    - Do you have any problems?
- What do you think about lectures? Would you like to change the style?
 
- Before reading:
    - Regex (see also Python HOWTO Regex)
- Shellcheck + Pylint
 
- BATS
- sedand- grep- Exercise for students
- sedmultiple expressions
- seddelete lines (More details)
- sedscript example
 
- Bigger scripts
    - Exercise for students
 
- (Optional) Introduction to Vim (see also Vim na 20 min — Petr Hodač).
Lab 09
- Easter holiday
- Before reading:
    - rootuser
- sudocommand
- Package management (general)
- Processes
- Signals
 
- sudoexample
- dnfexample (search and install)
- htopexample
- (optional) :(){ :|:& };:(Fork Bomb Explanation)
- Signals
    - Example in python
- Example in bash
 
- Example in 
SIGINTis the interrupt signal. The terminal sends it to the foreground process when the user presses<C-c>. The default behavior is to terminate the process, but it can be caught or ignored. The intention is to provide a mechanism for an orderly, graceful shutdown.
SIGQUITis the dump core signal. The terminal sends it to the foreground process when the user presses<C-\>. The default behavior is to terminate the process and dump core, but it can be caught or ignored. The intention is to provide a mechanism for the user to abort the process. You can look atSIGINTas “user-initiated happy termination” andSIGQUITas “user-initiated unhappy termination.”
SIGTERMis the termination signal. The default behavior is to terminate the process, but it also can be caught or ignored. The intention is to kill the process, gracefully or not, but to first allow it a chance to cleanup.
SIGKILLis the kill signal. The only behavior is to kill the process, immediately. As the process cannot catch the signal, it cannot cleanup, and thus this is a signal of last resort.
SIGSTOPis the pause signal. The only behavior is to pause the process; the signal cannot be caught or ignored. The shell uses pausing (and its counterpart, resuming viaSIGCONT) to implement job control.
Lab 10
- Questions:
    - Do you have any problems?
- What about homework?
 
- Before reading:
    - Storage management (mounts, disk images)
- Services (daemon, logs)
 
- File management
    - tar,- apackexamples
- mountand- udisksctlexamples
- Note about repairing corrupted disks
- Disk usage example
 
- SSH port forwarding
    - Example
- Note about Reverse port forwarding
 
- Network Manager (students’ exercise)
    - Note about nmtuiandnmcli
- Note about nc
- Example nmap
 
- Note about 
- Systemd (students’ exercise)
    - Start, stop, status (More Details, Units and Unit Files)
- Logs (More Details)
 
- Printing and Scaning (students’ exercise)
- Periodically running tasks Crone (students’ exercise)
Lab 11
- Questions:
    - Do you have any problems?
 
- InstallFest 2022
- Before reading:
    - Virtual environment motivation (system wide, user wide, venv)
- PyPI vs Linux Distro repositories
 
- Virtual environment motivation (system wide, user wide, 
- Virtual environment
    - Example with timestamp2iso.py
- Installing Python packages with pip
- Dependency versioning
- Storing dependencies
 
- Example with 
- Packaging Python Projects
    - Show VCS pipsupport
- Python Package Directory Structure
- Building Python Package
- Publishing Python Package
 
- Show VCS 
- (Optional) Show poetry
Lab 12
- I will be 🏖️+ 🏐 -> The lab will be led by Vojta Horký
Lab 13
- Questions:
    - Do you have any problems?
- What about the previous lab?
 
- Before reading:
    - pandocexamples
- Build systems in general
 
- xargs- Multiple rmexecution
- Single rmexecution
 
- Multiple 
- find- Follow examples in course page
 
- make- Motivation for having Makefileand show its usage in13/make(remove.PHONY)
- Example Makefile
- Explain .PHONY
- Students’ Exercises
- Improvements (automatic variables,git clean,make help)
 
- Motivation for having 
- (Optional) Example Slides Template
- (Optional) Show git ignorefrom gitignore.io.
- (Optional) Show git lfsfrom git LFS.
- (Optional) Mention bfgfrom bfg.
Lab 14
- Questions:
    - Do you have any problems?
 
- Before reading:
    - Container technology introduction
- Docker vs Podman (not really)
- Image vs Container
- Image Stacking
- Alpine distribution
- GitLab CI
 
- Podman
    - Warning Python Docker builds 50x slower
- Running the first container
- Pulling Images
- Image repository
- Containers and processes
- Single shot runs
- Managing container life cycle
- Clean-up
- Port forwarding
- Volume mounts
 
- Students’ exercise
- GitLab CI
    - Motivation
- timestamp2isoexample
- Master thesis example
 
- (Optional) pre-commit hooks
- Feedback:
    - What would you change on the lab style?
- Too quick? Too slow? Too boring? Too funny?
- What would you focus on?
- Do you like BASH?
 
- THIS IS THE END 🎉