Nützliche Shell-Einzeiler - Seite 2

Seite 2 von 3 - Forum: Linux and other OS auf overclockers.at

URL: https://www.overclockers.at/linux/nuetzliche_shell-einzeiler_217442/page_2 - zur Vollversion wechseln!


Rektal schrieb am 10.08.2010 um 13:31

Alle de-installierten Debian Packages purgen (hab ich irgendwo mal gesehen, brauch ich immer wieder); Ubuntu-agnostisch (wenns das Wort gibt :) :

Code:
sudo aptitude purge `dpkg --get-selections | grep deinstall | awk '{print $1}'`


t3mp schrieb am 14.10.2012 um 13:15

Bin gerade dabei, mit meiner Gentoo-Installation am ThinkPad auf eine SSD umzusiedeln - da eh ein paar Dinge neu sein werden (GPT statt MBR, grub2 statt grub) und die Partitionierung völlig umgestoßen wird, ist das eine gute Gelegenheit sich durch eine Neuinstallation von eventuell angesammelter debris zu befreien. Da man aber ohnehin schon über ein Gentoo System verfügt, das man dem Prozessor in mühevoller Kompilierzeit abgerungen hat, wäre nichts dümmer als das alles noch einmal zu tun. Zum Glück hat sich das schon mal jemand gedacht:

Code:
for x in /var/db/pkg/*/*; do quickpkg --include-config=y $(echo $x | sed 's#/var/db/pkg/#=#'); done
Alle installierten Packages inklusive Dependencies werden damit als BINPKGs in /usr/portage/packages abgelegt.

Bleibt nur noch die make.conf, world und world_sets und /etc/portage nebst einiger anderer Dinge auf die SSD zu übertragen und /usr/portage aus der alten Installation einzuhängen vor dem chroot - mit dem zusätzlichen emerge flag "-k" werden dann die existierenden BINPKGs verwendet anstatt CPU-Zeit zu verschwenden. :)


watchout schrieb am 27.12.2013 um 18:46

Löscht alle Mails eines Users aus der Mail Queue:

Code:
for str in $(mailq | grep -E "^[0-9A-F].*username" | sed "s/ .*//g"); do postsuper -d $str; done

("username" mit dem user ersetzen)

Benötigt:


watchout schrieb am 02.06.2014 um 10:52

Ping mit timestamp:

Code:
ping google.com | while read pong; do echo "$(date): $pong"; done
Output:
Code:
Mon Jun  2 10:30:19 CEST 2014: PING google.com (64.15.113.29): 56 data bytes
Mon Jun  2 10:30:19 CEST 2014: 64 bytes from 64.15.113.29: icmp_seq=0 ttl=57 time=10.741 ms
Mon Jun  2 10:30:20 CEST 2014: 64 bytes from 64.15.113.29: icmp_seq=1 ttl=57 time=26.582 ms
Mon Jun  2 10:30:21 CEST 2014: 64 bytes from 64.15.113.29: icmp_seq=2 ttl=57 time=10.318 ms
Mon Jun  2 10:30:22 CEST 2014: 64 bytes from 64.15.113.29: icmp_seq=3 ttl=57 time=16.781 ms
Mon Jun  2 10:30:23 CEST 2014: 64 bytes from 64.15.113.29: icmp_seq=4 ttl=57 time=15.884 ms
Mon Jun  2 10:30:24 CEST 2014: 64 bytes from 64.15.113.29: icmp_seq=5 ttl=57 time=11.461 ms
PS: Nur mit Uhrzeit:
Code:
ping google.com | while read pong; do echo "$(date +%H:%M:%S): $pong"; done


COLOSSUS schrieb am 02.06.2014 um 11:22

Wem seconds since epoch genuegen, der verwende stattdessen:

Code:
ping -D <HOST>


watchout schrieb am 04.06.2014 um 13:14

Zitat von COLOSSUS
Wem seconds since epoch genuegen, der verwende stattdessen:
Code:
ping -D <HOST>
Das geht unter Linux, aber nicht BSD ;)
ping hat unterschiedliche Command-Line Parameter in BSD und Linux, einer der Unterschiede ist dass es den Time-Stamp (-D) unter BSD nicht gibt.


COLOSSUS schrieb am 04.06.2014 um 13:29

