PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nützliche Linuxkommandos/-hacks


nalye
2013-01-02, 10:04:45
Wäre doch mal ein Thema für ein schönes Sticky...

Hier können alle Codeschnipsel gepostet werden, die unter Umständen mal recht hilfreich sein können. Ich fange mal mit einem Beispiel an, um die Zeit der Erstellung einer Datei auf einem EXT4-FS zu sehen (Normalerweise kennt Linux ja nur atime, mtime und ctime per 'stat'):


$ ls -i /tmp/file.log
2097155 /tmp/file.log

$ sudo debugfs -R 'stat <2097155>' /dev/sda1
debugfs 1.41.12 (17-May-2010)
Inode: 2097155 Type: regular Mode: 0644 Flags: 0x80000
Generation: 4150586180 Version: 0x00000000:00000001
User: 48 Group: 48 Size: 4065480
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 7944
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x50e3f5bc:4e88878c -- Wed Jan 2 09:54:20 2013
atime: 0x50dfd5bd:4e134a14 -- Sun Dec 30 06:48:45 2012
mtime: 0x50e3f5bc:4e88878c -- Wed Jan 2 09:54:20 2013
crtime: 0x4eaabf4b:144b7cc8 -- Fri Oct 28 16:42:19 2011
Size of extra inode fields: 28
EXTENTS:
(0-15): 237331-237346, (16-63): 9094000-9094047, (64-992): 9143488-9144416

Siehe dann die schöne Zeile crtime :)

nalye
2013-01-03, 12:05:42
SHA1 mit Salt ausgeben (Hier mal statisch):


#!/bin/bash

salt="15426854225"
password="12321312231"
salted=`echo -n "$salt$password" | openssl dgst -sha1 |awk '{print $NF}'`
echo $salted

sei laut
2013-01-04, 10:26:56
So ein Thread wollte ich auch immer erstellen, meine Linuxkommandos sind aber nicht soooo ungewöhnlich oder zu speziell.
Außer vielleicht: Wie lösche ich eine Datei mit einem Parameter im Namen? (z.B. coole-fDatei)
rm -- coole-fDatei
Und wenn man wissen will, ob in einer Variable ein bestimmtes Zeichen enthalten ist (hier das @ in einer E-Mail-Adresse):
if [[ "$EMAIL" =~ @ ]]; then
Ödit sagt: Geht natürlich auch mit Strings und nicht nur einzelnen Zeichen.

nalye
2013-01-04, 11:13:55
Das mit dem Zeichen erinnert mich irgendwie an Perl (=~)...

OnT: Fortsetzen bei Druck auf beliebige Taste:


Pause()
{
OLDCONFIG=`stty -g`
stty -icanon -echo min 1 time 0
dd count=1 2>/dev/null
stty $OLDCONFIG
}

Ist ein wenig kompliziert, aber der für mich schönere Weg :)

Und spezielle Hacks sind immer toll, wer weiß wann man die mal brauchen könnte.

nalye
2013-01-04, 11:26:39
Uha, noch ein schönes, was ich vergessen habe: vimdiff

Super elegant, um 2 Dateien zu bearbeiten und die Unterschiede zu sehen.


$ vimdiff file1 file2 [...]



do -- Get changes from other window into the current window.

dp -- Put the changes from current window into the other window.

]c -- Jump to the next change.

