Commande find de Victor Duchovni sur la ML Postfix:

$ cd /var/spool/postfix
$ time mailq | tail -1 | awk '{print $5}'  
163

real 0m1.802s
user 0m0.003s  
sys 0m0.005s  
$ time find maildrop/. incoming/. active/. deferred/. ! -name '?' ! -name '.' -print | wc -l 

163 
real 0m0.028s
user 0m0.001s  
sys 0m0.002s  

Je pense que le jour où j’aurais 30 000 mails en queue à écouler, je serais content de retrouver la commande…

Keyboardcast permet d’envoyer les frappes du clavier dans plusieurs fenêtres simultanément.

Ceci se montre particulièrement utile pour lançer des commandes sur plusieurs serveurs SSH en même temps. Je préfère sa souplesse à d’autres outils comme Fanterm ou encore ClusterSSH.

keyboardcast-uggy-091007

On pourrait aussi par exemple s’en servir pour lançer les même commandes en telnet vers plusieurs serveurs. (Dans ce cas seul le nom du serveur est à “personnaliser”).Etc…

Il ne semble pas fonctionner avec tous les “terminaux” comme Eterm ou Putty (a voir)… mais aucun problème avec gnome-terminal. (On peut même par exemple taper dans plusieurs fenêtres gedit…etc..)

Il permet aussi de lançer un “lôt” de connexions SSH dans des gnome-terminal pour éviter d’ouvrir “à la main” les fenêtres, puis de les ajouter à la sélection.

Il est également dispo dans certains dépots.

keyboardcast-uggy-091007-2

On m’a demandé si la crontab était capable de lançer une action chaque dernier dimanche du mois.
A ma connaissance ceci n’est pas nativement possible.

Mais ceci devrait faire l’affaire:

#!/bin/sh  

DERNIER=`cal -m | awk '{print $7}' | grep [0-9] | tail -1`
JOUR=`date +%d`

if [ $JOUR -eq $DERNIER ]
	then
echo "Dernier Dimanche"
	else
	echo non
fi

Je ne sais pas si il y a plus simple que d’utiliser cal ?
En tout cas cela rend assez simple de choisir aussi bien le dernier dimanche du mois que le second mercredi etc…

  • Présentation

dnstracer determines where a given Domain Name Server (DNS) gets its information from, and follows the chain of DNS servers back to the servers which know the data.

Cela ressemble un peu à l’option +trace de dig

Exemple en indiquant que l’on part des serveurs root ( -s . ) en ipv4 ( -4 ) sans cache ( -c )

$ dnstracer google.com -s . -4 -c | head -15  
Tracing to google.coma via A.ROOT-SERVERS.NET, maximum of 3 retries  
A.ROOT-SERVERS.NET . (198.41.0.4)   
|\__ J.GTLD-SERVERS.NET [com] (192.48.79.30)   
| |\__ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer   
| |\__ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer   
| |\__ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer   
| \__ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer   
|\__ I.GTLD-SERVERS.NET [com] (192.43.172.30)   
| |\__ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer   
| |\__ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer   
| |\__ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer   
| \__ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer   
|\__ H.GTLD-SERVERS.NET [com] (192.54.112.30)   
| |\__ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer   
| |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer   
$  
  • Détection des “Lame servers”

It detects so called lame servers, which are name-servers which has been told to have information about a certain domain, but don’t have this information.

$ dnstracer example.com -s . -4 -c -o   
Tracing to example.coma via A.ROOT-SERVERS.NET, maximum of 3 retries  
A.ROOT-SERVERS.NET . (198.41.0.4)   
|\__ D.GTLD-SERVERS.NET [com] (192.31.80.30)   
| |\__ dns1.example.com [example.com] (1.1.1.1)Got authoritative answer   
| |\__ dns2.example.com [example.com] (2.2.2.2) Got authoritative answer  
| |\__ dns3.example.com [example.com] (3.3.3.3) Lame server   
| |\__ dns4.example.com [example.com] (4.4.4.4) Got authoritative answer  
| \__ dns5.example.com [example.com] (5.5.5.5) Lame server  
|\___ C.GTLD-SERVERS.NET [com] (192.26.92.30) ...

La réponse est Refers backwards si le serveur ne contient pas la donnée (et donc répond d’aller voir un des serveurs de niveau supérieur.) Ce qui est génant vu que justement c’est les serveurs de niveaux supérieurs qui pointent vers lui.

La réponse est Lame server si le serveur contient la donnée demandée mais n’a pas authorité sur la zone. C’est le cas si le serveur a eu une requête récursive lui demandant de trouver l’info et l’a mise en cache.

Quelques petites options de dig histoire d’ouvrir la nouvelle catégorie “DNS/Bind”

  • Version de Bind
$ dig @ns-ext.isc.org. chaos txt version.bind +short  
"9.4.1-P1"  
$  
$ dig @ns-ext.isc.org. chaos txt authors.bind +short | head -2  
"Bob Halley"  
"David Lawrence"  
$  
$ dig @ns-ext.isc.org. chaos txt hostname.bind +short  
"ns-ext.pao1.isc.org"  
$
  • Transfert de zone
$ dig axfr @raff.debian.org. debian.org | head -10  

; <<>> DiG 9.3.4 <<>> axfr @raff.debian.org. debian.org  
; (1 server found)  
;; global options: printcmd  
debian.org. 3600 IN SOA samosa.debian.org. hostmaster.debian.org. 2007081601 10800 3600 604800 3600  
debian.org. 3600 IN A 192.25.206.10  
debian.org. 3600 IN MX 0 master.debian.org.  
debian.org. 3600 IN NS raff.debian.org.  
debian.org. 3600 IN NS rietz.debian.org.  
debian.org. 3600 IN NS klecker.debian.org.  
$
  • Suivre la chaîne de résolution +trace
