BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Mehrfach vorhandene Zeilen einer Datei entfernen

In einer sortierten Textdatei lassen sich identische Zeilen entfernen oder zählen. Verwendet man uniq ohne Optionen, so werden alle mehrfach vorhandenen Zeilen entfernt:

# cat test
AAA
aaa
aaa
aaa
bbb
ccc
ccc
# uniq test
AAA
aaa
bbb
ccc

Mit der -c Option kann die Anzahl identischer Zeilen gezählt werden:

# uniq -c test
   1 AAA
   3 aaa
   1 bbb
   2 ccc

Soll die Gross-/Kleinschreibung ignoriert werden, kann die -i Option verwendet werden:

# uniq -ci test
   4 AAA
   1 bbb
   2 ccc

Mit der -d Option werden nur mehrfach vorhandenen Zeilen angezeigt, mit der -u Option nur solche, die nur einmal vorhanden sind.

# uniq -d test
aaa
cc
# uniq -u test
AAA
bbb

Auf FreeBSD und OpenBSD ist uniq im Basissystem vorhanden, allerdings kann die -i Option nur auf FreeBSD verwendet werden. Mehr Informationen zu uniq findet man in der Manpage uniq(1).

Comments (1)  Permalink

Komprimierte Textdateien vergleichen

Mit Hilfe von zdiff lassen sich mit compress(1) oder gzip(1) komprimierte Dateien miteinander vergleichen, ohne dass die Dateien entpackt werden müssen:

# file test.gz test2.gz 
test.gz:  gzip compressed data, was "test.patch", from Unix, last modified: Thu Sep 11 10:49:40 2008
test2.gz: gzip compressed data, was "test.patch", from Unix, last modified: Thu Oct  9 20:02:57 2008
# zdiff test.gz test.gz
14c14
<               Alte Zeile
---
>               Neue Zeile 

Sowohl auf FreeBSD als auch auf OpenBSD ist zdiff im Basissystem vorhanden. Mehr Informationen zu zdiff findet man in der Manpage zdiff(1).

 Permalink

Compress-Dateien in gzip-komprimierte Dateien umwandeln

Mit Hilfe von znew können mit compress komprimierte Dateien in gzip-komprimierte Dateien umgewandelt werden:

# ls -al test.tar.Z
-rw-r--r--  1 test  wheel  72717 21 Sep 23:29 test.tar.Z
# file test.tar.Z
test.tar.Z: compress'd data 16 bits
# znew test.tar.Z
# ls -al test.tar.gz
-rw-r--r--  1 test  wheel  39884 21 Sep 23:29 test.tar.gz
# file test.tar.gz
test.tar.gz: gzip compressed data, from Unix, last modified: Tue Oct  7 17:12:14 2008

Verwendet man die -t Option von znew, wird zuerst die Integrität der neu erstellten gzip-Datei überprüft, bevor die compress-Datei gelöscht wird. Soll die Kompressionsrate von gzip erhöht werden, kann die -9 Option verwendet werden. Mit der -v Option wird die erreichte Kompressionsrate ausgegeben:

# znew -v test.tar.Z 
90.5%

Auf FreeBSD und OpenBSD ist znew bereits im Basissystem vorhanden. Mehr Informationen findet man in der Manpage znew(1).

 Permalink

Informationen über einen Prozess anzeigen lassen

Auf FreeBSD können mit Hilfe von procstat verschiedene Informationen zu einem Prozess angezeigt werden. Dazu kann entweder die Prozess-ID an procstat übergeben werden, damit nur Informationen zu einem einzelnen Prozess angezeigt werden, oder man verwendet die -a Option, damit die Informationen zu allen Prozessen angezeigt werden:

# procstat 1830
  PID  PPID  PGID   SID  TSID THR LOGIN    WCHAN     EMUL          COMM        
 1830  1820  1830  1820  1820   1 beat     ttyin     FreeBSD ELF32 vi 

Mit Hilfe der -b Option werden Informationen zum ausgeführten Programm angezeigt:

# procstat -b 1830
  PID COMM             PATH                                                 
 1830 vi               /usr/bin/vi

Durch die -c Option werden die Argumente des ausgeführten Programms angezeigt:

# procstat -c 1830
  PID COMM             ARGS                                                 
 1830 vi               vi chruetertee/test

Alle offenen File-Deskriptoren des Programms können mit der -f Option ausgelesen werden:

