mar 02 2011

Fixer le bdf hpux

Tag: UnixUggla @ 10 h 56 min

Le bdf hpux fait parfois un retour chariot pénible comme  ci dessous avec /appl/autotree.
Le problème est que l’on a plus même nombre de colonnes (5 au lieu de 6), ce qui empêche de  faire des sommes.

root@hx04031a: /root/home/root # bdf
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg00/lvol3    1048576  298432  744424   29% /
/dev/vg00/lvol1    1835008  329800 1493520   18% /stand
/dev/vg00/lvol8    8912896 7199008 1703728   81% /var
/dev/vg00/lvol9    10485760 3833009 6238725   38% /var/adm/crash
/dev/vg00/lvol7    5505024 3088424 2397816   56% /usr
/dev/vg00/lvol4     524288  115672  405496   22% /tmp
/dev/vg00/lvol6    9633792 6518920 3090656   68% /opt
/dev/vg00/lvol5     131072   16248  113960   12% /home
/dev/vg00/lvautotree
1048576   41159  944483    4% /appl/autotree

La « commande » ci dessus utilise perl pour fixer le problème.


root@hx04031a: /root/home/root # bdf  | sed 's/^\//###\//g' | perl -pe 's/\s+/\t/g' | perl -pe 's/\n//g' | perl -pe 's/###/\n/g' && echo
Filesystem      kbytes  used    avail   %used   Mounted on
/dev/vg00/lvol3 1048576 298496  744360  29%     /
/dev/vg00/lvol1 1835008 329800  1493520 18%     /stand
/dev/vg00/lvol8 8912896 7199016 1703728 81%     /var
/dev/vg00/lvol9 10485760        3833009 6238725 38%     /var/adm/crash
/dev/vg00/lvol7 5505024 3088424 2397816 56%     /usr
/dev/vg00/lvol4 524288  115672  405496  22%     /tmp
/dev/vg00/lvol6 9633792 6518920 3090656 68%     /opt
/dev/vg00/lvol5 131072  16248   113960  12%     /home
/dev/vg00/lvautotree            1048576 41159   944483  4%      /appl/autotree

On peut donc maintenant sommer les colonnes.

bdf  | sed 's/^\//###\//g' | perl -pe 's/\s+/\t/g' | perl -pe 's/\n//g' | perl -pe 's/###/\n/g' \
| awk '{sumt+=$2;sumu+=$3;suma+=$4}END{printf("Total : %.2f %.2f %.2f\n",sumt/1024,sumu/1024,suma/1024)}'

Total : 38208.00 20938.31 16731.11


mar 01 2011

Mise a jour photos VTT

Tag: VTTUggla @ 22 h 16 min

Et voila, j’ai remis à jour ma galerie de façon massive avec  l’ensemble des photos de VTT de la saison précédente jusqu’à aujourd’hui.
De cette manière je vais essayer de faire un suivi plus régulier des sorties.

La galerie :

http://uggla.free.fr/phpwebgallery/index.php?/category/1


mar 01 2011

Gestion des espaces dans les boucles « for » avec IFS

Tag: ScriptsUggla @ 14 h 17 min

Une astuce pour gérer les espaces dans les boucles « for » en shell (bash, ksh).
Rien ne vaut un petit exemple pour montrer le problème :

root@hx04970: /root/home/root/nene # ll
total 0
-rw-r--r--   1 root       sys              0 Feb 28 14:09 1
-rw-r--r--   1 root       sys              0 Feb 28 14:09 2
-rw-r--r--   1 root       sys              0 Feb 28 14:09 3
drwxr-xr-x   2 root       sys             96 Feb 28 12:04 tata tutu
drwxr-xr-x   2 root       sys             96 Feb 28 12:03 titi
drwxr-xr-x   2 root       sys             96 Feb 28 12:03 toto

Imaginons que je fasse une boucle sur l’ensemble des fichiers de l’arborescence ci dessus.

root@hx04970: /root/home/root/nene # for i in *;do echo $i;done
1
2
3
tata tutu
titi
toto

Ici tout se passe bien, pas de problèmes, le répertoire « tata tutu » est bien interprété.

Maintenant je complique un peu en voulant faire une boucle sur les répertoires seulement :

