"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Nützliche Shell-Einzeiler

COLOSSUS 08.07.2010 - 19:11 19703 39 Thread rating
Posts

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4421
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

I Love Gasoline
Avatar
Registered: Mar 2003
Location: upstairs
Posts: 6254
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. :)
Bearbeitet von t3mp am 14.10.2012, 13:20

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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:
  • sed
  • postfix - Output von "mailq" kann auch mit verschiedenen postfix versionen variieren
  • bash - müsste aber mit den meisten Shells funktionieren

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11902
Wem seconds since epoch genuegen, der verwende stattdessen:
Code:
ping -D <HOST>

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11902
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

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3682
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

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3601
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
Bearbeitet von issue am 05.06.2014, 10:41

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11326
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Generieren von JavaDoc für einen kompletten Tree. (Quelle)

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

Benötigt:
  • java
Bearbeitet von watchout am 17.10.2014, 16:48

COLOSSUS

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11902
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

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11902
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

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3601
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

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11902
Ja, kann schon sein - POSIX-konform ist das allerdings nicht.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz