mais vous pouvez aussi utiliser le "shell" pour
manipuler ces fichiers
| 
il s'agit d'un shell compatible UNIX, lancé par QSH ou STRQSH
il est proche du KHORN Shell
vous pouvez passer des commandes unix comme :
pwd : voir le répertoire en cours
ls : contenu du répertoire
cd, etc pour naviguer dans l'arboresence
set : pour fixer des variables d'environnement
qui sont des commandes "internes"
les autres commandes sont recherchées dans le path et peuvent être des alias
vous pouvez aussi lancer une commande par STRQSH CMD('ls').
|

|
remarquons :
wc : pour compter le nombre de mots d'un fichier
cat : pour lister le contenu d'un fichier
sort : tri le contenu d'un fichier
split: éclate un fichier en plusieurs (on indique sur quelle "chaîne")
grep : pour filtrer suivant une expression régulière
find : recherche de fichiers et/ou de répertoires
ainsi que l'utilisation des redirections
> : redirige la sortie vers un fichier (en écrasement)
>> : redirige la sortie vers un fichier (en ajout)
cde1 | cde2 : cde2 travaille à partir du résultat produit par cde1
cde1 !! cde2 : exécute cde2 si cde1 se termine Anormalement
cde1 && cde2 : exécute cde1, puis cde2 si cde1 se termine normalement
cde1 : cde2 : exécute cde1 puis cde2 (sans condition)
exemple:
cat /qsys.lib/bdvin.lib/qsqlsrc.file/crtbase.mbr | grep -c date
compte le nombre de lignes dans le membre crtbase contenant "date"
|