$ dig www.isc.org +trace  

; <<>> DiG 9.3.4 <<>> www.isc.org +trace  
;; global options: printcmd  
. 3561749 IN NS d.root-servers.net.  
. 3561749 IN NS a.root-servers.net.  
. 3561749 IN NS l.root-servers.net.  
. 3561749 IN NS c.root-servers.net.  
. 3561749 IN NS m.root-servers.net.  
. 3561749 IN NS h.root-servers.net.  
. 3561749 IN NS f.root-servers.net.  
. 3561749 IN NS e.root-servers.net.  
. 3561749 IN NS j.root-servers.net.  
. 3561749 IN NS i.root-servers.net.  
. 3561749 IN NS g.root-servers.net.  
. 3561749 IN NS k.root-servers.net.  
. 3561749 IN NS b.root-servers.net.  
;; Received 436 bytes from 192.168.1.1#53(192.168.1.1) in 46 ms  

org. 172800 IN NS TLD3.ULTRADNS.org.  
org. 172800 IN NS TLD4.ULTRADNS.org.  
org. 172800 IN NS TLD5.ULTRADNS.INFO.  
org. 172800 IN NS TLD6.ULTRADNS.CO.UK.  
org. 172800 IN NS TLD1.ULTRADNS.NET.  
org. 172800 IN NS TLD2.ULTRADNS.NET.  
;; Received 343 bytes from 128.8.10.90#53(d.root-servers.net) in 123 ms  

isc.org. 86400 IN NS ns-ext.sth1.isc.org.  
isc.org. 86400 IN NS ns-ext.nrt1.isc.org.  
isc.org. 86400 IN NS ns-ext.lga1.isc.org.  
isc.org. 86400 IN NS ns-ext.isc.org.  
;; Received 192 bytes from 199.7.66.1#53(TLD3.ULTRADNS.org) in 126 ms  

www.isc.org. 600 IN A 204.152.184.88  
isc.org. 3600 IN NS ns-ext.isc.org.  
isc.org. 3600 IN NS ns-ext.lga1.isc.org.  
isc.org. 3600 IN NS ns-ext.nrt1.isc.org.  
isc.org. 3600 IN NS ns-ext.sth1.isc.org.  
;; Received 236 bytes from 192.228.89.19#53(ns-ext.sth1.isc.org) in 78 ms  
$
  • Nom associé à une IP
$ dig -x 204.152.184.88 +short
external.isc.org.
$
  • Requête itérative (non récursive)
$ dig mx isc.org @monserveurDNS +norec   

; <<>> DiG 9.3.4 <<>> mx isc.org @monserveurDNS +norec  
; (1 server found)  
;; global options: printcmd  
;; Got answer:  
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48381  
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 6  

;; QUESTION SECTION:  
;isc.org. IN MX  

;; AUTHORITY SECTION:  
org. 59611 IN NS tld3.ultradns.org.  
org. 59611 IN NS tld4.ultradns.org.  
org. 59611 IN NS tld5.ultradns.info.  
org. 59611 IN NS tld6.ultradns.co.uk.  
org. 59611 IN NS tld1.ultradns.net.  
org. 59611 IN NS tld2.ultradns.net.  

;; ADDITIONAL SECTION:  
tld3.ultradns.org. 59611 IN A 199.7.66.1  
tld4.ultradns.org. 59611 IN A 199.7.67.1  
tld5.ultradns.info. 59611 IN A 192.100.59.11  
tld6.ultradns.co.uk. 59611 IN A 198.133.199.11  
tld1.ultradns.net. 59611 IN A 204.74.112.1  
tld2.ultradns.net. 59611 IN A 204.74.113.1  

;; Query time: 1 msec  
;; SERVER: monserveurDNS#53(monserveurDNS)  
;; WHEN: Wed Jan 01 01:01:01 2007  
;; MSG SIZE rcvd: 283  
  • La même requête récursive (par défaut)
$ dig mx isc.org @monserveurDNS  

; <<>> DiG 9.3.4 <<>> mx isc.org @monserveurDNS  
; (1 server found)  
;; global options: printcmd  
;; Got answer:  
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25492  
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2  

;; QUESTION SECTION:  
;isc.org. IN MX  

;; ANSWER SECTION:  
isc.org. 3249 IN MX 10 mx.isc.org.  
isc.org. 3249 IN MX 15 mx.sth1.isc.org.  

;; ADDITIONAL SECTION:  
mx.isc.org. 3249 IN A 204.152.184.167  
mx.sth1.isc.org. 3249 IN A 192.228.89.21  

;; Query time: 5 msec  
;; SERVER: monserveurDNS#53(monserveurDNS)  
;; WHEN: Wed Jan 01 01:01:01 2007  
;; MSG SIZE rcvd: 100  
$
  • Simplifier la lecture des valeurs du SOA (+multiline)
$ dig soa isc.org. @ns-ext.isc.org. +multiline  
(extrait)  
isc.org. 3600 IN SOA ns-int.isc.org. hostmaster.isc.org. (  
2007090900 ; serial  
7200 ; refresh (2 hours)  
3600 ; retry (1 hour)  
24796800 ; expire (41 weeks)  
3600 ; minimum (1 hour)  
)  

Sinon c’est moins lisible

$ dig soa isc.org. @ns-ext.isc.org.  
(extrait)  
isc.org. 3600 IN SOA ns-int.isc.org. hostmaster.isc.org. 2007090900 7200 3600 24796800 3600