Pages

dimanche 24 novembre 2013

Unix patterns



En vrac.

Supprimer les disques d'un vg d'un coup d'un seul ...
# myvg=vg01;mydsk=`lsvg -p $myvg |grep hdisk |awk '{ print $1}'`;reducevg -df $myvg $mydsk


renommer les S10rc.xxx en s10rc.xxx : ls S* | grep -v sshd | while read a ;do mv $a $(echo $a |sed  "s/^S/s/") ;done

find . -name ’*.a’ | xargs ls -l + rapide que find . -name ’*.a’ -exec ls -l \ ;

find /d1 /d2 /d3 -name toto.c #cherche dans les trois rep. Le fichier toto.c

find . | xargs grep toto # cherche une occurrence dans x fichiers

find . -ls | sort -nr -k7 | head -20

(logname ; date ; printf "%s\n" "$0 $* ") | xargs >> log

ls $1 | xargs -I mv $1/ $2/


find . -name "user*" -ctime +1 # + vieux que 1 jour
 ctime 1 # vieux de 1 jour
 ctime -1 # d’aujourd’hui


vi -> :1,$s/notesds/notesdsr/g

kill -9 `ps -fu borland | grep /opt/appserver/cvshelper |nawk ‘ORS=” “ ;print $2’`

Copier une source vers une target avec tar et ssh.
 tar cvf - . | ssh root@server1 'cd /opt/cobol;tar xf - '

renommer des fichiers un un bloc.
ls -1 pattern | awk ’print "mv "$1" "$1".new"’ | sh
avec SED ou dans VI, pour changer p.ex des champs qui n’ont pas de guillemets en en ajoutant,


:%s/^I\([^"].*[^"]\)^I/^I"\1"^I/g
les ^I sont à faire avec la touche tab, le copier/coller ne fonctionne pas.
ensuite l’instruction entre parenthèses génère la var 1 contenant un guillemet + n’importe quel caractère + un guillemet, et va le remplacer par la même valeur (1) mais entouré de guillemets …


Planifier une commande avec "at"
echo "shutdown -Fr now" | at -t MMDDhhmm

Lire une man page  :
#nroff -man smbd.8 | more

RSYNC

 

rsync -avn —exclude ’oradata/’ /data/mnt4/ /MIGRATION/data/mnt4/
rsync -av --rsh=/usr/bin/rsh --rsync-path=/usr/local/bin/rsync /home/ server41:/home/

Attention le n est pour simulation ( ne fait rien)
plus la page de man



AWK Manipulations
Afficher les motifs 2,3,4 jusqu'à NF en fonction d'un pattern "monmotif" trouvé

cat  troublenim.monmotif |awk  '$3 ~ "monmotif"  { for (x=3; x<=NF; x++) { printf "%s%c", $x, OFS } print "" }' |sort |uniq

Ajouter le contenu d'un fichier d'un serveur vers un autre serveur
cat /etc/passwd |grep dbadev1 |ssh barolo13 "cat - >> /etc/passwd "


Virer des fichiers impossibles Tu as créé un fichier commençant par un - … mauvaise idée !! Pour le virer tu peux faire rm ./-ton_fichier ou rm — -ton_fichier ou encore ls -i (récupérer l’i-node) et le virer avec find . -inode ton_inode -exec rm \ ;



Passer un argument se trouvant SOUS un autre A COTE de l'autre.
exemple : cat test
toto
tata
titi
tutu
doit devenir
toto tata
titi tutu


cat test|awk 'BEGIN { i=0 } i==0 { VAR=$0 } i==1 { print VAR, $0; i=-1 } { i++ }'

Insérer une ligne vide après un pattern p.ex flag=


cat /etc/security/passwd |awk "/flags/ {print; print "\n"}; !/flags/ {print "$*"}"|uniq


SED 

Supprimer une (ou plusieurs) ligne(s) d'un fichier


Syntaxe


sed '{[/]||[/]}d'
sed '{[/][,][/]d'
- /.../ = délimiteurs
- n = le numéro de ligne
- chaîne = la chaîne contenue dans la ligne
- regex = l'expression régulière correspondant au motif recherché
- adr = l'adresse d'une ligne (numéro ou motif)
- d = delete (effacer)


Exemples


Suppression de la 3ème ligne
sed '3d' mon_fichier.txt


Suppression de la ligne contenant la chaîne "awk"
sed '/awk/d' mon_fichier.txt


Suppression de la dernière ligne
sed '$d' mon_fichier.txt


Suppression de toutes les lignes vides
sed '/^$/d' mon_fichier.txt
sed '/./!d' mon_fichier.txt