|
grep '^.....C' /qsys.lib/mabib.lib/qrpglesrc.file/ile01.mbr
^ matérialise le début de ligne (la fin de ligne c'est $)
. un caractère (n'importe lequel)
on cherche donc le caractère C en position 6 dans le membre ile01
(l'option -r aurait permis une recherche sur la totalité du fichier)
grep '^.....[Cc]' /qsys.lib/mabib.lib/qrpglesrc.file/ile01.mbr
[ ] indique une série de caractères admissibles (un ou logique)
on cherche donc le caractère C ou c en position 6
(l'option -i aurait permis une recherche insensible à la casse)
grep '^......\*' /qsys.lib/mabib.lib/qrpglesrc.file/ile01.mbr
* = n caractère(s), "n" étant compris entre 0 et l'infini
\* déspécialise (le rend ordinaire) le caractère suivant \ (ici *)
on cherche donc le caractère * en position 7
|

|
find qui recherche des fichiers ou des répertoires
find /QIBM -name '*.jar' # cherche les fichiers ou les
# répertoires ".jar" dans /QIBM
find /QIBM -name '*.jar' -type f # uniquement les fichiers
find /QIBM -name '*.jar' -user QSYS # appartenant à QSYS
find /QIBM -name '*.jar' ! -user QSYS # n'appartenant PAS à QSYS
# la négation se fait par "!"
Vous pouvez rediriger la sortie dans un fichier, par exemple :
PGM
CRTPF QTEMP/FINDOUT RCDLEN(500)
STRQSH CMD('find /QIBM -name '*.jar' > +
/qsys.lib/qtemp.lib/findout.file/findout.mbr)
ENDPGM
|

|
Vous pouvez exécuter une commande pour chaque élément trouvé
find /home -user pascal -exec chgown pierre {} \;
.............................................
: {} sera remplacé par l'élément en cours :
: :
: \ indique la fin de la commande :
:...........................................:
Vous pouvez en même temps imprimer la liste
find /home -user pascal -exec chgown pierre {} \; -print
Vous pouvez aussi lancer un pgm à vous
find /home -user pascal -exec /qsys.lib/mabib.lib/monprog.pgm
(le programme recoit des chaînes terminées par X'00, comme en C)
|

|
Autres commandes
rm fichier pour détruire un/des fichier(s), caractère "*" admis
rmdir directory pour détruire un répertoire vide.
setccsid ccsid pour modifier le CCSID d'un fichier
iconv -f ccsidO -t ccsidD fichier, pour convertir de ccsidO vers ccsidD
ps pour voir les jobs d'un utilisateur (nouveauté V5R20)
-s sous-système, pour voir les job d'un sous système
-u profil , pour voir les job d'un utilisateur
............................................................................
:> ps :
: PID DEVICE TIME FUNCTION STATUS JOBID :
: 403 pcxp 000:00 cmd-qsh 145818/qsecofr/pcxp :
: 409 - 000:00 pgm-qzshsh evtw 145824/qsecofr/qzshsh :
: 410 - 000:00 pgm-ps run 145825/qsecofr/qp0zspwp:
:..........................................................................:
-> le fait de lancer QSH démarre un autre job (QZSHSH) de type BATCHI
-> chaque commande (comme ici ps) démarre un process autonome QP0ZSPWP
kill pour "tuer" un process sur son PID (N° comme ici 410)
|

|
Vous trouverez également la commande "db2"
db2 "SELECT * FROM qsys2.systables WHERE TABLE_OWNER = 'QSECOFR'"
toutes ces commandes sont dans le répertoire '/usr/bin' et sont en fait
des alias pointant vers des pgms situés dans les bibliothèques de l'OS.
(Bibliothèque QSHELL en général)
pour voir le contenu, cde OS/400 wrklnk '/usr/bin/*'
(pour voir le pgm réel passez l'option 12 devant un alias).
ou bien ls -l /usr/bin
|

|
La version 5.2 apporte un utilisataire Rfile pour manipuler les fichiers
OS/400 (Database et fichier source)
Rfile -h affiche l'aide
-r lit un fichier DB2 ou source et écrit dans STDOUT
-w écrit dans un fichier DB2 ou source ce qui vient de STDIN
-a peut alors etre utilisé pour travailler en ajout (replace/dft)
-l ne pas tronquer les données longues mais éclater sur plusieurs
lignes.
autre options :
-b flot de données binaire (sinon texte avec retour chariot)
-Q les coordonnées du fichier sont indiqué en format OS/400
(sinon IFS = /QSYS.LIB/MABIB.LIB/FICHIER.FILE/MEMBRE.MBR)
-c commande CL à passer avant le traitement (OVRxxx admis)
-C commande CL à passer après le traitement
et enfin la V5R30 propose catsplf pour écrire un spool vers STDOUT
catsplf -j n°job/user/nom-job nom-du-spool n°spool
catsplf -j 123456/QSECOFR/DSP02 QSYSPRT 1 > /tmp/spool.txt
|
ou bien, encore PASE
| 
PASE (option 33 de l'OS)
intégré à l'OS depuis la V5R20 et dont
l'installation est conseillée par IBM (pour java, DNS V5, etc...)
il s'agit de tous les binaires AIX (5L) sur l'AS/400 rendant celui-ci
très compatible avec une machine UNIX.
Cette fonctionnalité s'appuie sur le processeur commun à la gamme
Iseries et Pseries (POWER4 64 bits) et la capacité de ce dernier
à "switcher" d'un mode, d'un environnement à l'autre
(le processeur possède des instructions propres à l'OS/400)
|

|
pour lancer un "shell" PASE (ce n'est pas celui de QSH) :
> CALL QP2TERM (pour une saisie utilisateur)
> CALL QP2SHELL (pour exécuter un script)
> l'API Qp2RunPase, pour lancer Pase depuis un pgm ILE.
+ le répertoire de PASE est /QOpenSys/usr/bin
Si un exécutable n'est pas trouvé dans le chemin indiqué, PASE essai
en ajoutant "/QOpenSys" devant la racine ("/") du chemin,
sauf à renseigner la variable d'env. "PASE_EXEC_QOPENSYS" à "N"
Le shell lancé par PASE est le Khorn shell (/QOpenSys/usr/bin/sh)
pour voir la liste des commandes placez vous dans /QOpenSys/usr/bin
par cd (vérifiez par pwd ,que vous n'y êtes pas déja) et lancez ls .
regardez les commandes suivantes : (extrait, bien sûr ...)
cat - affiche le contenu d'un fichier
ln - créé un lien symbolique sur un fichier existant
mkdir - création d'un répertoire
rm - destruction de fichier(s)
mv - déplace ou renomme un fichier
A cette liste, vous devez ajouter les commandes "internes" comme cd, ... |

|
Ne confondez pas QSH (le shell de l'OS/400) et PASE (compatible AIX)
PASE possède plus de fonctionnalités, et quelques différences:
il peut tenir compte des retours chariot à l'affichage (F11)
il est sensible à la casse (différence minuscules/MAJUSCULES), pas QSH.
il ne transforme pas EBCDIC/ASCII sauf pour stdin,stdout et stderr,
si vous fixez QIBM_PASE_DESCRIPTOR_STDIO à T (QSh utilise les CCSID)
par exemple :
------------
cat /qsys.lib/bdvin.lib/qsqlsrc.file/crt_base.mbr | grep -c date
compte le nombre de ligne du membre crt_base contenant le mot "date"
(le fichier QSQLSRC est dans la bibliothèque BDVIN)
QSH donne 3 (il y a bien trois lignes) PASE indique 0 (data en EBCDIC)
il en sera de même pour wc (compte le nombre de mots), sort (tri),
split (éclatement de fichiers) et sed (edition de fichier)
|

|
alors, pourquoi utiliser pase, un exemple :
Aller chercher des binaires compilés pour AIX et les faire tourner
sur votre machine.
voyez http://aixpdslib.seas.ucla.edu/index.html , par exemple.
ou http://bio.gsi.de/DOCS/AIX/aixpdslib.seas.ucla.edu/ (un miroir)
vous trouverez sur ce site zip.2.3.tar.Z et unzip.5.50.tar.Z
Placez ces fichiers dans /QopenSys, puis lancez un terminal PASE
call Qp2term
décompressez le fichier par uncompress zip.2.3.tar.Z
puis restaurez par tar -xvf zip_2_3.tar
cela doit vous créer un répertoire user et des sous répertoires
placez vous dans /QopenSys/usr/local/bin (par cd)
|

|
tapez zip -h
cela doit vous afficher l'aide
#
> zip -h
Copyright (C) 1990-1999 Info-ZIP
Type 'zip "-L"' for software license.
Zip 2.3 (November 29th 1999). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi
list]
vous pouvez maintenant zipper des fichiers par :
zip fichier-zip-à-créer fichier(s)-à-zipper
ou bien par : (depuis un CL ou une ligne de commande)
CALL QP2SHELL PARM('/QopenSys/usr/local/bin/zip' +
'/chemin/fichier.zip' +
'/chemin/fichier(s)-à-zipper/')
|

|
Attention QP2SHELL n'est pas un shell, il en joue, en partie, le role :
il lance l'exécutable.
vous ne pourrez pas profiter de certains services du shell
- globing (caractères génériques comme *)
- tubes [|] ou redirections [>], et commandes multiples [:]
dans ce cas demandez à QP2SHELL de lancer sh (le shell lui même)
avec l'option -c (exécution d'une commande en paramètre)
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +
'-c' 'cp /repertoire1/*.txt /sauvegardes')
en CL
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +
'-c' &CDE)
|

|
Pour lancer un script nommé "shell.sh", utilisez la syntaxe suivante :
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +
'/tmp/shell.sh')
Attention si vous saisissez ce shell sous I5/OS (EDTF ou WRKLNK puis "2")
- demandez bien à ce que le fichier soit en ASCII 819
(faites F15, option 3 et saisissez 819 à la place de 297
particulièrement en cas de création)
- demandez aussi à ce que les fin de lignes soient marquée par le
caractère LF (standard unix) et non CRLF (standrad PC et I5/OS)
(faites F15, option 5 et choisissez *LF)
- commencez votre script par "#! /usr/bin/sh" et donnez le droit *RX
|
Comment partager ces fichiers IFS ?
FTP

|
FTP est un standard du monde TCP/IP permettant de transférer des fichiers
FTP possède les attributs suivants en V4R40 :
sur la commande CHGFTPA vous trouverez :
- NAMEFMT(*LIB | *PATH)
la nouvelle valeur *PATH indique un format serveur, identique à
"namefmt '1'", c'est à dire /qsys.lib/bib.lib/fichier.file/...
- CURDIR(*HOMEDIR)
fixe le répertoire de travail initial
(par défaut il s'agit du paramètre HOMEDIR du profil)
- LISTFMT(*DFT | *UNIX)
la valeur *UNIX produit un affichage, lors des demandes de liste,
compatible UNIX, c'est à dire avec (enfin) les noms de répertoires
à gauche.
ces trois options combinées rendent possible l'utilisation de clients FTP graphiques (Windows, Linux). |
| 
Pour utiliser FTP client :
Lancez la commande FTP
Puis signez vous (profil / mot de passe)
Les fichiers sont vus dans un système arborescent :
1/ bibliothèque/fichier.membre: dénomination par défaut[0], NAMEFMT(*LIB).
2/ - QSYS.LIB/bibli.LIB/FICHIER.FILE/membre.MBR
et
- /, /QOPT/, /QLANSrv/, /QDLS/REPERTOIRE/DOCUMENT
Si vous demandez le format de dénomination 1 : NAMEFMT(*PATH).
(les fichiers *SAVF sont acceptés)
|

|
Vous demandez ce format en passant la commande :
SITE NAMEFMT 1 (SITE NAMEFMT 0, revient au format précédent)
Cette commande n'est comprise que d'un AS/400.
Si vous utilisez FTP/Windows
passez la commande QUOTE, qui demande au système local de transmettre
une commande entre quotes sans la vérifier.
Voici la liste des principales commandes FTP :
OPEN système / CLOSE système
connexion/déconexion à un serveur FTP
USER profil
ouverture d'une session (en cas d'erreur lors de l'OPEN)
|

|
Paramètrage:
BINARY : transferts en mode binaire (pas de conversion CCSID)
ASCII : transferts en ASCII / EBCDIC : conversion
Répertoires:
CD : Change directory sur système distant
LCD : idem sur système local
CDUP : change vers répertoire parent (idem CD .. sous DOS)
DIR : liste des répertoires
LS : Liste des fichiers
PWD : voir directory en cours (système distant)
LPWD : idem en local
|

|
Transferts : localfile = nom local
remotefile = nom éloigné
APPEND localfile [remotefile] : Copie en Ajout
DELETE remotefile : suppression de fichier
GET remotefile [localfile] : Aller chercher un fichier
MDELETE remotefile : supprimer un fichier distant
MGET remotefiles (* accepté) : aller chercher un(des) fichiers
MPUT localfiles (idem) : envoyer un(des) fichiers
PUT localfile [remotefile] : envoyer un fichier
RENAME remotefile : renommer un fichier
RMDIR remotedirectory : supprimer un répertoire distant
|

|
Divers :
QUOTE commande : passer une commande FTP
SYSCMD commande : passer une commande OS/400 (L'AS/400 est client)
QUOTE rcmd cde : passer une commande OS/400 (L'AS/400 est le serveur)
STATUS : renvoi des infos
LOCSTAT : renvoi des statistiques
SYSTEM : descritpion du système distant
HELP : fourni l'aide général
HELP commandeFTP : founi l'aide sur cette commande
HELP SERVEUR cdeFTP : demande au serveur de renvoyer l'aide
sur une commande (inconnu en local par exemple)
VERBOSE : mode bavard (messages d'information)
QUIT : Arret de FTP client.
|

|
Commandes spécifiques à l'AS/400 (quand il est serveur)
ADDM : ADDPFM
CRTL : CRTLIB
CRTP : CRTPF
CRTS : CRTSRCPF
DLTF : DLTF
DLTL : DLTLIB
les paramètres sont les même que ceux des commandes CL.
Commande de test de la connexion (ne fait rien)
NOOP
|

|
Pour utiliser FTP en Batch, lancez les commandes suivantes dans un CL :
OVRDBF FILE(INPUT) TOFILE(FTPCMD) MBR(IN)
OVRDBF FILE(OUTPUT) TOFILE(FTPCMD) MBR(OUT)
FTP RMTSYS(MACHINEx)
Le membre IN contient les commandes suivantes :
*** Début des données ***
profil motdepasse
CD bibli
Get fichier
QUIT
*** fin des données ***
OUT recoit toutes les lignes qui auraient été affichées à l'écran.
|
Netserver sur AS/400
NetSERVER c'est le voisinage réseau sur l'AS/400
- en V4R20 on peut voir l'AS/400 à partir d'un PC sous Windows
9x/NT (sans autre soft !)
- en V4R30 l'AS/400 voit les serveurs NT/2000 du réseau sous /QNTC (Voir
ci dessous)
Encore une fois Operation Navigator est le SEUL moyen de configurer ce
produit.
Paramétrage V4 :
...........................................................................
: ATTENTION, il faut assigner un nom "netbios" à l'AS/400. :
: --------- :
: :
: Si vous avez des clients en V3R2M0, il est déconseillé de donner le :
: même nom que le nom de l'AS/400 pour Client Access. :
: :
: A partir de la V4R40, avec Client Access Express, vous pourrez cocher :
: la case "permettre l'accès à AS/400 Netserver avec un nom AS/400" :
: qui vous permettra de reconnaître l'AS/400 sur son nom netbios :
: et sur son nom SYSTEME. :
: :
: :
: Le nom par défaut est QS44xxxxxx [où S44xxxxxx est le SYSNAME
] :
:.........................................................................:
Vous devez aussi indiquer un nom de domaine (ou groupe de travail)
Si vous avez un serveur NT/2000 sur votre réseau local, mettez l'AS/400 dans le même domaine que le serveur NT.
cela sera important si vous souhaitez accèder à la branche d'IFS,
/QNTC qui représente l'accès client de NetServer (client Netbios),
c'est à dire une vision des partages de vos serveurs NT locaux, dans
le même domaine.
Si vous souhaitez voir automatiquement l'AS/400 dans le voisinage
réseau indiquez :
- une page de code 850 (DOS) ou mieux, 1252 (Windows)
- une intervalle entre annonces supérieure à 0 (par
défaut, 720)
|
le paramétrage V5R10 :
il faut d'abord cliquer sur prochain démarrage, pour avoir accès
aux paramètres en modification.


le paramétrage de la page de code et de l'intervalle entre annonces,
ce faisant sur le deuxième onglet

Pour voir vos serveurs et vos stations NT/2000 sous l'arborescence QNTC.
- le profil 400 qui utilise QNTC doit exister sur le poste ou dans le
DOMAINE Windows AVEC LE MÊME MOT DE PASSE !
-
a/ si l'AS et le serveur sont dans le même domaine,
vous devez voir
tous vos serveurs automatiquement dans /QNTC
b/ s'il ne sont pas dans le même domaine (ou si
vous n'en n'avez pas)
il faut créer un répertoire portant le nom du poste dans
QNTC
par exemple MKDIR '/QNTC/POSTE01'
il faut alors que l'OS/400 puisse trouver l'adresse IP correspondante
(fichier HOSTS [CFGTCP option 10] ou serveur DNS [CFGTCP/12] )
==> ATTENTION, il faut recréer le répertoire après
chaque IPL.
ASTUCES
:
- il peut être très judicieux pour les performances,
de positionner la variable d'environnement suivante :
ADDENVVAR ENVVAR(QZLC_SERVERLIST) VALUE(1)
LEVEL(*SYS)
- en cas de problèmes :
- recherchez les messages suivants dans la log CPDB050, CPDB055,
CPDB692
- lancez une trace avec les commndes suivantes :
- CALL QZLCTRC (t x'FFFFFFFF') - démarrage
- CALL QZLCTRC (t x'00000000') - arrêt
- CALL QZLCTRC (p) - print
- CALL QZLCTRC (c) - clear
|
Contrairement aux anciens dossiers partagés, seuls les répertoires déclarés partagés seront vus des clients.
Pour ajouter de nouveaux répertoires en partage :
en V4R20, utilisez directement le bouton droit.
en V4R30, double-cliquez sur netserver, pour faire apparaître la fenêtre de gestion de netserver, puis cliquez sur le bouton droit.

dans tous les cas, sélectionnez : nouveau/fichier...

En V4r40, les partages sont plus faciles à définir
- pour partager une imprimante, demandez la liste des imprimantes et cliquez avec le bouton droit.
- pour partager un répertoire, demandez la liste des répertoires (système de fichiers/sytème de fichiers intégré)et cliquez avec le bouton droit.
L'option "Partage..." vous est alors proposée.
pour voir la liste des partages en cours et des sessions actives
choisissez "système de fichiers/partages de fichiers"

RAPELL : Pour voir l'AS/400 dans le voisinage réseau :
- pensez à indiquer une page de code 850
ou 1252
- renseignez le paramètre "intervalle entre annonces"
si vous ne souhaitez pas l'AS/400 dans le voisinage réseau, mettez 0.
Si Vous ne voyez pas l'AS/400 directement dans le voisinage réseau,
il faut taper directement "\\Q-mon-as\repertoire" ,
ou bien utiliser "rechercher/ordinateur...."

L'authentification, lorsque vous accèdez à une ressource est la suivante :
+ le client essaie de se connecter avec le profil de réseau de Windows
+ si le profil existe mais que le mot de passe est différent,
- vous êtes invité à entrer un mot de passe
+ si le profil n'existe pas sur l'AS/400
- s'il y a un profil invité de paramétré,
==> on utilise ce profil.
- sinon,
==> sous Windows 95/98/ME , l'accès est refusé
==> sous windows NT/2000/XP , vous rentrez profil et mot de passe.
Autres options, nouvelles en V5r10 : 
- Etat, permet d'obtenir des statistiques sur Netserver

- ID utilisateurs désactivés, vous affiche les utilisateurs
désactivés pour Netserver

- et enfin, l'option Configuration vous propose un assistant pour configurer
Netserver
les informations à renseigner sont les mêmes que précédemment.
Pour paramétrer ou lancer Netserver depuis une session
5250 , utilisez les APIs suivantes (par CALL) :
QZLSCHSG |
change le profil Invité |
|
|
Profil |
10 |
|
code-erreur |
16 (code erreur API) |
QZLSADFS |
Ajout un répertoire partagé |
|
|
nom de partage |
12 |
|
chemin |
?? |
|
lg du chemin |
binaire (4) |
|
CCSID du chemin |
binaire (2) |
|
texte |
50 |
|
Autorisations |
BIN (4) 1=read/2=read-write |
|
nbr d'utilisateurs maxi |
BIN (4) -1 = *nomax |
|
code-erreur |
16 (code erreur API) |
QZLSCHSN |
Changer le nom du serveur |
|
|
nom |
15 |
|
domaine |
15 |
|
Texte |
50 |
|
code-erreur |
16 (code erreur API) |
QZLSSTRS |
Démarrage du serveur |
|
|
réinitialisation |
1 '0'=non, '1'=Oui |
|
code-erreur |
16 (code erreur API) |
QZLSENDS |
Arret du serveur |
|
|
code-erreur |
16 (code erreur API) |
QZLSRMS |
retrait d'un partage |
|
|
nom de partage |
12 |
|
code-erreur |
16 (code erreur API) |
NB : ceci est un extrait.
QUSRTOOL propose un MENU d'utilisation de ces API, en V5R20
CRTLIB LIB(NETSRVCMD) TEXT('Bibliothèque pour le menu NETS') CALL QUSRTOOL/UNPACKAGE PARM('*ALL ' 1) CRTCLPGM NETSRVCMD/TZLSINST QUSRTOOL/QATTCL CALL NETSRVCMD/TZLSINST NETSRVCMD
|
Puis GO NETS 
Vous remarquerez sur ce menu, l'option 14 SNDNSVMSG permettant
d'envoyer
un message à un utilisateur Windows
1/ vérifiez que le service "Affichage des messages" est
bien démarré sous NT4, 2000, XP
2/ Utilisez la commande SNDNSVMSG
SNDNSVMSG MSg('Bonjour &1, premier test') TONETID(PCXP) ==> nom de PC
SNDNSVMSG MSg('Bonjour &1, premier test') TONETID(Christian) ==> Utilisateur
SNDNSVMSG MSg('Bonjour &1, premier test') TONETID(Christian PCXP) ==> utilisateur
sur un poste
& 1 est remplacé par le nom de l'utilisateur
ou du poste
