Grundlagen

Dateisystem

mounten

https://wiki.ubuntuusers.de/mount/
Gesperrtes Verzeichnis erkennen:

lsof <dir>
fuser -v <dir>
fuser -m <dir> #ermitteln
fuser -k <dir> #benden
...umount

images

kopieren

https://wiki.ubuntuusers.de/cp/

cp -r #Recursiv
cp -a #Archivieren/Attribute behalten
cp -p #Attribute behalten

Pipes und STDOUT/STDERR

Named pipe

#named pipe
mkfifo lala
dmesg > lala
cat lala

STDOUT/STDERR

Suchen und finden

find

https://linuxconfig.org/how-to-explicitly-exclude-directory-from-find-command-s-search~

find -iname *.pdf
find -name *.pdf -exec <Befehl> {} \;
 
#Verzeichnis ausschließen #-o = logisches or
find / ( -path /opt -o -path /proc ) -prune -o -type f
find ~ -path ~/Dokumente -prune -or -path ~/Downloads -prune -or -iname "*.pdf" -print 
 
#neuste Datei finden
find <Verzeichnis> -type f -print0|xargs -0 ls -ltr
find <Verzeichnis> -type f -print0|xargs -0 stat -c %y\ %n|sort
OFS="$IFS";IFS=$'\n';stat --printf="%y %n\n" $(ls -tr $(find . -type f));IFS="$OFS";
#<-- https://stackoverflow.com/a/7771843

grep und reguläre ausdrücke (RegEx)

http://www.linux-praxis.de/linux1/befehle6.html
https://unix.stackexchange.com/questions/267797/non-greedy-grep/267811

#grep mit Perlmodus no-greedy machen:
grep -ioP 'findemich.*?letzteszeichen'
grep -ioP '(?<=href=").*(?=/")' index.html # findlast
grep -ioP '(?<=href=").*?(?=/")' index.html # find first
ZeichenFunktion
. Ein beliebiges Zeichen
* Vorheriges Zeichen darf beliebig oft vorkommen
Zeilenanfang
$ Zeilenende

locate

Dateidatenbank: Schnell aber nicht sekundenaktuell
locate

Rollen / Rechte

Attribute

stat <Dateiname>

user und gruppen

user

useradd
adduser #config in /etc/adduser.conf
usermod

Gruppen

#user zur Gruppe
adduser <username> <groupname>
gpasswd -a user gruppe
 
ls /etc/group /etc/shadow /etc/gshadow
 
#Gruppenpasswort setzen
gpasswd gruppe

Rechte

https://de.wikipedia.org/wiki/Chmod

chmod <option> <modus> <name>
#chmod -R 744 dirme
#statt 774 auch u+rw; g-x;o=rwx; a=rw;
#7=Voll=111;6=rw=110;rx=101;r=100;3=wx=011;2=w=010;1=x=001;Keine=0=000
 
chown -R <user>:<group> file/dir

ACL und Atrribute

ACL

https://wiki.ubuntuusers.de/ACL/

ls -l roman.txt
getfacl roman.txt
setfacl -m u:chef:-,g:lektoren:rw roman.txt # chef entzug lektoren setzen
 
#acl wird von oben nach unten abgearbeitet, erster Eintrag zählt.
#+ bei ls wenn acl aktiv

