Einzeiler für ständiges Ausführen von Befehlen (quick-and-dirty-Überwachung)
while true; do sleep 5; clear; <befehl>; done
Tar packen mit Datum
tar czvf arbeit_vom_$(date +%Y%m%d-%H%M%S).tgz ~/arbeit
Ausgabe eines Programms zur Eingabe in ein anderes Programm
command | command
Erzeuge eine neue Datei wenn nicht vorhanden, oder leere eine vorhandene Datei und schreibe dann die Ausgaben rein
command >datei
Erzeuge eine neue Datei wenn nicht vorhanden, oder hänge die Ausgabe an die vorhandene Datei an
command >>datei
Leite Standardausgabe (stdout) weiter
1>datei
Leite Standardfehlerausgabe (stderr) weiter
2>datei
stderr nach stdout
2>&1
stderr nach stdout und beides in Datei
>>datei 2>&1
uname -a
last -<x>
date
date +"%Y-%m-%d"
date +%Y%m%d-%H%M%S
date +"%Y-%m-%d"
time dd if=/dev/hda1 of=datei.img
passwd
passwd benutzer
ls
ls -1
ls -a
ls -i
ls -s
ls -h
ls -U
ls -X
ls -S
ls -t
ls -u
ls -c
ls -l
ls -r
ls -R
ls -lah
ls -lahS
ls -laht
ls -lahSr
ls -lahtr
cat datei1 > datei2
cat datei
cat > datei fubar1 fubar2 STRG + D
q
tail -f <datei>
space
b
FFortlaufende Anzeige beenden mit
STRG-C
/<pattern>
?<pattern>
q
file -i dateiname
mkdir <option> verzeichnis
mkdir -p verzeichnis
mkdir -v verzeichnis
rm <datei>
rm -r <verzeichnis>
cp -p <quelle> <ziel>
cp --preserve[=attr-list] <quelle> <ziel>
cp --no-preserve[=attr-list] <quelle> <ziel>
cp -R <quelle> <ziel>
cp -v <quelle> <ziel>
cp -b <quelle> <ziel>
cp -u <quelle> <ziel>
cp -f <quelle> <ziel>
cp file1 file2 file3 <zielverzeichnis>
cp *.xyz <zielverzeichnis>
for i in *.txt; do cp $i ${i%.*}.bak; done
$ scp remoteuser@remotehost:file .
$ scp remoteuser1@remotehost1:file1 remoteuser2@remotehost2:file2 /tmp
$ scp remoteuser1@remotehost1:file1 remoteuser2@remotehost2:
$ scp remoteuser@remotehost:/tmp/file.txt .
$ scp -r remoteuser@remotehost:/tmp .
$ scp remoteuser@remotehost:/etc/hosts .
$ scp /etc/hosts remoteuser@remotehost:/tmp
$ scp remoteuser@remotehost:/etc/hosts scp remoteuser@remotehost:/etc/hosts.deny .
$ scp remoteuser1@remotehost1:/tmp/test remoteuser2@remotehost2:/tmp
mv -u
mv -v
chown [OPTION]... [OWNER][:[GROUP]] FILE
chown -R newuser:newgroup /path/to/dir
chgrp [OPTION]... GROUP FILE
chgrp -R newgroup /path/to/dir
chmod [OPTION]... MODE[,MODE]... FILE
chmod u+x file
find / -type f -name <name>
find / -type f -mtime -1
find / -type f -mtime +1
find / -type f -mtime 5
find / -newer <datei>
find / -type f -size +10000
find . -name *.log -mtime +7 -exec ls -all {} \;
grep [optionen] Suchstring [Datei(-liste)]
grep <suchmuster> *
grep <suchmuster>
grep -v <suchmuster>
grep -r "suchtext" .
ps
ps -ef | grep <...>
ps -ef | grep <..> | grep -v grep
ps axo pid,vsz,rss,,pcpu,command
ps axo pid,vsz,rss,command --sort +vsz
while true; do sleep 5; clear; ps axo pid,vsz,rss,command --sort rss; done
kill <signal> <prozess_id>
killall <signal> <prozess_name>
jobs
<kommando> &
fg %<jobnummer>
bg
<command> & disown ()
at YYYYMMDDhhmm
tar -cvf dateiname.tar ./verzeichnis
tar -cjvf dateiname.tar.bz2 ./verzeichnis
tar -czvf dateiname.tar.gz ./verzeichnis
tar -c -M -v –tape-length=1048576 –file=file_part1.tar bigfile.tgz Prepare volume #2 for ‘file_part1.tar’ and hit return: n file_part2.tar Prepare volume #2 for ‘file_part2.tar’ and hit return: Prepare volume #3 for ‘file_part2.tar’ and hit return: n file_part3.tar Prepare volume #3 for ‘file_part3.tar’ and hit return: ...
tar -tvf dateiname.tar
tar -xvf dateiname.tar ./verzeichnis
tar -xjvf dateiname.tar.bz2 ./verzeichnis
tar -xzvf dateiname.tar.gz ./verzeichnis
tar -x -M -v –file=file_part1.tar bigfile.tgz bigfile.tgz Prepare volume #2 for `file_part1.tar’ and hit return: n file_part2.tar Prepare volume #2 for ‘file_part2.tar’ and hit return: Prepare volume #3 for ‘file_part2.tar’ and hit return: n file_part3.tar Prepare volume #3 for ‘file_part3.tar’ and hit return: ...
You can use split for this: tar czpvf - /path/to/archive | split -d -b 100M - tardisk This tells tar to send the data to stdout, and split to pick it from stdin - additionally using a numeric prefix (-d), a chunk size (-b) of 100M and using 'disk' as the base for the resulting filenames (tardisk00, tardisk01, etc.). To extract the data afterwards you can use this: cat tardisk* | tar xzpvf -
split –bytes=1m /path/to/large/file /path/to/output/file/prefix * You can change the output file size by changing the –bytes=1m to your preference. You can use b, k, or m. b represent bytes, k represent kilobytes, m represent megabytes. cat prefix* > NEWFILENAME
du -h
du -k
du -m
du -g
du -d <depth>
du -r
du –sk * | sort -n
df -h
df -i
bdf /
uniq datei.txt
uniq -u datei.txt
uniq -c datei.txt
uniq -f x datei.txt
uniq -s x datei.txt
wc -l
ls | wc -l
find / -name *log* -mtime +365 | wc -l
alias
alias dir='ls -all'
unalias dir
dd if=/dev/hda1 of=datei.img
dd if=datei.img of=/dev/hda1
dd if=/dev/hda1 of=/dev/hdb1
dd if=/dev/cdrom of=datei.iso
while true; do sleep 5; kill -USR1 `pidof dd`; done
ddrescue -B -n /dev/sda image.iso rescue.log
ddrescue -B -r 1 /dev/sda image.iso rescue.log
mkisofs -o datei.iso -l ./Verzeichnis/
bchunk [quelldatei].bin [quelldatei].cue [zieldatei]
nrg2iso [quelldatei] [zieldatei]
mdf2iso [quelldatei] [zieldatei]
ccd2iso [quelldatei].img [zieldatei].iso
glance
u
space
b
Für einen Benutzer ändern:
~/.bashrc (~/.bash_profile)
Für alle Benutzer ändern:
/etc/profile
Für root ändern:
/root/.bashrc
Kommentare
#....
Include in Shell mit
. $HOME/myscript.sh
oder
source $HOME/myscript.sh
Include erzeugt Gülltigkeit auch für das aufrufende Programm von der Stelle an der Eingebunden wurde an.
Export in Shell
PATH=$PATH:. # Das aktuelle Verzeichniss aufnehmen, an letzter Stelle export PATH
Export erzeugt Gülltigkeit für alle Programme die von dem Skript aufgerufen werden, nicht jedoch für das aufrufende Programm selber, da dieses zum Startzeitpunkt noch mit den alten Umgebungsbedingungen gestartet wurde.
echo "Hallo Welt"
echo "Hallo $name"
echo "Hallo "$name
echo $PATH
Ausgabe ohne Zeilenumbruch
echo -n "..."
Kommando | Kurzschreibweise | Bedeutung | Beschreibung |
---|---|---|---|
[! ...] | not ... | Ausdruck ist falsch | |
test -e | [ -e $datei] | exists | Datei existiert |
test -r | [ -r $datei] | readable | Datei existiert und ist lesbar |
test -w | [ -w $datei] | writeable | Datei existiert und ist schreibbar |
test -x | [ -x $datei] | executable | |
test -s | [ -s $datei] | size > 0 | |
test -d | [ -d $datei] | directory | |
test -nt | [ $dateiA -nt $dateiB] | newer than | |
test -eq | [ $zahlA -eq $zahlB] | equal | |
test -ne | [ $zahlA -ne $zahlB] | not equal | |
test -lt | [ $zahlA -lt $zahlB] | lesser than | |
test -le | [ $zahlA -le $zahlB] | lesser or equal | |
test -gt | [ $zahlA -gt $zahlB] | greater than | |
test -ge | [ $zahlA -ge $zahlB] | greater or equal | |
test -z | [ -z $string] | zero | |
test -n | [ -n $string] | non zero | |
= | [ $stringA = $stringB] | ||
!= | [ $stringA != $stringB] |
if [ <bedingung> ]; then ... if [ <bedingung> ]; then ... else ... fi else ... fi
folders="folder1 folder2 folder3 ... " for i in $folders do ... done
#!/bin/sh # # myname=$(basename $0) mybase=$(cd $(dirname $0); pwd) myhost=$(uname -n) timestamp=`date +'%Y%m%d-%H%M%S'` echo "myname="$myname echo "mybase="$mybase echo "myhost="$myhost echo "timestamp="$timestamp
#!/bin/sh # # myname=$(basename $0) mybase=$(cd $(dirname $0); pwd) myhost=$(uname -n) timestamp=`date +'%Y%m%d-%H%M%S'` # # Filesystem-Monitoring # # # Variables # scanfile="filesystem.scan" scanfile_old="filesystem_old.scan" difffile="filesystem.diff" # # Scanning Directory and save to file # echo -n "Doing filescan ... " find . -type f -exec ls -lisa {} \; > $scanfile echo "done" # # Checking for old Scanfile # if [ ! -e $scanfile_old ] then echo -n "No initial file found, creating ... " mv $scanfile $scanfile_old echo "done" echo "Initial Scan created, exit for first time run." exit 0; fi # # File diffenrences # echo -n "Checking differences and save to $difffile ... " diff $scanfile_old $scanfile | grep -v $scanfile | grep -v $scanfile_old | grep -v $difffile > $difffile echo "done" # # Print summary # echo "Sumary of differences" echo "Last time:" grep "<" $difffile echo "Actual:" grep ">" $difffile # # Saving old Diff as Archive # echo -n "Saving old diff for archive ... " mv $difffile $difffile"."$timestamp echo "done" # # Saving new Scan as old one # echo -n "Saving actual data for next scan ... " mv $scanfile $scanfile_old echo "done" # # End # exit 0
Aufräume/Sichern alter Dateien
# Verzeichniss aus dem gesichert werden soll workdir=/opt/<service>/<pfad>/ # Verzeichniss in das gesichert werden soll backupdir=/backup/<service>/<pfad>/ # Verzeichnisse die gesichert werden sollen, durch Leerzeichen getrennt folders="folder1 folder2 folder3 ... " # Anzahl max Dateien files_count_max=20000 # Zeitraum max Prod time_workdir_max=365 # Zeitraum max Backup time_backupdir_max=730 # Iteration über die Verzeichnisse for i in $folders do # Wegschieben nach einem Jahr (time_workdir_max-Tage oder älter) find $workdir$i -type f -mtime +$time_workdir_max -exec mv {} $backupdir$i \; # Löschen nach zwei Jahren (time_backupdir_max-Tage oder älter) find $backupdir$i -type f -mtime +$time_backupdir_max -exec rm -r {} \; done
set -x (Debug-mode)
set +x (abschalten)
set -u (Abbruch bei nutzung einer nicht initialisierten Variable, geht auch: set -o nounset)
set +u (abschalten)
set -e (Abbruch wenn ein Kommando Fehler "nicht true" zurückliefert, geht auch: set -o errexit)
set +e (abschalten)
Copyright © 2024