[c -- Jump to the previous change.

Ctrl W + Ctrl W -- Switch to the other split window.

:diffupdate -- diff update

:syntax off -- syntax off

zo -- open folded text

zc -- close folded text

Weyoun
2013-01-08, 20:15:33
Bin der Meinung, dass man für einen erfolgreichen Umgang mit der Konsole immer ein paar Beispielbefehle lernen sollte, die dann aus dem Kopf für jede gegebene Situation abändert und anwendet.

Mein Lieblingsblueprint ist die for schleife in allen Variationen (for i in *; do ... done). Sollte man m. e. unbedingt auswending lernen. eine intelligent geschriebene forschleife ersetzt oft einen Haufen Arbeit. Es lohnt sich manchmal wirklich, sich für 15 minuten hinzusetzen und so eine forschleife auszuknobeln. Massenumbenennungen von Dateien sind da noch die billigeren Tricks die einen kleinen wow effekt erzeugen.

C Style:
for (( i=0; i<=1000; i++)); do echo $i; done

einfachere sed befehle wie z. B. search & replace sind immer mal wieder nützlich basisstruktur
echo "that word is going to be replaced" | sed 's/word/replacement/g'

nalye
2013-01-10, 13:57:17
Auch super, um zu prüfen, ob Rootrechte vorhanden sind:


if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo "Got root?"
exit
else
echo "Root!"
fi

Der volle Pfad zu 'id' einerseits wg. POSIX-Konformaität und andererseits wegen eventuellen Sicherheitslücken (Verlinkung zu einer Backdoor namens 'id' oder ähnlichem Zeugs).

sei laut
2013-01-18, 15:43:37
Zufallspasswort (aus Buchstaben und Zahlen)
12 ist die Länge
"PASS" ist nur ein Zwischenspeicher, kann beliebig heißen
password=`PASS=</dev/urandom tr -dc "A-Za-z0-9" | head -c 12`
Edit: Mit dem von nalye kann man nun ein zufallsgeneriertes Passwort mit salt und sha1 erstellen. :D

TongPo
2013-01-26, 15:53:48
if then else struktur auf der bash:
{command} && {success} || {failure}

dazu passend den rückgabewert des letzten kommandos:
echo $?

und mal was lustiges: installiert euch "sl"

sei laut
2013-02-06, 14:14:59
wget -qO- checkip.dyndns.com | tr -d "<>a-zA-Z //:"Als Ausgabe erhält man seine öffentliche IP. :D

(del676)
2013-02-06, 14:32:19
Wenn man mit find Dateien sucht, und gewisse Aktionen mit ihnen durchfuehren will.

z.B. ein chmod, mit -print0 und xargs anstatt nur -exec erhaelt man ein viel robusteres Commando gegen Datein mit besch.....eidenen Dateinamen ;)


find /path -type f -print0 | xargs -0 chmod 750

sei laut
2013-02-08, 14:05:35
War mir bis gerade gänzlich unbekannt, hab nach sowas aber schon immer gesucht: namei
namei /usr/bin/java
f: /usr/bin/java
d /
d usr
d bin
l java -> /etc/alternatives/java
d /
d etc
d alternatives
l java -> /usr/lib/jvm/java-7-oracle/jre/bin/java
d /
d usr
d lib
d jvm
l java-7-oracle -> java-7-oracle-1.7.0.6
d java-7-oracle-1.7.0.6
d jre
d bin
- java
Hab in dem Zuge gleich mal Java aktualisiert. ;D

nalye
2013-04-30, 15:20:54
Alle Dateien in einem Ordner auf einmal umbenennen:

for i in *; do new_name=$(echo $i | sed -e 's/\.bak//g'); echo file $i will be renamed to $new_name;mv -v $i "$new_name"; done
(Hier als Beispiel datei.endung.bak in datei.endung)

Gast
2013-04-30, 22:26:05
Alle Dateien in einem Ordner auf einmal umbenennen:

for i in *; do new_name=$(echo $i | sed -e 's/\.bak//g'); echo file $i will be renamed to $new_name;mv -v $i "$new_name"; done
(Hier als Beispiel datei.endung.bak in datei.endung)
das geht auch einfacher (bash-syntax):
for i in *; do mv -v "$i" "${i%.bak}"; done

sei laut
2013-04-30, 23:36:44
das geht auch einfacher (bash-syntax):
for i in *; do mv -v "$i" "${i%.bak}"; done
Genaugenommen machst du genau das Gegenteil wie er. (Endung hin, wo keine war - nalye kürzt die letzte Endung raus)
Wenn man nalyes Kommando vereinfachen will, ersetzt man sed -e 's/\.bak//g' mit tr -d '.bak' - sofern man sed scheut. :D
Edit: War gestern doch zu spät, tr arbeitet ja auf einzelnen Zeichen und nicht Strings.