root@hx04970: /root/home/root/nene # for i in $(find . -type d);do echo $i;done
.
./toto
./titi
./tata
tutu

Et la c’est le drame :) .

L’espace sur le répertoire « tata tutu » est vu comme un séparateur et le shell croit que nous avons 2 répertoires tata et tutu.
Le bon administrateur Unix sait qu’il faut éviter les espaces c’est mal. (C’est comme : on ne croise jamais les effluves : c’est mal –> cf Ghostbuster).

Cool ! Mais si le répertoire est un share cifs avec des utilisateurs de windows, il y a de grande chance que l’on retrouve plein d’espaces dans les noms de fichier.

La meilleure méthode de résolution du problème ci dessus est d’utiliser la « variable » IFS.
Un petit man ksh me donne :

IFS Internal field separators, normally space, tab,
and newline that are used to separate command
words resulting from command or parameter
substitution, and for separating words with the
special command read. The first character of the
IFS parameter is used to separate arguments for
the « $* » substitution (see Quoting below).

IFS est la « variable » qui définie le séparateur, par défaut espace, tab et nouvelle ligne.

En redéfinissant le séparateur, sans l’espace et le tab on obtient :

root@hx04970: /root/home/root/nene # IFS=$'\n' && for i in $(find . -type d);do echo $i;done
.
./toto
./titi
./tata tutu

Le problème est résolu.

Pour aller plus loin : http://tldp.org/LDP/abs/html/internalvariables.html#IFSH


mar 01 2011

Passer une base Oracle en archivelog mode.

Tag: DBUggla @ 14 h 15 min

Truc de base, mais j’arrive jamais à me souvenir….

  1. Vérifier l’etat de la base.
    SQL> select name,log_mode from v$database;
    
    NAME      LOG_MODE
    --------- ------------
    MODEFRR1  NOARCHIVELOG
    
  2. Définir la destination des archives.
    SQL> alter system set log_archive_dest_1='location=+DCLICDGR' scope=both sid='*';
    System altered.
    
    SQL> show parameter log_archive_dest_1
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_dest_1                   string      location=+DCLICDGR
    log_archive_dest_10                  string
    ...
    
  3. Arrêt de la base.
    $ srvctl stop database -d MODEFRR1
    
  4. Passage en mode archive.
    $ sqlplus / as    sysdba
    
    SQL*Plus: Release 11.2.0.2.0 Production on Tue Mar 1 12:03:41 2011
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup mount
    ORACLE instance started.
    
    Total System Global Area 1068937216 bytes
    Fixed Size                  2188072 bytes
    Variable Size             683674840 bytes
    Database Buffers          377487360 bytes
    Redo Buffers                5586944 bytes
    
    SQL> alter database archivelog;
    
    Database altered.
    
    SQL> alter database open;
    
    Database altered.
    
  5. Démarrage 2eme instances.
    $ srvctl start database -d MODEFRR1
    
  6. Vérification.
    SQL> archive log list
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            +DCLICDGR
    Oldest online log sequence     4
    Next log sequence to archive   5
    Current log sequence           5
    
  7. Commande (que j’oublie à chaque fois) pour générer des logs.
    SQL> alter system archive log current;
    
    System altered.
    
    SQL> alter system switch logfile;
    
    System altered.
    

mar 01 2011

Ajouter un group à un utilisateur (hpux)

Tag: UnixUggla @ 11 h 10 min

Petite astuce pour hpux.

La commande usermod de hpux n’a pas de fonction append comme sous Linux.

L’ajout d’un group a un utilisateur oblige a redéfinir entièrement l’utilisateur.

La « commande » ci dessous simplifie cette opération :

account=grid && newgrp=dclicdba && echo "usermod -g $(id -g $account) -G $(id -G $account | sed 's/ /,/g'),$newgrp $account"

Résultat :

usermod -g 107 -G 107,108,109,110,111,112,114,dclicdba grid

Plus qu’a exécuter la ligne ci dessus pour ajouter le groupe.
Si le login est deja utilisé, alors il faut ajouter l’option -F –> usermod -F -g 107 -G 107,108,109,110,111,112,114,dclicdba grid


« Page précédente