adds text manipulation exercises
This commit is contained in:
parent
fe76dac62a
commit
688bcab1b7
|
@ -0,0 +1,35 @@
|
|||
# Encapsulation preface
|
||||
|
||||
TODO - outline users permissions
|
||||
|
||||
# `chroot`
|
||||
|
||||
TODO - ultra basic chroot creation
|
||||
|
||||
## With a custom script
|
||||
|
||||
# `debootstrap`
|
||||
|
||||
TODO - practical root build
|
||||
|
||||
# Using `chroot` to fix a system
|
||||
|
||||
## `schroot`
|
||||
|
||||
# `systemd-nspawn`
|
||||
|
||||
## Foreign images
|
||||
|
||||
## Creating your own images with `debos`
|
||||
|
||||
# links
|
||||
|
||||
* [hub](https://hub.nspawn.org/images/)
|
||||
* [tutorial](https://blog.selectel.com/systemd-containers-introduction-systemd-nspawn/)
|
||||
* [docker nspawn](https://seanmcgary.com/posts/run-docker-containers-with-systemd-nspawn)
|
||||
* [debian](https://wiki.debian.org/nspawn)
|
||||
* [arch](https://wiki.archlinux.org/title/systemd-nspawn#Use_a_%22macvlan%22_or_%22ipvlan%22_interface)
|
||||
* [systemd-sysext](https://0pointer.net/blog/testing-my-system-code-in-usr-without-modifying-usr.html)
|
||||
* [schroot](https://wiki.debian.org/RichardDarst/Schroot)
|
||||
|
||||
|
|
@ -4,6 +4,7 @@ What happens when we log into a server or when we open up a terminal with `bash`
|
|||
As always the manual can tell us quite a bit.
|
||||
Quite often you'll find a list of configuration files used by a program near the end of the manual.
|
||||
Sometimes not, your millage may vary but here is the files section of the `bash` manual.
|
||||
If you can't find a list of files the program you want to investigate searches for, there are other ways of digging deep into what a program is *doing* but that is for a later date.
|
||||
|
||||
```
|
||||
FILES
|
||||
|
@ -44,6 +45,7 @@ waldek@tester:~$
|
|||
Let's have a look at them one by one.
|
||||
First the `.bash_history`.
|
||||
This contains a history of all the commands I ran on this computer!
|
||||
The arrow keys navigate his file when you search through your history.
|
||||
Quite handy for when we forget how to do something but we know we've done it before.
|
||||
You can use `grep` to search the file but there is also a shortcut you can use, `ctrl-r`.
|
||||
|
||||
|
@ -97,6 +99,7 @@ waldek@tester:~$
|
|||
Aha!
|
||||
The comment on the first line mentions *non-login shells* so there must be a difference!
|
||||
This is a very important configuration file and I urge you to read it, especially the comments.
|
||||
Notice how the length of your history file is set in here?
|
||||
What kind of content is in this file?
|
||||
|
||||
Last but not least `.profile`.
|
||||
|
@ -200,7 +203,6 @@ A quick look at the `man su` tells us that.
|
|||
o changes to the target user's home directory
|
||||
|
||||
o sets argv[0] of the shell to '-' in order to make the shell a login shell
|
||||
|
||||
```
|
||||
|
||||
So we can do the following.
|
||||
|
@ -249,7 +251,7 @@ waldek@tester:~$
|
|||
```
|
||||
|
||||
What about `ssh` connections?
|
||||
I'm running the server on port 2222 because it's a contained with host networking.
|
||||
I'm running the server on port 2222 because it's a container with host networking.
|
||||
It's a bit too early to go into too much detail but by then end of the course you'll fully understand what's happening!
|
||||
|
||||
```
|
||||
|
@ -304,15 +306,15 @@ waldek@tester:~$ cat .bashrc .bash_logout .profile
|
|||
waldek@tester:~$
|
||||
```
|
||||
|
||||
We don't see any differences but our shell is *less* powerful.
|
||||
For example, autocomplete does not work anymore on things like `systemctl`.
|
||||
We don't see any big differences but our shell is *less* powerful.
|
||||
For example, autocomplete does not work anymore on things like `systemctl` or `apt`.
|
||||
We now have a `bash` shell that has only sourced actual content from the following files.
|
||||
|
||||
* `/etc/profile`
|
||||
* `/etc/bash.bashrc`
|
||||
* `/etc/bash.bash.logout` if it exists
|
||||
|
||||
As these are system files we can only edit them as `root`.
|
||||
As these are system files we can only edit them as `root` or via `sudo`.
|
||||
I went a head and added a comment `#` in front of every line.
|
||||
When I now log in on a tty I get the following.
|
||||
|
||||
|
@ -367,7 +369,7 @@ $PS1 $PS2 $PS4
|
|||
```
|
||||
|
||||
Your prompt is defined by the `$PS1` variable.
|
||||
By changing this we can change it's behaviour.
|
||||
By setting this we can change it's behaviour.
|
||||
|
||||
```
|
||||
-bash-5.1$ PS1="helloworld"
|
||||
|
@ -485,6 +487,44 @@ it is 17:06:58
|
|||
waldek@tester:~ ->
|
||||
```
|
||||
|
||||
## Saving our changes
|
||||
|
||||
When you exit your shell, and log back in, you'll notice the prompt is back to normal.
|
||||
If we want to *save* the one we have we need to place it in one of the files that get *sourced* when our session starts.
|
||||
I would recommend you make your changes to the `.bashrc` file and have a `.profile` that sources the `.bashrc` if we run an interactive `bash` shell.
|
||||
You can find some interesting notes [here](https://superuser.com/questions/789448/choosing-between-bashrc-profile-bash-profile-etc).
|
||||
So let's get started!
|
||||
|
||||
```
|
||||
waldek@tester:~ -> tail -n +1 .profile .bashrc # a nice trick to show file content with header ;)
|
||||
==> .profile <==
|
||||
if [ "$BASH" ]; then
|
||||
. ~/.bashrc
|
||||
fi
|
||||
|
||||
==> .bashrc <==
|
||||
PS1="\u@\H:\w -> "
|
||||
echo "sourced"
|
||||
waldek@tester:~ ->
|
||||
```
|
||||
|
||||
I'm writing this documentation on a laptop so it would be nice to see my battery status on the command line.
|
||||
By now you probably guessed it, but the sourced files are scripts so we can use every trick we've learned during our `bash` scripting classes.
|
||||
I'll make a function that prints the status of the battery and will include this function in the prompt.
|
||||
|
||||
```bash
|
||||
function get_battery_status () {
|
||||
status=$(cat /sys/class/power_supply/BAT0/status)
|
||||
echo -e $status # -e for no newline
|
||||
|
||||
}
|
||||
|
||||
PS1="\u@\H:\w [\$(get_battery_status)] -> " # need to escape the $ sign or use single quotes!
|
||||
#PS1='\u@\H:\w [$(get_battery_status)] -> ' # this would work as well.. ah, bash...
|
||||
|
||||
echo "sourced"
|
||||
```
|
||||
|
||||
## Decoding the *base* prompt
|
||||
|
||||
On a modern install your `$PS1` will probably be as one of the two below.
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
market Salad
|
||||
mircocity case
|
||||
diy plantboxes 4
|
||||
market Soup
|
||||
books shell scripting bible
|
||||
books advanced python
|
||||
market Dressings 2
|
||||
mircocity monitor 4
|
||||
diy bulbs 10
|
||||
market Oil 2
|
||||
market Pasta 4
|
||||
diy nails 50
|
||||
market Cheese
|
||||
market Dairy
|
||||
market Condiments
|
||||
diy hose
|
||||
mircocity hdd 6
|
||||
mircocity motherboard
|
||||
mircocity ssd
|
||||
diy hammer
|
||||
mircocity cpu
|
||||
market Sauces 6
|
||||
mircocity tablet
|
||||
market Bread
|
||||
diy bucket
|
||||
market Rice
|
||||
diy drill
|
||||
market Seafood
|
||||
market Meat
|
||||
market Eggs 12
|
||||
diy soil
|
||||
market Cereal
|
||||
mircocity keyboard
|
||||
mircocity ram 4
|
||||
mircocity graphics card
|
||||
diy screws 75
|
|
@ -1808,3 +1808,15 @@ Most of these pipes are not actually *useful* but I hope they illustrate the fle
|
|||
* find valid IP addresses
|
||||
* find all ugly filenames and replace with better names (replace with \_)
|
||||
* regex crossword puzzle
|
||||
|
||||
# Exercise
|
||||
|
||||
Download [this](../assets/shopping_random.list) shopping list and extract me the following.
|
||||
|
||||
1. different shops I need to go to, sorted by amount of items to get at each shop
|
||||
2. list of item of one shop but, ordered by how many times I need the item
|
||||
3. list of only the items I need multiples of
|
||||
4. think of some additional creative was of extracting information or maybe make a few lists yourself
|
||||
|
||||
|
||||
|
||||
|
|
2
links.md
2
links.md
|
@ -28,6 +28,8 @@
|
|||
* big [list](https://training-course-material.com/training/Debian_exercises) of course with exercises
|
||||
* [systemd-boot](https://blobfolio.com/2018/replace-grub2-with-systemd-boot-on-ubuntu-18-04/) tutorial
|
||||
* goaccess script for log [interpretation](https://github.com/stockrt/nginx2goaccess/blob/master/nginx2goaccess.sh)
|
||||
* advanced [htop](https://peteris.rocks/blog/htop/)
|
||||
* systemd [tips and tricks](https://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks/)
|
||||
|
||||
## started
|
||||
|
||||
|
|
Loading…
Reference in New Issue