Linux Befehle: Unterschied zwischen den Versionen

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Kontrollstrukturen =
 
== Datei zeilenweise einlesen und verarbeiten ==
 
Die Datei html.txt wird zeilenweise eingelesen. Die Zeilenumbrüche werden entfernt wegen '''wget.'''
 
while read line ; do line=$(echo $line | tr -d '\r'); wget $line ; done < html.txt
 
= Datenträger und Dateisystem =
 
=== Laufwerke und Partitionen ===
 
* Speichermedien anzeigen
 
lsblk
 
* UUID anzeigen
 
blkid
 
oder
 
fdisk -l
 
* Partitionieren
 
fdisk /dev/sdax
 
Ganz ohne Benutzeroberfläche wird man Schritt für Schritt durch den Vorgang der Partitionierung geführt.
 
  
== fsck.ext3 ==
+
[[Kontrollstrukturen]]
* Filesystemcheck für ext3 Filesystem
 
fsck.ext3 -cfpv /dev/sda5
 
 
# -c prüfen auf fehlerhafte Sektoren
 
# -f erzwingen der Überprüfung
 
# -p keine Fragen
 
# -v verbose
 
  
== tune2fs ==
+
[[Allgemeine Befehle - alphabetisch]]
Dateisystemparameter ändern
 
* Auflisten der Parameter
 
tune2fs -l /dev/sdx1
 
 
* Anzahl der Mountvorgänge zwischen automatischen Filesystemchecks festlegen
 
tune2fs -c 50 /dev/sdx1
 
  
* Anzahl der Mountvorgänge auf einen bestimmten Wert setzen
 
:Setzt man den Wert auf die Maximale Anzahl der Mountvorgänge, erzwingt man einen Filesystemcheck beim nächsten Bootvorgang.
 
tune2fs -C 50 /dev/sdx1
 
 
* Zeitintervall zwischen automatischen Filesystemchecks
 
tune2fs -i 5184000    # in 5184000 Sekunden
 
tune2fs -i 2m        # in 2 Monaten
 
tune2fs -i 60d        # in 60 Tagen
 
  
* Überprüfung komplett abschalten
 
tune2fs -i 0 -c 0 /dev/sdx1
 
  
== Datenträger formatieren ==
+
[[Zeichenketten bearbeiten]]
=== USB Memory Stick ===
 
Vorher nachschauen, unter welcher Gerätedatei der Memorystick ansprechbar ist:
 
mount -a
 
Dann den USB Stick unmounten und das Filesystem erzeugen (FAT 16):
 
umount /dev/sdd1
 
mkdosfs -F 16 /dev/sdd1
 
=== Festplatte ===
 
* Linux
 
mkfs.ext4 /dev/sdc1
 
* NTFS
 
mkfs.ntfs -Q /dev/sdc1
 
  
= Dateiverwaltung =
+
[[Rechnen]]
== Datum vergleichen ==
 
$fileName=/tmp/backup_lock
 
date_file=$(stat -c %Y $filename)
 
date_jetzt=$(date +%s)
 
date_diff=$(expr $date_jetzt - $date_file)
 
== Fehlerhaft codierte Dateinamen ==
 
Zum Umbenennen muss eventuell das Tool '''convmv''' nachinstalliert werden.
 
zypper in convmv
 
Befehl zum rekursiven Umbenennen aller Dateien in einem Verzeichnis.
 
convmv -f iso-8859-1 -t utf-8 -r --notest *
 
  
== chmod ==
+
[[Bilder bearbeiten]]
* Berechtigungen nur für Dateien bzw. Verzeichnisse ändern
 
find . -type f -exec chmod 444 {} \;  # chmod auf Dateien
 
find . -type d -exec chmod 555 {} \;  # chmod auf Verzeichnisse
 
  
* Setzen des Set User Id Bit = SUID Bit
 
Vor die drei Ziffern wird eine '''4''' gestellt. Beispiel:
 
chmod 4755 filename
 
oder
 
chmod u+s /usr/sbin/exim4
 
  
ergibt
 
-rwsr-xr-x 1 root root 875104 Jan  2  2013 /usr/sbin/exim4
 
