---
categories: utilities sysadmin storage
title: Howto Duc
...

* Documentation : <https://rawgit.com/zevv/duc/master/doc/duc.1.html>

[Duc](http://duc.zevv.nl) est un outil qui permet d'analyser l'espace disque en créant un index, que l'on pourra ensuite visualiser avec une interface texte ou ncurses, un graphique, une GUI ou en CGI.

## Installation

Un paquet est disponible à partir de Debian Stretch :

~~~
# apt install duc
~~~

## Utilisation

### Création de l'index

La première chose à faire est de créer un index, c'est la partie qui analyse l'espace disque pour ensuite l'afficher de différentes manières. Par défaut l'index sera créé dans `$HOME/.duc.db`, si l'on veut changer le chemin de l'index il faudra utiliser la variable d'environnement `DUC_DATABASE` ou spécifier le chemin avec `-d`.

L'index n'est pas forcément rattaché à un seul chemin, on peut en indexer autant qu'on veut :

~~~
$ duc index -d /tmp/duc.idx /var/
$ duc index -d /tmp/duc.idx /usr/
~~~

> *Note* : La génération de l'index peut être très longue et peut prendre de la place si vous avez beaucoup de données. Il est peut être intéressant de rajouter le paramètre `-p` pour suivre la progression et de vérifier que la partition soit suffisamment grande.

### Consulter l'index

#### Voir les informations de l'index

~~~
$ duc info -d /tmp/duc.idx 
Date       Time       Files    Dirs    Size Path
2018-03-02 09:49:38   22.5K    2.4K    2.2G /var
2018-03-02 09:49:42  268.0K   24.1K    8.2G /usr
~~~

#### Lister le contenu de l'index

~~~
$ duc ls -d /tmp/duc.idx /usr     
  4.3G lib
  3.0G share
606.2M bin
210.5M src
 66.4M include
 35.3M sbin
 20.1M local
  6.4M lib32
  2.2M libexec
  1.7M games
  4.0K etc

$ duc ls -d /tmp/duc.idx /usr/bin/ | head
 29.9M hkt
 28.3M hokey
 24.2M node
 19.6M hot
 17.0M shellcheck
 15.7M mysql_embedded
 14.7M fwbuilder
 11.6M audacity
 11.1M rawtherapee
 10.4M qemu-system-x86_64

$ duc ls -d /tmp/duc.idx /var/log | head  
197.2M atop
 30.4M daemon.log.1
 24.1M daemon.log
 17.1M installer
  5.4M syslog.1
  2.7M messages.1
  2.4M vbox-install.log
  2.1M syslog
  1.9M kern.log.1
  1.7M ufw.log.1
~~~

Pour avoir une liste basée sur le nombre d'inode plutôt que la quantité d'octet utilisé, il faut utiliser l'option `--count`.

#### Lister le contenu de l'index avec une interface ncurses

L'interface ncurses est semblable à celle de l'outil [ncdu](https://dev.yorhel.nl/ncdu). La touche `h` permettra d'afficher l'aide pour comprendre comment naviguer et interagir avec cette interface.

~~~
# duc ui -d /tmp/duc.idx /usr
~~~

![Interfaces ncurses](/duc.png)

#### Lister le contenu de l'index avec une interface graphique

Si on est sur un poste ayant un serveur X (ou en `ssh -X`), on pourra utiliser cette interface et utiliser la souris. Contrairement à l'interface ncurses on n'a pas d'aide en appuyant sur `h`, il faudra voir la liste des raccourcis dans le manuel.

~~~
$ duc gui -d /tmp/duc.idx /usr
~~~

![Le GUI de Duc](/duc2.png)

#### Lister le contenu de l'index en générant une image

On peut générer une image PNG, utile pour l'envoyer à quelqu'un d'autre par exemple :

~~~
$ duc graph -d /tmp/duc.idx -o /tmp/duc.png -l8 -s 1920 /usr
~~~

Les paramètres intéressants sont :

- `-l` nombre de sous-répertoires à afficher ;
- `-o` chemin de sortie de l'image ;
- `-s` largeur de l'image.

#### Lister le contenu de l'index avec un script CGI

Il suffit de créer ce script sh dans `/usr/lib/cgi-bin/duc.cgi`, de donner les bons droits et d'y accéder.

~~~
#!/bin/sh
/usr/bin/duc cgi -d /var/cache/duc.idx --list
~~~

~~~
# chmod 755 /usr/lib/cgi-bin/duc.cgi
# chown www-data: /usr/lib/cgi-bin/duc.cgi
# chmod 640 /var/cache/duc.idx
# chgrp www-data /var/cache/duc.idx
~~~

Il faudra ensuite utiliser un serveur Web comme [HowtoApache](Apache) pour y accéder en ajoutant ces directives :

~~~
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
ScriptAlias /duc /usr/lib/cgi-bin/duc.cgi
~~~

### Plomberie

Quelques options utiles :

- `-H` : Compter les mêmes inodes une seule fois ;
- `-e` <regex> : Exclure les fichiers correspondant (ne correspond que au nom du fichier et non de son PATH complet) ;
- `-p` : Affiche la progression de l'indexation.
- `-x` : Comme pour la commande *du*, limite au FS analysé

~~~
# duc index -p -H -e "*.log*" -d /backup/duc.idx /backup/jails
# duc index -p -H -d /backup/duc.idx /backup/jails 
~~~

Pour exclure un répertoire (par exemple `backup/` contenant de nombreux fichiers), se placer dessus et faire :

~~~
# duc index -p -e "backup" -d duc.idx .
~~~


#### Cron

Il peut être judicieux de créer un cron pour faire une indexation journalière, très pratique quand couplé avec l'interface CGI.

~~~
30 6  * * * /usr/bin/ionice -c3 /usr/bin/duc index -q -d /var/cache/duc.idx / && /bin/chmod 640 /var/cache/duc.idx && /bin/chgrp www-data /var/cache/duc.idx
~~~
