#+title: Lab 1 #+title: Amirlan Sharipov (BS21-CS-01) #+author: Amirlan Sharipov (BS21-CS-01) #+PROPERTY: header-args :results verbatim :exports both #+OPTIONS: ^:nil * About this document I use Org mode in Emacs to write documents and will use it throughout the course. It has a super useful feature: it can evaluate the code on the fly and save results in the buffer. Also it's easy to use latex inside Org mode. That's why I will use Org mode for this course. If there are any problems with that, please report in the comments in Moodle. * Exercise 1 Code: #+begin_src bash lsb_release -a #+end_src #+RESULTS: : -e LSB Version: n/a : -e Distributor ID: Arch : -e Description: Arch Linux : -e Release: rolling : -e Codename: n/a Code: #+begin_src bash whoami #+end_src #+RESULTS: : rinri Code: #+begin_src bash users #+end_src #+RESULTS: : rinri Code: #+begin_src bash pwd #+end_src #+RESULTS: : /home/rinri/edu/sna Code: #+begin_src bash ls -la #+end_src #+RESULTS: : total 224 : drwxr-xr-x 2 rinri users 4096 Feb 2 15:47 . : drwxr-xr-x 25 rinri users 4096 Feb 2 14:13 .. : -rw-r--r-- 1 rinri users 19950 Feb 2 15:50 lab1.html : -rw-r--r-- 1 rinri users 6407 Feb 2 15:51 lab1.org : -rw-r--r-- 1 rinri users 190030 Feb 2 15:45 lab1.pdf Code: #+begin_src bash cd ~/library ls -la #+end_src #+RESULTS: #+begin_example total 17260 drwxr-xr-x 2 rinri users 4096 Jan 8 10:47 . drwx--x---+ 74 rinri users 4096 Feb 2 16:07 .. -rw-r--r-- 1 rinri users 6556637 Jan 8 10:47 Andrew S. Tanenbaum - Modern Operating Systems.pdf lrwxrwxrwx 1 rinri users 38 Aug 3 2022 cormen-algos.pdf -> /home/rinri/data/docs/cormen-algos.pdf lrwxrwxrwx 1 rinri users 93 Aug 3 2022 genki -> /home/rinri/data/docs/Banno E., Ikeda Y., Ohno Y., Shinagawa Ch., Tokashiki K. - Genki - 2020 -rw-r--r-- 1 rinri users 213363 Jan 8 10:47 ipfs-p2p-file-system.pdf -rwxr-xr-x 1 rinri users 66 Aug 3 2022 library.sh -rw-r--r-- 1 rinri users 2658531 Jan 8 10:47 Stroustrup B. - A Tour of C++ - Second Edition - 2018.pdf -rw-r--r-- 1 rinri users 8220353 Jan 8 10:47 TRENCH_FREE_DIFFEQ_I.PDF #+end_example Code: #+begin_src bash cat /etc/shells #+end_src #+RESULTS: : # Pathnames of valid login shells. : # See shells(5) for details. : : /bin/sh : /bin/bash : /bin/zsh : /usr/bin/zsh : /usr/bin/git-shell : /bin/dash Code: #+begin_src bash echo "$SHELL" #+end_src #+RESULTS: : /bin/zsh * Questions ** Using hostname command: Code: #+begin_src bash hostname #+end_src #+RESULTS: : akemi ** Arch Linux. It's a rolling-release distribution. That's why there is no "version". I've been using it for several years. Used lsb_release -a command to check the info. ** The root directory is "/" ** /bin/bash vs /bin/sh /bin/bash is a path to the bash shell. Whereas /bin/sh, on most of the systems, is a symbolic link to a POSIX-compliant shell. In many cases, it's linked to bash. On my machine, it's dash (it's usually faster if the script is POSIX-compliant) Code: #+begin_src bash ls -l /bin/sh #+end_src #+RESULTS: : lrwxrwxrwx 1 root root 4 Jul 3 2022 /bin/sh -> dash ** Bash manual a. --verbose - When verbose mode is used, bash doesn't hide extra information (prints it), including all the steps done of a script, bashrc commands, and other info. b. --help - shows help message c. --rcfile file - use "file" as a initialization file instead of ~/.bashrc ** Linux distributions I want to try *** NixOS NixOS uses a unique package manager called nix that solves many problems of common package managers (e.g. apt), including dependency hell. Apart from the package manager, NixOS has single configuration file for the entire system. Moreover, NixOS saves different "states" of the OS, and a user can rollback, for example, to the yesterday's state of the OS if something breaks. *** Gentoo Linux Gentoo Linux also uses a unique package manager called Portage. To install software on Gentoo, Portage builds most of the packages from source and allows user to optimize the software for their own needs. Gentoo also allows to use OpenRC as an init system instead of systemd. Even though OpenRC doesn't have many features of systemd, it's significantly lighter and simpler than systemd. *** Artix Linux Artix Linux is essentially Arch Linux, but it gives several options for the init system, including OpenRC, runit, s6, and others. *** LFS LFS allows a user to build their own Linux distribution. I think it allows a user to learn many things about Linux. *** Alpine Linux Alpine Linux is a lightweight Linux distribution, since it uses musl libc instead of glibc and busybox instead of GNU coreutils. It's widely used in Docker Images, thus it's useful to learn Alpine Linux. ** POSIX POSIX is a family of standards created to maintain compatibility between operating systems. For example, POSIX-compliant shell I mentioned earlier, is a shell that does things as mentioned in the POSIX standard for shells. If a script is POSIX-compliant, any POSIX-compliant shell can run it without issues and the script usually starts with #!/bin/sh Some of the information is taken from Wikipedia. ** Advantages of POSIX standards If a program is written with POSIX in mind, then it should work on other POSIX OSes too. Thus the portability increases. Since POSIX standards are public, everyone can create programs that can work and communicate with other POSIX-compliant programs. ** Slackware vs Debian Both distributions are old (29 years old), but both are still maintained. Slackware tries to be stable and simple, thus makes as few changes to the software as possible. It uses pkgtool package management system. There are not that many packages available in Slackware, but users can use third-party repositories to install software or update the system. Slackware has a small team of developers, whereas Debian is an popular distribution, that has many maintainers. Debian stable is widely used on servers, thanks to its stability and long-term support, while Debian unstable (rolling-release) and testing are used on PCs. Debian uses apt (with dpkg) package management system. There are many Linux distributions based on Debian, e.g. Ubuntu, MX linux, etc. ** uname -a Code: #+begin_src bash uname -a #+end_src #+RESULTS: : Linux akemi 6.1.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 24 Jan 2023 21:07:04 +0000 x86_64 GNU/Linux 1. Kernel name: Linux 2. Hostname: akemi 3. Kernel release version and kernel version: 6.1.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 24 Jan 2023 21:07:04 +0000 4. Hardware platform name: x86_64 5. Operating system name: GNU/Linux