From bf3fd1ac3272a42fe29b772eeafd808150148b8c Mon Sep 17 00:00:00 2001 From: Vartika123456 <76062266+Vartika123456@users.noreply.github.com> Date: Tue, 18 Oct 2022 15:56:59 +0530 Subject: [PATCH 1/2] added ubuntu cheatsheet --- ubuntu_cheatsheet.md | Bin 0 -> 38938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ubuntu_cheatsheet.md diff --git a/ubuntu_cheatsheet.md b/ubuntu_cheatsheet.md new file mode 100644 index 0000000000000000000000000000000000000000..8e4e41b772b303fe5e3e49945c3e7548507f2c88 GIT binary patch literal 38938 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 z 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 Date: Wed, 19 Oct 2022 16:59:08 +0530 Subject: [PATCH 2/2] ubuntu cheatsheet added --- ubuntu.md | 751 +++++++++++++++++++++++++++++++++++++++++++ ubuntu_cheatsheet.md | Bin 38938 -> 0 bytes 2 files changed, 751 insertions(+) create mode 100644 ubuntu.md delete mode 100644 ubuntu_cheatsheet.md diff --git a/ubuntu.md b/ubuntu.md new file mode 100644 index 0000000..3611fb0 --- /dev/null +++ b/ubuntu.md @@ -0,0 +1,751 @@ +# Content +- [Basics](#basics) + - [File Hierarchy Standard (FHS)](#file-hierarchy-standard-fhs) + - [Commands](#commands) + - [Globs (Wildcards)](#globs-wildcards) + - [Regex](#regex) + - [Stream redirection](#stream-redirection) +- [Disk and File System Management](#disk-and-file-system-management) + - [General Disk Manipulation (non-LVM)](#general-disk-manipulation-non-lvm) + - [LVM](#lvm) +- [Automatic mounting (/etc/fstab)](#automatic-mounting-etcfstab) +- [Text Readers & Editors](#text-readers--editors) + - [Less](#less) + - [VI](#vi) +- [User and Group Management](#user-and-group-management) +- [File System Permissions](#file-system-permissions) +- [SSH](#ssh) +- [IPv6 (disable)](#ipv6-disable) +- [Cronjobs](#cronjobs) +- [Package Management](#package-management) + - [RPM](#rpm) + - [YUM](#yum) +- [Services (systemd)](#services-systemd) +- [NFS](#nfs) +- [Samba](#samba) +- [FTP](#ftp) +- [MySQL Server](#mysql-server) +- [Other](#other) + +# Basics +## File Hierarchy Standard (FHS) +| Path | Content | +| ------ | ----------------------------------- | +| /bin | Binaries (User) | +| /boot | Static boot loader files | +| /etc | Host specific configs | +| /lib | Shared libraries and kernel modules | +| /sbin | Binaries (System/root) | +| /var | Varying files (e.g. Logs) | +| /usr | 3rd party software | +| /proc | Pseudo file system | +| /sys | Pseudo file system | +| /mnt | Mountpoint for internal drives | +| /media | Mountpoint for external drives | +| /home | User homes | +| /run | PID files of running processes | + +## Commands +**File System Commands** + +| Command | Param | Description | +| ------- | ---------------- | ------------------------------------------------- | +| `cd` | `-` | Navigate to last dir | +| | `~` | Navigate to home | +| | `~username` | Navigate to home of specified user | +| `pwd` | | Print working dir | +| `ls` | | Print dir content | +| | `-l` | Format as list | +| | `-a` | Show hidden items (`-A` without `.` and `..`) | +| | `-r` | Invert order | +| | `-R` | Recurse | +| | `-S` | Sort by size | +| | `-t` | Sort by date modified | +| `mkdir` | `-p` | Create dir with parents | +| `cp` | `-r` | Copy dir | +| `rmdir` | `-p` | Remove dir and empty parents | +| `rm` | `-rf` | Remove dir recursively, `-f` without confirmation | +| `mv` | | Move recursively | +| `find` | `-iname pattern` | Search dir/file case-insensitive | +| | `-mmin n` | Last modified n minutes ago | +| | `-mtime n` | Last modified n days ago | +| | `-regex pattern` | Path matches pattern | +| | `-size n[kMG]` | By file size (`-n` less than; `+n` greater than) | +| | `! searchparams` | Invert search | + +**File Manipulation** + +| Command | Param | Description | +| ------- | ------------------------------------------ | ------------------------------------------ | +| `cat` | `file` | Print content | +| `tac` | `file` | Print content inverted | +| `sort` | `file` | Print sorted | +| | `file -r -u` | Print sorted descending without dublicates | +| `wc` | `file` | Count Lines, Words, Chars (Bytes) | +| `head` | `-n10 file | tail -n5` | Print lines 5-10 | +| `tail` | `-f file` | Print new lines automatically | +| `cut` | `-f -4,7-10,12,15- file` | Print selected fields (tab delimited) | +| | `-c -4,7-10,12,15- file` | Print selected characters positions | +| | `-f 2,4 -d, --output-delimiter=$'\t' file` | Change delimiter (but use tab for output) | +| `uniq` | `file` | Hide consecutive identical lines | +| | `file -c` | Show consecutive identical line count | +| | `file -u` | Hide consecutive identical lines | +| `file` | `file` | Get file type | + +**Archiving** + +| Command | Param | Beschreibung | +| ---------------- | -------------------------------- | -------------------------------------------------------- | +| `tar` | `cfv archiv.tar file1 file2` | Archiv erstellen / Inhalt hinzufügen oder überschreiben | +| | `tfv archiv.tar` | Inhalt anzeigen | +| | `xf archiv.tar [-C ~/extracted]` | Archiv (nach ~/extracted) entpacken (und dekomprimieren) | +| | `cfvj archiv.tar.bz2 file` | bzip2 komprimiertes Archiv erstellen | +| | `cfvz archiv.tar.gz file` | gzip komprimiertes Archiv erstellen | +| | `cfa archiv.tar.[komp] file` | komprimiertes Archiv erstellen (auto Typ anhand Name) | +| `bzip2` / `gzip` | `file1 file2` | Dateien (einzeln) komprimieren | +| | `-d file1 file2` | Dateien dekomprimieren | + +**Other** + +| Command | Param | Beschreibung | +| ----------- | --------------- | ------------------------------------------ | +| `` | `--help` | Help of current command (not standardized) | +| | `-h` | | +| | `-?` | | +| `man` | `` | Manual page of command | +| | `-k keyword` | Search command by keyword (oder `apropos`) | +| `alias` | | Show aliases | +| | `name='befehl'` | Create alias | + +## Globs (Wildcards) +The dot `.` in front of hidden items is ignored by glob patterns! + +| Character | Description | +| --------- | ----------------------- | +| `?` | Any single character | +| `*` | Any characters | +| `[ac-e]` | 1 character in enum | +| `[!ac-e]` | 1 character not in enum | + +## Regex +Bash itself does not know regex. Use programs like `grep`, `sed`, `awk`. + +**Steuerzeichen** + +| Character | Description | +| -------------- | ----------------------- | +| `.` | Any single character | +| `[ac-e]` | 1 character in enum | +| `[^ac-e]` | 1 character not in enum | +| `^` | Start of string | +| `$` | End of string | +| `\d` | Digit | +| `\D` | Not a digit | +| `\s` | Whitespace | +| `\S` | Not a Whitespace | +| `\<` | Start of word | +| `\>` | End of word | +| `pattern?` | Quantifier 0 or 1 | +| `pattern*` | Quantifier 0..n | +| `pattern+` | Quantifier 1..n | +| `pattern{x}` | Quantifier exactly x | +| `pattern{x,}` | Quantifier x..n | +| `pattern{x,y}` | Quantifier x..y | +| `pattern{,y}` | Quantifier 0..y | + +**Grep** + +| Command | Param | Description | +| ------- | ----------------- | -------------- | +| `grep` | `pattern file` | Extended Regex | +| | `-E pattern file` | Extended Regex | +| | `-v pattern file` | Invert match | +| | `-w pattern file` | Word match | +| | `-i pattern file` | Ignore case | + + +## Stream redirection +- `>` overwrite +- `>>` append + +| Character | Description | +| --------------------- | ------------------------------- | +| `> file` or `1> file` | STDOUT to file | +| `< file` | Datei to STDIN | +| `2> file` | STDERR to file | +| `2>&1` | STDERR to same target as STDOUT | +| `> file 2>&1` | STDOUT and STDERR to file | + +# Disk and File System Management + +## General Disk Manipulation (non-LVM) +Creating physical partitions is **not required**! You can create PVs directly! + +| Command | Description | +| ------------------------------------------- | ------------------------------------ | +| `fdisk -l` | List physical disks and partitions | +| `fdisk /dev/sdb`
`n` | Create new partition | +| `fdisk /dev/sdb`
`t`
`8e` | Change partition type to *Linux LVM* | +| `mkfs.xfs /dev/myVG/myVol` | Format LV with XFS | +| `mkfs.ext4 -f /dev/myVG/myVol` | Format LV with EXT4 (overwrite) | +| `blkid /dev/myVG/myVol` | Show UUID and formatting of volume | +| `mount` | Show what is mounted where | +| `mount -t ext4 /dev/myVG/myVol /mountpoint` | Mount LV to /mountpoint | +| `umount /dev/myVG/myVol` | Unmount LV from /mountpoint | +| `umount /mountpoint` | Unmount LV from /mountpoint | +| `mount -a` | Mount as configured in /etc/fstab | +| `df` | Show disk usage | +| `xfs_growfs /dev/myVG/myVol` | Resize xfs filesystem | +| `resize2fs /dev/myVG/myVol` | Resize ext3/4 filesystem | + +## LVM +| Item | Description | +| --------------- | --------------------------------- | +| Physical Volume | Representation of physical volume | +| Volume Group | Group of physical volumes | +| Logical Volume | Volumes placed on volume group | + +**Physical Volume Commands** + +| Command | Description | +| -------------------- | ------------------------------------------- | +| `pvs` | Show PVs | +| `pvdisplay` | Show detailed PV information | +| `pvcreate /dev/sdb1` | Initialize physical volume for use with LVM | +| `pvs -o+pv_used` | Show usage of PVs | +| `pvmove /dev/sdb1` | Move contents of PV to other PVs of VG | +| `pvremove /dev/sdb1` | Remove PV | + +**Volume Group Commands** + +| Command | Description | +| ------------------------- | ----------------------------------- | +| `vgs` | Show VGs | +| `vgdisplay` | Show detailed VG information | +| `vgcreate myVG /dev/sda1` | Create new VG | +| `vgextend myVG /dev/sdb1` | Add PV to VG | +| `vgreduce myVG /dev/sdb1` | Remove PV from VG (`pvmove` first!) | +| `vgremove myVG` | Remove VG | + +**Logical Volume Commands** + +| Command | Description | +| -------------------------------------------- | --------------------------------------- | +| `lvs` | Show LVs | +| `lvdisplay` | Show detailed LV information | +| `lvcreate -n myVol -L 3G myVG` | Create LV | +| `lvextend -L +10G /dev/myVG/myVol -r` | Expand LV by 10GB and resize filesystem | +| `lvextend -L 10G /dev/myVG/myVol --resizefs` | Expand LV to 10GB and resize filesystem | +| `lvextend /dev/myVG/myVol /dev/sdb1` | Expand LV by PV's size | +| `lvextend -l +100%FREE /dev/myVG/myVol` | Expand LV to 100% available VG size | +| `lvreduce -L -10G /dev/myVG/myVol` | Reduce LV by 10GB | +| `lvremove /dev/myVG/myVol` | Remove logical volume | + +# Automatic mounting (/etc/fstab) +Example: + +| file system | mount point | type | option | dump | pass | +| ----------------------------------------- | ----------- | ---- | -------------------------------- | ---- | ---- | +| /dev/sdb1 | /myDir1 | ext4 | defaults | 0 | 0 | +| /dev/mapper/myVG-myVol | /myDir2 | xfs | defaults | 0 | 0 | +| UUID=a924e3de-0414-4228-86bf-b65a4c8ff8ab | /myDir3 | xfs | defaults | 0 | 0 | +| /dev/mapper/myVG-swap | swap | swap | defaults | 0 | 0 | +| 192.168.1.1:/shared | /targetdir | nfs | async | 0 | 0 | +| //server/share | /targetdir | cifs | credentials=/root/cifs/.username | 0 | 0 | + +Column **dump** configures file system for backup with *dump* (program). + +Column **pass** configures order of file system check during boot. `0` means no check. + +# Text Readers & Editors +## Less +| Command | Description | +| ------------------- | ------------------------------- | +| `q` | Quit | +| `R` | Refresh content | +| `F` | Auto scroll | +| `g number` | Go to line | +| `m lowercaseLetter` | Mark line | +| `' lowercaseLetter` | Go to mark | +| `/pattern` | Search forward | +| `?pattern` | Search backward | +| `n` | Next search result | +| `N` | Last search result | +| `ESC u` | Remove highlighting from search | + +## VI +**Editing** + +To leave editing mode press `ESC`. + +| Command | Description | +| --------- | --------------------- | +| `i` | insert before cursor | +| `a` | insert after cursor | +| `A` | insert at end of line | +| `o` | new line below | +| `O` | new line above | +| `u` | undo | +| `.` | repeat last command | +| `yy` | copy line | +| `5yy` | copy 5 lines | +| `p` | paste below | +| `P` | paste above | +| `x` | delete character | +| `5x` | delete 5 characters | +| `dd` | delete line | +| `5dd` | delete 5 lines | +| `:10,20d` | delete lines 10-20 | +| `d0` | delete to line begin | +| `d$` | delete to line end | + +**Navigation** + +Navigate as usual with `arrow keys`, `home`, `end`, `pg up`, `pg dn`. + +| Command | Description | +| ------- | ---------------------- | +| `5G` | go to line 5 | +| `H` | go to top of screen | +| `M` | go to middle of screen | +| `L` | go to end of screen | +| `5w` | move over 7 words | +| `5b` | move back 5 words | + +**Other** + +| Command | Description | +| ----------- | ---------------------------- | +| `/foo` | search forward | +| `?foo` | search backwards | +| `n` | repeat search | +| `:w` | save | +| `:q` | close | +| `:wq` | save and close | +| `:q!` | close without saving | +| `:!command` | run bash command | +| `:r foo` | read file foo into this file | + + +# User and Group Management +**UID** + +| UID | Type | +| ----- | -------------- | +| <1000 | system account | +| >1000 | user account | + +**User Database** + +User info without passwords is stored in `/etc/passwd`. + +| username | PW | UID | GID | Kommentar | HOME | SHELL | +| -------- | --- | ---- | ---- | --------- | ----------- | --------- | +| hfict | x | 1000 | 1000 | | /home/hfict | /bin/bash | + +**Group Database** + +Group info with secondary group members are stored in `/etc/group`. +Primary group members are identified by GID in user database. + +| groupname | PW | GID | Users | +| --------- | --- | --- | ----------- | +| wheel | x | 10 | hfict,user2 | + +**Password Database** + +Hashed user passwords are stored in `/etc/shadow`. +Password encryption is configured in `/etc/login.defs`. + +| username | PW | Last PW change | Minimum | Maximum | Warn | Inactive | Expire | +| -------- | ------ | -------------- | ------- | ------- | ---- | -------- | ------ | +| hfict | [hash] | 17803 | 0 | 99999 | 7 | | | + +PW: +- `[hash]` Verschlüsseltest Passwort +- `![hash]` Account Gesperrt +- `!!` oder `*` Account gesperrt, kein Passwort gesetzt + +**Commands** + +| Command | Param | Beschreibung | +| ---------- | ---------------------------------------------- | -------------------------------------------------------- | +| `id` | `username` | ID und Gruppen eines Benutzers anzeigen | +| `who` | | Angemeldete Benutzer anzeigen | +| `last` | | Letzte Logins anzeigen | +| `lastb` | | Letzte fehlgeschlagene Logins anzeigen | +| `sudo` | `-u user command` | Befehl mit Rechten von user ausführen (Default ist root) | +| | `-i` oder `su -` | Shell mit root Rechten | +| `su` | | Shell als root (non-login shell) | +| | `-` | Shell als root (login shell) | +| | `- user` | Shell als user | +| `useradd` | ` -u 2101 -g primarygroup -c comment username` | Benutzer anlegen (ohne `-g` wird neue Gruppe erstellt) | +| `usermod` | `-G group1,group2` | Sekundärgruppen definieren (überschreiben) | +| | `-aG group,group2` | Sekundärgruppen hinzufügen | +| | `-l username` | Benutzernamen ändern | +| | `-L` | Lock Account | +| | `-U` | Unlock Account | +| | `-s shellpath` | Shell ändern | +| `userdel` | `-r username` | Benutzer inkl. Home und Mail-Spool löschen | +| `passwd` | `username` | Passwort ändern (interaktiv) | +| `groupadd` | `groupname` | Gruppe anlegen (Optional mit `-g` GID setzen) | +| `groupdel` | `groupname` | Gruppe löschen | + +# File System Permissions +Permissions can be set on: +- User (owner) +- Group (owner) +- Others + +Only root can change *User*. *User* can change *Group*. + +Basic permissions (Add binary flags to combine): + +| Char | Binary Flag | Permission | +| ---- | ----------- | ---------- | +| r | 4 | read | +| w | 2 | write | +| x | 1 | execute | + +Advanced permissions (place in front of basic permissions: `chmod 1777 shared`).: + +| Char | Binary Flag | Name | Description | +| ----- | ----------- | ---------- | -------------------------------------------------------------------------- | +| t / T | 1 | Sticky Bit | *Others* can't delete content (only applicable for directories) | +| s / S | 2 | SGID-Bit | File: run with permissions of *Group*
Dir: New elements inherit *Group* | +| s / S | 4 | SUID-Bit | File is run with permissions of *User* (only applicable for files) | + +Advanced permissions replace the **x** when using `ls -l`. Lower case if **x** is set, upper case if **x** is not set. + +*Read* permission on a directory only allows to see the directory itself but not it's contents. Use *execute* permission to show contents. + +**Commands** + +| Command | Param | Beschreibung | +| --------- | ------------------------ | ------------------------------------------------- | +| `chmod` | `-R [uog] dirname` | Set permissions recursively using binary flags | +| | `+[suog] filename` | Add permissions using binary flags | +| | `-[suog] filename` | Remove permissions using binary flags | +| | `u+x filename` | Add *execute* permission for *User* | +| | `g+wx filename` | Add *write* and *execute* permissions for *Group* | +| | `o-r filename` | Remove *read* permission for *Others* | +| `chown` | `-R user:group filename` | Change owner (*User* & *Group*) recursively | +| | `user filename` | Change owner (*User*) | +| | `:group filename` | Change owner (*Group*) | +| `chgroup` | `group filename` | Change owner (*Group*) | + +# SSH +Configuration is done in `/etc/ssh/sshd_config`. + +Reload SSH service with `systemctl reload sshd` to apply changes! + +DenyUsers, AllowUsers, DenyGroups, AllowGroups override each other and are applied in the order listed above. + +| Config | Option | Description | +| ----------------- | ------------------ | --------------------------------------------- | +| `PermitRootLogin` | `no` | Deny root to login via SSH | +| | `yes` | Allow root to login via SSH | +| | `without-password` | Allow only with private/public key auth | +| `AllowUsers` | `user1 user2` | Allow only user1 and user2 | +| `DenyUsers` | `user1 user2` | Allow all users but user1 and user2 | +| `AllowGroups` | `group1 group2` | Allow only users from specified groups | +| `DenyGroups` | `group1 group2` | Allow all users but those in specified groups | + +# IPv6 (disable) +Change the *grub* config `/etc/default/grub` to disalbe IPv6. +1. Add `ipv6.disable=1` to the `GRUB_CMDLINE_LINUX` property. + e.g. `GRUB_CMDLINE_LINUX="ipv6.disalbe=1 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap biosdevname=0 net.ifnames=0 rhgb quiet"` +2. Recreate grub config with `grub2-mkconfig -o /boot/grub2/grub.cfg` +3. Reboot the system with `init 6` or `shutdown -r now` + +# Cronjobs +**Crontab** + +Cronjobs are configured in crontab files. Do not edit these files directly. Use `crontab -e` instead. This runs all required actions to activate a cronjob after saving the edited crontab. The locations are as follows: +- `/var/spool/cron/username` user specific +- `/etc/crontab` system wide crontab + +The format of the files is (user specific crontabs **do not** have the column *user-name*): +``` +Example of job definition: +.---------------- minute (0 - 59 | */5 [every 5 minutes]) +| .------------- hour (0 - 23) +| | .---------- day of month (1 - 31) +| | | .------- month (1 - 12) OR jan,feb,mar,apr ... +| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat +| | | | | +* * * * * user-name command to be executed +``` + +| Command | Description | +| -------------------------------- | ----------------------------- | +| `rpm -q cronie` | Check if package is installed | +| `systemctl status crond.service` | Check if service is running | +| `crontab -l` | List current users crontab | +| `crontab -e` | Edit current users crontab | +| `crontab -e -u username` | Edit specific users crontab | +| `crontab -r` | Remove current users crontab | + +**Script folders** + +Scripts in one of the following directories will be executed at the intervall specified by the directory's name: +- `/etc/cron.hourly` +- `/etc/cron.daily` +- `/etc/cron.weekly` +- `/etc/cron.monthly` + +**Allow / Deny usage** + +Add user names one per line to the following files: +- `/etc/cron.allow` Whitelist +- `/etc/cron.deny` Blacklist + +If none of the files exists, all users are allowed. + +**Logs and Results** + +Execution of cronjobs is logged in `/var/log/cron`. +Results are sent to the users mail `/var/spool/mail/username`. + +# Package Management +## RPM +| Command | Description | +| ------------------------ | ----------------------------------------- | +| `rpm -i rpmfile|rpmurl` | Install package | +| `rpm -e packagename` | Uninstall package | +| `rpm -q packagename` | Check if package is installed | +| `rpm -ql packagename` | List files in a package | +| `rpm -qa` | List all installed packages | +| `rpm -qf /path/to/file` | Get package that installed the file | +| `rpm -qf $(which )` | Get package that installed the executable | +| `rpm -V packagename` | Validate installed package | + +## YUM +YUM is configured in `/etc/yum.conf` + +Repos are configured in `/etc/yum.repos.d/` + +Log is in `/var/log/yum.log` + +| Command | Description | +| ------------------------------------- | ----------------------------------------- | +| `yum install packagename [-y]` | Install package (`-y` no confirm message) | +| `yum remove packagename` | Uninstall package | +| `yum update` | Update all installed packages | +| `yum update packagename` | Update specific package | +| `yum update pattern*` | Update packages using wildcard | +| `yum info packagename` | Get detailed info about package | +| `yum list packagename` | List installed and available packages | +| `yum search searchstring` | search for a package (name & summary) | +| `yum search all searchstring` | search for a package (all infos) | +| `yum deplist packagename` | List dependencies of a package | +| `yum reinstall packagename` | Reinstall (corrupted) package | +| `yumdownloader --resolve packagename` | Download rpm package with dependencies | + +# Services (systemd) +| Command | Description | +| ------------------------------ | ------------------------- | +| `systemctl list-dependencies` | Show Services | +| `systemctl start servicename` | Start service | +| `systemctl enable servicename` | Start service with system | +| `systemctl status servicename` | Show service status | + +# NFS +**Installation (Client & Server)** +```bash +yum install nfs-utils +``` + +**Server** +Configuration is done in `/etc/exports`. + +```bash +systemctl start nfs-server.service # Start service +systemctl enable nfs-server.service # Start service at system start +vi /etc/exports # Change config +exportfs -fa # Reload config (server) +``` + +In `/etc/exports` create a new line for every directory you want to share in the following format: + +` () [()]` + +- `` Directory to export +- `` Client to allow access (by FQDN, hostname, ip, ip networks `192.168.0.0/28`) +- `` Comma delimited configuration options + - `rw` Read/Write access + - `ro` **default** Read-only access + - `async` Aynchronous write (faster but can corrupt files) + - `root_squash` **default** Anfragen von root werden anonymous zugewiesen + - `no_root_squash` Anfragen von root werden root zugewiesen + - `all_squash` Alle Anfragen werden anonymous zugewiesen + +Examples: +``` +/ master(rw) trusty(rw,no_root_squash) +/projects proj*.local.domain(rw) +/usr *.local.domain(ro) +/home/joe pc001(rw,all_squash,anonuid=150,anongid=100) +/pub *(ro,insecure,all_squash) +/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw) +/build buildhost[0-9].local.domain(rw) +``` + +**Client** + +```bash +showmount -e 192.168.1.1 # Show NFS shares +mkdir /targetdir # Create mountpoint +mount -t nfs 192.168.1.1:/shared /targetdir # Mount manually +umount /targetdir # Unmount manually +vi /etc/fstab # Mount on system start +mount -a # Test fstab +init 0 # Auto mount +``` + +Example of `/etc/fstab`: +``` +192.168.1.1:/shared /targetdir nfs async 0 0 +``` + +# Samba +**Server** + +Configuration is done in `/etc/samba/smb.conf`. + +Local accounts must be registered with Samba using `smbpasswd`. +Enter the same password as for the local account and add `unix password sync = yes` to `/etc/samba/smb.conf`. Then it should be synced automatically when you change it with `passwd`. + +```bash +yum install samba samba-client samba-common # Samba installation +systemctl start smb # Start service +systemctl enable smb # Start service on system start +vi /etc/samba/smb.conf # Change config +testparm # Check if config is ok +systemctl restart smb # Reload config +smbpasswd -a username # Register user with samba +``` + +Example of `/etc/samba/smb.conf`: +```ini +[global] + workgroup = WORKGROUP # workgroup of smb server + netbios name = centos # name of smb server + security = user # security mode (user / ads / domain) + unix password sync = yes # sync unix password with smb password + invalid user = root bin daemon # deny access globally (config in share section overrides this) + +[Transfer] # name of share + path = /transfer # path of directory to be shared + comment = File transfer # description + read only = no # access permissions + guest ok = no # allow guest access (no password) + browsable = yes # visible or hidden? + valid users = username @groupname # allow user/group to access the share +``` + +The special `[homes]` section automatically shares the users home directory under the following conditions: +- A users tries to access a share with the name of his user account +- There is no explicit section for this share in `smb.conf` +- The user account exists in `/etc/passwd` + +If the path is not defined in the section, the home path of the user in `/etc/passwd` is used. +The `browsable` options has a different meaning in this section and specifies wheter the personal share should be listed. The usual `browsable` option is inherited from the `[global]` section. +You can use variables to change the path for example: +- `%U` current user name +- `%H` current users home directory + +Example: +```ini +[homes] + browsable = no + writable = yes + path = %H/smb +``` + +**Client** + +```bash +yum install samba-client cifs-utils # Install client and tools +smbclient -L //server # Show SMB shares +mkdir /targetdir # Create mountpoint +mount.cifs -o username=jenkins //server/james /mountpoint # Mount manually +umount.cifs /mountpoint # Unmount manually +vi /etc/fstab # Mount on system start +vi /root/cifs/.username # Create credential file +mount -a # Test fstab +init 0 # Auto mount +``` + +Example for `/etc/fstab`: +``` +//server/share /targetdir cifs credentials=/root/cifs/.username 0 0 +``` + +Example for `/root/cifs/.username`: +```ini +username=username +password=password +``` + +# FTP +Configuration is done in `/etc/vsftpd/vsftpd.conf` + +Example: +```ini +anonymous_enable=NO +local_enable=YES +write_enable=YES +local_umask=022 +dirmessage_enable=YES +xferlog_enable=YES +connect_from_port_20=YES +xferlog_std_format=YES +listen=NO +listen_ipv6=YES +pam_service_name=vsftpd +tcp_wrappers=YES +use_localtime=YES +dirlist_enable=YES +pasv_enable=YES +pasv_min_port=41361 +pasv_max_port=65534 +pasv_address=192.168.1.10 +``` + +```bash +yum install vsftpd ftp # Install server and client +systemctl start vsftpd # Start service +systemctl enable vsftpd # Start service on system start +vi /etc/vsftp/vsftpd.conf # Change config +systemctl restart vsftpd # Load modified config +``` + +# MySQL Server +```bash +yum install mariadb-server # Install server +systemctl start mariadb # Start service +systemctl enable mariadb # Start service on system start +mysql_secure_installation # Run security wizard +mysql -u root -p # Connect to MySQL +``` + +# Other +Stuff probably relevant for the exam. + +Exam result file: `/sbin/result` + +```bash +useradd username [-G wheel] # add user and allow sudo +usermod -aG wheel username # allow sudo for existing user +sudo -i # enter interactive root session +yum install man-pages # install man pages +timedatectl set-timezone Europe/Zurich # change time zone +timedatectl set-local-rtc 0 # set RTC to use UTC +yum check-update # check for updates +yum update # install all available updates +localectl # show locale configuration +localectl list-keymaps | grep ch # show available keymaps +localectl set-keymap ch # set keymap to ch (doesn't affect ssh session) +localectl set-x11-keymap ch # set keymap to ch (doesn't affect ssh session) +``` diff --git a/ubuntu_cheatsheet.md b/ubuntu_cheatsheet.md deleted file mode 100644 index 8e4e41b772b303fe5e3e49945c3e7548507f2c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38938 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 z z(-fC60g-jBy%}0MmVx>kDYEvALVn5{AnLLQ2H34W>euSrDc%$lZdLXWwr3DNJf&>Q z0wsz+gOE=zVnF*S3@tmvOP<@A4m^zFH{73^rB_LRkO|$BCQ*0>okAFNclLH8KlaRw zMy7k1(k+`MDN}=rgeRyvSU3CJ$VAZ5riPk)nS6IM7Ujrq9?SlfePz~`cG)UIg*Nzp zz|j<8qS;)=6MejufR;5&T6>MOqK4l1q_w_*n*q5uX_BsRDPYoBE%v_Ku4fn#?$1sX zH%7S2Dpi(v^qp=SZ_#f!^=$9GazWGcjZwRe8(~grQ(y6uiC741Bd$ztxAne=FC+X0 zS^t4ZJI--%`fRnq6>+1k@3zeY$p+-Eq5IF?3NRI<`O6xxlG^K0))t@m(qKT`ocM7} zFkZ71T~BZo*VtoPQ^umKv+C{%=fqtmwftVmodVLdjA1nWaqaGywAmT^&IUOYY%Z~9 zZ!oj8lv=dvf$ZTd&BH~&W4qRgzOiMyo5~TeX-aAH4Rx|VO1rN7LxI&)a^l9J;AGav z$Cfyf!KoGR1`bs)Np;QdA5#Ywc2P>7$+vGOCI`PTbVGl{J!AduEFni@zvQ~g_|9F_ z9wR<|2fUbw@A*#+9FB5%TVC9YvAe_mdNSdKZxp4{54_u&PmRLjkPm#&Kg54HnqkfZ z4|(la_%>X7&#zk=s@C8cjLC^$WHD(K(#XzsSL@#Xf!ZuVXd;16 z-n8MfXwthNB|UntFX=qCbN#njz>trQ1Q&@dfLPRXXJuG|;am5^q z7gqcZL6p!j26cx2$$w%S6XaOSu?Lgiz)M@$B1uAJ=UtmZgz8WkqFI zj?ASNVS6Nmft3qm#xRbc*SB@&USz@*M8mCcA+&sryPl8KA)$>rzCq#Pm7GJYl4O?LK zmZ$z`l((>nFeyX0MLqxay{>fN>c(C;|9A9>K>d=}A*m$QmG9D~+Uf|%5i6Vr_Pc4q zr_Iefl=6EFOfn^|QZfX-mhPiLQ{H;(t+g1O5tp4Jkh)WlSciN2C8Br@u=$3Qd(-8-~52=;j~)j%y_NC?k~sRf=R7t1~SgV z#NJDt$&Qgxa6s8kc4$|?8j5Aw1=ND7hbFJOTNpI`N1v3adL$cT%UqWgckBh}NXk5F zlvizU8;lt-XOQ%Gxz7JJAu*7H8QSk=*GqVX)ul1`QChA-AR(gC9H-fR)+@xJlVP3H zuf}}{>oha0R=aPS%C>a}Vy}DOY~NQQs&zq4Nt`N9CR|@^~oA{Nz+%sW=g{C3c=gV z1ZUqVOpzwr#;X|!mOSHm9(YFDSMxX+b9k*obhZ4&-r`o$I^N;-plgd4eA{OkR9nn< z@P%pH(yT3{|4ffz2}tDeA}@4*<{63rH;*KZ+Vg>2hpby&8a|wBtwQCSYgi>Vs|&mJ6t&v$37V4ecxBI^Qe}eXRe=( z#y;x!P7ZD8i*TNvGrn?xVa$#u)c)pdF!-obT=Z1i?X+hb%&TR2H-qZy;){pOKD9QF z__oPzhde9|xXUl)8G%LKwIKO8MuSWOF?h$~n#08PP2q#K8@I?3oSFD!F`G`neAa1U z$Eu!R{embko(o;Aq37$w?V@QXKXvg`6H{mxYhoS~jK}`sG5JAFUz)eQvxBNjr%v!? z(<)Y%R_v3?aSGH~3*Mar=UT$L-ZEuM=nabj2lizTAde`ZyhsW&NT7A;M^e$TofQpna4YSlL&ud-Ntd)p zR#9}6>AC^V339fBDJts(dcKbyA>1x8ej;O=Y+gE2c8^RfJV4xYYNbV5x-JG@Fo zf&3$n1kx{g6b$vOaSOw=XysqS?BRuo%j{zE&~}h1h*w2D!r&^wz&#?Kj??zQeU&LK zz!N1%!ClMBvvW_kNLT{*b>MIj~ph6)AdM<)ygwg(} z12-a`eXy6nFQP+dMz|gwzX;T+dBv6T(dYq6k{ZQPV=jl~n(tCWg6AHtkrtEnUU9D) z;@4MCZPW0cj`^nI{9u_L)9iS|#u?Rv5Ri(ydl(Gx@*c3u%Lu5=%ZbZq#yV2AS$t~S zS3=7o&&#ZxFUapY>K;2w3}bmIW`3>73kM$*veCVhBzHv-G^*O(8Sa2Qk4-WX`26@O zQK;oKZAmZoGjrZimtya`(>#l6Qe)$jR&E?B76EidDl9&g)$^Fxd z>wkdW{36}Ge0}|&!8qqH*#8MN?`JjZ<=-&HEsR=sPPqgAhLxB5E~$C2@-GD~@b}L? zFtzNZV)jyP3oCyEjDDs}UB;mV#ApAfl>J3m`>$wufMyg%%Y(pqb(ajh3$h)Yfp?*Q zy`a!ta`i3*tZ+izB}wl>xeDj;F@{IMYO3nLFm>kQyLe>3v_ zM!Wz?DWFt^r6>l{grYKt8|qjSqbj4G`vZ{bMNVQ6kQwtrAFj;sL_i28{s$5iGl-f3 z)%Y$-{+|(8AYiW^Dxh13qQd43`~#%SW&tvx>Jk5K1JF6xhuG}G#sp;s?(tu3jErDF zCi=UL33iyU&tG*Jp-@0Q|C^1GnGs;s{p!ca3JXj7yA1+drC)7eR#?u>-)%50?yoi` z2#}@y4;zf}_p2W>^bbEUmY%mG#uYN#QcVK?}Ze#i5{ILKW%|HA=us9CC)n$TZy8g|^ z0!s`2n+*y}h5DO~4VFyzR~rNb{9gQSV`BW{IG_+%9@by$0`u>Wu|SyF{-_K5-28DI z5Gb(3@LPKjR<=Lp3lQk}4?idf`p0oVnf^R~PzZn`|JDa92%xzBY6G!=S^w;V4Y*r= z^@eFo^MwYY7HA{{375et*^lv;1-Xz`%6={TzTHz(f1D zF#}{>SOR3&=dXJo3<3SaeFXmFynvxBFyZ_!b(ug=;Qs@^*??|;pBsSRALpJ4%<{*x zi3tco^7}Oc9ua@s`%DnXpLHQXFMp54#!3^Q6I%iKyn!DJLnmF>^OWH{unKTeU