Wenn wir uns hier im Thread auf 100%ige POSIX-Kompatibilitaet bzw. Portabilitaet besinnen wollen, haben wir eine ganz schirche Dose voller Wuermer offen ;)


GrandAdmiralThrawn schrieb am 04.06.2014 um 14:44

Hier kommt der Sinn!!

Code:
for i in {1..8}; do (while true; do true; done) & done
Spawned 8 Subshells, die ewig nichts tun, aber davon recht viel. ;) Grund: Ich wollte meine neue USV etwas testen, und hab schnell sinnlose Last auf allen 8 CPU Threads haben wollen um ein wenig mehr Strom zu verheizen. ;)

Was besseres is mir auf die Schnelle nicht eingefallen..


issue schrieb am 04.06.2014 um 15:11

Zitat von GrandAdmiralThrawn
Hier kommt der Sinn!!
Code:
for i in {1..8}; do (while true; do true; done) & done
Spawned 8 Subshells, die ewig nichts tun, aber davon recht viel. ;) Grund: Ich wollte meine neue USV etwas testen, und hab schnell sinnlose Last auf allen 8 CPU Threads haben wollen um ein wenig mehr Strom zu verheizen. ;)

Was besseres is mir auf die Schnelle nicht eingefallen..
Code:
for i in {1..8};do yes > /dev/null &;done 
sollte aber relativ aufs gleiche rauskommen ;)

edit: thx that


that schrieb am 04.06.2014 um 21:40

Zitat von IsSuE
Code:
for i in {1..8};do yes > /dev/null;done 
sollte aber relativ aufs gleiche rauskommen ;)

Ich würde sagen, da fehlt ein "&".


watchout schrieb am 17.10.2014 um 16:45

Generieren von JavaDoc für einen kompletten Tree. (Quelle)

Code:
find . -type f -name "*.java" | xargs javadoc -d outputdir

Benötigt:


COLOSSUS schrieb am 17.10.2014 um 21:18

Statt des klassichen Pipe-Konstrukts

Code:
find ... | xargs <programm> <prog_args>
verwendet man besser
Code:
find ... -exec <programm> <prog_args> {} +

`find` ersetzt dabei die Zeichenfolge {} mit der Liste der gefundenen Pfadnamen, und zwar in einer Art und Weise, die auch bei exotischen Dateinamen (mit '\n' und dergleichen im Pfadnamen) nicht bricht. Auszerdem spart man sich einen zusaetzlichen Prozess ;)


COLOSSUS schrieb am 17.10.2014 um 21:23

Zitat von IsSuE
Code:
for i in {1..8};do yes > /dev/null &;done 
sollte aber relativ aufs gleiche rauskommen ;)

edit: thx that

Weil's mir gerade aufgefallen ist: &; ist keine korrekte Bourne-sh-Syntax; der vermeintliche Fix ruiniert deinen kleinen Einzeiler :D Man muss sich in diesem Kontext ENTWEDER fuer &, ODER fuer ; entscheiden. Das kaufmaennische Und backgrounded das Kommando, dessen Kommandozeile durch es terminiert wird, waehrend der Semikolon die Shell bis auf das Terminieren des Kommandos warten laesst.

Du willst also eigentlich das hier:

Code:
for i in {1..8}; do yes > /dev/null & done


issue schrieb am 17.10.2014 um 21:50

Zitat von COLOSSUS
Weil's mir gerade aufgefallen ist: &; ist keine korrekte Bourne-sh-Syntax; der vermeintliche Fix ruiniert deinen kleinen Einzeiler :D Man muss sich in diesem Kontext ENTWEDER fuer &, ODER fuer ; entscheiden. Das kaufmaennische Und backgrounded das Kommando, dessen Kommandozeile durch es terminiert wird, waehrend der Semikolon die Shell bis auf das Terminieren des Kommandos warten laesst.

Du willst also eigentlich das hier:

Code:
for i in {1..8}; do yes > /dev/null & done

Bei mir haben beide das gleiche ergebnis; es werden 8 mal yes in den hintergrund geforkt.
Kann das sein, dass da die zsh nicht so heikel ist?


COLOSSUS schrieb am 17.10.2014 um 21:59

Ja, kann schon sein - POSIX-konform ist das allerdings nicht.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026