forked from andonome/lk
		
	Merge branch 'dev' into vhs
This commit is contained in:
		
							
								
								
									
										12
									
								
								basics/Joyous_ASCII.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								basics/Joyous_ASCII.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| ``` | ||||
							
								
								
									
										114
									
								
								basics/cron.md
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								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 | ||||
|  | ||||
| ``` | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										9
									
								
								data/git/git_secret.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								data/git/git_secret.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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. | ||||
							
								
								
									
										34
									
								
								data/git/subtree.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								data/git/subtree.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| ``` | ||||
|  | ||||
| @@ -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          | | ||||
| |:--------------------------------|:------------:| | ||||
|   | ||||
							
								
								
									
										38
									
								
								data/sc-im/sample.sc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								data/sc-im/sample.sc
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| @@ -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 | ||||
| ``` | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
| ``` | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user