Suppression de la ligne "matchée" par une expression régulière
(ici on élimine celle contenant des caractères numérique (au moins 1 chiffre) situés en fin de ligne)
sed '/[0-9/][0-9]*$/d' mon_fichier.txt


Suppression de l'intervalle compris entre les lignes 7 et 9
sed '7,9d' mon_fichier.txt
La même chose mais en remplaçant l'adresse par des "motifs"
sed '/-Début/,/-Fin/d' mon_fichier.txt
Note


Les exemples précédents ne font que modifier l'affichage du fichier (sortie standard 1 = l'écran).
Pour des modifications permanentes, pour les anciennes versions (< 4) utiliser un fichier temporaire, pour GNU
sed utiliser le paramètre "-i[suffixe]" (--in-place[=suffixe]), comme dans l'exemple suivant :
sed -i".bak" '3d' mon_fichier.txt
qui aura pour effet, de ne produire aucun affichage sur la sortie standard, de modifier le fichier original "mon_fichier.txt" en supprimant
la 3ème ligne et de créer un fichier de sauvegarde nommé "mon_fichier.txt.bak".



ajouter à la fin d'une ligne un pattern, cela uniquement sur une ou plusieurs lignes spécifiques :


 cat /etc/security/login.cfg | sed "/^        shells/s/$/,\/bin\/sftponly/"


ou pour supprimer des chaines de car. On peut exécuter plusieurs requêtes sed en une seule commande.


sed '/latency/d;/usecs/d;/exiting/d;/total/d' $INFILE


Modifier une occurrence par une autre.
# cat vh0b |grep -v N
hdisk202
hdisk203
hdisk266
hdisk267
hdisk268


# cat vh0b |grep -v N |sed "s/^\(.*\)$/\1 n\1/"
hdisk202 nhdisk202
hdisk203 nhdisk203
hdisk266 nhdisk266
hdisk267 nhdisk267
hdisk268 nhdisk268