Atrribute [[https:%%//%%wiki.ubuntuusers.de/chattr/]]

#lesen:
lsattr
 
#setzen:
+ setzen, - löschen ; A(kein zugriff speichern); a(nur anhängen); i(sperren, nicht modifizieren)
chattr -R +i ORDNER

Doku

man pages

https://wiki.ubuntuusers.de/man/
Online-Manpages: http://manpages.ubuntu.com/cgi-bin/search.py

man -k <name> # Suche nach Stichwörten, zB Editor
apropos # = man -k
whereis <name> # Angaben zum Ort des Programms, Libs , man-pages

Pakete und Installation

apt und dpkg

dpkg -l <paketname> Listet alle Dateien des Pakates auf

bash und history

History

history # aufrufen
STRG+R #suchen, <TAB> zum auswählen, Nochmal STRG+R zum weiter suchen
shopt -s histappend # History immer anhängen
export PROMPT_COMMAND='history -a' # history nach jeder promt schreiben

https://www.linux-community.de/ausgaben/linuxuser/2006/07/tricks-fuer-die-bash/

Shortcuts:

https://www.eisscholle.net/spickzettel/linux/bash_shortcuts
https://www.shellbefehle.de/bash-tipps/

ShortcutBefehl
STRG + uAlles VOR dem Cursuor löschen
Strg + kAlles HINTER dem Cursor löschen
Strg + wletztes Wort löschen
strg + lTerminal leeren
strg + dlogout
strg + rhistory suchen
esc + b wort zurück
esc+f wort vor
STRG+A Cursor an den Anfang
STRG+E Cursor ans Ende

history mit Bild up/down durchsuchen:

echo '"\e[5~": history-search-backward' >> /etc/inputrc
echo '"\e[6~": history-search-forward'  >> /etc/inputrc

Scripting

xargs und zeilenweise while

Befehle pro Zeile: -n 1 https://unix.stackexchange.com/questions/7558/execute-a-command-once-per-line-of-piped-input

#Falls xargs Probleme mit Zeilenweise hat:
jdupes -r tmp |grep \(1\)|while read line;do rm "$line" ;done
 
#Link grepen in Dateien runter laden
grep -ioP '(?<=href=").*(?=/")' index.html|xargs -n1 -I {} wget -r http://www.example.com/{}/

awk

https://wiki.ubuntuusers.de/awk/ https://www.grund-wissen.de/linux/shell/sed-und-awk.html

awk -F ":" #<- -F = Seperator , hier : als Worttrenner
#jedes Wort Pro Zeile ist Ansprechbar mit $1..$n
awk '{printf("Eins ist %s und zwei ist %s",$1,$2)}' file.txt # ersten und zweiten treffer pro zeile ausgeben
awk '$4>=5 {printf("Eins ist %s und zwei ist %s",$1,$2)}' file.txt # ersten und zweiten treffer pro zeile ausgeben wenn der 4 treffer größe 5 ist
awk '$1 ~ "bla" | $1 ~ "blub" {printf("Eins ist %s und zwei ist %s",$1,$2)}' file.txt # ersten und zweiten treffer pro zeile ausgeben wen 1 = bla oder blub ist
 
awk 'BEGIN {#TEst am anfang der Ausgabe} {BEfehl 1} {BEfehl2} END {Ende der AUsgabe}'#
awk 'BEGIN {print...} {i++}  END {printf("lala %s",i)}'# Zähler hochzählen und ausgeben
 
awk -v value=1'BEGIN {print...} $1==value{i++}  END {printf("lala %s",i)}'# Zähler hochzählen und ausgeben wenn value = 1
i
 
#In Script auslagern:
#!/usr/bin/awk -f
BEGIN{}#ohne ' !
{}
{}
END{}
 
./myscript.awk -v value="bla" test.txt
 
awk '{$1=""; print $0}' file # Alle Spalten ausser die Erste darstellen
awk '{$NF=""; print $0}' file # Alle Spalten ausser die letzte darstellen
rev file | cut -f2- | rev #Alle Spalten ausser die letzte darstellen

sed

https://tty1.net/sed-tutorium/sed-tutorium.html#sec-erste-schritte-more https://www.thomashertweck.de/sedawk.html https://www.gnu.org/software/sed/manual/html_node/sed-commands-list.html http://mikiwiki.org/wiki/sed https://www.grund-wissen.de/linux/shell/sed-und-awk.html

sed -n 'p' file.txt # -n deaktivie ausgabe, p, zeige puffer an
sed -n '1,4 p' file.txt # zeige Zeile 1-4
sed -n '/erste\|zweite/ p' file.txt # zeige Zeilenb mit´'erste oder zweite
 
sed '/Sys/ d' file.txt # blende alle ZEilen mit Sys aus
sed -n '3~2 p' file.txt # jede zweite ZEile ab 3 beginnend
sed -n '/Muster/,+3 p' file.txt # gibt ZEile Muster + 3 folgende aus
 
sed '' file.txt
sed 's/old/new/' file.txt #ersetze ersten Treffe in Zeile old mit new
sed 's/old/new/g' file.txt #ersetze ALLE Treffe in Zeile old mit new, +Flag i = caseINsenitiv
sed -n 's/old/new/gi p' file.txt# Nur betroffenen Zeile ausgeben
 
sed '<address> i\lala ' file.txt# einfügen vor der ZEile
sed '<address> a\lala ' file.txt# einfügen nach der ZEile
 
sed '/^\s*$/ a\test' file.txt # Füge test nach jeder leerzeile ein
sed -n /suchmust/ =' file.txt # Gibt Zeilenumer aus
 
#x puffer/space tauschen
#h / H hold puffer /Space
#n neue Zeile einlesen
#H an holf puffer anhängen

RegEx

Bash

parralele jobs

for… do ping -c 5 >/dev/null & done wait (jobs -p)

args parse

https://www.poftut.com/how-to-pass-and-parse-linux-bash-script-arguments-and-parameters/ http://openbook.rheinwerk-verlag.de/shell_programmierung/shell_005_007.htm #### Variablen

$?     #Exitstatus vom letzten Befehl
meine="test"    #Eingabe:
$meine          #Ausgabe: 
$1,$2,$3,..$* # Kommandozeilen Parameter, $* alle $1..n auser 0
$0 = Name des programms, 
$# = Anzahl der Parameter
${nn} = Zugriff bei nn > 9   
i=$[^1]
i++ # Arritmetrik in bash (())
let i=\$i + 1
i++ # Arritmetrik in bash (())

getops

Schleifen/Bedingungen

if [ Bedingung ]; then
    Anweisung1
    Anweisung2
    ...
elif [ Bedingung2 ]; then
    Anweisung1
    Anweisung2
    ...
else
    Anweisung1
    Anweisung2
    ...rechts
fi
 
for VAR in WERT1 WERT2 WERT3
do
    Anweisung1
    Anweisung2
done
 
#Oder like c++
for i in `seq 1 10`; do
    rm "file$i"
done
 
#oder
for i in {1..10}; do
    rm "file$i"
done
 
while true;
do
nc -l -p 1234 -n -c /bin/sh;
done
 
while read line; do echo $line; done < a.txt

Arrays

array=("a" "b" "c")
array = ($(find /))
array[3] = "d"
echo "array[2] = "${array[2]}
 
#Anzahl der Elemente
${#array[*]}
 
#Ausgabe aller:
${array[*]} ; #oder; ${array[@]};
 
#Iteration:
for ...in ->
  ${array[*]}  --> Trennung von Leerzeichen
  "${array[*]}" --> EIn grpßer String
  ${array[@]} --> Trennung Leerzeichen
  "${array[@]}" --> durchlaufen Elemente einzeln

variablen zuschneiden

path = "/a/bc/d/e/f"
echo ${path%/*}   #von rechts
echo ${path%%/*}  #von rechts
echo ${path#*/}   #von links
echo ${path##*/}  #von links
test = "/etc/abc/def"
echo ${test#/*/} #-> abc/def

Netzwerk

Basis Befehle

Funktion alt neu
ARP Cache anzeigenarp ip n
IP anzeigen ipconfig ip a, ip link, ip -s-a
Tunnel iptunnel ip tunnel
Ports anzeigen netstat ss
routen anzeigen netstat, routeip route
#Anzeigen ip addr show , ifconfig
ip a s
 
#Addr ändern, ifconfig eth1 <ip/mask>
ip addr add <ip/mask> dev eth1
 
#MAC ändern, ifconfig eth2 hw ether xx:xx:...
ip link set dev eth2 address xx:xx:xx:xx:xx:xx
 
#Schnittstelle an/aus , ifup/down eth0
ip link set dev eth0 up(/down)
    dhclient eth0  # Adresse beziehen
    dhclient -r  # dhcp aus
 
#### Config Datein
 
/etc/network/interfaces
 
    auto eth0 # Einrichtig automatsisch bei Sys start
    iface eth0 inet dhcp # Einrichtunbg über dhcp
 
    iface eth1 static
       address 1.2.3.4
       netmask 255.255.255.0
       gateway 192.168.1.254
 
/etc/systemd/network
 
    [Match]
    Name=eth0
 
    [Network]
    Address = 1.2.3.4/16
    Gateway = 2.3.4.5
    DNS = 3.4.5.6
    #DHCP=yes
 
/etc/hosts
 
    127.0.0.1 localhost
    :: 1      localhost
 
/etc/resolv.conf
 
    nameserver 4.5.6.7
 
#### Routen
 
    ip route show # anzeigen(route)
 
    ip route add 1.2.3.4/16 via 2.3.4.5 dev eth0
    # route aa -net 1.2.3.4/16 gw 2.3.4.5 dev eth0
 
    ip route del 1.2.3.4/16 dev eth0
    # route del -net 1.2.3.4/16
 
    ip route add 0/0 via 2.3.4.5 dev eth0 # gw setzen
    #route add default gw 2.3.4.5
 
#### IPTables
 
<https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules>\
<https://wiki.ubuntuusers.de/iptables2/>\
Auslesen:
 
    iptables -L # ausgeben
 
Richtline:
 
    iptables -P INPUT DROP 
 
    iptables -P OUTPUT ACCEPT 
 
Regel:
 
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##ssh erlaubt
 
    iptables -A OUTPUT -p tcp --dport 21 -j DROP#ftp verboten
 
löschen:
 
    iptables -L --line-numbers
 
    iptables -D INPUT 33#INPUT/OUPUT Zeilennummer
 
#### IPV6
 
    ip -6 neigh
 
#### Tools
 
<https://wiki.ubuntuusers.de/Netzwerk-Monitoring/>\
 
##### nc netcat
 
``` bash
nc -l p #nc -l (listen) pp (portnummer)
nc <adresse/name> <portnummer>#verbinden zu nc
ls|nc -q2 <ip> <port> # pipen
 
#Optionen:
# -v verbose
# -n number/no-dns
# -q [zahl]  ZEitspanne Timeout
 
 
#Portscan mit nc
nc -z -r  -v -i sek <ip> <port - port> <port>#
#-z scan mode (tcp default)
#-i <sek> #intervall
# -r portreinfolge zufällig# sonst groß-> klein
# -u udp
#-w timeout # für udp
 
#Programme auf Server bereit stellen
nc -l -p 1234 -c ls # -c Shell comando
nc -l -p 1234 -e /bin/sh# -e binary
nc -l -p 1234 -e '/bin/ls -alh'# -e binary
 
#Dauerservice
while true;
do
nc -l -p 1234 -n -c /bin/sh;
done
 
# Filetransfer
nc -l -p1234 # LHOST
nc -w 3 192.168.1.1 1234 < file.txt # RHOST

nmap

https://wiki.ubuntuusers.de/nmap/

#Optionen
# -sU # UDP
# -sT # Einfacher TCP Scan
# -p <port - port>

cURL

https://curl.haxx.se/docs/manpage.html
https://ec.haxx.se/http-post.html

curl [url]
curl -v [url] # verbose mit protokoll infos # ">" gesendet INfos, "<" empfangene, "*" Verbindungsinfos
curl -i [url] # include header
curl -d 'param1=yes&param2=we' [url] # post paramater an url senden
curl -d 'param1=yes&param2=we' [url] -G # post paramater an url senden #-G zusätzlich als GET
curl -T [quell-file] [ziel] #-T Dateiupload
curl -F [uploadname=@dir/file] -F button=submit url#form ausfüllen und upload
curl -F 'file=@test.txt'  -F  'dir=./' -F 'binmode=on' -F 'submit=execute' [url] # Upload per POST formular
curl -u user:pwd [url]# ander authentifzierung über curl -v auslesen (WWW-Auth... ) im Header dann zB --digest
curl -e [ref-url] [url]# mit refer
curl -A "Useragent" [url] # mit Useragent
curl -b "para1=bla;para2=blub" [url]# Cookie

wget

https://www.gtkdb.de/index_7_451.html

wget -p # --page-requisites oder -p: # benötigte resourcen datein wie css mit laden
wget -k #--convert-links # konviert die links auf lokal
wget -H #--span-hosts -H, rsourcen von externen Domains runter laden
wget -r #runterladen rekursiv (keine externen Daten)
wget -l #[tiefe]
wget -E # --adjust-extension # Dateiendung hinzufügen
wget -H -E -K # rcursiv runterladen inkl externer hosts
wget -m # mirror (auch an -H und -k denken)
wget -r -A ".jpg" [url] # nur jpg laden
wget -r -R ".jpg" [url] # alles ausser jpg laden
wget -e robots=off# robots.txt ignorieren
wget -U "hierder useragent"
wget  --refer ="meineurl.com"# refer
wget --user="" --password="" [url]# Anmeldung
wget -c [url]# Download fortsetzen
wget --restrict-file-names=windows # filesnames mit in win erlaubten zeichen umwandeln
 
#rate limites/ Anti DDOS
-wait (oder -w) # wartezeit zwischen zwei anfragen
--limit-rate, --quota --random-wait

https://www.labnol.org/software/wget-command-examples/28750/
https://superuser.com/a/854888

#Directory Listing runter laden:
wget -rkpN -e robots=off http://www.example.com/

Seite mit Login runter laden: https://stackoverflow.com/questions/1324421/how-to-get-past-the-login-page-with-wget

script

Sessions mit loggen
script# speichern in Datei truescript script [name]# speichern in [name] script -a [name]# hänge an [name] an script -t 2>lala.timing -a meinscript# Timingdaten werden in lala.timing gespeichert das script in meinscript scriptplay timing.txt script.txt 4#Script wieder darstellen (zB 4x so schnell)

screen

Strg +A +[Befehl]
 
strg a v # Screenversion im Status
strg a c # neues fenster / Terminal
strg a n # fenster wechseln
strg a S # Split horizontal
strg a I # Split vertikal
strg a tab # Fenster wechseln
strg a Q#close split
strg a space# next terminal
strg a backspace# last terminal
strg a [1-9] # sprung zum Terminal
strg a i# infos ausgeben
strg a "#" Fensterliste anzeigen
strg a [nummer] # Fenster anspringen
strg a w# fensterliste unten anzeigen
strg a k # fenster schließen
strg a \ # Session beenden
strg a A#Fenster title ändern
strg a H#Terminal mitloggen
 
strg a d # Session in den Hintergrund
screen -ls # Sessions anzeigen
screen -r # einzelne Session herstellen
screen pid.tty.pid # bestimmte Session her stellen
screen -R name#bestimmte Session herstellen

Config über ~/.screenrc <file plain .screenrc> ##Defs #Scrollbuffer Zeilen defscrollback 1024 ##Keybindings #bind alt neu #Strg a \ weg bind
#strg a k weg bind k ##screens screen -t MeinName htop ``

##### Hardstatus configurieren

<https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes>\ <https://www.gilesorr.com/blog/screen-status-bar.html>\ <https://wiki.archlinux.org/index.php/GNU_Screen>\ <https://blog.moderlak.de/linux-screen/>\

##### sonstiges

- screen user werden unter`/var/run/screen`geführt