Einführung

Die Online-Enzyklopädie Wikipedia kann über DNS abgefragt werden. Toll daran ist, dass man somit jederzeit die Definition von einem Begriff aus der Shell heraus per DNS abfragen kann.

Technik

Der DNS-Server wp.dg.cx stellt über TXT-Ressource-Records den ersten Absatz von den englischen Wikipedia-Artikeln zur Verfügung. Der DNS-Server kann mit nslookup oder dig abgefragt werden.

Abfrage

Ich möchte die Definition von Foo wissen. Der DNS-Query sieht folgendermassen aus:

emanuel@discordia:~
$ dig foo.wp.dg.cx TXT
;; Truncated, retrying in TCP mode.
; <<>> DiG 9.7.2-P3 <<>> txt foo.wp.dg.cx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7560
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1
;; QUESTION SECTION:
;foo.wp.dg.cx.                  IN      TXT
;; ANSWER SECTION:
foo.wp.dg.cx.           86400   IN      TXT     "The term foobar,
along with foo, bar, and baz, is a common placeholder name
(also referred to as a metasyntactic variable) used in computer
programming or computer-related documentation. These four
terms are used heavily in computer science to take the pl" "ace
of unknown values, typically while describing a scenario where
the purpose of the unknown values are understood, but...
http://a.vu/w:Foobar"
;; AUTHORITY SECTION:
.                       78741   IN      NS      g.root-servers.net.
.                       78741   IN      NS      f.root-servers.net.
.                       78741   IN      NS      h.root-servers.net.
.                       78741   IN      NS      e.root-servers.net.
.                       78741   IN      NS      k.root-servers.net.
.                       78741   IN      NS      l.root-servers.net.
.                       78741   IN      NS      j.root-servers.net.
.                       78741   IN      NS      c.root-servers.net.
.                       78741   IN      NS      a.root-servers.net.
.                       78741   IN      NS      m.root-servers.net.
.                       78741   IN      NS      i.root-servers.net.
.                       78741   IN      NS      b.root-servers.net.
.                       78741   IN      NS      d.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net.     79004   IN      A       198.41.0.4
;; Query time: 5 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Mon Feb 14 21:11:04 2011
;; MSG SIZE  rcvd: 670

In der Answer-Section steht die Erklärung von Foo.

Darstellung

Um nur die nötigen Informationen von dig zu erhalten, verwendet man die Option +short und +ignore:

emanuel@discordia:~
$ dig +ignore +short foo.wp.dg.cx TXT
"The term foobar, along with foo, bar, and baz, is a common
placeholder name (also referred to as a metasyntactic variable)
used in computer programming or computer-related documentation.
These four terms are used heavily in computer science to take the
pl" "ace of unknown values, typically while describing a scenario
where the purpose of the unknown values are understood, but...
http://a.vu/w:Foobar"`

So ist die Ausgabe angenehmer zu lesen.

Automatisieren

Ich habe mir folgende Funkton in die Datei ~/.bashrc geschrieben, damit ich Wikipedia schnell aus der Konsole heraus abfragen kann:

wiki() {
  if [ -n "$1" ]
  then
    dig +ignore +short $1.wp.dg.cx TXT
  else
    echo Bitte einen Begriff angeben.
  fi
}

Wenn man eine neue Bash startet, wird diese Funktion geladen und sie kann verwendet werden:

emanuel@discordia:~
$ wiki foo
"The term foobar, along with foo, bar, and baz, is a common
placeholder name (also referred to as a metasyntactic variable)
used in computer programming or computer-related documentation.
These four terms are used heavily in computer science to take the
pl" "ace of unknown values, typically while describing a scenario
where the purpose of the unknown values are understood, but...
http://a.vu/w:Foobar"

Das ist doch praktisch!