# procstat -f 1830
  PID COMM               FD T V FLAGS    REF  OFFSET PRO NAME        
 1830 vi                cwd v d --------   -       - -   /usr/home/test    
 1830 vi               root v d --------   -       - -   /                 
 1830 vi                  0 v c rw------   9   22529 -   -                 
 1830 vi                  1 v c rw------   9   22529 -   -                 
 1830 vi                  2 v c rw------   9   22529 -   -                 
 1830 vi                  3 v r r----n-l   1    2341 -   /usr/home/test/chruetertee/test
 1830 vi                  4 v r rw------   1       0 -   /var/tmp/vi.recover/vi.qE5gVH
 1830 vi                  5 v r rw------   1       0 -   -                 
 1830 vi                  6 v r rw-----l   1     469 -   /var/tmp/vi.recover/recover.fv0apk

Ab dem kommenden FreeBSD 7.1 Release wird procstat im Basissystem vorhanden sein. Weitere Optionen und die Beschreibung aller Spalten der Ausgabe von procstat findet man in der Manpage procstat(1).

 Permalink

Speicherplatz der Benutzer mit Quotas einschränken

Mit Hilfe von Quotas kann der Speicherplatz, welchen die Benutzer zur Verfügung haben, eingeschränkt werden. Dazu muss die Quota Option in der Kernelkonfiguration vorhanden sein:

options		QUOTA

Ist die Option noch nicht vorhanden, muss der Kernel neu gebaut werden:

# cd /usr/src && make kernel KERNCONF=<Name der Kernelkonfiguration>

Nun können die Quotas in der /etc/rc.conf aktiviert werden. Normalerweise werden die Quotas beim Systemstart überprüft. Da die Überprüfung unter Umständen einige Zeit in Anspruch nehmen kann, kann sie mit check_quotas="NO" in der rc.conf deaktiviert werden:

# echo 'enable_quotas="YES"' >> /etc/rc.conf
# echo 'check_quotas="NO"' >> /etc/rc.conf

In der /etc/fstab kann nun festgelegt werden, auf welchen Dateisystemen Quotas eingerichtet werden sollen. Möchte man die Quotas pro Benutzer aktivieren, benutzt man die Option userquotas, für Gruppen groupquota:

# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /               ufs     rw              1       1
/dev/ad0s1e             /tmp            ufs     rw              2       2
/dev/ad0s1f             /usr            ufs     rw              2       2
/dev/ad0s1g             /usr/home       ufs     rw,userquota    2       2
/dev/ad0s1d             /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

Nun muss die Maschine neu gestartet werden, um den neuen Kernel zu laden und die Quotas zu aktvieren:

# shutdown -r now

Ist die Maschine neu gestartet, können die Quotas für die Benutzer festgelegt werden. Dazu verwendet man die -u Option von edquota. Sollen die Quotas pro Gruppe festgelegt werden, verwendet man die -g Option:

# edquota -u test
edquota: creating quota file /usr/home/quota.user

Nun wird ein Texteditor geöffnet. Damit können die Limits für den verwendeten Speicherplatz und/oder die belegten Inodes gesetzt werden. Das Soft-Limit kann vom Benutzer für eine gewisse Zeit (normalerweise 7 Tage) überschritten werden, das Hard-Limit kann nicht überschritten werden:

Quotas for user test:
/usr/home: kbytes in use: 0, limits (soft = 1024000, hard = 2048000)
        inodes in use: 0, limits (soft = 1024, hard = 2048)

Nach dem Speichern der Datei kann die aktuelle Quota-Konfiguration abgerufen werden:

# quota -v test
Disk quotas for user test (uid 1001):
     Filesystem   usage   quota   limit   grace   files   quota   limit   grace
      /usr/home      20  1024000 2048000              10    1024    2048

Überschreitet der Benutzer das Soft-Limit, wird die Zeit, wie lange das Soft-Limit noch überschritten werden kann, angezeigt:

# quota -v test
Disk quotas for user test (uid 1001):
     Filesystem   usage   quota   limit   grace   files   quota   limit   grace
      /usr/home 1152644* 1024000 2048000   7days      13    1024    2048

Das Hard-Limit kann nicht überschritten werden:

# quota -v test
Disk quotas for user test (uid 1001):
     Filesystem   usage   quota   limit   grace   files   quota   limit   grace
      /usr/home 2047974* 1024000 2048000   7days      15    1024    2048
# cp /tmp/ports.tar.gz ~
/usr/home: warning, user disk quota exceeded
/usr/home: write failed, user disk limit reached
cp: ports.tar.gz: Disc quota exceede

Mehr Informationen zu Quotas findet man in den Manpages quota(1) und edquota(8).

 Permalink