Das '''x''' beim Eigentümer wird durch '''s''' ersetzt. Diese Datei wird daraufhin immer unter der ID des Besitzers ausgeführt, egal von wem sie aufgerufen wurde.
 
  
* Rechte von Verzeichnissen
+
[[Datenträger und Dateisystem]]
Betrachtet man ein Verzeichnis als Datei, dessen Inhalt eine Liste von Dateien ist, so erklärt sich die Wirkung der Zugriffsrechte von selbst.
 
  
: '''Ausführen''' heißt Öffnen des Verzeichnisses
+
[[Dateiverwaltung]]
  
: '''Schreiben''' heißt den Inhalt des Verzeichnisses verändern
+
[[Prozesse verwalten]]
  
: '''Lesen''' heißt in das Verzeichnis hineinschauen
+
[[Netzwerk]]
 
 
Lesen ohne Ausführen ist also nicht möglich.
 
 
 
* Dateirechte, Benutzerrechte unter UNIX
 
[http://pmhahn.de/linux/permission/index.html Hervorragende Einführung]
 
Hier werden auch die Sonderrechte SUID, SGID erklärt.
 
 
 
[http://www.linux-user.de/ausgabe/2003/12/066-acl/index.html http://www.linux-user.de/ausgabe/2003/12/066-acl/index.html]
 
 
 
== cp ==
 
* Dateien kopieren
 
 
 
So kopiert man auch versteckte Dateien:
 
cp -dpR Quellverzeichnis/.[a-z,A-Z,0-9]* Zielverzeichnis
 
oder
 
cp -dpR Quellverzeichnis/.[^.]* Zielverzeichnis
 
# .[^.] bedeutet: beliebiges Zeichen ausgenommen Punkt
 
 
 
* Eine Datei verteilen auf bestimmte Verzeichnisse
 
for dir in `ls joomla_* -d` ; do
 
    cp /www/joomla_fg/administrator/components/com_weblinks/config.xml $dir/administrator/components/com_weblinks
 
done
 
 
 
== ls ==
 
Dateien anzeigen. Es gibt unter Suse standardmäßig einen Aliasbefehl: '''dir'''
 
 
 
* Nur Verzeichnisse anzeigen
 
ls -ld * | grep "^d"
 
 
 
== lsof ==
 
Offene Dateien werden aufgelistet
 
 
 
 
 
== rsync ==
 
* Wiederherstellen von Dateien aus Backup
 
rsync -av --numeric-ids /backup/server.hs/backup.0/home/user_1 /home
 
# über SSH:
 
rsync  -avz --numeric-ids -e ssh primergy:/backup/server.hs/backup.0/home/user_1 /home
 
* Backup mit Rsync
 
# Ausschließen mehrerer Verzeichnisinhalte
 
rsync -avz --numeric-ids --exclude=media/* --exclude=mnt/* --delete-excluded <quellverzeichnis> <zielverzeichnis>
 
 
 
# Verwendung eines Exclude Files
 
rsync -avz --numeric-ids --exclude-from=excluded.txt --delete-excluded <quellverzeichnis> <zielverzeichnis>
 
 
 
* Leerzeichen im Zielverzeichnis
 
Wenn im Zielverzeichnis Leerzeichen enthalten sind, werden diese abgeschnitten. Das kann verhindert werden durch folgende Option
 
--protect-args
 
 
 
* Mehrere Dateien/Verzeichnisse excluden
 
Komplettes Backup auf einen gemountete Datenträger kopieren
 
rsync -avH --numeric-ids \
 
    --exclude={/etc/fstab,/etc/default/grub,/boot/grub2/grub.cfg,/home,/root,/var,/srv} \
 
    -e ssh 10.0.0.111:/media/disk/suseVirtualbox/backup.0/* /mnt/tmp
 
 
 
== setuid ==
 
Durch das Setuid Bit wird eine ausführbare Datei mit den Rechten des Besitzers ausgeführt und nicht - wie sonst - mit den Rechten des aufrufenden Benutzers. Typischerweise gehört so eine Datei dem Administrator root.
 
 
 
'''Achtung:''' Das funktioniert angeblich nur mit Binärdateien, nicht mit einem Shellscript!
 
 
 
chmod +s Dateiname
 
 
 
# oder
 
chmod u+s Dateiname
 
== tar ==
 
* Ein Archiv erstellen ohne Ordnerpfade
 
pwd=$(pwd)
 
cd /usr/local/bin/bak
 
tar cfv /www/download/bak.tar *
 
cd $pwd
 
* Dateien in einem Archiv anzeigen
 
tar -tvf bak.tar
 
* TAR Archiv entpacken
 
tar -xf bak.tar
 
* XZ Archiv entpacken
 
XZ Archive sind verlustfrei gepackt.
 
cd /var/log/apache2
 
unxz ./access_log-20190617.xz
 
tar -xf ./access_log-20190617
 
 
 
== umask ==
 
Der Befehl ändert die Grundeinstellung der Zugriffsrechte bei neuen Dateien bzw. Verzeichnissen.
 
 
 
Standardwert für Dateien: 666
 
 
 
Standardwert für Verzeichnisse: 777
 
 
 
umask 0022
 
ergibt für Dateien: 666 - 022 = 644
 
 
 
ergibt für Verzeichnisse: 777 - 022 = 755
 
 
 
Man kann diesen Befehl in die Datei <code>/etc/init.d/boot.local</code> eintragen, dann werden die Grundeinstellungen beim Systemstart gesetzt.
 
 
 
Anscheinend muss diese Einstellung für jeden Benutzer extra gesetzt werden. Also eintragen in <code>~/.bashrc</code> und <code>~/.profile</code>
 
 
 
= ImageMagick =
 
== Größe ändern - proportional ==
 
targetdir=verkleinert
 
mkdir $targetdir
 
for file in * ; do convert "$file" -resize 400x400 "$targetdir/$(basename "$file")"; done;
 
== Exif Informationen löschen ==
 
Wenn Probleme mit Rotation, dann liegt das an den gespeicherten EXIF Informationen. Diese kann man löschen.
 
convert -strip orig.jpg stripped.jpg
 
 
 
# oder
 
mogrify -strip orig.jpg
 
 
# ganzes Verzeichnis
 
for file in * ; do mogrify -strip $file ; done
 
 
 
== HTML Bildergalerie ==
 
Erstellen einer HTML Bildergalerie mit 4 Spalten
 
montage *.jpg -title "Titel" -size 128x128 -tile 4x index.html
 
Auf der Indexseite wird eine ImageMap mit den Thumbnails erzeugt.
 
== Indexprint ==
 
Indexprint mit Anzeige der Dateinamen erzeugen
 
montage -geometry 200x200+10+10 -label %f -tile 5x6 *.j*.[jJ][pP]*[gG] indexprint.png
 
Auf einer Seite befinden sich 30 Thumbnails. Beim Drucken des Indexprints sollte ein Seitenrand eingestellt werden.
 
== jhead ==
 
jhead -autorot *.jpg
 
Stellt liegende Bilder auf
 
 
 
= Prozesse verwalten =
 
== kill ==
 
* Mehrere Prozesse löschen
 
ps -e | grep pop3 | cut -f "1" -d " " | while read item ; do kill $item ; done
 
== pkill ==
 
Prozesse beenden.
 
 
 
Mit pkill kann man auch einen Benutzer "abmelden".
 
pkill -KILL -u <username>
 
 
 
= Netzwerk =
 
 
 
== ifconfig - ip ==
 
=== IP Adressen anzeigen ===
 
ip addr show
 
=== IP Adresse zuweisen ===
 
ifconfig eth0 10.80.12.100
 
 
 
ip addr add 192.168.100.20/24 dev eth0
 
 
 
== route ==
 
Eine Route hinzufügen für das Gateway ins Internet
 
route add default gw 10.0.0.138
 
 
 
== mail ==
 
* Mail Kommandos
 
Nach dem Start des Programms '''mail''' kann man verschiedene Kommandos eingeben. Durch Eingabe von '''?''' erhält man eine Liste der Befehle.
 
mail
 
?
 
* Alle Mails löschen
 
mail
 
d *
 
* Mail an root senden
 
msg="Helle world"
 
echo $msg | mail -s Testmail root
 
 
 
== nmap ==
 
* Portscan durchführen:
 
# Portscan am eigenen PC
 
nmap localhost
 
# Portscan auf anderem Rechner
 
nmap 10.80.12.5
 
* Rechner im Netzwerk scannen
 
nmap -sP 10.80.12.0/24
 
Ausgabe:
 
Host 10.80.12.92 appears to be up.
 
MAC Address: 00:80:87:0B:D6:21 (OKI Electric Industry CO.)
 
Host 10.80.12.93 appears to be up.
 
MAC Address: 00:80:77:48:45:F4 (Brother Industries)
 
Host 10.80.12.94 appears to be up.
 
MAC Address: 00:04:00:EB:6C:28 (Lexmark International)
 
Host 10.80.12.95 appears to be up.
 
MAC Address: 00:C0:02:31:68:33 (Sercomm)
 
* Nur den Namen der eingeschalteten Geräte im LAN anzeigen
 
nmap -sP -R --system-dns 192.168.1.0/24 | grep -v down | grep Nmap\ scan\ report | cut -d " " -f 5
 
 
 
== wget ==
 
Rekursiver Download von einem FTP Server
 
# Download nach ./joomla.eduhi.at/images:
 
wget -r --user=joomla_408012 --password=password ftp://joomla.eduhi.at/images/*
 
 
 
# Download in das aktuelle Verzeichnis:
 
wget -r --user=joomla_408012 --password=password --no-host-directories --cut-dirs=1 ftp://joomla.eduhi.at/images/*
 
 
 
= Allgemein =
 
 
 
== at ==
 
* Befehl zu einer bestimmten Zeit ausführen
 
Einen bestimmten Befehl um 23:00 ausführen
 
at 23:00
 
Es erscheint der at-Prompt zur Eingabe eines Befehls. Eingabe abschließen mit '''STRG + D'''. Der Befehl wird unter einer Jobnummer gespeichert in
 
/var/spool/atjobs
 
* Job löschen
 
Beispiel: Job Nr. 3 löschen
 
atrm 3
 
* Jobs anzeigen
 
atq
 
 
 
== alias ==
 
* Aufruf von Linux Kommandos in verkürzter Form
 
Beispiele:
 
alias wol_backup="wol 00:18:F3:23:BD:B8"
 
alias lpr="lpr -o page-left=30 -o page-top=40"
 
 
 
* Aliases dauerhaft speichern in
 
~/.bashrc
 
Gespeicherte Aliases aufrufen durch
 
alias
 
 
 
* Alias löschen
 
# Beispiel:
 
unalias wake_backup
 
 
 
== chroot ==
 
Verschieben des Wurzelverzeichnisses = Root Verzeichnis
 
chroot /mnt /bin/bash
 
# ergänzend:
 
mount /proc
 
mount /sys
 
wenn in /mnt ein Linux Rootsystem gemountet ist
 
 
 
== date ==
 
Die Formatdefinition wird mit einem '''+''' eingeleitet.
 
* Alter einer Datei in Stunden
 
  Stunden=`( ($(date +%s) - $(date +%s --reference $LOCKFILE)) / 3600 )`
 
* Zeit und Datum extrahieren
 
zeit=`date +%T | cut -c1-5`
 
datum="`date +%A'  '%d.%m.%Y`"
 
 
 
== dmesg ==
 
Zeigt Kernelmeldungen beim Booten an.
 
 
 
== find ==
 
* Suchen von Dateien in einem bestimmten Verzeichnis
 
Normalerweise beginnt die Suche im aktuellen Verzeichnis.
 
find /root -name "fileCopy.lock*"
 
In diesem Beispiel ist das Verzeichnis <code> /root </code> der Startpunkt für die Suche.
 
 
 
* Befehle werden auf bestimmte Dateien rekursiv angewendet
 
Die Konstruktion '''{}''' wird durch den '''Pfadnamen''' der gefundenen Datei(en) ersetzt.
 
 
 
Mit der Option '''-exec''' kann man nur einen Befehl ausführen.
 
# Text in php-Dateien suchen und nur die Dateinamen ausgeben
 
find . -name "*.php" -exec grep -l "Suchtext" {} \;
 
 
 
# Text in allen Dateien suchen und auch die gefunden Zeilen ausgeben
 
find . -exec grep "Suchtext" {} \; -print
 
 
 
Text rekursiv in allen Dateien suchen geht auch mit '''grep''':
 
  grep -r Suchtext /www/HS_Server/
 
 
 
# Dateien löschen
 
find . -name '*.bak' -exec rm {} \;
 
 
 
# Verzeichnisse löschen
 
find  . -name "*Foto laden*" -type d -exec rm {} -R \;
 
 
 
# Broken Symlinks finden und speichern
 
find . -type l ! -execdir test -e '{}' \; -print > broken.links
 
 
 
# Broken Links löschen
 
while read Zeile ; do rm "$Zeile" ; done < broken.links
 
 
 
* Schleife durch die Ausgabe des find Befehles
 
find . -name *.tif | \
 
while read file ; do
 
  # Bilder konvertieren:
 
  convert "$file" "`dirname "$file"`/`basename "$file" .tif`.jpg"
 
  # Dateinamen in Großbuchstaben:
 
  cp $file `dirname $file`/`basename $file | tr a-z A-Z`
 
done
 
 
 
* Suchen und ersetzen von Text
 
find . -type f -name "*.php" | \
 
while read file ; do
 
  cp "$file" Datei.tmp 
 
  sed -e s/'suchtext'/'ersatztext'/g Datei.tmp > "$file"                             
 
done
 
 
 
* Suchtiefe einschränken
 
find . -type d -maxtepth 1 -name "joomla_*"
 
 
 
== grep ==
 
* Text rekursiv in allen Dateien suchen
 
grep -r Suchtext /www/HS_Server/
 
* Nur in bestimmten Dateien suchen
 
grep -r --include "*.php" Suchtext /www/HS_Server/
 
 
 
== hwinfo ==
 
Hardwareinfo ausgeben, Beispiele:
 
hwinfo --sound
 
hwinfo --scanner
 
 
 
== iconv ==
 
Textdateien konvertieren in andere Kodierung
 
# Beispiel
 
cat Datei.html | iconv -f ISO_8859-15 > Datei.html
 
# oder iconv -f ISO_8859-15 Quelldatei.html -o Zieldatei.html
 
 
Folgendes Script konvertiert alle html-Dateien und php-Dateien im aktuellen Verzeichnis:
 
/usr/local/bin/iconv.sh
 
 
 
== loadkeys ==
 
loadkeys de
 
Deutsche Tastatur laden
 
 
 
== lpr ==
 
Drucken von der Kommandozeile
 
* Datei im Querformat drucken und Ränder setzen
 
lpr -o page-left=30 -o page-top=40 -o landscape /etc/fstab
 
* Ausgabe eines Kommandos drucken
 
fdisk -l | lpr
 
* Standard Options
 
[http://www.cups.org/documentation.php/options.html#OPTIONS http://www.cups.org/documentation.php/options.html#OPTIONS]
 
* Howto
 
[http://www.cups.org/documentation.php/options.html http://www.cups.org/documentation.php/options.html]
 
 
 
== read ==
 
Variable einlesen mit editierbarem Vorgabewert
 
name="Ferdinand Anton"
 
read -e -i "$name" -p "Please enter your name: " input
 
echo $input
 
== rpm ==
 
RPM Paket downloaden und gleich installieren, Beispiel:
 
 
rpm -vU http://download.insecure.org/nmap/dist/nmap-4.20-1.i386.rpm
 
 
# -v (verbose)
 
# -U (Update)
 
Infos über Pakete abrufen: -qa = Abfrage, query über alle Pakete.
 
# Anzahl der Pakete
 
rpm -qa | wc -l
 
 
# Info über bestimmtes Paket, in diesem Fall quenview
 
rpm -qa | grep quenview
 
 
 
Info über rpm: [http://www.tu-chemnitz.de/docs/lindocs/RPM/node4.html http://www.tu-chemnitz.de/docs/lindocs/RPM/node4.html]
 
 
 
== screen ==
 
Mit screen kann man innerhalb einer Konsole mehrere Konsolensitzungen erzeugen.
 
 
 
Info: [http://web.archive.org/web/20041012204417/www.linux-user.de/ausgabe/2001/01/092-zubefehl/befehl12.html Artikel aus LinuxUser ]
 
* Screen Session starten
 
screen
 
* Screen Session abtrennen
 
screen -d [-S Name]
 
Die Sitzung läuft dann im Hintergrund eigenständig weiter.
 
* Screen Sitzung wiederaufnehmen
 
screen -R [-S Name]
 
* Tastenbefehle für den interaktiven Modus:
 
Die Tastenbefehle werden eingeleitet mit Strg a.
 
Eine Liste der Tastenkombinationen erhält man mit der Tastenkombination Strg a ?.
 
Einige Beispiele:
 
: Neues Fenster: strg a c
 
: Nächstes Fenster: strg a Leertaste
 
: Sitzung abtrennen: strg a d
 
* Screen Befehle
 
Diese Befehle ersetzen die im interaktiven Modus verwendbaren Tastenkombinationen und können somit in Scripten verwendet werden. Die Befehle werden mit der Option -X eingeleitet.
 
* Nächstes Fenster
 
screen -X next
 
* Neues Fenster
 
screen -X screen
 
* Befehl in neuem Fenster
 
screen -X screen yast
 
 
 
 
 
== seq ==
 
seq -w 10
 
Gibt die Zahlen von 1 bis 10 mit führenden Nullen aus.
 
 
 
== su ==
 
Dauerhafter Wechsel der Identität
 
# Login als Root mit entsprechenden Umgebungseinstellungen
 
su -
 
 
# Wechsel zu Root ohne Umgebungseinstellungen, man bleibt im selben Verzeichnis
 
su
 
 
 
Damit man von der Textkonsole aus auch grafische Programme verwenden kann, gibt es den Befehl '''kdesu'''.
 
Beispiel:
 
kdesu konqueror
 
 
 
== sudo ==
 
* Mit sudo kann ein Befehl unter einem anderen Benutzer ausgeführt werden, typischerweise als root.
 
sudo befehl
 
# oder
 
sudo -u username befehl
 
 
 
* Mit dem Kommando
 
visudo
 
kann man die Datei <code>/etc/sudoers</code> bearbeiten
 
 
 
* Beispiel:
 
# Shutdown für die  Gruppe users erlauben:
 
%users  localhost=/sbin/shutdown -h now
 
 
 
# ... für alle:
 
ALL  localhost=/sbin/shutdown -h now
 
 
 
* Hier findet man eine gute Anleitung: http://www.gentoo.org/doc/de/sudo-guide.xml#doc_chap3
 
 
 
== uname ==
 
Systeminformationen ausgeben
 
uname -a
 
liefert alle Infos
 
 
 
== xdg-open ==
 
Öffnet eine Datei oder URL mit dem dafür vorgesehenen Standardprogramm.
 
xdg-open PIC12345.jpg
 
 
 
=Zeichenketten bearbeiten=
 
 
 
== Stringverarbeitung mit der Bash ==
 
* Zeichen am Anfang abschneiden
 
file="DateiName.txt"
 
echo ${file:5}
 
Ausgabe
 
Name.txt
 
 
 
* 4 Zeichen ab Position 5 herausschneiden
 
file="DateiName.txt"
 
echo ${file:5:4}
 
Ausgabe
 
Name
 
 
 
== cut ==
 
Aus einer Zeichenkette Zeichen herausschneiden
 
 
 
Beispiele:
 
# GID aus /etc/passwd anzeigen
 
zeile=`grep username /etc/passwd`
 
gid=`echo $zeile | cut -d ":" -f "4"`
 
 
 
# Benutzerliste aus LDAP extrahieren:
 
ldapsearch -x -b "ou=users,dc=network" uid -LLL | grep uid: | cut -d " " -f "2"
 
 
 
# Homedirectories anzeigen:
 
ldapsearch -x -b "ou=users,dc=network" homeDirectory -LLL | grep homeDirectory: | cut -d " " -f "2"
 
 
 
-d gibt das Trennzeichen an
 
: Das Standardtrennzeichen ist das Tabulatorzeichen
 
 
 
-f gibt an, das wievielte Feld herauszuschneiden ist
 
 
 
== here-document ==
 
Zur Ausgabe eines mehrzeiligen Textes in einem Skript
 
if [ $# -eq 0 ]; then
 
  cat << 'delimiter'
 
  -----------------------------------------------------
 
  Usage: adduser.sh User Gruppe Zuname Vorname Passwort
 
  oder
 
      adduser.sh Dateiname
 
  -----------------------------------------------------
 
delimiter
 
  exit
 
fi
 
 
 
 
 
== sed ==
 
=== Suchen und Ersetzen von Text ===
 
# Jedes Vorkommen des Suchtextes ersetzen
 
cat datei.txt | sed -e s/'suchtext'/'ersatztext'/g > neue_datei.txt
 
 
# Nur das erste Vorkommen des Suchbegriffs pro Zeile ersetzen
 
cat datei.txt | sed -e s/'suchtext'/'ersatztext'/ > neue_datei.txt
 
 
 
# Nur das 3. Vorkommen des Suchbegriffs pro Zeile ersetzen und das Ergebnis ausgeben
 
cat datei.txt | sed -e s/'suchtext'/'ersatztext'/3p > neue_datei.txt
 
 
 
* Kommentare und Leerzeilen entfernen
 
sed -e '/^\#/d' datei > datei.tmp
 
sed -e '/^$/d' datei.tmp > datei
 
 
 
* Anführungszeichen löschen
 
echo "text" | sed 's/"//g'
 
 
 
* Rekursiv suchen und ersetzen von Text
 
 
 
if [ $# -gt 2 ] ; then
 
    suchtext=$1
 
    ersatztext=$2
 
else
 
    read -e -p "Suchtext: " suchtext
 
    read -e -p "ersetzen durch: " ersatztext
 
fi
 
 
grep -rl "$suchtext" | \
 
while read file; do
 
    cp "$file" datei.tmp
 
    sed -e s/"$suchtext"/"$ersatztext"/g datei.tmp > "$file"
 
done
 
rm datei.tmp
 
 
 
* Ersetzen von Variablen etc. in PHP Dateien
 
suchtext=\$this-\>someThing
 
ersatztext=\$this-\>someNewThing
 
grep -rl --include  "*.php" "$suchtext" | \
 
while read file; do
 
    cp "$file" datei.tmp
 
    sed -e s/"$suchtext"/"$ersatztext"/g datei.tmp > "$file"
 
done
 
rm datei.tmp
 
Man beachte das Quoten der Zeichen $ und >
 
 
 
=== Dateinamen ändern ===
 
suchtext="IMG_ "
 
ersatztext="Bild_"
 
for file in * ; do neu=`echo $file | sed s/"$suchtext"/"$ersatztext"/`;mv "$file" "$neu"; done
 
* Verzeichnisnamen rekursiv ändern
 
read -e -p "Suchtext: " suchText
 
read -e -p "ersetzen durch: " ersatzText
 
find . -type d | \
 
while read dir; do
 
    newDir=`echo "$dir" | sed -e s/"$suchText"/"$ersatzText"/`;
 
    if [ $dir != $newDir ] ; then mv "$dir" "$newDir" ; fi
 
done
 
 
 
== sort ==
 
* Passwortdatei sortieren nach UID
 
sort -t: -k 3n /etc/passwd
 
: Doppelpunkt als Trennzeichen für Spalten: Option -t
 
: Sortieren numerisch nach der 3. Spalte
 
Verbrauchten Festplattenplatz ausgeben und Liste sortieren:
 
# Es wird numerisch nach der 3. Spalte sortiert (0, 1, 2)
 
 
repquota -a | sort -n +2
 
 
 
ergibt:
 
 
 
hs        --  654052      0      0          8068    0    0
 
eifr      --  710531      0      0          4710    0    0
 
vs        --  1721870      0      0          5303    0    0
 
vsdir    --  2077308      0      0          5795    0    0
 
root      -- 10953439      0      0          3767    0    0
 
 
 
== tr ==
 
 
 
* Dateinamen ändern mit <code>tr</code>
 
Zum Beispiel Großbuchstaben in Kleinbuchstaben
 
for file in *
 
    do
 
    new=`echo $file | tr '[:upper:]' '[:lower:]'`
 
    # new=`echo $file | tr '11.3' '11.4'`
 
    echo mv $file $new
 
done
 
Mit find auch rekursiv
 
find . -type f | while read i; do
 
    file="${i##*/}";
 
    directory="${i%/*}";
 
    mv "$i" "$directory"/"`echo "$file" | tr "A-Z" "a-z"`" ;
 
done
 
 
 
=Rechnen=
 
* Syntax
 
Rechenaufgabe sind für die bash mit dem richtigen Syntax kein Problem:
 
echo $(( 2 * 2 ))
 
4
 
 
 
Auch mit kleineren Formeln kommt sie klar:
 
echo $((a=1,b=2,n=2,c=a+b,c**n))
 
9
 
* expr
 
expr 13 + 37
 
ergebnis=`expr 13 + 37`
 
echo $ergebnis
 
50
 

Aktuelle Version vom 19. November 2021, 19:27 Uhr