Développer en BASH
<code>
date +FORMAT
OR
date +"%FORMAT"
OR
date +"%FORMAT%FORMAT"
OR
date +"%FORMAT-%FORMAT"
$ date +"%m-%d-%y" 02-27-07
$ date +"%m-%d-%Y"
$ date +"%D"
Display time only
$ date +"%T"
How do I save time/date format to the shell variable?
Simply type the following command at the shell prompt:
$ NOW=$(date +"%m-%d-%Y")
%FORMAT String Description
%% a literal %
%a locale's abbreviated weekday name (e.g., Sun)
%A locale's full weekday name (e.g., Sunday)
%b locale's abbreviated month name (e.g., Jan)
%B locale's full month name (e.g., January)
%c locale's date and time (e.g., Thu Mar 3 23:05:25 2005)
%C century; like %Y, except omit last two digits (e.g., 21)
%d day of month (e.g, 01)
%D date; same as %m/%d/%y
%e day of month, space padded; same as %_d
%F full date; same as %Y-%m-%d
%g last two digits of year of ISO week number (see %G)
%G year of ISO week number (see %V); normally useful only with %V
%h same as %b
%H hour (00..23)
%I hour (01..12)
%j day of year (001..366)
%k hour ( 0..23)
%l hour ( 1..12)
%m month (01..12)
%M minute (00..59)
%n a newline
%N nanoseconds (000000000..999999999)
%p locale's equivalent of either AM or PM; blank if not known
%P like %p, but lower case
%r locale's 12-hour clock time (e.g., 11:11:04 PM)
%R 24-hour hour and minute; same as %H:%M
%s seconds since 1970-01-01 00:00:00 UTC
%S second (00..60)
%t a tab
%T time; same as %H:%M:%S
%u day of week (1..7); 1 is Monday
%U week number of year, with Sunday as first day of week (00..53)
%V ISO week number, with Monday as first day of week (01..53)
%w day of week (0..6); 0 is Sunday
%W week number of year, with Monday as first day of week (00..53)
%x locale's date representation (e.g., 12/31/99)
%X locale's time representation (e.g., 23:13:48)
%y last two digits of year (00..99)
%Y year
%z +hhmm numeric timezone (e.g., -0400)
%:z +hh:mm numeric timezone (e.g., -04:00)
%::z +hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::z numeric time zone with : to necessary precision (e.g., -04, +05:30)
%Z alphabetic time zone abbreviation (e.g., EDT)
</code>
====== for ======
L'itération for possède plusieurs syntaxes dont les deux plus générales sont :
===== Première forme =====
<code>
for var
do
suite_de_commandes
done
</code>
Lorsque cette syntaxe est utilisée, la variable var prend successivement la valeur de chaque paramètre de position initialisé.
Exemple : programme for_arg
<code>
- - - - - - - - - - - - - - - - -
#!/bin/bash
for i
do
echo $i
echo "Passage a l'argument suivant ..."
done
- - - - - - - - - - - - - - - - -
$ for_arg un deux => deux paramètres de position initialisés
un
Passage a l'argument suivant ...
deux
Passage a l'argument suivant ...
$
</code>
La commande composée for traite les paramètres de position sans tenir compte de la manière dont ils ont été initialisés (lors de l’appel d’un programme shell ou bien par la commande interne set).
</code>
Exemple : programme for_set
- - - - - - - - - - - - - - - - -
#!/bin/bash
set $(date)
for i
do
echo $i
done
- - - - - - - - - - - - - - - - -
$ for_set
dimanche
17
décembre
2006,
11:22:10
(UTC+0100)
$
</code>
===== Deuxième forme : =====
<code>
for var in liste_mots
do
suites_de_commandes
done
</code>
La variable var prend successivement la valeur de chaque mot de liste_mots.
<code>
Exemple : programme for_liste
- - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
for a in toto tata
do
echo $a
done
- - - - - - - - - - - - - - - - - - - - -
$ for_liste
toto
tata
$
</code>
Si liste_mots contient des substitutions, elles sont préalablement traitées par bash.
<code>
Exemple : programme affich.ls
- - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
for i in tmp $(pwd)
do
echo “ --- $i ---“
ls $i
done
- - - - - - - - - - - - - - - - - - - - - - - - -
$ affich.ls
--- tmp ---
gamma
--- /home/sanchis/Rep ---
affich.ls alpha beta tmp
$
</code>
====== Choix If ======
La commande interne if implante le choix alternatif.
Syntaxe :
<code>
if suite_de_commandes1
then
suite_de_commandes2
[ elif suite_de_commandes ; then suite_de_commandes ] ...
[ else suite_de_commandes ]
fi
</code>
Le fonctionnement est le suivant : suite_de_commandes1 est exécutée ; si son code de retour est égal à 0, alors suite_de_commandes2 est exécutée sinon c'est la branche elif ou la branche else qui est exécutée, si elle existe.
Exemple : programme rm1
<code>
#!/bin/bash
if rm $1 2>/dev/null
then echo $1 a ete supprime
else echo $1 n\'a pas ete supprime
fi
</code>
<code>
$ >toto => création du fichier toto
$
$ rm1 toto
toto a ete supprime
$
$ rm1 toto
toto n'a pas ete supprime
$
</code>
Lorsque la commande rm1 toto est exécutée, si le fichier toto est effaçable, le fichier est effectivement supprimé, la commande unix rm renvoie un code de retour égal à 0 et c’est la suite de commandes qui suit le mot-clé then qui est exécutée ; le message toto a ete supprime est affiché sur la sortie standard.
Si toto n’est pas effaçable, l’exécution de la commande rm échoue ; celle-ci affiche un message sur la sortie standard pour les messages d’erreur que l’utilisateur ne voit pas car celle-ci a été redirigée vers le puits, puis renvoie un code de retour différent de 0. C’est la suite de commandes qui suit else qui est exécutée : le message toto n’a pas ete supprime s’affiche sur la sortie standard.
Les mots if, then, else, elif et fi sont des mots-clé. Par conséquent, pour indenter une structure if suivant le « style langage C », on pourra l’écrire de la manière suivante :
<code>
if suite_de_commandes1 ; then
suite_de_commandes2
else
suite_de_commandes]
fi
</code>
La structure de contrôle doit comporter autant de mots-clés fi que de if (une branche elif ne doit pas se terminer par un fi).
<code>
if ...
then ...
elif ...
then ...
fi
if ...
then ...
else if ...
then ...
fi
fi
</code>
Dans une succession de if imbriqués où le nombre de else est inférieur au nombre de then, le mot-clé fi précise l’association entre les else et les if.
<code>
if ...
then ...
if ...
then ...
fi
else ...
fi
</code>
<code>
Commande composée [[ :
La commande interne composée [[ est souvent utilisée avec la commande interne composée if. Elle permet l’évaluation d’expressions conditionnelles portant sur des objets aussi différents que les permissions sur une entrée, la valeur d’une chaîne de caractères ou encore l’état d’une option de la commande interne set.
Syntaxe : [[ expr_cond ]]
Les deux caractères crochets doivent être collés et un caractère séparateur doit être présent de part et d’autre de expr_cond. Les mots [[ et ]] sont des mots-clé.
Le fonctionnement de cette commande interne est le suivant : l’expression conditionnelle expr_cond est évaluée et si sa valeur est Vrai, alors le code de retour de la commande interne [[ est égal à 0. Si sa valeur est Faux, le code de retour est égal à 1. Si expr_cond est mal formée ou si les caractères crochets ne sont pas collés, une valeur différente est retournée.
La commande interne [[ offre de nombreuses expressions conditionnelles ; c’est pourquoi, seules les principales formes de expr_cond seront présentées, regroupées par catégories.
Permissions :
* -r entrée vraie si entrée existe et est accessible en lecture par le processus courant.
* -w entrée vraie si entrée existe et est accessible en écriture par le processus courant.
* -x entrée vraie si le fichier entrée existe et est exécutable par le processus courant ou si le répertoire entrée existe et le processus courant possède la permission de passage.
</code>
<code>
$ echo coucou > toto
$ chmod 200 toto
$ ls -l toto
--w------- 1 sanchis sanchis 7 déc 17 17:21 toto
$
$ if [[ -r toto ]]
> then cat toto
> fi
$ => aucun affichage donc toto n’existe pas ou n’est pas accessible en lecture,
$ =>dans le cas présent, il est non lisible
$
$ echo $?
0 => code de retour de la commande interne if
$
</code>
Mais,
<code>
$ [[ -r toto ]]
$
$ echo $?
1 => code de retour de la commande interne [[
$
</code>
Types d'une entrée :
* -f entrée vraie si entrée existe et est un fichier ordinaire.
* -d entrée vraie si entrée existe et est un répertoire.
Exemple : programme affic
<code>
#!/bin/bash
if [[ -f $1 ]]
then
echo $1 : fichier ordinaire
cat $1
elif [[ -d $1 ]]
then
echo $1 : repertoire
ls $1
else
echo $1 : type non traite
fi
</code>
Renseignements divers sur une entrée :
-a entrée vraie si entrée existe.
-s entrée vraie si entrée existe et sa taille est différente de zéro.
entrée1 -nt entrée2 vraie si entrée1 existe et sa date de modification est plus récente que celle de entrée2.
entrée1 -ot entrée2 vraie si entrée1 existe et est plus ancienne que celle de entrée2.
Longueur d’une chaîne de caractères :
-z ch vraie si la longueur de la chaîne ch est égale à zéro.
-z ch vraie si la longueur de la chaîne ch est différente de zéro.
Comparaisons de chaînes de caractères :
ch1 < ch2 vraie si ch1 précède ch2.
ch1 > ch2 vraie si ch1 suit ch2.
L’ordre des chaînes ch1 et ch2 est commandé par la valeur des paramètres régionaux.
ch == mod vraie si la chaîne ch correspond au modèle mod.
ch != mod vraie si la chaîne ch ne correspond pas au modèle mod.
mod est un modèle de chaînes pouvant contenir caractères et expressions génériques.
<code>
$ a="au revoir"
$
$ [[ $a == 123 ]] => faux
$
$ echo $?
1
$
$ [[ $a == a* ]] => vrai, la valeur de a commence par le caractère a
$
$ echo $?
0
$
</code>
Si par mégarde ch ou mod ne sont pas définies, la commande interne [[ ne provoque pas d’erreur de syntaxe.
<code>
Exemple : programme testval
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
if [[ $1 == $a ]]
then echo OUI
else echo >&2 NON
fi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ testval coucou
NON => dans testval, $1 est remplacé par coucou, la variable a n’est pas définie
$
$ testval
OUI => aucun des deux membres de l’égalité n’est défini
$
</code>
Etat d’une option :
-o opt vraie si l’état de l’option opt de la commande interne set est à on.
<code>
$ set -o | grep noglob
noglob off
$
$ if [[ -o noglob ]]; then echo ON
> else echo OFF
> fi
OFF
$
</code>
Composition d'expressions conditionnelles :
( expr_cond ) vraie si expr_cond est vraie. Permet le regroupement d’expressions conditionnelles.
! expr_cond vraie si expr_cond est fausse.
expr_cond1 && expr_cond2 vraie si les deux expr_cond sont vraies. L’expression expr_cond2 n’est pas évaluée si expr_cond1 est fausse.
expr_cond1 || expr_cond2 vraie si une des deux expr_cond est vraie. L’expression expr_cond2 n’est pas évaluée si expr_cond1 est vraie.
Les quatre opérateurs ci-dessus ont été listés par ordre de priorité décroissante.
<code>
$ ls -l /etc/at.deny
-rw-r----- 1 root daemon 144 jan 3 2006 /etc/at.deny
$
$ if [[ ! ( -w /etc/at.deny || -r /etc/at.deny ) ]]
> then
> echo OUI
> else
> echo NON
> fi
OUI
$
</code>
Le fichier /etc/at.deny n’est accessible ni en lecture ni en écriture pour l’utilisateur sanchis ; le code de retour de la commande interne [[ sera égal à zéro car l’expression conditionnelle est vraie.
Attention : on prendra soin de séparer les différents opérateurs et symboles par des espaces
<code>
$ if [[ !( -w /etc/at.deny || -r /etc/at.deny ) ]]
-bash: !: event : not found
$
</code>
Dans l’exemple ci-dessus, il n’y a aucun blanc entre ! et (, ce qui provoque une erreur.
En combinant commande interne [[, opérateurs sur les codes de retour et regroupements de commandes, l’utilisation d’une structure if devient inutile.
<code>
$ [[ -r toto ]] || {
> echo >&2 "Probleme de lecture sur toto"
> }
Probleme de lecture sur toto
$
</code>
Remarque : par souci de portabilité, bash intègre également l’ancienne commande interne [. Celle-ci possède des fonctionnalités similaires à celles de [[ mais est plus délicate à utiliser.
<code>
$ a="au revoir"
$
$ [ $a = coucou ] => l’opérateur égalité de [ est le symbole =
-bash: [: too many arguments
$
</code>
Le caractère espace présent dans la valeur de la variable a provoque une erreur de syntaxe. Il est nécessaire de prendre davantage de précaution quand on utilise cette commande interne.
<code>
$ [ "$a" = coucou ]
$
$ echo $?
1
$
</code>
====== Liste des Commandes ======
====== Unix ======
Les variables
alias, unalias
Les informations sur le système et l'environnement : id, uname, logname,, tty, w, who
les programmes et les commandes : man, whereis, which
les fichiers : diff, awk, gawk, cat, grep, head, tail, file, more
les répertoires : ls, pwd, find
la date : cal, date
Le courrier électronique
elm, mail
Manipulation de fichiers et répertoires
* cd, rm, rmdir, mkdir
* chmod, cp, mv, ln
* sort, touch, uniq
* Compression, décompression, archivage
* gzip, gunzip, compress, uncompress, uudecode, uuencode, tar
Communication distante
rlogin, telnet, talk, ytalk
Divers
echo, sleep
Processus
kill, ps
===== Commandes par ordre alphabétique =====
|Nom|Description|Options|Paramètres|
|alias|Renomme ou définit une commande| variable=commande ||
|awk, gawk|extraction d'informations d'un fichier|-F : '...' : redéfinition du séparateur de champ 'commande' : traitement à faire sur les chaînes extraites nom de fichier |
|cal|affiche le calendrier de l'année spécifiée en paramètre||mois année |
|cat|imprime le contenu du fichier mentionné||nom de fichier |
|cd|se positionne sur le répertoire désigné|||chemin d'accès à un répertoire |
|chmod|change les permissions en lecture, écriture, exécution| -R change les droits récursivement à partir du noeud|(mode = ugo) mode - nom de fichier ou de répertoire|
|compress|compresse un fichier (voir gzip)||-c : résultat sans modification du fichier d'origine
-f : écrasement d'un fichier compressé préexistant
-v : taux de compression fichier
|cp|copie du fichier source vers la destination| -i : demande confirmation
-p : conservation de date et droits
-r : recopie récursive d'un répertoire source - destination
|date||retourne la date courante ||
diff
compare deux fichiers et affiche les différences
-c : affiche 3 lignes avant et 3 lignes après fichier1 fichier2
echo
envoi en écho des paramètres spécifiés à la suite ($PATH, "bye") -n : supprime le retour chariot en fin de commande
elm
courier électronique -s : chaîne de caractères qui sera le sujet du message
-f : nom de la boîte à lettres destinataire
file
retourne le type de fichier spécifié (ascii,ps, exé.sparc ou 68020) nom de fichier
find "répertoire"
recherche récursive d'un fichier à partir du répertoire -name fichier : fichier à chercher
-print : affiche le chemin trouvé
grep
affiche les lignes du fichier contenant la chaîne de caractères -v : seulement les lignes ne contenant pas la chaîne
-i : majuscules et minuscules identiques
-n : avec numéros de lignes
-c : nombre de comparaisons positives chaîne de caractères - fichier
gunzip
décompresse un fichier -c : le résultat est produit sans modification du fichier d'origine
-v : taux de compression nom de fichier
gzip
compresse un fichier (voir compress)
par défaut, la destination est la sortie standard qu'on redirige vers un fichier si on veut obtenir un fichier compressé -c : résultat sans modification du fichier source
-f : écrasement d'un fichier compressé préexistant
-v : taux de compression
-d : force une décompression
-9 : niveau maximum de compression nom de fichier
head
liste les n premières lignes du fichier -n : nombre de lignes affichées (par défaut 10) source > destination
id
retourne le nom de login, l'UID, le groupe et le GID
kill
envoi d'un signal à un processus -l : liste des signaux disponibles
-n : numéro du signal à envoyer
2 : INT (ctrl-c : )
3 : QUIT (ctrl-\)
9 : KILL numéro du process
ln
création d'une nouvelle référence pour un fichier préexistant -s : création d'un lien symbolique source - destination
logname
retourne le nom de login de l'utilisateur
ls
liste le contenu d'un répertoire -a : prise en compte des fichiers cachés
-F : renseigne sur le type de fichier (*, /, @)
-i : précision du numéro d'inode des fichiers
-R : liste récursivement le contenu du répertoire
-l : informations détaillées
-g : ajout du nom du groupe
-d : renseigne sur le répertoire lui-même
-t : liste par date de modification
-u : liste par date d'accès
-r : ordre inverse nom de répertoire
mail
courier électronique -s : chaîne de caractères qui sera le sujet du message
-f : nom de la boîte à lettres
-v : trace du mail jusqu'à sa délivrance destinataire - <fichier
man
retourne le mode d'emploi de la commande s'il existe nom de commande
mkdir
création d'un répertoire nom de répertoire
more
liste le contenu d'un fichier page par page nom de fichier
mv
déplace fichiers et répertoires -i : demande confirmation source - destination
ps
liste des processus BSD -a : processus détenus par les autres utilisateurs
-u : nom du propriétaire du processus
-x : processus sans terminal associé
-l : description complète
-t : terminal particulier
liste des processus Système V -f : ou l : description plus ou moins longue
-e : liste tous les processus
-p : processus dont le numéro suit l'option p
-t : processus attachés au terminal spécifié
-u : processus appartenant au propriétaire dont le nom ou l'UID est donné
pwd
retourne la référence absolue du répertoire courant
rlogin
ouvrir une session vers une machine distante (sortie :exit) -l : nom de login nom de machine
rm
supprime la référence du fichier dans le répertoire -f : force la commande sans s'occuper des droits
-i : demande confirmation
-r : destruction récursive nom de fichier ou de répertoire
rmdir
suppression d'un répertoire vide nom de répertoire
sleep
ne fait rien pendant n secondes temps en secondes
sort
tri des lignes du fichier suivant l'ordre ASCII -r : tri inverse
-u : élimine les lignesidentiques fichier
tail
liste les n dernières lignes du fichier -n : nombre de lignes affichées (par défaut 10) nom de fichier
talk, ytalk
permet de converser avec une machine distante destination
tar
archivage/désarchivage de fichiers c : création de l'archive
x : restauration de l'archive
t : listage du contenu de l'archive
v : mode verbeux
p : préserve dates et droits à la restauration
f : le nom du fichier spécifié sera celui de l'archive archive -répertoire ou fichiers
telnet
établir une connexion avec une machine distante(sortie : exit) nom de machine
touch
modifie les caractéristiques d'un fichier (option -a : m par défaut)
crée un fichier vide s'il n'existe pas déjà -a : dernier accès seulement
-m : dernière modification seulement fichier
tty
donne le nom du terminal
unalias
supprime un alias variable
uname
donne le nom du système d'exploitation -a : informations complètes
-n : nom de la machine
-r : release du système d'exploitation
-s : nom du système d'exploitation
uniq
recopie de source dans destination après suppression des lignes identiques -u : seules les lignes uniques sont recopiées source destination
uudecode
restitue un fichier binaire à partir du fichier éditable (ASCII) créé avec uuencode fichier
uuencode
encode un fichier binaire en fichier éditable (ASCII) fichier - indication >fichier encodé
w
aperçu de l'activité de la machine -h : supprime l'entête
-s : affichage restreint nom d'utilisateur
whereis
retourne le chemin complet d'accès à tous les répertoires contenant la commande nom de la commande
which
retourne le chemin complet d'accès à une commande nom de la commande
who (am i)
retourne le nom des utilisateurs qui ont ouvert une session
Exemples de commandes
Exemple Description
alias dir=ls -l
Il suffira de taper "dir" pour consulter la liste des fichiers avec leurs droits
unalias dir
Supprime l'alias de nom "dir"
awk nom de fichier
cal 09 1996
Affiche le calendrier du mois de Septembre 1996
cat exemple.c
Liste le contenu du fichier de nom "exemple.c"
cd programmes
Se déplace dans le répertoire de nom "programmes"
chmod 744 exemple.c
Donne tous les droits au propriétaire du fichier, et une simple lecture au groupe et à l'univers
compress -f exemple.c
Compresse le fichier de nom "exemple.c", en écrasant un fichier préexistant s'il existe
uncompress exemple.c
Décompresse le fichie r"exemple.c"
cp exemple.c toto.c
Crée le fichier de nom "toto.c" identique au fichier "exemple.c"
date
Affiche la date courante
diff -c fichier1 fichier2
Compare "fichier1" et "fichier2" en affichant 3 lignes avant et 3 lignes après chaque différence
echo $PATH
Affiche le contenu de la variable "PATH"
elm martin@inf
Envoie un message à martin
mail martin <exemple.c
Envoie le fichier "exemple.c" à martin
file exemple.c
Retourne quel est le type du fichier "exemple.c"
find "." -name exemple.c -print
Recherche récursivement et affiche le chemin menant au fichier "exemple.c" à partir du répertoire courant
===== G =====
grep -n -i "void" exemple.c
Affiche, avec leurs numéros, les lignes du fichier "exemple.c" qui contiennent la chaîne "void"
gzip -c exemple.c > exemple.c.gz
Compresse le fichier "exemple.c" en conservant le fichier d'origine.
Le fichier compressé est "exemple.c.gz".
gunzip -c > exemple.c exemple.c.gz
Décompresse le fichier "exemple.c.gz" sans perdre le fichier compressé.
Le résultat se trouve dans le fichier "exemple.c"
head exemple.c
Affiche les 10 premières lignes du fichier "exemple.c"
tail -5 exemple.c
Affiche les 5 dernières lignes du fichier "exemple.c"
id
Retourne le login, l'UID, le groupe et le GID courants
===== K =====
kill -9 8756
tue le processus de numéro 8756
===== L =====
ln -s exemple.c toto.c
crée un lien symbolique sur le fichier "exemple.c", de nom "toto.c"
logname
Retourne le nom de login de l'utilisateur
ls -l programmes
Donne le contenu du répertoire "programmes" en donnant des informations sur les fichiers (taille, dates, ...)
===== M =====
man chmod
Affiche le manuel d'utilisation de la commande "chmod"
mkdir sources
Crée le répertoire "sources"
more exemple.c
Affiche, page par page, le contenu du fichier "exemple.c"
mv exemple.c TP1.c
Renomme le fichier "exemple.c" sous le nom "TP1.c"
=====P=====
ps -aux
Sous système V, donne la liste de tous les processus actifs
pwd
Retourne la référence absolue du répertoire courant
===== R =====
rlogin -l martin champagne
Établit une connexion sur la machine champagne, sous le login de martin
telnet champagne
Établit une connexion sur la machine champagne
rm exemple.c
Supprime le fichier "exemple.c"
rmdir sources
Supprime le répertoire "sources"
sleep 10
Attend 10 secondes
sort -r TP1.c
Affiche le fichier "TP1.c", les lignes étant triées en ordre inverse
talk champagne@cal.enst.fr
Lance une conversation sur la machine "champagne@cal.enst.fr"
tar cf sources.tar sources
Crée une archive, de nom "sources.tar", du contenu du répertoire "sources"
tar xvf sources.tar sources
Extrait le contenu d'une archive, de nom "sources.tar", dans le répertoire"sources". L'écran affiche les noms des fichiers au fur et à mesure de leur désarchivage.
L'archive est conservée.
touch exemple.c
Modifie la date de dernier accès au fichier "exemple.c" à la date courante
tty
Donne le nom du terminal
uname
Affiche, dans l'ordre, le nom du système d'exploitation, le nom et la release du système de la machine
uniq exemple.c uniques.c
Recopie le fichier "exemple.c" dans "uniques.c" en supprimant les lignes identiques
uudecode fichier
uuencode fichier - indication >fichier encodé
===== W =====
w martin
Donne une idée de l'utilisation de la machine faite par l'utilisateur msrtin
whereis gcc
Retourne le chemin complet d'accès à tous les répertoires contenant la commande gcc
which gcc
Retourne le chemin complet d'accès à la commande gcc
who (am i)
Retourne le nom des utilisateurs qui ont ouvert une session sur cette machine
date +FORMAT
OR
date +"%FORMAT"
OR
date +"%FORMAT%FORMAT"
OR
date +"%FORMAT-%FORMAT"
$ date +"%m-%d-%y" 02-27-07
$ date +"%m-%d-%Y"
$ date +"%D"
Display time only
$ date +"%T"
How do I save time/date format to the shell variable?
Simply type the following command at the shell prompt:
$ NOW=$(date +"%m-%d-%Y")
%FORMAT String Description
%% a literal %
%a locale's abbreviated weekday name (e.g., Sun)
%A locale's full weekday name (e.g., Sunday)
%b locale's abbreviated month name (e.g., Jan)
%B locale's full month name (e.g., January)
%c locale's date and time (e.g., Thu Mar 3 23:05:25 2005)
%C century; like %Y, except omit last two digits (e.g., 21)
%d day of month (e.g, 01)
%D date; same as %m/%d/%y
%e day of month, space padded; same as %_d
%F full date; same as %Y-%m-%d
%g last two digits of year of ISO week number (see %G)
%G year of ISO week number (see %V); normally useful only with %V
%h same as %b
%H hour (00..23)
%I hour (01..12)
%j day of year (001..366)
%k hour ( 0..23)
%l hour ( 1..12)
%m month (01..12)
%M minute (00..59)
%n a newline
%N nanoseconds (000000000..999999999)
%p locale's equivalent of either AM or PM; blank if not known
%P like %p, but lower case
%r locale's 12-hour clock time (e.g., 11:11:04 PM)
%R 24-hour hour and minute; same as %H:%M
%s seconds since 1970-01-01 00:00:00 UTC
%S second (00..60)
%t a tab
%T time; same as %H:%M:%S
%u day of week (1..7); 1 is Monday
%U week number of year, with Sunday as first day of week (00..53)
%V ISO week number, with Monday as first day of week (01..53)
%w day of week (0..6); 0 is Sunday
%W week number of year, with Monday as first day of week (00..53)
%x locale's date representation (e.g., 12/31/99)
%X locale's time representation (e.g., 23:13:48)
%y last two digits of year (00..99)
%Y year
%z +hhmm numeric timezone (e.g., -0400)
%:z +hh:mm numeric timezone (e.g., -04:00)
%::z +hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::z numeric time zone with : to necessary precision (e.g., -04, +05:30)
%Z alphabetic time zone abbreviation (e.g., EDT)
</code>
====== for ======
L'itération for possède plusieurs syntaxes dont les deux plus générales sont :
===== Première forme =====
<code>
for var
do
suite_de_commandes
done
</code>
Lorsque cette syntaxe est utilisée, la variable var prend successivement la valeur de chaque paramètre de position initialisé.
Exemple : programme for_arg
<code>
- - - - - - - - - - - - - - - - -
#!/bin/bash
for i
do
echo $i
echo "Passage a l'argument suivant ..."
done
- - - - - - - - - - - - - - - - -
$ for_arg un deux => deux paramètres de position initialisés
un
Passage a l'argument suivant ...
deux
Passage a l'argument suivant ...
$
</code>
La commande composée for traite les paramètres de position sans tenir compte de la manière dont ils ont été initialisés (lors de l’appel d’un programme shell ou bien par la commande interne set).
</code>
Exemple : programme for_set
- - - - - - - - - - - - - - - - -
#!/bin/bash
set $(date)
for i
do
echo $i
done
- - - - - - - - - - - - - - - - -
$ for_set
dimanche
17
décembre
2006,
11:22:10
(UTC+0100)
$
</code>
===== Deuxième forme : =====
<code>
for var in liste_mots
do
suites_de_commandes
done
</code>
La variable var prend successivement la valeur de chaque mot de liste_mots.
<code>
Exemple : programme for_liste
- - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
for a in toto tata
do
echo $a
done
- - - - - - - - - - - - - - - - - - - - -
$ for_liste
toto
tata
$
</code>
Si liste_mots contient des substitutions, elles sont préalablement traitées par bash.
<code>
Exemple : programme affich.ls
- - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
for i in tmp $(pwd)
do
echo “ --- $i ---“
ls $i
done
- - - - - - - - - - - - - - - - - - - - - - - - -
$ affich.ls
--- tmp ---
gamma
--- /home/sanchis/Rep ---
affich.ls alpha beta tmp
$
</code>
====== Choix If ======
La commande interne if implante le choix alternatif.
Syntaxe :
<code>
if suite_de_commandes1
then
suite_de_commandes2
[ elif suite_de_commandes ; then suite_de_commandes ] ...
[ else suite_de_commandes ]
fi
</code>
Le fonctionnement est le suivant : suite_de_commandes1 est exécutée ; si son code de retour est égal à 0, alors suite_de_commandes2 est exécutée sinon c'est la branche elif ou la branche else qui est exécutée, si elle existe.
Exemple : programme rm1
<code>
#!/bin/bash
if rm $1 2>/dev/null
then echo $1 a ete supprime
else echo $1 n\'a pas ete supprime
fi
</code>
<code>
$ >toto => création du fichier toto
$
$ rm1 toto
toto a ete supprime
$
$ rm1 toto
toto n'a pas ete supprime
$
</code>
Lorsque la commande rm1 toto est exécutée, si le fichier toto est effaçable, le fichier est effectivement supprimé, la commande unix rm renvoie un code de retour égal à 0 et c’est la suite de commandes qui suit le mot-clé then qui est exécutée ; le message toto a ete supprime est affiché sur la sortie standard.
Si toto n’est pas effaçable, l’exécution de la commande rm échoue ; celle-ci affiche un message sur la sortie standard pour les messages d’erreur que l’utilisateur ne voit pas car celle-ci a été redirigée vers le puits, puis renvoie un code de retour différent de 0. C’est la suite de commandes qui suit else qui est exécutée : le message toto n’a pas ete supprime s’affiche sur la sortie standard.
Les mots if, then, else, elif et fi sont des mots-clé. Par conséquent, pour indenter une structure if suivant le « style langage C », on pourra l’écrire de la manière suivante :
<code>
if suite_de_commandes1 ; then
suite_de_commandes2
else
suite_de_commandes]
fi
</code>
La structure de contrôle doit comporter autant de mots-clés fi que de if (une branche elif ne doit pas se terminer par un fi).
<code>
if ...
then ...
elif ...
then ...
fi
if ...
then ...
else if ...
then ...
fi
fi
</code>
Dans une succession de if imbriqués où le nombre de else est inférieur au nombre de then, le mot-clé fi précise l’association entre les else et les if.
<code>
if ...
then ...
if ...
then ...
fi
else ...
fi
</code>
<code>
Commande composée [[ :
La commande interne composée [[ est souvent utilisée avec la commande interne composée if. Elle permet l’évaluation d’expressions conditionnelles portant sur des objets aussi différents que les permissions sur une entrée, la valeur d’une chaîne de caractères ou encore l’état d’une option de la commande interne set.
Syntaxe : [[ expr_cond ]]
Les deux caractères crochets doivent être collés et un caractère séparateur doit être présent de part et d’autre de expr_cond. Les mots [[ et ]] sont des mots-clé.
Le fonctionnement de cette commande interne est le suivant : l’expression conditionnelle expr_cond est évaluée et si sa valeur est Vrai, alors le code de retour de la commande interne [[ est égal à 0. Si sa valeur est Faux, le code de retour est égal à 1. Si expr_cond est mal formée ou si les caractères crochets ne sont pas collés, une valeur différente est retournée.
La commande interne [[ offre de nombreuses expressions conditionnelles ; c’est pourquoi, seules les principales formes de expr_cond seront présentées, regroupées par catégories.
Permissions :
* -r entrée vraie si entrée existe et est accessible en lecture par le processus courant.
* -w entrée vraie si entrée existe et est accessible en écriture par le processus courant.
* -x entrée vraie si le fichier entrée existe et est exécutable par le processus courant ou si le répertoire entrée existe et le processus courant possède la permission de passage.
</code>
<code>
$ echo coucou > toto
$ chmod 200 toto
$ ls -l toto
--w------- 1 sanchis sanchis 7 déc 17 17:21 toto
$
$ if [[ -r toto ]]
> then cat toto
> fi
$ => aucun affichage donc toto n’existe pas ou n’est pas accessible en lecture,
$ =>dans le cas présent, il est non lisible
$
$ echo $?
0 => code de retour de la commande interne if
$
</code>
Mais,
<code>
$ [[ -r toto ]]
$
$ echo $?
1 => code de retour de la commande interne [[
$
</code>
Types d'une entrée :
* -f entrée vraie si entrée existe et est un fichier ordinaire.
* -d entrée vraie si entrée existe et est un répertoire.
Exemple : programme affic
<code>
#!/bin/bash
if [[ -f $1 ]]
then
echo $1 : fichier ordinaire
cat $1
elif [[ -d $1 ]]
then
echo $1 : repertoire
ls $1
else
echo $1 : type non traite
fi
</code>
Renseignements divers sur une entrée :
-a entrée vraie si entrée existe.
-s entrée vraie si entrée existe et sa taille est différente de zéro.
entrée1 -nt entrée2 vraie si entrée1 existe et sa date de modification est plus récente que celle de entrée2.
entrée1 -ot entrée2 vraie si entrée1 existe et est plus ancienne que celle de entrée2.
Longueur d’une chaîne de caractères :
-z ch vraie si la longueur de la chaîne ch est égale à zéro.
-z ch vraie si la longueur de la chaîne ch est différente de zéro.
Comparaisons de chaînes de caractères :
ch1 < ch2 vraie si ch1 précède ch2.
ch1 > ch2 vraie si ch1 suit ch2.
L’ordre des chaînes ch1 et ch2 est commandé par la valeur des paramètres régionaux.
ch == mod vraie si la chaîne ch correspond au modèle mod.
ch != mod vraie si la chaîne ch ne correspond pas au modèle mod.
mod est un modèle de chaînes pouvant contenir caractères et expressions génériques.
<code>
$ a="au revoir"
$
$ [[ $a == 123 ]] => faux
$
$ echo $?
1
$
$ [[ $a == a* ]] => vrai, la valeur de a commence par le caractère a
$
$ echo $?
0
$
</code>
Si par mégarde ch ou mod ne sont pas définies, la commande interne [[ ne provoque pas d’erreur de syntaxe.
<code>
Exemple : programme testval
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
if [[ $1 == $a ]]
then echo OUI
else echo >&2 NON
fi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ testval coucou
NON => dans testval, $1 est remplacé par coucou, la variable a n’est pas définie
$
$ testval
OUI => aucun des deux membres de l’égalité n’est défini
$
</code>
Etat d’une option :
-o opt vraie si l’état de l’option opt de la commande interne set est à on.
<code>
$ set -o | grep noglob
noglob off
$
$ if [[ -o noglob ]]; then echo ON
> else echo OFF
> fi
OFF
$
</code>
Composition d'expressions conditionnelles :
( expr_cond ) vraie si expr_cond est vraie. Permet le regroupement d’expressions conditionnelles.
! expr_cond vraie si expr_cond est fausse.
expr_cond1 && expr_cond2 vraie si les deux expr_cond sont vraies. L’expression expr_cond2 n’est pas évaluée si expr_cond1 est fausse.
expr_cond1 || expr_cond2 vraie si une des deux expr_cond est vraie. L’expression expr_cond2 n’est pas évaluée si expr_cond1 est vraie.
Les quatre opérateurs ci-dessus ont été listés par ordre de priorité décroissante.
<code>
$ ls -l /etc/at.deny
-rw-r----- 1 root daemon 144 jan 3 2006 /etc/at.deny
$
$ if [[ ! ( -w /etc/at.deny || -r /etc/at.deny ) ]]
> then
> echo OUI
> else
> echo NON
> fi
OUI
$
</code>
Le fichier /etc/at.deny n’est accessible ni en lecture ni en écriture pour l’utilisateur sanchis ; le code de retour de la commande interne [[ sera égal à zéro car l’expression conditionnelle est vraie.
Attention : on prendra soin de séparer les différents opérateurs et symboles par des espaces
<code>
$ if [[ !( -w /etc/at.deny || -r /etc/at.deny ) ]]
-bash: !: event : not found
$
</code>
Dans l’exemple ci-dessus, il n’y a aucun blanc entre ! et (, ce qui provoque une erreur.
En combinant commande interne [[, opérateurs sur les codes de retour et regroupements de commandes, l’utilisation d’une structure if devient inutile.
<code>
$ [[ -r toto ]] || {
> echo >&2 "Probleme de lecture sur toto"
> }
Probleme de lecture sur toto
$
</code>
Remarque : par souci de portabilité, bash intègre également l’ancienne commande interne [. Celle-ci possède des fonctionnalités similaires à celles de [[ mais est plus délicate à utiliser.
<code>
$ a="au revoir"
$
$ [ $a = coucou ] => l’opérateur égalité de [ est le symbole =
-bash: [: too many arguments
$
</code>
Le caractère espace présent dans la valeur de la variable a provoque une erreur de syntaxe. Il est nécessaire de prendre davantage de précaution quand on utilise cette commande interne.
<code>
$ [ "$a" = coucou ]
$
$ echo $?
1
$
</code>
====== Liste des Commandes ======
====== Unix ======
Les variables
alias, unalias
Les informations sur le système et l'environnement : id, uname, logname,, tty, w, who
les programmes et les commandes : man, whereis, which
les fichiers : diff, awk, gawk, cat, grep, head, tail, file, more
les répertoires : ls, pwd, find
la date : cal, date
Le courrier électronique
elm, mail
Manipulation de fichiers et répertoires
* cd, rm, rmdir, mkdir
* chmod, cp, mv, ln
* sort, touch, uniq
* Compression, décompression, archivage
* gzip, gunzip, compress, uncompress, uudecode, uuencode, tar
Communication distante
rlogin, telnet, talk, ytalk
Divers
echo, sleep
Processus
kill, ps
===== Commandes par ordre alphabétique =====
|Nom|Description|Options|Paramètres|
|alias|Renomme ou définit une commande| variable=commande ||
|awk, gawk|extraction d'informations d'un fichier|-F : '...' : redéfinition du séparateur de champ 'commande' : traitement à faire sur les chaînes extraites nom de fichier |
|cal|affiche le calendrier de l'année spécifiée en paramètre||mois année |
|cat|imprime le contenu du fichier mentionné||nom de fichier |
|cd|se positionne sur le répertoire désigné|||chemin d'accès à un répertoire |
|chmod|change les permissions en lecture, écriture, exécution| -R change les droits récursivement à partir du noeud|(mode = ugo) mode - nom de fichier ou de répertoire|
|compress|compresse un fichier (voir gzip)||-c : résultat sans modification du fichier d'origine
-f : écrasement d'un fichier compressé préexistant
-v : taux de compression fichier
|cp|copie du fichier source vers la destination| -i : demande confirmation
-p : conservation de date et droits
-r : recopie récursive d'un répertoire source - destination
|date||retourne la date courante ||
diff
compare deux fichiers et affiche les différences
-c : affiche 3 lignes avant et 3 lignes après fichier1 fichier2
echo
envoi en écho des paramètres spécifiés à la suite ($PATH, "bye") -n : supprime le retour chariot en fin de commande
elm
courier électronique -s : chaîne de caractères qui sera le sujet du message
-f : nom de la boîte à lettres destinataire
file
retourne le type de fichier spécifié (ascii,ps, exé.sparc ou 68020) nom de fichier
find "répertoire"
recherche récursive d'un fichier à partir du répertoire -name fichier : fichier à chercher
-print : affiche le chemin trouvé
grep
affiche les lignes du fichier contenant la chaîne de caractères -v : seulement les lignes ne contenant pas la chaîne
-i : majuscules et minuscules identiques
-n : avec numéros de lignes
-c : nombre de comparaisons positives chaîne de caractères - fichier
gunzip
décompresse un fichier -c : le résultat est produit sans modification du fichier d'origine
-v : taux de compression nom de fichier
gzip
compresse un fichier (voir compress)
par défaut, la destination est la sortie standard qu'on redirige vers un fichier si on veut obtenir un fichier compressé -c : résultat sans modification du fichier source
-f : écrasement d'un fichier compressé préexistant
-v : taux de compression
-d : force une décompression
-9 : niveau maximum de compression nom de fichier
head
liste les n premières lignes du fichier -n : nombre de lignes affichées (par défaut 10) source > destination
id
retourne le nom de login, l'UID, le groupe et le GID
kill
envoi d'un signal à un processus -l : liste des signaux disponibles
-n : numéro du signal à envoyer
2 : INT (ctrl-c : )
3 : QUIT (ctrl-\)
9 : KILL numéro du process
ln
création d'une nouvelle référence pour un fichier préexistant -s : création d'un lien symbolique source - destination
logname
retourne le nom de login de l'utilisateur
ls
liste le contenu d'un répertoire -a : prise en compte des fichiers cachés
-F : renseigne sur le type de fichier (*, /, @)
-i : précision du numéro d'inode des fichiers
-R : liste récursivement le contenu du répertoire
-l : informations détaillées
-g : ajout du nom du groupe
-d : renseigne sur le répertoire lui-même
-t : liste par date de modification
-u : liste par date d'accès
-r : ordre inverse nom de répertoire
courier électronique -s : chaîne de caractères qui sera le sujet du message
-f : nom de la boîte à lettres
-v : trace du mail jusqu'à sa délivrance destinataire - <fichier
man
retourne le mode d'emploi de la commande s'il existe nom de commande
mkdir
création d'un répertoire nom de répertoire
more
liste le contenu d'un fichier page par page nom de fichier
mv
déplace fichiers et répertoires -i : demande confirmation source - destination
ps
liste des processus BSD -a : processus détenus par les autres utilisateurs
-u : nom du propriétaire du processus
-x : processus sans terminal associé
-l : description complète
-t : terminal particulier
liste des processus Système V -f : ou l : description plus ou moins longue
-e : liste tous les processus
-p : processus dont le numéro suit l'option p
-t : processus attachés au terminal spécifié
-u : processus appartenant au propriétaire dont le nom ou l'UID est donné
pwd
retourne la référence absolue du répertoire courant
rlogin
ouvrir une session vers une machine distante (sortie :exit) -l : nom de login nom de machine
rm
supprime la référence du fichier dans le répertoire -f : force la commande sans s'occuper des droits
-i : demande confirmation
-r : destruction récursive nom de fichier ou de répertoire
rmdir
suppression d'un répertoire vide nom de répertoire
sleep
ne fait rien pendant n secondes temps en secondes
sort
tri des lignes du fichier suivant l'ordre ASCII -r : tri inverse
-u : élimine les lignesidentiques fichier
tail
liste les n dernières lignes du fichier -n : nombre de lignes affichées (par défaut 10) nom de fichier
talk, ytalk
permet de converser avec une machine distante destination
tar
archivage/désarchivage de fichiers c : création de l'archive
x : restauration de l'archive
t : listage du contenu de l'archive
v : mode verbeux
p : préserve dates et droits à la restauration
f : le nom du fichier spécifié sera celui de l'archive archive -répertoire ou fichiers
telnet
établir une connexion avec une machine distante(sortie : exit) nom de machine
touch
modifie les caractéristiques d'un fichier (option -a : m par défaut)
crée un fichier vide s'il n'existe pas déjà -a : dernier accès seulement
-m : dernière modification seulement fichier
tty
donne le nom du terminal
unalias
supprime un alias variable
uname
donne le nom du système d'exploitation -a : informations complètes
-n : nom de la machine
-r : release du système d'exploitation
-s : nom du système d'exploitation
uniq
recopie de source dans destination après suppression des lignes identiques -u : seules les lignes uniques sont recopiées source destination
uudecode
restitue un fichier binaire à partir du fichier éditable (ASCII) créé avec uuencode fichier
uuencode
encode un fichier binaire en fichier éditable (ASCII) fichier - indication >fichier encodé
w
aperçu de l'activité de la machine -h : supprime l'entête
-s : affichage restreint nom d'utilisateur
whereis
retourne le chemin complet d'accès à tous les répertoires contenant la commande nom de la commande
which
retourne le chemin complet d'accès à une commande nom de la commande
who (am i)
retourne le nom des utilisateurs qui ont ouvert une session
Exemples de commandes
Exemple Description
alias dir=ls -l
Il suffira de taper "dir" pour consulter la liste des fichiers avec leurs droits
unalias dir
Supprime l'alias de nom "dir"
awk nom de fichier
cal 09 1996
Affiche le calendrier du mois de Septembre 1996
cat exemple.c
Liste le contenu du fichier de nom "exemple.c"
cd programmes
Se déplace dans le répertoire de nom "programmes"
chmod 744 exemple.c
Donne tous les droits au propriétaire du fichier, et une simple lecture au groupe et à l'univers
compress -f exemple.c
Compresse le fichier de nom "exemple.c", en écrasant un fichier préexistant s'il existe
uncompress exemple.c
Décompresse le fichie r"exemple.c"
cp exemple.c toto.c
Crée le fichier de nom "toto.c" identique au fichier "exemple.c"
date
Affiche la date courante
diff -c fichier1 fichier2
Compare "fichier1" et "fichier2" en affichant 3 lignes avant et 3 lignes après chaque différence
echo $PATH
Affiche le contenu de la variable "PATH"
elm martin@inf
Envoie un message à martin
mail martin <exemple.c
Envoie le fichier "exemple.c" à martin
file exemple.c
Retourne quel est le type du fichier "exemple.c"
find "." -name exemple.c -print
Recherche récursivement et affiche le chemin menant au fichier "exemple.c" à partir du répertoire courant
===== G =====
grep -n -i "void" exemple.c
Affiche, avec leurs numéros, les lignes du fichier "exemple.c" qui contiennent la chaîne "void"
gzip -c exemple.c > exemple.c.gz
Compresse le fichier "exemple.c" en conservant le fichier d'origine.
Le fichier compressé est "exemple.c.gz".
gunzip -c > exemple.c exemple.c.gz
Décompresse le fichier "exemple.c.gz" sans perdre le fichier compressé.
Le résultat se trouve dans le fichier "exemple.c"
head exemple.c
Affiche les 10 premières lignes du fichier "exemple.c"
tail -5 exemple.c
Affiche les 5 dernières lignes du fichier "exemple.c"
id
Retourne le login, l'UID, le groupe et le GID courants
===== K =====
kill -9 8756
tue le processus de numéro 8756
===== L =====
ln -s exemple.c toto.c
crée un lien symbolique sur le fichier "exemple.c", de nom "toto.c"
logname
Retourne le nom de login de l'utilisateur
ls -l programmes
Donne le contenu du répertoire "programmes" en donnant des informations sur les fichiers (taille, dates, ...)
===== M =====
man chmod
Affiche le manuel d'utilisation de la commande "chmod"
mkdir sources
Crée le répertoire "sources"
more exemple.c
Affiche, page par page, le contenu du fichier "exemple.c"
mv exemple.c TP1.c
Renomme le fichier "exemple.c" sous le nom "TP1.c"
=====P=====
ps -aux
Sous système V, donne la liste de tous les processus actifs
pwd
Retourne la référence absolue du répertoire courant
===== R =====
rlogin -l martin champagne
Établit une connexion sur la machine champagne, sous le login de martin
telnet champagne
Établit une connexion sur la machine champagne
rm exemple.c
Supprime le fichier "exemple.c"
rmdir sources
Supprime le répertoire "sources"
sleep 10
Attend 10 secondes
sort -r TP1.c
Affiche le fichier "TP1.c", les lignes étant triées en ordre inverse
talk champagne@cal.enst.fr
Lance une conversation sur la machine "champagne@cal.enst.fr"
tar cf sources.tar sources
Crée une archive, de nom "sources.tar", du contenu du répertoire "sources"
tar xvf sources.tar sources
Extrait le contenu d'une archive, de nom "sources.tar", dans le répertoire"sources". L'écran affiche les noms des fichiers au fur et à mesure de leur désarchivage.
L'archive est conservée.
touch exemple.c
Modifie la date de dernier accès au fichier "exemple.c" à la date courante
tty
Donne le nom du terminal
uname
Affiche, dans l'ordre, le nom du système d'exploitation, le nom et la release du système de la machine
uniq exemple.c uniques.c
Recopie le fichier "exemple.c" dans "uniques.c" en supprimant les lignes identiques
uudecode fichier
uuencode fichier - indication >fichier encodé
===== W =====
w martin
Donne une idée de l'utilisation de la machine faite par l'utilisateur msrtin
whereis gcc
Retourne le chemin complet d'accès à tous les répertoires contenant la commande gcc
which gcc
Retourne le chemin complet d'accès à la commande gcc
who (am i)
Retourne le nom des utilisateurs qui ont ouvert une session sur cette machine
Commentaires
Enregistrer un commentaire