Lokale Kopie der FreeBSD Dokumentation

Möchte man eine aktuelle lokale Kopie der offiziellen FreeBSD Dokumentation, welche unter anderem das Handbuch beinhaltet, zur Verfügung haben, so muss zuerst der textproc/docproj-nojadetex Port installiert werden:

# cd /usr/ports/textproc/docproj-nojadetex && make install clean

Danach kann eine neue Sup-Datei für die Dokumentation erstellt werden. Dazu muss der gewünschte CVSup Server eingetragen werden:

*default host=cvsup.<mirror>.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
doc-all

Nun können die Quelldateien der Dokumentation mit csup heruntergeladen werden:

# csup -L 2 <Pfad zur Doc-Sup-Datei>

Die Quelldateien werden nach /usr/doc heruntergeladen. Die einzelnen Dokumente der Dokumentation sind je nach Sprache und Dokumentationsart in verschiedene Unterverzeichnisse aufgeteilt. Das FreeBSD Handbuch in deutsch befindet sich unter /usr/doc/de_DE.ISO8859-1/books/handbook, die englische Version unter /usr/doc/en_US.ISO8859-1/books/handbook. Sollen nun die dazugehörigen HTML-Seiten generiert werden, kann make im entsprechenden Verzeichnis aufgerufen werden:

# cd /usr/doc/en_US.ISO8859-1/books/handbook && make

Möchte man die lokale Kopie lesen, kann im entsprechenden Verzeichnis die Datei index.html mit einem Browser aufgerufen werden.

 Permalink

/etc/group auf Syntaxfehler überprüfen

Editiert man die Gruppendatei /etc/group von Hand, so kann diese danach mit Hilfe von chkgrp auf Syntaxfehler überprüft werden:

# chkgrp
chkgrp: /etc/group: line 17: missing field(s)
chkgrp: /etc/group: line 39: GID is not numeric
chkgrp: /etc/group: line 42: ' ' invalid character
chkgrp: /etc/group: line 42: field 1 contains whitespace

Auch kann der Pfad zu einer alternativen Datei angegeben werden, welche überprüft werden soll:

# chkgrp /tmp/group.new 
/tmp/group.new is fine

Auf FreeBSD ist chkgrp schon im Basissystem vorhanden. Mehr Informationen zu chkgrp findet man in der Manpage chkgrp(8).

 Permalink

Name einer Netzwerkschnittstelle ändern

Auf FreeBSD kann der Name einer Netzwerkschnittstelle mit Hilfe von ifconfig umbenannt werden.Im folgenden Beispiel wird die Schnittstelle bge1 in backup umbenannt. Ist der Name der Schnittstelle geändert, so kann die Schnittstelle nicht mehr unter dem ursprünglichen Namen bge1 angesprochen werden:

# ifconfig bge1
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0f:20:aa:bb:cc
        inet6 fe80::20f:20ff:feaa:bbcc%bge1 prefixlen 64 scopeid 0x2
        inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
# ifconfig bge1 name backup
# ifconfig bge1
ifconfig: interface bge1 does not exist
# ifconfig backup
backup: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0f:20:aa:bb:cc
        inet6 fe80::20f:20ff:feaa:bbcc%backup prefixlen 64 scopeid 0x2
        inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active

Soll der Name der Schnittstelle auch nach einem Neustart des Systems erhalten bleiben, so kann folgender Eintrag in der /etc/rc.conf gemacht werden:

ifconfig_bge1_name="backup"
ifconfig_backup="inet 10.0.0.2 netmask 255.255.255.0"

Mehr Informationen zu ifconfig findet man in der Manpage ifconfig(8).

 Permalink

Alle Änderungen eines ZFS-Pools anzeigen

Mit Hilfe von zpool history können alle Befehle, die auf einen ZFS-Pool angewandt wurden, angezeigt werden:

# zpool history
History for 'tank':
2008-09-05.21:11:04 zpool create tank /dev/ad0s2
2008-09-05.21:12:33 zfs create tank/src
2008-09-05.21:12:36 zfs create tank/obj
2008-09-05.21:12:40 zfs create tank/ports
2008-09-05.21:12:55 zfs set mountpoint=/usr/src tank/src
2008-09-05.21:13:02 zfs set mountpoint=/usr/obj tank/obj
2008-09-05.21:13:12 zfs set mountpoint=/usr/ports tank/ports
2008-09-07.23:40:01 zfs set compression=gzip tank/src
2008-09-06.19:20:01 zfs snapshot tank/ports@upgrade
2008-09-10.21:22:05 zfs destroy tank/ports@upgrade
2008-09-29.18:30:44 zfs create tank/doc
2008-09-29.18:30:58 zfs set mountpoint=/usr/doc tank/doc
2008-09-29.18:32:45 zfs set compression=lzjb tank/doc

Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Automatisch ZFS Snapshots erstellen
ZFS Dateisystemoptionen verwenden
Comments (1)  Permalink

