Verwendet man find und möchte man zum Beispiel mehrere Dateien mit bunzip2 entpacken werden die bunzip2 Prozesse nacheinander gestartet:
# find . -name "firefox-8.0*" -exec bunzip2 {} \; &
# ps aww | grep zip
43739 1 R+ 0:02.14 bunzip2 ./firefox-8.0.1.source.tar.bz2
Verwendet man find und xargs, werden alle Dateinamen an einen bunzip2 Prozess übergeben, welche die Dateien auch nacheinander entpackt:
# find . -name "firefox-8.0*" | xargs bunzip2 &
# ps aww | grep zip
13729 1 R+ 0:01.88 bunzip2 ./firefox-8.0.1.source.tar.bz2 ./firefox-8.0b3.source.tar.bz2 ./firefox-8.0b1.source.tar.bz2 ./firefox-8.0.source.tar.bz2 ./firefox-8.0.1.tar.bz2 ./firefox-8.0b6.source.tar.bz2 ./firefox-8.0b4.source.tar.bz2
Mit der -P Option von xargs kann nun angegeben werden wieviele Prozesse parallel gestartet werden sollen. Durch die -n Option wird nun jedem bunzip2 Prozess nur ein Argument, in diesem Falle ein Dateinamen übergeben.
# find . -name "firefox-8.0*" | xargs -n1 -P4 bunzip2 &
# ps aww | grep zip
14688 1 R+ 0:01.66 bunzip2 ./firefox-8.0.1.source.tar.bz2
14796 1 R+ 0:01.67 bunzip2 ./firefox-8.0b3.source.tar.bz2
14882 1 D+ 0:01.63 bunzip2 ./firefox-8.0b1.source.tar.bz2
15165 1 R+ 0:01.62 bunzip2 ./firefox-8.0.source.tar.bz2
Auf FreeBSD ist xargs standardmässig im Basissystem vorhanden. Mehr Informationen zu Sargs findet man in der Manpage xargs(1).
Mit Hilfe von porttree können die Abhängigkeiten eines Portes graphisch als Baum dargestellt werden. Im FreeBSD-Portbaum findet man porttree unter ports-mgmt/porttree:
# cd /usr/ports/ports-mgmt/porttree && make install clean
Mit der -A Option werden alle Ports aufgelistet, welche für das Bauen und das Ausführen des angegebenen Portes benötigt werden. Mit der -R Option werden alle Ports aufgelistet, welchen den angegebenen Port als Abhängigkeit haben. Folgendes Beispiel zeigt alle Abhängigkeiten von Firefox:
# porttree -A -R www/firefox
/usr/ports/accessibility
/usr/ports/arabic
/usr/ports/archivers
/usr/ports/astro
[...]
/usr/ports/x11-toolkits
/usr/ports/x11-wm
Depending on
0 +www/firefox
1 ++accessibility/atk
2 |++devel/gettext
3 ||++converters/libiconv
4 |||`devel/libtool
||`devel/libtool -> 4
5 |++devel/gio-fam-backend
6 ||++devel/gamin
|||++devel/gettext -> 2
7 |||++devel/glib20
||||++devel/gettext -> 2
8 ||||++devel/gmake
|||||`+devel/gettext -> 2
||||+devel/libtool -> 4
9 ||||+devel/pcre
10 ||||++devel/pkg-config
|||||`+devel/gmake -> 8
11 ||||+lang/perl5.10
12 ||||`lang/python26
|||++devel/gmake -> 8
|||+devel/libtool -> 4
|||`+devel/pkg-config -> 10
||++devel/glib20 -> 7
||++devel/gmake -> 8
||`+devel/pkg-config -> 10
|++devel/glib20 -> 7
|++devel/gmake -> 8
13 |++devel/gobject-introspection
14 ||++devel/bison
|||++devel/gettext -> 2
15 |||`devel/m4
||++devel/gettext -> 2
||++devel/gio-fam-backend -> 5
||++devel/glib20 -> 7
||++devel/gmake -> 8
16 ||++devel/libffi
|||`+devel/pkg-config -> 10
||+devel/libtool -> 4
||++devel/pkg-config -> 10
17 ||++graphics/cairo
|||++devel/gio-fam-backend -> 5
|||++devel/glib20 -> 7
|||+devel/libtool -> 4
|||++devel/pkg-config -> 10
18 |||+graphics/png
19 |||++print/freetype2
||||++devel/gmake -> 8
||||+devel/libtool -> 4
||||`+devel/pkg-config -> 10
20 |||++x11-fonts/fontconfig
||||++devel/gmake -> 8
||||+devel/libtool -> 4
||||++devel/pkg-config -> 10
||||++print/freetype2 -> 19
21 ||||`textproc/expat2
22 |||++x11/libXrender
||||++devel/pkg-config -> 10
23 ||||++x11/libX11
|||||++devel/pkg-config -> 10
24 |||||+devel/xorg-macros
25 |||||+x11-fonts/xf86bigfontproto
26 |||||+x11/bigreqsproto
27 |||||+x11/inputproto
28 |||||+x11/kbproto
29 |||||++x11/libXau
||||||++devel/pkg-config -> 10
30 ||||||`+x11/xproto
|||||| `+devel/pkg-config -> 10
31 |||||++x11/libXdmcp
||||||++devel/pkg-config -> 10
||||||`+x11/xproto -> 30
32 |||||++x11/libxcb
||||||++devel/gmake -> 8
33 ||||||++devel/libcheck
|||||||`+devel/gmake -> 8
34 ||||||++devel/libpthread-stubs
|||||||++devel/gmake -> 8
|||||||`+devel/pkg-config -> 10
||||||+lang/python26 -> 12
35 ||||||++textproc/libxslt
|||||||++devel/gmake -> 8
|||||||++devel/pkg-config -> 10
36 |||||||++security/libgcrypt
||||||||+devel/libtool -> 4
37 ||||||||`+security/libgpg-error
|||||||| ++converters/libiconv -> 3
|||||||| ++devel/gettext -> 2
|||||||| `devel/libtool -> 4
38 |||||||`+textproc/libxml2
||||||| ++converters/libiconv -> 3
||||||| ++devel/gmake -> 8
||||||| `+devel/pkg-config -> 10
||||||++x11/libXau -> 29
||||||++x11/libXdmcp -> 31
39 ||||||`+x11/xcb-proto
|||||| +lang/python26 -> 12
|||||| `+textproc/libxml2 -> 38
40 |||||+x11/xcmiscproto
41 |||||+x11/xextproto
|||||++x11/xproto -> 30
42 |||||`+x11/xtrans
||||| `+devel/pkg-config -> 10
43 ||||+x11/renderproto
||||`+x11/xproto -> 30
44 |||++x11/pixman
||||+devel/libtool -> 4
||||++devel/pkg-config -> 10
||||`lang/perl5.10 -> 11
45 |||`+x11/xcb-util
||| ++devel/gmake -> 8
46 ||| +devel/gperf
||| +devel/libtool -> 4
||| ++x11/libXau -> 29
||| ++x11/libXdmcp -> 31
||| `+x11/libxcb -> 32
||`lang/python26 -> 12
|+devel/libtool -> 4
|`+devel/pkg-config -> 10
47 +archivers/unzip
48 ++archivers/zip
|`archivers/unzip -> 47
++converters/libiconv -> 3
49 ++devel/autoconf213
50 |+devel/autoconf-wrapper
|+devel/m4 -> 15
|`lang/perl5.10 -> 11
51 ++devel/dbus-glib
52 |++devel/dbus
||++devel/gmake -> 8
||+devel/libtool -> 4
||++devel/pkg-config -> 10
53 ||+sysutils/gnome_subr
||+textproc/expat2 -> 21
||++textproc/libxml2 -> 38
54 ||++x11/libICE
|||++devel/pkg-config -> 10
|||++x11/xproto -> 30
|||`+x11/xtrans -> 42
55 ||++x11/libSM
|||++devel/pkg-config -> 10
|||+devel/xorg-macros -> 24
|||++x11/libICE -> 54
|||++x11/xproto -> 30
|||`+x11/xtrans -> 42
||`+x11/libX11 -> 23
|++devel/gettext -> 2
|++devel/gio-fam-backend -> 5
|++devel/glib20 -> 7
|++devel/gmake -> 8
|+devel/libtool -> 4
|`+devel/pkg-config -> 10
56 ++devel/desktop-file-utils
|++devel/gettext -> 2
|++devel/gio-fam-backend -> 5
|++devel/glib20 -> 7
|++devel/gmake -> 8
|`+devel/pkg-config -> 10
++devel/gio-fam-backend -> 5
++devel/glib20 -> 7
++devel/gmake -> 8
57 ++devel/libIDL
|++devel/bison -> 14
|++devel/gettext -> 2
|++devel/gio-fam-backend -> 5
|++devel/glib20 -> 7
|++devel/gmake -> 8
|`+devel/pkg-config -> 10
58 +devel/libevent
59 +devel/libexecinfo
60 ++devel/libnotify
|++accessibility/atk -> 1
|++devel/gettext -> 2
|++devel/gio-fam-backend -> 5
|++devel/glib20 -> 7
|++devel/gmake -> 8
|++devel/gobject-introspection -> 13
|+devel/libtool -> 4
|++devel/pkg-config -> 10
61 |++textproc/intltool
||++converters/libiconv -> 3
||++devel/gmake -> 8
||+lang/perl5.10 -> 11
62 ||`+textproc/p5-XML-Parser
|| +lang/perl5.10 -> 11
|| `textproc/expat2 -> 21
63 |++x11-toolkits/gtk20
||++accessibility/atk -> 1
||++devel/gettext -> 2
||++devel/gio-fam-backend -> 5
||++devel/glib20 -> 7
||++devel/gmake -> 8
||++devel/gobject-introspection -> 13
||+devel/libtool -> 4
||++devel/pkg-config -> 10
64 ||++graphics/gdk-pixbuf2
|||++devel/gio-fam-backend -> 5
|||++devel/glib20 -> 7
|||++devel/gmake -> 8
|||++devel/gobject-introspection -> 13
|||+devel/libtool -> 4
|||++devel/pkg-config -> 10
65 |||++graphics/jasper
||||+archivers/unzip -> 47
||||+devel/libtool -> 4
66 ||||`+graphics/jpeg
|||| `devel/libtool -> 4
|||++graphics/jpeg -> 66
|||+graphics/png -> 18
67 |||++graphics/tiff
||||+devel/libtool -> 4
68 ||||+graphics/jbigkit
||||`+graphics/jpeg -> 66
69 |||++x11-toolkits/libXt
||||++devel/pkg-config -> 10
||||+x11/kbproto -> 28
||||++x11/libSM -> 55
||||++x11/libX11 -> 23
||||`+x11/xproto -> 30
|||++x11/libX11 -> 23
70 |||`+x11/libXi
||| ++devel/pkg-config -> 10
||| +x11/inputproto -> 27
||| ++x11/libX11 -> 23
71 ||| ++x11/libXext
||| |++devel/pkg-config -> 10
||| |++x11/libX11 -> 23
||| |++x11/libXau -> 29
||| |+x11/xextproto -> 41
||| |`+x11/xproto -> 30
||| +x11/xextproto -> 41
||| `+x11/xproto -> 30
72 ||++graphics/gtk-update-icon-cache
|||++accessibility/atk -> 1
|||++devel/gettext -> 2
|||++devel/gio-fam-backend -> 5
|||++devel/glib20 -> 7
|||++devel/gmake -> 8
|||++devel/gobject-introspection -> 13
|||+devel/libtool -> 4
|||++devel/pkg-config -> 10
|||++graphics/gdk-pixbuf2 -> 64
|||+lang/perl5.10 -> 11
73 |||+misc/hicolor-icon-theme
74 |||++misc/shared-mime-info
||||++devel/gettext -> 2
||||++devel/gio-fam-backend -> 5
||||++devel/glib20 -> 7
||||++devel/gmake -> 8
||||++devel/pkg-config -> 10
||||++textproc/intltool -> 61
||||`+textproc/libxml2 -> 38
75 |||++x11-toolkits/pango
||||++devel/gettext -> 2
||||++devel/gio-fam-backend -> 5
||||++devel/glib20 -> 7
||||++devel/gmake -> 8
||||++devel/gobject-introspection -> 13
||||+devel/libtool -> 4
||||++devel/pkg-config -> 10
||||++graphics/cairo -> 17
||||++print/freetype2 -> 19
76 ||||++x11-fonts/encodings
77 |||||++x11-fonts/bdftopcf
||||||++devel/pkg-config -> 10
78 ||||||`+x11-fonts/libXfont
|||||| ++devel/pkg-config -> 10
|||||| ++print/freetype2 -> 19
79 |||||| +x11-fonts/fontsproto
80 |||||| ++x11-fonts/libfontenc
|||||| |++devel/pkg-config -> 10
|||||| |`+x11/xproto -> 30
|||||| ++x11/xproto -> 30
|||||| `+x11/xtrans -> 42
81 |||||+x11-fonts/font-util
82 |||||`+x11-fonts/mkfontscale
||||| ++devel/pkg-config -> 10
||||| ++print/freetype2 -> 19
||||| ++x11-fonts/libfontenc -> 80
||||| `+x11/xproto -> 30
83 ||||++x11-fonts/libXft
|||||++devel/pkg-config -> 10
|||||++print/freetype2 -> 19
|||||++x11-fonts/fontconfig -> 20
|||||++x11/libXrender -> 22
|||||`+x11/xproto -> 30
84 ||||++x11-fonts/xorg-fonts-truetype
85 |||||++x11-fonts/bitstream-vera
||||||`+x11-fonts/fontconfig -> 20
|||||++x11-fonts/encodings -> 76
86 |||||++x11-fonts/font-bh-ttf
||||||++devel/pkg-config -> 10
||||||++x11-fonts/fontconfig -> 20
87 ||||||++x11-fonts/mkfontdir
|||||||++devel/pkg-config -> 10
|||||||`+x11-fonts/mkfontscale -> 82
||||||`+x11-fonts/mkfontscale -> 82
88 |||||++x11-fonts/font-misc-ethiopic
||||||++devel/pkg-config -> 10
||||||++x11-fonts/fontconfig -> 20
||||||++x11-fonts/mkfontdir -> 87
||||||`+x11-fonts/mkfontscale -> 82
89 |||||`+x11-fonts/font-misc-meltho
||||| ++devel/pkg-config -> 10
||||| ++x11-fonts/fontconfig -> 20
||||| ++x11-fonts/mkfontdir -> 87
||||| `+x11-fonts/mkfontscale -> 82
||||`+x11/libXrender -> 22
|||++x11/libX11 -> 23
90 |||++x11/libXcomposite
||||++devel/pkg-config -> 10
91 ||||+x11/compositeproto
92 ||||+x11/fixesproto
||||++x11/libX11 -> 23
||||++x11/libXext -> 71
93 ||||++x11/libXfixes
|||||++devel/pkg-config -> 10
|||||+x11/fixesproto -> 92
|||||++x11/libX11 -> 23
|||||+x11/xextproto -> 41
|||||`+x11/xproto -> 30
||||`+x11/xproto -> 30
94 |||++x11/libXcursor
||||++devel/pkg-config -> 10
||||+x11/fixesproto -> 92
||||++x11/libX11 -> 23
||||++x11/libXfixes -> 93
||||++x11/libXrender -> 22
||||+x11/xextproto -> 41
||||`+x11/xproto -> 30
95 |||++x11/libXdamage
||||++devel/pkg-config -> 10
96 ||||+x11/damageproto
||||+x11/fixesproto -> 92
||||++x11/libX11 -> 23
||||++x11/libXfixes -> 93
||||+x11/xextproto -> 41
||||`+x11/xproto -> 30
|||++x11/libXext -> 71
|||++x11/libXfixes -> 93
|||++x11/libXi -> 70
97 |||++x11/libXinerama
||||+devel/libtool -> 4
||||++devel/pkg-config -> 10
||||++x11/libX11 -> 23
||||++x11/libXext -> 71
||||+x11/xextproto -> 41
98 ||||`x11/xineramaproto
99 |||++x11/libXrandr
||||++devel/pkg-config -> 10
||||++x11/libX11 -> 23
||||++x11/libXext -> 71
||||++x11/libXrender -> 22
100 ||||+x11/randrproto
||||+x11/renderproto -> 43
||||+x11/xextproto -> 41
||||`+x11/xproto -> 30
|||`+x11/libXrender -> 22
||+lang/perl5.10 -> 11
||+misc/hicolor-icon-theme -> 73
||++misc/shared-mime-info -> 74
101 ||++print/cups-client
|||`+devel/gmake -> 8
||++x11-toolkits/pango -> 75
||++x11/libX11 -> 23
||++x11/libXcomposite -> 90
||++x11/libXcursor -> 94
||++x11/libXdamage -> 95
||++x11/libXext -> 71
||++x11/libXfixes -> 93
||++x11/libXi -> 70
||++x11/libXinerama -> 97
||++x11/libXrandr -> 99
||`+x11/libXrender -> 22
|`+x11-toolkits/pango -> 75
102 ++devel/nspr
|`+devel/gmake -> 8
++devel/pkg-config -> 10
103 ++devel/yasm
|++converters/libiconv -> 3
|`+devel/gettext -> 2
++graphics/cairo -> 17
104 ++graphics/libGL
|++devel/gmake -> 8
105 |++devel/makedepend
||++devel/pkg-config -> 10
||`+x11/xproto -> 30
106 |++graphics/libdrm
||`+devel/libpthread-stubs -> 34
|+textproc/expat2 -> 21
107 |+x11/dri2proto
108 |+x11/glproto
|++x11/libX11 -> 23
|++x11/libXdamage -> 95
|++x11/libXext -> 71
|++x11/libXfixes -> 93
109 |`+x11/libXxf86vm
| ++devel/pkg-config -> 10
| ++x11/libX11 -> 23
| ++x11/libXext -> 71
| +x11/xextproto -> 41
110 | +x11/xf86vidmodeproto
| `+x11/xproto -> 30
+lang/perl5.10 -> 11
++textproc/intltool -> 61
++x11-toolkits/gtk20 -> 63
++x11-toolkits/libXt -> 69
++x11-toolkits/pango -> 75
++x11/libICE -> 54
++x11/libSM -> 55
++x11/libX11 -> 23
++x11/libXext -> 71
++x11/libXi -> 70
++x11/libXinerama -> 97
111 +x11/printproto
`+x11/xproto -> 30
Required by:
0 +www/firefox
1 +german/bsdforen-firefox-searchplugin
2 +german/bsdgroup-firefox-searchplugin
3 `www/firefox-i18n
Auch können nur gewisse Abhängigkeiten abgefragt werden. Die -f Option zeigt nur die Abhängigkeiten welche zum Herunterladen des Quellcodes gebraucht werden, die -e Option jene die zum Auspacken des Quellcodes verwendet werden, die -p Option die Patch-Abhängigkeiten, die -b Option alle Ports die zum Bauen gebraucht werden, die -l Optionen alle Ports die aufgrund ihrer Libraries verwendet werden und mit der -r Option alle Ports die zum Ausführen benötigt werden.
Folgendes Beispiel zeigt alle Abhängigkeiten die zum Bauen von LLVM gebraucht werden:
# porttree -A -R -b devel/llvm
/usr/ports/accessibility
/usr/ports/arabic
[...]
/usr/ports/x11-themes
/usr/ports/x11-toolkits
/usr/ports/x11-wm
Depending on
0 +devel/llvm
1 +devel/gmake
2 `lang/perl5.10
Required by:
0 +devel/llvm
1 +graphics/opengtl
2 +lang/clang
3 +lang/ldc-devel
4 +lang/llvm-gcc4
5 `lang/pure
Mehr Informationen und alle Optionen von porttree findet man in der Manpage porttree(1).
Mit Hilfe von comm lassen sich die identischen Zeilen zweier Dateien anzeigen. Dazu müssen beide Dateien sortiert sein:
# cat datei1
1099
2001
3434
4002
# cat datei2
3434
4002
7098
8567
Führt man nun comm mit den beiden Dateien aus, werden in der ersten Spalte alle Zeilen angezeigt, welche nur in der ersten Datei vorkommen, in der zweiten Spalte die der zweiten Datei und in der dritten Spalte jene Zeilen welche in beiden Dateien vorkommen:
# comm datei1 datei2
1099
2001
3434
4002
7098
8567
Sollen nur die identischen Zeilen angezeigt werden, kann die Ausgabe der ersten beiden Zeilen durch die -1 und -2 Option verhindert werden:
# comm -12 datei1 datei2
3434
4002
Soll die Gross-/Kleinschreibung beim Vergleichen ignoriert werden, kann dies mit der -i Option gemacht werden:
# cat datei1
1099
2001
a3434
b4002
# cat datei2
A3434
B4002
7098
8567
# comm datei1 datei2
1099
2001
A3434
B4002
7098
8567
a3434
b4002
# comm -i datei1 datei2
1099
2001
a3434
b4002
7098
8567
Auf FreeBSD ist comm standardmässig im Basissystem vorhanden. Mehr Informationen zu comm findet man in der Manpage comm(1).
Mit Hilfe con cloc lassen sich die Anzahl Codezeilen eines Programms oder Projektes gezählt werden. Im FreeBSD-Portbaum findet man cloc unter misc/cloc:
# cd /usr/ports/misc/cloc && make install clean
Nun können einzelne Dateien oder auch gleich ein Tarball an cloc übergeben werden und cloc zeigt nun die Anzahl Dateien, in welcher Sprache programmiert wurde und wieviel Linien Code und Kommentare darin enthalten sind. Im folgenden Beispiel werden die Anzahl Codezeilen von der Tinderbox und Firefox gezählt:
# cloc tinderbox-3.4.tar
152 text files.
144 unique files.
70 files ignored.
http://cloc.sourceforge.net v 1.53 T=1.0 s (76.0 files/s, 17577.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Perl 16 1414 500 5689
Bourne Shell 15 739 486 3581
PHP 28 652 767 3034
CSS 2 53 2 318
SQL 12 1 0 113
C 1 13 20 84
Javascript 1 14 12 62
ASP.Net 1 1 5 17
-------------------------------------------------------------------------------
SUM: 76 2887 1792 12898
-------------------------------------------------------------------------------
# cloc firefox-8.0b6.source.tar
47536 text files.
46192 unique files.
10413 files ignored.
http://cloc.sourceforge.net v 1.53 T=287.0 s (127.0 files/s, 26538.4 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
C++ 3870 293823 318264 1475693
C 1940 177517 275465 1000436
Javascript 8013 205654 272616 815038
HTML 13669 98489 16681 745324
C/C++ Header 5104 135879 378341 585016
Bourne Shell 226 22193 25651 143820
IDL 1257 12490 0 123888
Assembly 267 15318 11806 99121
XML 661 6633 3027 52983
Python 288 12048 20652 49905
CSS 513 11115 10893 46880
m4 39 4711 675 39842
Java 51 2733 6946 23000
Perl 168 4191 8657 19751
DTD 161 2438 2970 8925
Teamcenter def 33 23 4 4377
make 104 1644 4893 3982
SKILL 7 89 3 2838
Objective C 10 683 659 2767
yacc 2 188 54 1972
lex 3 148 77 691
Expect 7 105 177 451
Bourne Again Shell 7 109 349 378
XSLT 13 61 84 322
Korn Shell 4 44 249 303
PHP 2 75 126 248
awk 4 53 46 213
Pascal 3 41 28 206
Ada 1 5 0 49
DOS Batch 5 4 36 29
ASP.Net 1 2 0 16
C Shell 1 1 0 11
D 2 7 90 10
sed 2 1 0 10
--------------------------------------------------------------------------------
SUM: 36438 1008515 1359519 5248495
--------------------------------------------------------------------------------
Alle Optionen von cloc erhält man mit der --help Option.
Nach 8 Monaten Pause und mit einem Monat Verspätung geht es nun wieder weiter mit chruetertee.ch.