Metainformationen zur Seite
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
https://www.thomas-krenn.com/de/wiki/Bash_stdout_und_stderr_umleiten
https://de.wikipedia.org/wiki/Standard-Datenstr%C3%B6me
#Alles per tee pipen ./a.out 2>&1 | tee output
Suchen und finden
https://wiki.ubuntuusers.de/find/
http://openbook.rheinwerk-verlag.de/linux/linux_kap09_007.html#dodtpcbf55d02-f039-4715-ae6e-a4a3944a50ef http://man7.org/linux/man-pages/man1/find.1.html
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
Zeichen | Funktion | |
---|---|---|
. | 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
http://dozent.maruweb.de/material/benutzer.shtml https://www.shellhacks.com/how-to-grant-root-access-user-root-privileges-linux/ https://www.pro-linux.de/artikel/2/893/useradd.html http://openbook.rheinwerk-verlag.de/linux/linux_kap13_003.html#dodtp22602395-db64-4276-944a-5fabe786ef97
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
https://wiki.ubuntuusers.de/Bash/ Google-Cache http://openbook.rheinwerk-verlag.de/shell_programmierung/index.htm
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/
Shortcut | Befehl |
---|---|
STRG + u | Alles VOR dem Cursuor löschen |
Strg + k | Alles HINTER dem Cursor löschen |
Strg + w | letztes Wort löschen |
strg + l | Terminal leeren |
strg + d | logout |
strg + r | history 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 anzeigen | arp | ip n |
IP anzeigen | ipconfig | ip a, ip link, ip -s-a |
Tunnel | iptunnel | ip tunnel |
Ports anzeigen | netstat | ss |
routen anzeigen | netstat, route | ip 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¶m2=we' [url] # post paramater an url senden curl -d 'param1=yes¶m2=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