TODO-Listen über die Kommandozeile verwalten

Mit Hilfe von devtodo lassen sich auf der Kommandozeile pro Verzeichnis eine TODO-Liste führen. Im FreeBSD Portbaum findet man devtodo unter devel/devtodo:

# cd /usr/ports/devel/devtodo && make install clean

Nun kann ein neuer Eintrag der TODO-Liste hinzugefügt werden. Dabei muss ein Text und die Priorität angegeben werden:

# tda
text> task1
1. veryhigh   2. high   3. medium   4. low   5. verylow
Enter a priority from those listed above.
priority> medium
Index of new item is 1

Ist noch keine TODO-Liste im Verzeichnis vorhanden, wird automatisch eine neue angelegt:

# ls -l .todo
-rw-r--r--  1 beat  users  235 26 Sep 14:48 .todo

Vorhanden Einträge können mit todo angeschaut werden:

# todo
  1.task1

Auch kann der Text und/oder die Priorität eines neuen Eintrags direkt dem tda Befehl mitgegeben werden:

# tda "task2 und freunde"
1. veryhigh   2. high   3. medium   4. low   5. verylow
Enter a priority from those listed above.
priority> medium
Index of new item is 2
todo: warning, created database (.todo) has group or world permissions

# tda -p high "task3 und so weiter"
Index of new item is 1

Einträge mit höherer Priorität werden automatisch am Anfang der Liste einsortiert:

# todo
  1.task3 und so weiter
  2.task1
  3.task2 und freunde

Einträge können mit Hilfe des tdr Befehls aus der Liste entfernt werden:

# tdr 2
# todo
  1.task3 und so weiter
  2.task2 und freunde

Auch können Einträge der Liste auf erledigt gesetzt werden:

# tdd 1
comment> alles tiptop
# todo
  2.task2 und freunde

Mit Hilfe der all Option können erledigte Einträge weiterhin angezeigt werden. Mit Hilfe von --purge werden alle erledigten Einträge aus der Liste entfernt:

# todo all
- 1.task3 und so weiter
  2.task2 und freunde
# todo --purge
0 < 1222433003
# todo all
  1.task2 und freunde

Auch können einem Eintrag weitere Subtasks hinzugefügt werden. Diese lassen sich mit --all anzeigen:

# tda -p medium -g 1 "Subtask 1 Task 2"
Index of new item is 1.1
# todo
+ 1.task2 und freunde
# todo --all
  1.task2 und freunde
      1.Subtask 1 Task 2

Die TODO-Listen aus verschiedenen Verzeichnissen lassen sich nun mit Hilfe der -l Option miteinander verlinken und gemeinsam anzeigen:

# tda -p medium "Task 1 Hauptordner"
Index of new item is 1
# mkdir Ordner1 Ordner2
# cd Ordner1/
Ordner1# tda -p medium "Task 1 Ordner 1"
Index of new item is 1
Ordner1# tda -p medium "Task 2 Ordner 1"
Index of new item is 2
Ordner1# cd ../Ordner2/
Ordner2# tda -p medium "Task 1 Ordner 2"
Index of new item is 1
Ordner2# cd ..
# todo -l Ordner1/.todo 
1. veryhigh   2. high   3. medium   4. low   5. verylow   
priority> medium
# todo -l Ordner2/.todo
1. veryhigh   2. high   3. medium   4. low   5. verylow   
priority> medium
# todo 
+ 1.Ordner1
+ 2.Ordner2
  3.Task 1 Hauptordner
# todo all
  1.Ordner1
      1.Task 1 Ordner 1
      2.Task 2 Ordner 1
  2.Ordner2
      1.Task 1 Ordner 2
  3.Task 1 Hauptordner

Mit Hilfe der Datei ~/.todorc können Optionen und das Verhalten von devtodo festgelegt werden. Ein Beispiel einer solchen Konfigurationsdatei findet man unter /usr/local/etc/todorc.sample:

# cp /usr/local/etc/todorc.sample ~/.todorc

Mehr Informationen zu devtodo findet man in der Manpage devtodo(1).

 Permalink
Prev Next241-250/521