Gast
2013-05-08, 21:43:18
Genaugenommen machst du genau das Gegenteil wie er. (Endung hin, wo keine war
nein.

${string%substring}
Deletes shortest match of $substring from back of $string.

PHuV
2013-10-25, 09:10:33
Tipp von vanquish (export GLOBIGNORE=blah1:blah2:blahblubb3 rm -rf *)

Dateien als Ausnahme definieren, die man nicht löschen will
rm -rf !(blah1|blub2|blahblubb3)

Es wäre auch noch möglich in der in der Shell passende Variablen festzulegen:

export GLOBIGNORE=blah1:blah2:blahblubb3
rm -rf *

Das Zurücksetzen aber nicht vergessen. ;)

PHuV
2013-10-25, 09:12:16
Stichwort Zählervariablen.

Wer große Dateien durchforstet, und mit Zählervariablen arbeitet, sollte tunlichst die sehr oft vorgeschlagene Variante mit expr als Berechnung vermeiden.

Beispiel:
#Schlecht, da sehr langsam
zaehler= `expr $zaehler+ 1`
Für jeden expr-Aufruf wird ein neuer Prozess bzw. fork generiert, was dann die Laufzeit erheblich verlängert. Viel besser ist
#Viel schneller
zaehler=$((zaehler+1))

Kann ja jeder selbst prüfen:

#!/bin/sh

i=1
ende=1000

while [ $i -le $ende ]
do
echo $i
#Variante langsam
i=`expr $i + 1`
# Variante schnell
#i=$((i + 1))
done
Einfach mal die eine Variante ausprobieren, und dann durch die andere kommentiere austauschen.

PHuV
2013-10-25, 10:32:15
Wer mit echo und Co in Dateien für Ausgaben schreibt, hat manchmal das Problem, daß jedes echo einen Delimiter/Newline/Zeilentrenner setzt, und somit immer eine neue Zeile erzeugt wird.

text="fuer das Logbuch!"

echo "Das ist mein Text" >>datei.log
echo "${text}" >>datei.log
Ausgabe
Das ist mein Text
fuer das Logbuch!
Manchmal möchte man aber keinen Umbruch haben, sondern direkt hintereinander Werte schreiben. Hier beim echo das Argument -e (Schalter für die verwendung von Escape-Sequenzen) verwenden, und am Ende \c (für unterdrücke das abschließende Newline) setzten

text="fuer das Logbuch!"

echo -e "Das ist mein Text"\c >>datei.log
echo "${text}" >>datei.log
Ausgabe
Das ist mein Text fuer das Logbuch!

PHuV
2014-02-05, 00:37:52
Um Variablen und Texte in Groß- oder Kleinbuchstaben umzuwandelt, gibt es mehrere Lösungen:
http://stackoverflow.com/questions/2264428/converting-string-to-lower-case-in-bash-shell-scripting
tr

$ echo $a | tr '[:upper:]' '[:lower:]'
hi all

AWK

$ echo $a | awk '{print tolower($0)}'
hi all

Bash 4.0

$ echo ${a,,}
hi all

Perl

$ echo $a|perl -e 'print lc <>;'
hi all

Bash

