diff --git a/basics/Joyous_ASCII.md b/basics/Joyous_ASCII.md new file mode 100644 index 0000000..1c99a4e --- /dev/null +++ b/basics/Joyous_ASCII.md @@ -0,0 +1,12 @@ +--- +title: "Joyous ASCII" +tags: [ "fun" ] +--- + +- `asciiquarium` +- `cbonsai -lim "$(fortune)"` + +```bash +cow=$(cowsay -l | sort -R | head -1) +fortune -s | figlet | cowsay -nf $cow | lolcat +``` diff --git a/basics/cron.md b/basics/cron.md index 8c66feb..b749090 100644 --- a/basics/cron.md +++ b/basics/cron.md @@ -2,9 +2,11 @@ title: "cron" tags: [ "Documentation", "Basics" ] --- -# Cron +# Cronie -The crontab program might have various names, like `cronie` or `crond`. +The `cronie` program is also known as `crond`. + +## Install ```bash sudo apt search -n ^cron @@ -17,29 +19,33 @@ sudo systemctl list-unit-files | grep cron sudo systemctl enable --now $NAME ``` -Make a file for your crontab, like this: +## Usage + +Show your current crontab: ```bash -echo '39 */3 * * * /usr/bin/updatedb' > "$USER".cron +crontab -l +``` + +You can put this in a file and edit it: + +```bash +crontab -l > $filename +echo '39 3 */3 * * /bin/tar czf /tmp/etc_backup.tgz /etc/' >> $filename ``` Then apply that crontab: ```bash -crontab "$USER".cron -rm "$USER".cron +crontab $filename +rm $filename ``` + The `cron` program will check your syntax before adding the tab. Your crontab file sits somewhere in `/var/spool/`. Probably in `/var/spool/cron`. -Check how your tab currently looks: - -```bash -crontab -l -``` - ## Syntax `* * * * *` @@ -50,43 +56,61 @@ These five points refer to: So '3pm every Sunday' would be: -> 0 15 * * 7 +`0 15 * * 7` Here 'Sunday' is indicated by "7", and '3pm' is 'the 15th hour'. The minute is '0' (i.e. '0 minutes past three pm'). Doing the same thing, but only in February, would be: -> 0 15 * 2 7 +`0 15 * 2 7` -### Full Paths +### Variables + +`cronie` doesn't know where you live, so to put something in your `$HOME` directory, you have to tell it: -Executing something requires the full path to where it is, so you cannot simply use `apt update -y`, because cron does not know where `apt` is. -Instead, find out where it is: ```bash -type -P apt +echo "HOME=$HOME" > $filename +crontab -l >> $filename +crontab $filename ``` -`/usr/bin/apt` +`cronie` doesn't know where anything lives, including programs. +You can give it your usual `$PATH` variable like this: -Then put that into the crontab: ```bash -sudo crontab -e +echo $PATH > $filename +crontab -l >> $filename +crontab $filename ``` -> 40 */3 * * * /usr/bin/apt update -y +Now instead of doing this -This will run `apt update -y` as root every 3 hours, at 40 minutes past the hour, e.g. 00:40, 03:40, 06:40. +`40 */3 * * * /usr/bin/du -sh $HOME/* | sort -h > $HOME/sum.txt` -## Directories +You can simply do this: + +`40 */3 * * * du -sh $HOME/* | sort -h > $HOME/sum.txt` + +## Run as Root You can execute a script as root by putting it into a directory, instead of in the tab. Look at the available cron directories: ```bash -ls /etc/cron.\* +ls -d /etc/cron.* +``` + +Make a script which runs daily: + +```bash +f=apt_update.sh +echo '#!/bin/bash' > $f +echo 'apt update --yes' >> $f +chmod +x $f +sudo mv $f /etc/cron.daily/ ``` ### Testing with runparts @@ -97,47 +121,9 @@ Run-parts runs all executable scripts in a directory. run-parts /etc/cron.hourly ``` -## Tips - -### Variables - -Add your `$HOME` to crontab to use scripts. -First add `HOME=/home/$USER`, then you can use syntax like this: - -0 * * * * $HOME/.scripts/myScript.sh - -*Remember to test the script by executing that line first*: - -```bash -$HOME/.scripts/myScript.sh -``` -You can also add your regular path to your crontab as a variable (see example below). -If you're using vim as the editor, just run this at the top of your crontab: - -```bash -:r!echo PATH=$PATH -``` +# Troubleshooting ### `date` Commands Cron doesn't understand the `%` sign, so if you want to use `date +%R`, then it should be escaped with a backslash: `date +\%R`. -### File Location - -The crontab files are in `/var/spool/cron/`, so you can backup or restore them. - -# Example - -``` -HOME=/home/user -PATH=/usr/condabin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/user/.local/bin:/home/user/.scripts/:/home/user/.local/bin:/home/user/.scripts/ - -1 0 1 * * /usr/bin/mkdir -p $HOME/arc/$(date +\%Y/\%m) - -18 0 1 */3 * $HOME/.scripts/mail-clean.sh - -* * * * * ping -c 1 home || mail-pull.sh - -50 18 * * * /usr/bin/timeout 30m /usr/bin/syncthing - -``` diff --git a/data/git/basics.md b/data/git/basics.md index 21adc52..f3e8d40 100644 --- a/data/git/basics.md +++ b/data/git/basics.md @@ -92,7 +92,7 @@ A branch is a full copy of the project to test additional ideas. You can make a new branch called 'featurez' like this: ```bash -git branch *featurez* +git branch $FEATURE_BRANCH ``` Have a look at all your branches: @@ -104,19 +104,20 @@ git branch Switch to your new branch: ```bash -git checkout *featurez* +git checkout $FEATURE_BRANCH ``` And if your changes are rubbish, checkout the "master" branch again, then delete "featurez": ```bash -git branch -D *featurez* +git branch -D $FEATURE_BRANCH ``` Or if it's a good branch, push it to the remote: ```bash -git push *origin* *featurez* +remote=origin +git push $remote $FEATURE_BRANCH ``` ## Merging @@ -124,13 +125,13 @@ git push *origin* *featurez* Once you like the feature, merge it into the main branch. Switch to master then merge it: ```bash -git merge *featurez* +git merge $FEATURE_BRANCH ``` -and delete `featurez` as you've already merged it: +And delete the branch, as you've already merged it: ```bash -git branch -d featurez +git branch -d $FEATURE_BRANCH ``` # Subtree @@ -141,34 +142,6 @@ git branch -d featurez git subtree add -P config git@gitlab.com:bindrpg/config.git master ``` -## Pulling a Subtree from an existing git - -The project has subdirectories sub-1,sub-2,sub-3. The first should be its own repository, but should also retain its own history. - -First, we extract its history as an independent item, and make that into a seprate branch. - -```bash -git subtree split --prefix=sub-1 -b sub -``` - -If you want something a few directories deep, you can use `--prefix=sub-1/dir-2/dir-3 - -Then go and create a new git somewhere else: - -```bash -cd ..;mkdir sub-1;cd sub-1;git init --bare -``` - -Then go back to your initial git repo, and do the following: - -git push ../subtest sub:master - -Finally, you can clone this repo from your original. - -```bash -git clone ../subtest -``` - # Tricks ## Delete All History diff --git a/data/git/git_secret.md b/data/git/git_secret.md new file mode 100644 index 0000000..ec1931d --- /dev/null +++ b/data/git/git_secret.md @@ -0,0 +1,9 @@ +--- +title: "git secret" +tags: [ "data", "git" ] +--- + +This utility is largely useless, as it can only identify people by their email. +So if someone has multiple GPG keys associated with one email, the tool will not work. + +Worse than not working, it may 'suddenly' stop working as you try to transfer a secret to someone, who then discovers that `git-secret` requires them to mess about with their GPG keyring in order to use the repository. diff --git a/data/git/subtree.md b/data/git/subtree.md new file mode 100644 index 0000000..d077680 --- /dev/null +++ b/data/git/subtree.md @@ -0,0 +1,34 @@ +--- +title: "git" +tags: [ "Documentation", "data", "git", "subtree" ] +--- + +## Pulling a Subtree from an existing git + +The project has subdirectories `sub-1`, `sub-2`, `sub-3`. +The first should be its own repository, but should also retain its own history. + +First, we extract its history as an independent item, and make that into a seprate branch. + +```bash +git subtree split --prefix=sub-1 -b sub +``` + +If you want something a few directories deep, you can use `--prefix=sub-1/dir-2/dir-3 + +Then go and create a new git somewhere else: + +```bash +cd ..;mkdir sub-1;cd sub-1;git init --bare +``` + +Then go back to your initial git repo, and do the following: + +git push ../subtest sub:master + +Finally, you can clone this repo from your original. + +```bash +git clone ../subtest +``` + diff --git a/data/sc-im.md b/data/sc-im.md index 85da371..2898fdd 100644 --- a/data/sc-im.md +++ b/data/sc-im.md @@ -1,10 +1,47 @@ --- title: "sc-im" -tags: [ "Documentation", "data" ] +tags: [ "Documentation", "TUI", "data" ] --- -# Edit -## Text +- [Sample file](sc-im/sample.sc) + +# Basic Commands + +## See Cells + +Cells are hard to see. +Change this with `:set autowrap`. + +Make `sc-im` always autowrap: + +```bash +mkdir .config/sc-im/bash +echo 'set autowrap' >> .config/sc-im/scimrc +``` + +## Movement + +| Command | Key | +|:------------------------------------|:---:| +| highest part | H | +| lowest part | L | +| top | gg | +| most right. | g$ | +| most left. | g0 | +| insert middle | \ | +| insert left | \> | +| insert right | < | +| to to cell b4 | gb4 | +| see all text in cells | aa | +| format cells so you can see it. | f | +| format wider right | fl | +| format smaller left | fh | +| format wider down | fj | +| format smaller down | fk | + +## Edit + +### Text | Action | Key | |:----------------------|:---:| @@ -13,7 +50,7 @@ tags: [ "Documentation", "data" ] | text (right align) | `|` | | Edit existing text | E | -## Meta Actions +### Meta Actions | Action | Key | |:----------------------|:---:| @@ -46,7 +83,7 @@ tags: [ "Documentation", "data" ] | format smaller down | fk | -## Functions +### Functions | Action | Key | |:--------------------------------|:------------:| @@ -56,7 +93,7 @@ tags: [ "Documentation", "data" ] | minimumof those numbers | =@min(B1:B8) | | multiply C1 to C8 | =@prod(C1:C8)| -## Visual +### Visual | Action | Key | |:--------------------------------|:------------:| diff --git a/data/sc-im/sample.sc b/data/sc-im/sample.sc new file mode 100644 index 0000000..59bb640 --- /dev/null +++ b/data/sc-im/sample.sc @@ -0,0 +1,38 @@ +# This data file was generated by the Spreadsheet Calculator Improvised (sc-im) +# You almost certainly shouldn't edit it. + +newsheet "Sheet1" +movetosheet "Sheet1" +offscr_sc_cols 0 +offscr_sc_rows 0 +nb_frozen_rows 1 +nb_frozen_cols 0 +nb_frozen_screenrows 2 +nb_frozen_screencols 0 +format A 14 1 0 +format B 18 2 0 +format 0 2 +freeze 0 +label A0 = "Food by Weight" +leftstring B0 = "No. Meals" +leftstring A1 = "Ajvar" +let A1 = 5 +let B1 = A1*$A$10 +leftstring A2 = "Apples" +let A2 = 3 +let B2 = A2*$A$10 +leftstring A3 = "Rocket" +let A3 = 0.2 +let B3 = A3*$A$10 +leftstring A4 = "Beli Cheese" +let A4 = 1 +let B4 = A4*$A$10 +leftstring A6 = "Total" +let A6 = @sum(A1:A4) +leftstring B6 = "Total" +let B6 = @sum(B1:B4) +leftstring A7 = "Average" +let A7 = @avg(A1:A4) +leftstring A10 = "Weight of Meal" +let A10 = 0.3 +goto A0 diff --git a/networking/graph-easy.md b/networking/graph-easy.md index d2798f0..f018cc3 100644 --- a/networking/graph-easy.md +++ b/networking/graph-easy.md @@ -39,7 +39,7 @@ Try placing this in a file: > [ One ] { fill: seagreen; color: white; } -- label --> [ Two ] { shape: triangle; } > -> [ One ] => { arrow-style: closed; } [ Three ] +> [ One ] => { arrow-style: closed; } [ Three ] { border-style: none; } > > [ Five ] { fill: maroon; color: yellow; } <=> [ Three ] > @@ -54,3 +54,15 @@ Try placing this in a file: > [ Eight ] .. [ None ] { shape: none; fill: red; color: brown; } > > [ no Network ] --> [ Is there an IP address? ] + +> [ Little Group: o] + + +``` +echo "( EU [ Madrid ] <---> [ K ] {label: Karlsruhe;} + <== ...O\n ..o\n .O\no \nchoo choo ==> [ Cern ] [ Cern ] <== ...O\n ..o\n .O\no \nchoo choo ==> [ Paris ] <...> [ B ] {label: Budapest} ) + [ B ] <---> [ Belgrade ] [ G ] {label: Glasgow; } + <==> [ M ] {label: Manchester }, + [ Madrid ] <---> [ Belgrade ] [ M ] <--> [ London ] <--> [ B ], + [ Belgrade ]" | graph-easy --boxart +``` diff --git a/system/fstab.md b/system/fstab.md index b43b595..01489ab 100644 --- a/system/fstab.md +++ b/system/fstab.md @@ -13,11 +13,14 @@ The ordering of `/etc/fstab` is 5. dump 6. pass -E.g.: -> UUID=877f14e8-4738-46b0-884f-ba330dad1a7d /mnt/biggie ext4 nofail,rw,relatime 0 2 -> -> UUID=B21648C416488AF5 /mnt/share ntfs nofail,rw,nosuid,nodev,user_id=0,group_id=0,allow_other,blksize=4096 0 0 +*Example:* + +``` +UUID=877f14e8-4738-46b0-884f-ba330dad1a7d /mnt/biggie ext4 nofail,rw,relatime 0 2 + +UUID=B21648C416488AF5 /mnt/share ntfs nofail,rw,nosuid,nodev,user_id=0,group_id=0,allow_other,blksize=4096 0 0 +``` ## 5: Dump diff --git a/system/monitoring.md b/system/monitoring.md index b43be36..f9c4555 100644 --- a/system/monitoring.md +++ b/system/monitoring.md @@ -22,3 +22,8 @@ REP=5 free --lohi -g -s $REP | lolcat ``` +Check the next thing cron will do: + +```bash +cronnext /var/spool/cron/$USER -l +``` diff --git a/system/systemd/journal.md b/system/systemd/journal.md index 66cfbff..58517a8 100644 --- a/system/systemd/journal.md +++ b/system/systemd/journal.md @@ -10,6 +10,12 @@ See a running log of all system messages: journalctl -f ``` +Or just one user: + +```bash +journalctl --user -f +``` + Or just one unit (`sshd`): ```bash