Ajouter le motif :/usr/local/man a la ligne commençant par MANPATH  (le & indique qu'il faut ajouter le motif)
 cat /etc/environment |sed "/^MANPATH/s/.*/&:\/usr\/local\/man/"


Ajouter un "dièse" au début de chaque ligne d'un fichier.


cat wcoll |sed "s/.*/#&/"  En remplaçant par &# on met le dièse à la fin


Et pour ajouter un motif devant une ligne ou une sélection de ligne, mettre le motif /ma recherche/ avant le s/



NIM


Alt_Install avec un CLONE (peu recommandé, mieux vaut utiliser le mode plus bas upgrade Alternate …)



Si t’as fait un smitty install avec un CLONE alternate_disk_install, il faudra pouvoir le supprimer lorsque la machine
aura migré et que ce sera ok. Pour le virer, il faut faire :

#alt_disk_install -X altinst_rootvg
la réponse doit être :Bootlist is set to the boot disk : hdisk0
puis avec smit lvm -> add a physical volume to a volume group, il faut activer l’option "force the creation of a volume group"

Création d’un client nim

Avec smitty nim_mkmac, il faut spécifier :
- nom du serveur (connu du dns ou hosts)
- Network Adapter Hardware Address (MAC)
- Communication Protocol used by client              [nimsh]
- Management Source                              [F4 pour choisir le CEC]
- Identity    N° de la LPAR sur la HMC



Cas d’un client NIM à replacer sur un master suite à modif mac, master, network, etc.

Sur le node client :


Si serveur réseau ADMIN

ROUTE1=$(netstat -rn |grep default | wc -l)
rm /etc/niminfo
niminit -a name=`hostname` -a master=master-server
if [[ $? == 42 ]];then exit 42 ;fi
sleep 2
cat /etc/niminfo | sed -e "s/shell/nimsh/" > /etc/niminfo.new
mv /etc/niminfo.new /etc/niminfo
stopsrc -s nimsh
sleep 2
startsrc -s nimsh
ROUTE2=$(netstat -rn |grep default | wc -l)
if [[ $ROUTE1 != $ROUTE2 ]];
then
echo "ATTENTION route has been added"
else
echo "Route OK"
fi

Si serveur réseau MGMT (non routé chez nous)

ROUTE1=$(netstat -rn |grep default | wc -l)
rm /etc/niminfo
niminit -a name="t-`hostname`" -a master=master-server-t
sleep 2
cat /etc/niminfo | sed -e "s/shell/nimsh/" > /etc/niminfo.new
mv /etc/niminfo.new /etc/niminfo
stopsrc -s nimsh
sleep 2
startsrc -s nimsh
ROUTE2=$(netstat -rn |grep default | wc -l)
if [[ $ROUTE1 != $ROUTE2 ]];
then
echo "ATTENTION route has been added"
chdev -l inet0 -a delroute=net,,0,10.166.0.170
echo "Route deleted"
else
echo "Route OK"
fi



Et sur le master nim, si le client existait déjà


nim -o change -a connect=nimsh $1



pour installer un client :



smitty nim_bosinst     : choisir mksysb si on en a un ou rte pour refaire une install des filesets. Contrôler aussi le initiate automatically reboot def=yes mettre no si on a les consoles ouvertes.
ATTENTION aux MAC address qui doivent être correctement settées pour les bootp.



Les commandes utiles :
# smitty niminit    ## pour créer le fichier /etc/niminfo (alternative à la version depuis le serveur consistant à "specify new master for client" )

Nim Troubleshoot

Si le client et le master ne sont pas dans le même sous-réseau, il faut définir une route statique sur le client ET sur le master pour que les
interfaces définies dans nim soient bien celles utilisées.

Upgrade d’une machine standalone de AIX 4.3.3 vers 5.2 en mode Alternate:Disk.Install

1.- .rhosts à jour
2.- /etc/niminfo copié depuis le master
3.- Si rootvg est mirroré sur deux disques, casser le mirroir et sortir hdisk1 de rootvg (reducevg rootvg hdisk1)
4.- # nimadm -c adsmsrv -s sport_aix520 -l lpp_source_aix520 -d "hdisk1" -Y 

Cette procédure set ancienne, mais fonctionne encore pour passer de 6.1 à 7.1



Upgrade avec NIM d’une machine AIX 5.2 vers 5.3 en mode Alternate:Disk.Install



Controle que tous les FS sont bien mirrores.
Si pas le cas, sur le serveur a migrer, aligner les miroirs puis les casser pour libérer le second disque :
# mklvcopy -k fslv00 2 hdisk0
# unmirrorvg rootvg hdisk1
# chpv -c hdisk1
# bootlist -m normal hdisk0



Sur le serveur NIM master
# smitty nim

> Perform NIM Software Installation and Maintenance Tasks
> Alternate Disk Installation
> NIM Alternate Disk Migration
> Perform NIM Alternate Disk Migration


Choisir le bon LPP, le bon SPOT, indiquer sur quel disque migrer (hdisk1), ne pas oublier de mettre à YES
accepter la license et FEU !!!




Création d'un lpp_source level supérieur.

On va s'inspirer d'un lpp_source bien complet, genre lpp_source_530, et copier le contenu dans le nouveau rép (pas obligatoire de faire un nouveau FS)
p.ex : /export/lpp_source/lpp_source_530-TL12
On ajoute le contenu du TL12 récupéré avec les SP qui vont avec.
On supprime le .toc
On recrée une toc
On vire les doublons et on renomme les uxx.bff avec smitty install
On crée une ressource lpp_source depuis smitty nim en mentionnant en "location" le nouveau chemin. IL NE DOIT PAS Y AVOIR D'ERREUR, AUCUN FILESET MANQUANT !!

Mise à niveau du lpp_source


On peut copier tel quel les filesets dans le lpp_source et refaire la toc.

Créer un lpp_source en CLI depuis un cd

nim -o define -t lpp_source -a source=/dev/cd0 -a server=master -a location=/export/lpp5.3-TL12 lpp53_12

Création d'un spot

Prérequis : avoir créé un lpp_source ou avoir un mksysb de la version souhaitée

Avec lppsource en passant par smit

smitty nim - define a ressource de type spot

* Resource Name                                      [spot_aix_530-TL12]
* Resource Type                                       spot
* Server of Resource                                 [master]                                    +
 Source of Install Images                           [lpp_source_aix530-TL12]                    +
* Location of Resource                               [/export/spot/spot_aix_530-TL12]

Avec mksysb en CLI

nim -o define -t spot -a server=master -a location=/export/spot5.3-TL12 -a source=mksysb530 spot5.3-TL12




Mise à niveau du SPOT



Après la MAJ du lpp_source, smit nim , admin, ressource, perf on, spot with master update_all

Modification de valeur dans un spot ou une ressource mksysb

/usr/lpp/bos.sysmgt/nim/methods/m_chattr -a oslevel_r=5300-08 mksysb
/usr/lpp/bos.sysmgt/nim/methods/m_chattr -a mod=8 mksysb



Création d’un bundle



smit nim , define ressource "installp_bundle" , créer un fichier dans /csminstall/nim/openssh.bnd
Faire un fichier pour des rpm et un fichier pour des installp avec R:openssl* ou I:openssh*
Les rpm doivent se trouver dans le lpp_source (pas besoin de .toc) malheureusement on ne peut pas les laisser dans
le rép des …/RPMS/ppc