lc(){
case "$1" in
[A-Z])
n=$(printf "%d" "'$1")
n=$((n+32))
printf \\$(printf "%o" $n)
esac
}
word="ABX"
for((i=0;i<${#word};i++))
do
ch=${word:$i:1}
lc $ch
done

Es gibt aber noch eine schicke Lösung, über typeset zu arbeiten.
typeset -u name2upper
typeset -l name2lower

name2upper=bla
echo "${name2upper}"
> BLA

name2lower=BLA
echo "${name2lower}"
> bla
Die schnellste Lösung wäre wieder über Inline-Kommandos der bash (ab 4.0) zu arbeiten:
klein=${vongross,,}
gross=${vonklein^^}

vonklein=allesinklein
echo ${gross}
> ALLESINKLEIN

vongross=ALLESINGROSS
echo ${klein}
> allesingross

Avalox
2014-02-05, 09:31:55
Externe IP Adresse ermitteln.


wget -qO- http://ipecho.net/plain ;echo

PHuV
2014-02-05, 13:32:00
Stringbearbeitung in ksh/bash

text=abcdABCD1234WXYZ

# Gib alles ab Stelle 0 aus
echo ${text:0}
> abcdABCD1234WXYZ

# Gib alles ab Stelle 1 aus
echo ${text:1}
> bdcABCD1234WXYZ

# Gib alles ab Stelle 7 aus
echo ${text:7}
> D1234WXYZ

# Gib 4 Zeichen ab Stelle 8 aus
echo ${text:8:4}
> 1234

# Nur 4 Zeichen hinten anzeigen
echo ${text:(-4)}
echo ${text: -4} # Achtung, hier ist ein Leerzeichen zwischen : und - !
> WXYZ

# Hinten abschneiden.
echo ${text%WXYZ}
> abcdABCD1234

# Vorne abschneiden.
echo ${text#abcd}
> ABCD1234WXYZ

# Ersetze Textstellen ABDC durch efgh
echo ${text/ABCD/efgh}
> abcdefgh1234WXYZ

nalye
2014-02-13, 00:08:24
Externe IP Adresse ermitteln.


wget -qO- http://ipecho.net/plain ;echo

curl -s icanhazip.com
Flinker ;)

nalye
2014-02-24, 10:53:46
Doppelte Zeilen auf sehr schnelle Art und Weise löschen:

awk '!seen[$0]++' $FILE

PHuV
2015-06-22, 18:32:35
Ein Script debuggen kann man mit set -x, mit -vx kommen noch die Variablenersetzungen dazu.

console> sh -vx scriptname

Schicker ist es aber, es selbst im Script einzuschalten und gleich in eine entsprechende Logdatei umzuleiten:

#!/bin/ksh

set -vx
exec >dateiename 2>&1

code
:

nalye
2015-08-07, 00:03:08
BASH kann mit equalplus sogar recht gut logisch umgehen:

"normales" appenden

a=2
a+=5
echo $a
25

Stellenweises appenden

echo $a
25
((a+=12))
echo $a
37

Ins Array schieben

echo ${a[@]}
37
a+=(25)
echo ${a[@]}
37 25
echo ${a[0]}
37
echo ${a[1]}
25

sei laut
2015-08-07, 09:31:18
Coole Sache, funktioniert ja auch mit anderen Rechenoperatoren:
:$ a=20
:$ ((a-=3))
:$ echo $a
17
:$ ((a*=3))
:$ echo $a
51

Allerdings nicht bei der arraysache:
:$ echo $a
51
:$ a+=(10)
:$ echo ${a[@]}
51 10
:$ a-=(51)
bash: Syntaxfehler beim unerwarteten Wort »51«
:$

Ein Versuch wars wert :D

(del676)
2015-08-07, 10:20:32
Alle *.flac Dateien in einem Verzeichnis zu *.mp3 umwandeln:

parallel ffmpeg -i {} -qscale:a 0 {.}.mp3 ::: *.flac

ffmpeg und parallel muessen installiert sein, ist aber im Repository von Debian drin (also auch bei allen Derivaten)
Der mp3 encoder ist eigentlich Singlethreaded, aber dank parallel startet er einfach soviele Konvertierungen gleichzeitig, bis die CPU ausgelastet ist. :)

sei laut
2015-08-07, 11:56:33
Wer mit echo und Co in Dateien für Ausgaben schreibt, hat manchmal das Problem, daß jedes echo einen Delimiter/Newline/Zeilentrenner setzt, und somit immer eine neue Zeile erzeugt wird.

Eigentlich wurde dafür echo -n erfunden. Dass es das Feature als -e Angabe auch nochmal gibt, ist interessant. :D

PHuV
2015-08-07, 12:17:23
-e bietet eben die Möglichkeit, mit Escape-Sequenzen zu arbeiten.

Liszca
2015-08-28, 00:22:48
Im Firefox das Mausrad beschleunigen

about:config

mousewheel.default.delta_multiplier_y

50er Schritte, plusminus und für jeden sollte schnell was gefunden sein.

Original (https://jochenscomputer.wordpress.com/2014/01/12/firefox-tabs-individuell-zoomen/)

Trunk
2015-11-25, 10:24:53
Aliase für das Terminal:

#ls tuning
alias ls='ls -Flash --color=auto'
#netstat
alias netstat='sudo netstat -n -l -p'
#Dateien nach Größe sortiert ausgeben
alias sortfilesize='du -h . | sort -h'

Wie oft habe ich vergessen, netstat als root aufzurufen...
Als genereller Tipp: Kommandos, die Ihr oft braucht, in ~/.bashrc als alias definieren.
Mit type <befehl> sieht man, ob es sich um einen Alias handelt, oder eine binary/script was aufgerufen wird.

Trunk
2015-11-25, 15:58:01
Noch ein paar Tricks für Software unter Linux:

Die Programme, die im $PATH stehen, können ohne vollständige Pfadangabe aufgerufen werden. Doch was tun, wenn man nicht weiß, wo das Programm (die Binary) installiert ist?
which zeigt an, welchen Dateipfad man nutzt, wenn das Programm nur mit dem binary-namen aufgerufen wird.

Ein Programm installieren, ohne zu wissen wie es heißt? Anstatt Google zu bemühen, kann man auch einfach lokal suchen, mit apt-cache search

Und was wurde mit dem Paket alles auf meine Festplatte geschrieben? Die installierten Dateien kann man mit dpkg -L <paketname> abfragen. Hilft config-dateien, anleitungen, libraries etc. zu finden.


#~: type netstat
alias netstat='netstat -n -l -p'
#~: which netstat
/usr/sbin/netstat
#~: apt-cache search "Image viewer"
feh - Description description short description
#~: dpkg -L feh
/usr/doc/feh/readme.txt[...]

blutrausch
2015-11-25, 23:15:23
Im Firefox das Mausrad beschleunigen

about:config

mousewheel.default.delta_multiplier_y

50er Schritte, plusminus und für jeden sollte schnell was gefunden sein.

Original (https://jochenscomputer.wordpress.com/2014/01/12/firefox-tabs-individuell-zoomen/)


Vielen Dank! Hat mich schon seit Ewigkeiten aufgeregt, dass der so langsam Scrollt und jetzt stoße ich hier ganz unverhofft auf deinen Tipp :)

Zephyroth
2016-01-20, 14:01:08
ISO-Image auf einen USB-Stick schreiben:

dd bs=1M if=<isofile> of=/dev/sd<Laufwerkbuchstabe>

Bei mir zum Beispiel sieht das dann so aus (ausgehend davon, das man sich im Verzeichnis befindet wo das ISO-File liegt), der USB-Stick ist das Device "sdg":

dd bs=1M if=linuxmint_17.3_64bit.iso of=/dev/sdg

Der Befehl braucht für das schreiben im /dev Root-Rechte, also ggf. ist es notwendig mit sudo zu starten. Der Befehl schreibt das ISO-File Bit für Bit auf das Device, nicht auf die Partition auf dem Device.

Achtung! Der Befehl schreibt ohne weitere Rückfrage auf das genannte Device. Sollte man sich vertippen, oder das falsche Device angeben, kann schon mal die Systemplatte überschrieben werden.

Umgekehrt kann man natürlich genau so ein ISO-File eines Devices erstellen:

dd bs=1M if=/dev/sdg of=<isofile>

Grüße,
Zeph

Liszca
2016-02-24, 21:39:32
Mit sicherheit schon hier irgendwo hier meine variante für die bash (kann als einzeiler geschrieben werden):

foo=$(sha1sum debian-live-8.3.0-amd64-cinnamon-desktop.iso);
[[ '590311b752400e9dc1a9a6a710a6fe22289a3bca debian-live-8.3.0-amd64-cinnamon-desktop.iso' == $foo ]];
echo $?

echo $? Zeigt das Ergebnis an. 0 bedeutet kein Unterschied.

hoffe es ist auch für einsteiger selbsterklärend.

Wer eine Erklärung braucht einfach beschweren:)

Acid-Beatz
2016-02-25, 09:54:09
id - zeigt die Gruppen an, in denen man sich befindet. (zwar ein sehr trivialer Befehl aber ich selbst kannte ihn lange nicht und musste mir dann immer über Umwege helfen - aber warum schwierig, wenn es auch einfach geht)

Rolsch
2016-05-15, 08:23:39
Kopieren ohne überschreiben. Manche Linux-Boxen haben nur ein abgespecktes cp-Kommando welches das nicht direkt unterstützt. Wird bei mir verwendet um TV-Aufnahmen automatisiert auf den Server zu speichern:

n | cp -i Quelle Ziel

Rooter
2016-05-15, 12:41:24
Inxi – Informationen zu Hard- und Software (http://www.computerbase.de/2016-04/linux-wissen-inxi-informationen-zu-hard-und-software/)

MfG
Rooter

DekWizArt
2017-01-15, 10:46:38
Syntax Highlighting für Nano (http://how-to.wikia.com/wiki/How_to_use_syntax_highlighting_with_the_GNU_nano_text_editor?action=edit&section=3)

iuno
2017-01-15, 11:41:43
Syntax Highlighting für Nano (http://how-to.wikia.com/wiki/How_to_use_syntax_highlighting_with_the_GNU_nano_text_editor?action=edit&section=3)
Ich wuerde es jedem ans Herz legen, solche dotfiles irgendwie sinnvoll zu verwalten. Muss ja nicht zwangsweise git sein, aber vielleicht bei automatisierten Backups beruecksichigen.
Inspiration gibt es z.B. hier: https://dotfiles.github.io/
Es macht einfach Sinn, sich das zu sichern, wenn man die Sachen schon individuell anpasst. Das geht bei der shell los, ueber den Texteditor bis zu grafischen Tools oder Einstellungen der Desktopumgebung. Hilft auch wenn man mehrere Geraete benutzt, bei Neuinstallation usw.

DekWizArt
2017-02-05, 19:39:10
Bei mir zum Beispiel sieht das dann so aus (ausgehend davon, das man sich im Verzeichnis befindet wo das ISO-File liegt), der USB-Stick ist das Device "sdg":


Das sollte man z.B. mit dmesg aber vorher prüfen, dd ist da gnadenlos. ;)

aufkrawall
2017-02-26, 14:36:13
Mit Anwendungen auf Inhalte in Windows-Netzwerkfreigaben zuzugreifen kann problematisch sein, insbesondere ohne Passwortschutz oder mit KDE.

Mit mpv eine Mediendatei direkt öffnen (Wildcards für User/PW, ohne PW so lassen):
mpv smb://*:*@hostname/freigabename/"videoname.mp4"

Eine Netzwerkfreigabe als lokalen Ordner mit Schreibrechten für den Benutzer einbinden (gleiche Regelung wie oben bez. der Sternchen):
sudo mount -t cifs -o username=*,password=*,uid=1000,gid=1000,file_mode=0660,dir_mode=0770 //SERVERNAME.local/Netzwerk/ /home/user/mountpfad
(Rechte in weniger sicheren Umgebungen womöglich einschränken)

Mit letzterem Trick kann man unter KDE mit sämtlichen Programmen auf Dateien im Netzwerk zugreifen, als wären sie lokal vorhanden (ohne vorheriges komplettes Cachen, mit Drag & Drop etc.).
Wenn man das .local weglässt, muss man eine IP angeben.

Wenn man die IP eines Gerätes im Netzwerk herausfinden will:
ping -c 1 SERVERNAME.local

nalye
2017-02-26, 14:44:55
Wenn man die IP eines Gerätes im Netzwerk herausfinden will:
ping -c 1 SERVERNAME.local
Geht doch auch mit host

aufkrawall
2017-02-26, 14:47:34
Oha, stimmt. Und geht auch schneller.

aufkrawall
2017-04-05, 14:55:31
Nichts fürs Terminal, aber vielleicht trotzdem interessant:
Anleitungen für die gescheite Einrichtung von Windows-Freigaben via Samba-Server für zu Hause sind im Netz tatsächlich kaum existent, Fallstrick: Dateisystem-Rechte.

Verzeichnis mit Schreibrechten ohne Passwort und ohne Probleme mit Dateisystem-Rechten einrichten:
/etc/samba/smb.conf
[global]
workgroup = workgroup
server string = ""
map to guest = bad user

[Freigabename]
force user = linux-benutzername
path = /home/benutzer/freigabeordner
guest ok = yes
read only = no

Die Samba Dienste aktiviert man mit
# systemctl enable smbd.service
# systemctl enable nmbd.service
Also nicht "samba". ;)

nalye
2017-04-05, 15:46:26
NFS > SMB ;) Aber guter Hinweis, danke

Ganon
2017-04-05, 16:17:35
NFS funktioniert halt in Windows (je nach Version) beschissen bis gar nicht :D

edit:
Alle Dateien in einem Ordner in einen neuen Ordner verschieben, der den Namen der Datei hat:

#!/bin/bash
set -o errexit -o nounset
for file in *.txt
do
dir="${file%.txt}"
mkdir -- "$dir"
mv -- "$file" "$dir"
done


Dateiendung muss man natürlich anpassen.

sei laut
2017-04-07, 21:06:21
:~$ file=ffjhflshfs-ffdd.dddddd.dddjdd
:~$ dir=${file%.*}
:~$ echo $dir
:~$ ffjhflshfs-ffdd.dddddd

So kann man das ohne Rücksicht auf die Dateiendung machen,

PHuV
2017-04-09, 01:48:29
Das Kommando find hat als GNU-Version eine Erweiterung mit -delete,-empty und -ls neue Parameter bekommen.

Mußte man früher
find /verzeichnis -mtime +30 -exec rm -f {} \;
um alle Dateien größer 30 Tage zu löschen, geht das mit der Erweiterung viel einfacher mit
find /verzeichnis -mtime +30 -delete
Genauso braucht man nicht mehr
find /verzeichnis -mtime +30 -exec ls -l {} \;
schreiben, sondern verkürzt den Aufgruf mit
find /verzeichnis -mtime +30 -ls

Das funktioniert leider nicht mit den klassischen Unixen wie AIX, Solaris und HP-UX. Jedoch kann man heute auch hier entsprechende GNU-Varianten der Standardbefehle installieren.

aufkrawall
2017-06-23, 18:30:13
Den angemeldeten Benutzer mit Gewalt abmelden:loginctl terminate-user $USER
Kann nützlich sein, wenn das System Anstalten macht, einzufrieren (und man den Befehl dann auf einer Tastenkombi liegen hat). Natürlich muss man wegen Datenverlust aufpassen.

sei laut
2017-08-30, 15:51:03
Den angemeldeten Benutzer mit Gewalt abmelden:
Kann nützlich sein, wenn das System Anstalten macht, einzufrieren (und man den Befehl dann auf einer Tastenkombi liegen hat). Natürlich muss man wegen Datenverlust aufpassen.
Da kann man auch gleich den Prozess abschießen. loginctl macht vermutlich ähnliches..

aufkrawall
2017-08-30, 16:26:16
Viele Wege führen nach Rom, Xorg bietet auch selbst einen Hotkey für etwas ähnliches (muss man bei den meisten Distributionen aber erst freischalten). loginctl dürfte aber auch mit Wayland-Kompositoren gehen.

Liszca
2017-10-28, 17:57:03
Ein schönes Tutorial zu AWK
http://blog.jpalardy.com/posts/awk-tutorial-part-1/

PHuV
2017-11-30, 14:36:35
Heute habe ich mal so was schickes gebraucht, gefunden und genutzt:
IFS=':' read -a field <<< "1:2:3:4:5"
echo ${field[4]}
Damit kann man schön Dateinamen mit Trennzeichen entsprechend auseinandernehmen.

PHuV
2018-09-26, 13:45:10
Oh je, heute machte mir ein Alias große Probleme.

Problemstellung

Kunde verwendet Sonderzeichen wie $ im Kennwort für Datenbankzugriff. :facepalm:

user/Kw$$

Ich möchte gerne einen Alias dafür verwenden

sqlplus user/Kw$$@dbhost

Login per Konsole oder bash-Programmen geht nur mit

sqlplus user/'Kw$$'@dbhost

Das funktioniert aber NICHT mit alias!

Zig Versuche mit \ und " etc. scheiterten. Selbst bei stackoverflow glühen die Köpfe: https://stackoverflow.com/questions/1250079/how-to-escape-single-quotes-within-single-quoted-strings

Lösung

Nur das funktioniert, man muß mehrfach mit ' und " quoten und noch mal die $ mit \ escapen.
alias sq="sqlplus user'"'"'Kw\$\$'"'"'@dbhost"

Beim Abfrage per Terminal mit alias wird das daraus generiert:
alias sq='sqlplus user/'\''"Kw$$"'\''@dbhost'

:freak: Logik ahoi.

Liszca
2018-09-27, 19:53:50
Oh je, heute machte mir ein Alias große Probleme.

Problemstellung

Kunde verwendet Sonderzeichen wie $ im Kennwort für Datenbankzugriff. :facepalm:

:freak: Logik ahoi.

Verstehe ich dich richtig und du machst ein alias auf ein Passwort?

PHuV
2018-09-27, 23:20:51
Auf einen internen per VPN und ssh-key abgesicherten Testserver, ja.

aufkrawall
2018-09-27, 23:25:58
Einfach den per alias auszuführenden Befehl in ein Skript legen. ;)

sei laut
2018-10-22, 17:59:40
Hm aus
alias abc=$(echo "sqlplus user/Kw\$\$@dbhost")
wird bei ausgabe alias
alias abc='sqlplus user/Kw$$@dbhost'

Sieht korrekt aus, bin nur nicht sicher, obs geht. War zu faul, das jetzt zu testen.

sei laut
2019-01-11, 15:32:30
Falls man etwas von Host a nach Host b mit rsync gesynct hat und "numeric-ids" vergas (entscheidend bei lxc/docker) und man nicht alles neu syncen will.(denn die Dateien mit falschen Nutzern korrigiert er so erst einmal nicht, da der Inhalt identisch)


mv sync_dir synced_dir_bad
mkdir sync_dir
rsync -aAX --numeric-ids --link-dest="synced_dir_bad/" root@andererhost:/sync_dir/ sync_dir


Hat mir gestern wenige Stunden gespart.

Rooter
2019-09-07, 23:49:52
Hier sicher schon allen bekannt aber trotzdem:
Linux ate my RAM! (https://www.linuxatemyram.com/)

Interessanter ist die Testseite, die ganz am Ende verlinkt ist:
Experiments and fun with the Linux disk cache (https://www.linuxatemyram.com/play.html)

MfG
Rooter

JuergenH
2021-02-09, 16:50:49
Linux Mint 19.3:
Nachdem ich den AMD-Grafiktreiber deinstalliert hatte, funktionierte anschließend weder Tastatur noch Maus im GUI-Modus.

Reparatur im Terminal:

sudo apt-get install xserver-xorg-input-all


Nach Neustart war die Welt wieder in Ordnung.

Saugbär
2024-10-06, 14:13:38
Linux: Behandlung der RTC als lokale Zeit
Wenn sich die Uhrzeit beim Dualboot Windows - Linux immer verstellt

timedatectl set-local-rtc 1 --adjust-system-clock
Damit die Uhrzeit in der RTC als lokale Zeit behandelt, wie es Windows standardmäßig macht.

Die Änderung kann mit folgendem Befehl auch wieder rückgängig gemacht werden:
timedatectl set-local-rtc 0 --adjust-system-clock

exzentrik
2024-10-07, 15:27:57
Man kann auch Windows anweisen, sich an RTC zu halten:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:1

Nur als Ergänzung.