![]() | ![]() |
: ,
.
[ ]
!
|
pwd
read
return
set
shift
|
![]() | ![]() |
acroread
ar
arp
|
ln
lp
ls
mail
mesg
mkdir
mkfs
more
|
Ne fait rien, mais est utile pour la syntaxe
if [ $repInc = /usr/include ]
then :
else echo Répertoire incorrect; exit 1
fi
Exécute les commandes du fichier ~/.profile dans l'environement
courant, ce qui permet de le modifier
. ~/.profile
L'utilisation de [ ] est identique à celle de la commande test
sous une forme syntaxique différente.
La commande suivante renvoie un code retour de 0 (VRAI) si la variable
"nomF" est le nom d'un fichier simple accessible en lecture, et une
valeur non nulle (FAUX) sinon.
[ -f $nomF ] && [ -r $nomF ]
L'utilisation courante des [ ] est dans la position "condition" d'une
instruction "alternative simple", ou "repetitive while".
if [ -f $nomF ] && [ -r $nomF ] ; then ...
Faire suivre chaque crochet [ ] par un "espace"
La commande suivante fournit, sans affichage, un code retour 0 (VRAI) si le fichier
abc/def n'existe pas:
! ls abc/def >/dev/null 2>&1
Visualiser le fichier "chapitre12.pdf":
acroread chapitre12.pdf
Un très classique; (pas d'espace de part et d'autre du signe =).
alias ll='ls -al'
[il existe aussi la définition rm='rm -i']
Utilisé sans paramètre, l'interprète fournit la liste des alias qu'il
connait:
alias
Avec la commande suivante, l'interprète fournit la définition qu'il a enregsitrée:
alias ll
On peut utiliser l'option -x pour forcer l'interprète à communiquer la
définition à un sous-interprète:
alias -x lt='ls -altrd'
Création de la bibliothèque iutlg.a et ajout des modules objets:
ar -q iutlg.a *.o
Liste des membres de la bibliothèque iutlg.a(option -t: table; option
-v:mode verbeux):
ar -vt iutlg.a
Ajout ou remplacement de modules objets:
ar -vr iutlg.a *.o
Table des adresses (adresses symbolique, numéro IP, numéro MAC):
arp -a
Si $0=../exec/monscript, l'extraction du nom "monscript" est faite par:
basename $0
[réponse: monscript]
La commande, utilisée avec deux paramètres, peut enlever une extension connue
basename c/prem1.c .c
[réponse: prem1]
Travailler avec l'interprète bash:
bash
Demarre une session interactive, avec utilisation de fonctions
mathématiques (option -l).
On demande 4 chiffres apres la virgule (scale=4),
on declare une variable p, et on demande d'afficher p/2.
Calcul et affichage de sinus(p/6).
bc -l
scale=4; p=3.159; p/2
[réponse: 1.507
s(p/6)
[réponse: 0.4999
Calendrier du mois de juin 2004
cal 6 2004
Afficher prog.C
cat prog.C
Afficher prog.C, en numérotant les lignes
cat -n prog.C
Créer le fichier fic contenant les lignes abc et def
cat > fic
abc
def
^D
<-- appui CTRL+D (fin de fichier)
Autre méthode utilisant le mot "FIN." (par exemple) pour simuler
la fin de fichier; cette méthode peut être utilisée dans un script.
cat > fic << FIN.
abc
def
FIN.
Le sous-répertoire de nom "sousRep" devient le répertoire courant:
cd sousRep
Le répertoire "pére" devient le répertoire courant:
cd ..
S'il n'y a pas de paramètre, le répertoire d'accueil ($HOME) devient le
répertoire courant:
cd
Donner le droit "exécution" à tout le monde pour le sous-répertoire WWW:
chmod a+x ~/WWW
Donner le droit "lecture" au groupe et aux "autres" sur le fichier:
Welcome.html
chmod go+x ~/WWW/Welcome.html
Enlever les droits "écriture" aux fichiers du répertoire svg:
chmod ug-w ~/svg/*
Crée une copie de profile appelée .profile:
cp /etc/profile ~/.profile
Duplique tous les fichiers d'extension .C, dans le répertoire ~/svg:
cp *.C ~/svg
Le délimiteur étant ":" dans les lignes du fichier /etc/passwd,
on ne garde que le premier champ et les champs 5,6 et 7.
options -d:délimiteur, -f:field
cut -f1,5-7 -d: /etc/passwd
On garde les colonnes 31 à 41, et de 55 à la fin, dans l'affichage de
ll:
ll | cut -c 31-41,55-
Le vendredi 26 mars, à 13h15:
date +"%w %d %m %Y %T"
[réponse: 5 26 03 2004 13:15:16
5:vendredi 26:quantième 03:mars ...]
Pour récupérer ces valeurs dans des variables:
date +"%w %d %m %Y %T" | read jour quant qmois annee HMS
Extraction du nom de répertoire:
dirname c/prem1.cpp
[réponse: c]
dirname prem1.cpp
[réponse: .]
Place occupée, en blocs, par chaque sous-répertoire de ~/app/sys:
du ~/app/sys
[réponse:
8 /dptinfo/users/astier/app/sys/ie/2004/B
16 /dptinfo/users/astier/app/sys/ie/2004
180 /dptinfo/users/astier/app/sys/ie
]
Place occupée, avec affichage trié par taille croissante:
du ~/app/sys | sort -n
Penser aux "" si une apostrophe doit être affichée; idem avec () {}
echo "Message d'accueil $LOGNAME"
KSH: Affichage sans passer à la ligne suivante:
echo bla* "\c"
BASH: Affichage sans passer à la ligne suivante:
echo -n bla*
Affiche les variables exportables et leur valeur
(ex:HOME=/dptinfo/users/astier):
env
La variable 'dernier' prend la valeur du dernier argument passé au script:
eval dernier=\${$#}
Termine un script, avec un code retour de 4:
exit 4
Les variables MAP et MOIS sont fournies (ou exportées) aux scripts
appelés:
export MAP MOIS
Qu'est-ce-que exec, dans le répertoire d'accueil ?
file ~/exec
[réponse: répertoire]
file ~/exec/exec_ef
[réponse: script]
Partitionner ou voir les partitions; le secteur 0 n'est modifié
qu'en demandant explicitement l'éciture de la table de partition
fdisk /dev/hda
fdisk /dev/sda
Recherche, dans toute l'arborescence, des fichiers appelés prog*.C
(remarquer la nécessité des " "):
find $HOME -name "prog*.C"
Recherche, en aval de C++, des sous-répertoires (option -type d):
find C++ -type d
Recherche en ayant une condition plus complexe: fichier d'extension .C
ou .cpp (remarquer la nécessité de protéger les parenthèses, afin
qu'elles n'isolent pas une sous-commande pour l'interprète):
find . \( -name "*.C" -o -name "*.cpp" \) # sources C++
Fichiers simples terminé par sh, non exécutables par le propriétaire
(la négation est traduite par le ! )
find . -type f ! -perm -100 -name "*.sh"
Recherche, en aval de C++, des fichiers simples ayant une taille de plus
de 100k.octets:
find C++ -type f -size +100k
Recherche avec traitement effectué sur chaque fichier trouvé; ici on
cherche le mot "horloge" (forme majuscule ou minuscule).
Remarquer la nécessité de terminer la commande communiquée à find
avec "\;".
find C++ -name "*.C" -exec grep -lwi horloge {} \;
Compilation, liaison (ou édition de liens) et création d'un exécutable de nom:
a.out
g++ prog.cpp
Appel du préprocesseur sur le source prog.C:
g++ -E prog.C
Création du module objet prog.o, en utilisant le répertoire inc
pour y chercher des fichiers d'entête:
g++ -c -Iinc prog.C
Création de l'exécutable de nom th (option -o):
g++ -o th horloge.o testHorloge.C
Affichage des dépendances de testHorloge.o, par rapport au module source
et aux fichiers d'entêtes:
g++ -MM testHorloge.C
Lignes des fichiers prog.h et sp.h contenant le mot (option -w) 'include':
grep -w include prog.h sp.h
Afficher les sous-répertoires (dans l'affichage fourni
par "ls -al", ne garder que les lignes commençant par un 'd' (^d)):
ls -ane | grep ^d
Afficher les noms de fichiers d'extension .h (ne garder que
les lignes terminant par ".h" (\.h$)):
ls -ane | grep "\.h$"
Chercher les lignes contenant "int_max", peut-être en majuscule (option
-i, pour "ignore case"), dans les fichiers *.C:
grep -wi int_max *.C
Compression: crée le fichier td8.rtf.gz et supprime td8.rtf
gzip td8.rtf
Décompression: recrée le fichier td8.rtf et supprime td8.rtf.gz
gzip -d td8.rtf
Les 12 premières lignes du fichier prog.C:
head -12 prog.C
Les 2k premiers octets des fichiers *.C (option -c: caractère):
head -c -2K *.C
Obtenir le numéro IP, à partir du nom
host www.u-psud.fr
[réponse: 129.175.34.50]
host -n www.u-psud.fr # donne plus d'informations
Obtenir le nom IP (adresse symbolique)
host 62.161.104.70
[réponse: www.nis.fr]
Nom de la machine, (ou nom IP, ou adresse IP symbolique)
hostname
Numéro IP
hostname -i
Options (-u: numéro seul; -un:nom; -g numéro de groupe; -gn: nom du
groupe)
id
Numéro IP, masque de sous-réseau
ifconfig -a
Pour créer l'archive de nom appletXmp.jar avec des classes et fichier html:
jar cvf appletXmp.jar *.class appletXmp.html
Pour lister les noms de fichiers contenus dans junit.jar
jar -tf junit.jar
Les noms de fichiers de plusieurs archives écrits dans 'lesClasses'
rm -f lesClasses
touch lesClasses
for i in `ls *.jar`
do
echo jar -tf $i >> lesClasses
jar -tf $i >> lesClasses
done
Interprétation (chargement dans la machine virtuelle) d'une classe java
java MonJeu
Interprétation, en utilisant des classes situées dans le répertoire tmp
java -classpath tmp Boule
Création de la classe Monjeu (fichier Monjeu.class du répertoire courant):
javac Monjeu.java
Création de la classe Boule (fichier Boule.class placé dans le
répertoire tmp):
javac -d tmp Boule.java
Produire les fichiers de documentation sur les méthodes et champs
publics de la classe publique Monjeu (options
possibles: -protected -private):
javadoc Monjeu.java
Produire le fichier Coucou.h (Coucou.class doit être présent):
javah Coucou
Méthode et signatures (option -p ) des champs publics de la classe
Coucou.class:
javap -p Coucou
Supprime le processus de n° 12345 (si le processus n'appartient pas à
l'utilisateur, il n'est pas supprimé) :
kill -9 12345
Exécution, avec écho, de chaque commande du script exec_xt
ksh -xv exec_xt
Les variables fic et rep sont déclarées locales:
local fic rep
Incrémentation de 1 sur la variable b:
b=7; let b=b+1; echo $b
[réponse: 8]
Crée, dans le répertoire courant, le lien de nom REPC. L'affichage
par "ls -al" signale le lien par la lettre 'l' en première position sur
la ligne.
ln -s /dptinfo/tp/FI1/C++ REPC
Impression du fichier postscript fic.ps, sur l'imprimante de nom réseau ps32:
lp -d ps32 fic.ps
Liste de tous (option -a) les fichiers du répertoire rep, avec
toutes (option -l) les informations:
ls -al rep
Liste triée, plus récent en dernier (option -A: toutes les entrées
sauf . et ..):
ls -Alrt rep
Liste avec indication de taille (option -s), noms de répertoire
terminés par / (option p):
ls -asp rep
Entrées du répertoire courant commençant par es et un chiffre;
Avec l'option -d, s'il existe un répertoire, de nom es3 par exemple,
seul son nom est affiché - mais pas les fichiers de es3.
ls -d es[0-9]*
Liste des noms des seuls répertoires:
ls -Ap * | grep /$
Envoyer le fichier "prog.C" à l'adresse "toto@serveur.fr":
mail -s "source C++" toto@serveur.fr < prog.C
Lire son courrier (sortir par quit; aide par help):
mail
Refuser la réception de message:
mesg n
Créer le sous-répertoire svg, dans le répertoire d'accueil:
mkdir ~/svg
Formater la deuxième partition (partition linux)
mkfs /dev/hda2
Formater la partition 5 (partition vfat 32)
mkfs.vfat -F 32 /dev/sda5
Affiche les unités montées (unité physique - device, noeud ...):
mount
Afficher, par pages, le fichier d'entête ctype.h:
more /usr/include.ctype.h
Changer le nom sauvegarde en svg:
mv ~/sauvegarde ~/svg
On déplace les fichiers d'extension .C, du répertoire courant vers le
répertoire ~/svg:
mv *.C ~/svg
Informations sur les interfaces réseau de la machine:
netstat -i
Informations sur la table de routage:
netstat -r
Interrogation, du serveur de nom par défaut, sur une adresse:
nslookup www.lri.fr
Utilisée sans paramètre, la commande est interactive
(sortir par exit; aide par ?):
nslookup
Apès avoir lancé la commande, taper deux fois le mot de passe
passwd
Est-ce que beryl.math.u-psud.fr est accessible?
ping beryl.math.u-psud.fr
Affiche le nom complet du répertoire courant (voir $PWD):
pwd
Lecture de deux mots
read nom prenom
Pour récupérer des valeurs dans des variables:
date +"%w %d %m %Y %T" | read jour quant qmois annee HMS
Pour exploiter chaque ligne du fichier unFic
while read jour quant qmois annee HMS
do
....
done < unFic
La fonction suivante renvoie VRAI si son paramètre est un nombre
strictement positif, et faux si ce n'est pas un nombre, ou si c'est un
nombre négatif ou nul:
function estNombrePos {
if [ $1 -gt 0 ] 2> /dev/null; then return 0
else return 1;
fi
Ouvrir une session sur la machine beryl (la session ne débute
qu'après avoir donné ses noms et mots de passe):
rlogin beryl.math.u-psud.fr
L'utilisateur astier ouvre une session sur la machien ibmh70b:
rlogin ibmh70b -l astier
Supprimer les modules objets dont le nom commence par bla:
rm bla*.o
Supprimer les modules objets dans le réperoire courant et tous ses
sous-répertoires (option -r), sans demande de confirmation (option -f /
force):
rm -rf *.o
Supprime le répertoire C++/tm;
n'est exécuté que si le répertoire est vide:
rmdir C++/tmp
Heure courante, durée de fonctionnement du système,
nombre d'utilisateurs des machines du réseau:
Voir aussi uptime
ruptime
Sans argument, affichage des variables définies:
set
Placée dans un script, la commande suivante définit
respectivement 2 paramètres: $1 vaut abc et $2 vaut def
set abc def
Dans le contexte interactif, la commande suivante définit
le stype emacs pour rappeler et éditer les commandes:
set -o emacs
Quelques conventions du style emacs:
C^P ou C^N: commande précédente ou suivante
(previous, next)
C^B ou C^F pour déplacer le curseur sur une commande
(backward, forward)
C^A ou C^E pour aller en début ou en fin de ligne
(at beginning, end)
C^D pour supprimer le caractère sur le curseur
<ESC><ESC> ou <ESC>= pour compléter un nom de fichier
L'option "-o vi", en mode interactif, permet d'utiliser le stype vi:
set -o vi
Rappelons quelques conventions:
(quand il attend une commande, l'interprète est en mode
INSERTION;
sinon la frappe de <:ESC> est inutile si
on est déjà en mode COMMANDE):
<ESC>k ou <ESC>j : commande précédente ou suivante
<ESC>/abcd : comande précédente contenant le mot abcd
<ESC>h ou <ESC>l : à droite ou à gauche sur la ligne
<ESC>0 ou <ESC>$ : au début ou à la fin de la ligne
i : passage en MODE INSERTION (pour insérer des
caractères dans la ligne)
<ESC> passage en mode COMMANDE
<r.chariot> exécution de la commande éditée
Définition d'une variable de type tableau, et exemple d'utilisation:
set -A jours dimanche lundi mardi mercredi jeudi vendredi samedi
echo ${jours[0]}
Le paramétre 3,devient le numéro 1, le quatre devient le numéro 2 ...
shift 2
Affichage des lignes triées de fic
sort fic
Danqs l'exemple suivant on récupère les noms des utilisateurs connectés
à un momen donné, puis on les trie; comme des noms peuvent être plusieurs
fois on demande la suppression des doublons (option -u).
who | cut -c1-9 | sort -u
Affichage des fichiers triés par taille (la taille est le champ 4
par rapport au caractère ' ') décroissante
ll | tr -s ' '| sort -r -n -t' ' +4
sort erase ^P
Tous les paramètres liés au clavier:
stty -a
Reprendre les valeurs par défaut:
stty sane
Définir ^P pour effacer le caractère précédent:
stty erase ^P
Les 5 dernières lignes du fichier prog.C:
tail -5 prog.C
De la ligne n°20 à la fin du fichier prog.C:
tail +20 prog.C
Regrouper tous les fichiers du sous-répertoire bin en un seul
fichier de nom exec.tar; l'option -c demande la création de l'archive;
l'option -f indique que le nom de l'archive va suivre:
tar -cvf exec.tar bin
Création, ailleurs, du sous-répertoire bin et de son contenu:
(l'option -x demande une extraction depuis l'archive):
tar -xvf exec.tar
Ci-dessous, les résultats de a.out sont, à la
fois, affichés et placés dans le fichier "sortie":
a.out | tee sortie
Autre exemple: la liste des fichiers du répertoire courant
est écrite dans "listeFic", et le nombre de fichiers est
afffiché
ls | tee listeFic | wc -l
Ouverture d'une session ftp (n° de port 21) sur la machine identifiée
sur le réseau par kaki.batmath.u-psud.fr:
telnet kaki.batmath.u-psud.fr 21
Envoi d'un courrier, en s'adressant directement au port 25 (envoi de courrier)
telnet ibmh70a 25
helo ibmh70a
MAIL FROM: toto@site.bla
RCT TO: roger.astier@math.u-psud.fr
DATA
une ligne
deuxième ligne
troisième ligne
Finir avec la ligne .
.
La commande suivante renvoie un code retour de 0 (VRAI) si la variable
"opt" est égale à "-h", et une valeur non nulle (FAUX) sinon.
Remarquer les espaces qui encadrent le signe =
test "$opt" = -h
La commande suivante renvoie un code retour de 0 (VRAI) si la variable
"nomR" est le nom d'un répertoire, et une valeur non nulle (FAUX) sinon.
test -r $nomR
Les commandes suivantes renvoient un code retour de 0 (VRAI) si la variable
"nomF" est le nom d'un fichier simple (option -f), accessible en
lecture (option -r) , et une valeur non nulle (FAUX) sinon.
Dans la première forme, une seule commande est exécutée, qui reçoit
5 arguments, et comprend -a comme l'opérateur binaire "ET" entre
deux conditions.
Dans la deuxième forme, deux commandes sont exécutées
successivement; en fait la deuxième n'est exécutée que si le code retour
de la première commande est 0 (VRAI).
test -f $nomF -a -r $nomF
test -f $nomF && test -r $nomF
Durée d'exécution de la recherche du fichier "pers*sty", exprimée
en secondes:
time find ~ -name "pers*sty"
Si abcdef existe, sa date d'accès devient la date courante
(s'il n'exsite pas, un fichier de taille nulle est créé):
touch abcdef
les fichiers *.C auront la même date que abc.h
touch -r abc.h *.C
le fichier abcdef est à la date du 16 mars(03) 2005, 01 h.,23 minutes
touch -t 200503160123 abcdef
Convertir en minuscule, et enlever les accents, du fichier fic; le
résultat est affiché:
tr 'àéèêëîïùA-Z' 'aeeeeiiua-z' < fic
Suppression (option -d, pour delete) des sauts de ligne, façon "windows":
tr -d '\r' <fic
Compression (option -s, strip) des suites d'espaces et des '.':
tr -s ' .' <fic
Suppression des sauts de ligne, des points et virgules (première chaîne) et
compression (deuxième chaîne) des suites d'espaces et '!':
tr -s '\n,.' ' !' <fic
Comment est interprété "test":
type test
[réponse: commande interne]
Comment est interprété "mount":
type mount
[réponse: /usr/sbin/mount]
Les variables MAP et FIN ne peuvent pas être modifiées:
typeset -r MAP FIN
La variable nb est numérique (integer); un calcul est effectué
pour définir sa valeur:
typeset -i nb
nb=5*3
echo nb=$nb
[réponse: 15]
Constater la différence avec:
aux=5*3; echo aux=$aux
[réponse: 5*3]
Interdire (forcer un bit à zéro) l'écriture au groupe et "aux autres":
umask 022
Afficher l'état du masque (option -S pour avoir la forme symbolique:
umask
umask -S
L'interprète ne fera plus la subtitution de ll:
unalias ll
Système utilisé (par défaut option -s):
uname
[réponse: AIX]
Options: -m(atériel) -n(noeud,machine) -s(sytème d'exploitation),
-r(numéro du système) -v(version)
uname -n
[réponse: ibmh70a]
Création de tous les fichiers contenus dans l'archive ttt.zip:
unzip ttt.zip
Liste des fichiers contenus dans l'archive ttt.zip:
unzip -l ttt.zip
Affiche l'heure courante, la durée de fonctionnement du système,
le nombre d'utilisateurs
uptime
Crée le fichier dont le nom est sur la première ligne de rsrsCodee
(créé par uuencode):
uudecode rsrcCodee
Crée le fichier rsrcCodee commençant par begin ??? NomExterne;
le fichier, créé en utilisant uudecode aura le nom
nomExterne, les permissions ??? et sera identique à rsrc.
La transformation effectuée par uuencode est nécessaire pour
transmettre par le réseau des suites d'octets dont le bit de tête est à
zéro.
uuencode rsrc nomExterne > rsrcCodee
Nombre d'octets, mots et lignes des fichiers .C:
wc *.C
Nombre de lignes (option -l ) du fichier docUnix:
wc -l docUnix
Comment interpréter pwd ? (réponse: pwd est intégré au shell)
whence -n pwd
Dans quel répertoire est définie la commande gcc:
which gcc
Liste des utilisateurs connectés sur la machine:
who
Nom de l'utilisateur connecté:
whoami
[réponse: astier]
Autoriser, pour le serveur X, les accès à la machine ibmh70b
xhost +ibmh70b
Compilation, édition de liens et création d'un exécutable de nom
a.out:
xlC prog.cpp
Création d'un exécutable de nom testH:
xlC -o testH testH.C horloge.o
Si ttt n'existe pas, création de ttt.zip, contenant les fichiers
d'extension cpp; s'il existe, les fichiers sont ajoutés à ttt.zip:
zip ttt *.cpp
Avec l'option -r, les sous-répertoires sont parcourus
zip -r ttt *.cpp
![]() |
introduction de l'exemple
echo -n bla*