En résumé, apprendre Unix et le scripting, c'est acquérir des outils essentiels pour automatiser, comprendre et maîtriser son environnement informatique, ce qui est utile aussi bien dans les études que dans la vie professionnelle.
Les périphériques contenant des fichiers peuvent être attachés à différents endroits de la hiérarchie
/home/bob/monFichier.txt/home/bob, le fichier /home/lili/chose.txt peut être référencé par ../lili/chose.txt.. permet de revenir au répertoire parent
/home/dcissm1/alice
nom-de-la-commande -options --options-longues parametre1 parametre2toto@trux:~$ /bin/pwd
/home/toto
/bin/ peut être omis, pwd aurait suffit car le shell va automatiquement chercher ce qu'il y a dans /binls (list) permet d'afficher la liste des fichiers
ls : liste des fichiers du répertoire courant « working directory »ls /bin : liste des fichiers du répertoire /bincd (change directory) permet de changer de répertoire courant
cd /bin : pour aller dans /bincd : revenir dans son « home directory »/bin
Sans « bouger »
ls /bin
En allant sur « place », puis en revenant à la « maison »
cd /bin
ls
cd
whatis lsman lsls --helpmkdir DIRECTORYtouch FILEln -s TARGET LINKNAMEcp SOURCE DEST (copie le fichier « source » vers un fichier nommé
« dest »)cp SOURCE DIRECTORY (copie le fichier « source » dans le répertoire
« directory », la copie garde le nom)mv SOURCE DEST (renomme, déplace le fichier « source » en « dest »mv SOURCE DIRECTORY (déplace le fichier « source » dans le
répertoire « directory »)rm FILE... (supprime les fichiers passés en paramètre)rmdir DIRECTORY... (supprime les répertoires passés en paramètre,
ces rép. Doivent être vides, sinon utiliser rm -rf ...)cat , more (affichage paginé), less (comme more mais avec plus de
fonctions, d'où son nom ;-)cat /etc/passwd ou getent passwdroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
...
bob:x:1000:1000:Bob Marley:/home/bob:/bin/bash
cat /etc/groupgetent groupgroupname*:*x*:*gid*:*liste des utilisateurs secondairesroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,jerome
adduser, useradd) , modification (usermod), suppression
(deluser)passwdid, id USERNAMEaddgroup), modification (groupmod), suppression (groupdel)su -sudo lacommandels -l / :

La gestion des droits se fait via la commande chmod
chmod [OPTIONS] [ u g o a ] [ - + = ] [ r, w, x ] fichier
[u g o a] Qui ?
(u)ser, (g)roup, (o)ther, (a)ll[ - + =] Action?
- enlever, + ajouter, = garder[r, w, x] Droits?
r : read, w: write, x : executechmod 754 fichier → u=rwx (4+2+1), g=rx (4+0+1), o=r (4+0+0)dateclearwhoamipstree

&, exemple : xeyes &Ctrl+z puis bgps (ceux du terminal), ps aux (lister tous les processus)pstree, htop, etc.kill -NUM_SIGNAL PID<> (ou 1>)ls -l / > liste.txt2>
> écrase le fichier destination. Si on veux ajouter il
faut utiliser >>ls 1>stdout_stderr.txt 2>&1|ls -1 / | wc -l
ls -1 est envoyé à l'entrée
standard de la commande wc -lmaVariable=quelquechose$maVariable (exemple : echo $maVariable)echo "blabla${maVariable}blabla"export maVariablesetprintenvmontab=("un" "deux" "trois")echo "3emeval=${montab[2]}"echo "tout le tableau=${montab[@]}"${#variable}$(date) ou `date` : dans une expression, cela est remplacé par le
résultat de l'appel à la commande datelet a=3+4A=$((3+4))a=3+4echo $a # affiche 3+4chemin1:chemin2:etcexport PATH=/mon/nouveau/rep:$PATH/etc/profile~/.bash_profile, ~/.bash_login, ~/.profile/etc/bash.bashrc, ~/.bashrccp f1 f2 ; rm f1 ;cc coucou.c && mv a.out monProgcc coucou.c || echo "Il y a un pb de compilation !"#!/bin/bash#un joli commentaireexit N ; #(ou N est un code de retour)echo bonjour ; # affiche un bonjour avec retour à ligneecho -n bonjour ; #idem mais sans retour à la ligneecho -e bonjour\tl3\tmiashsread v1 v2 ... vn
./monScript.bash truc chose bidule#!/bin/bash
for i in $*; do
echo $i
done;
#!/bin/bash
# This script can clean up files
# that were last accessed over 365 days ago.
USAGE="Usage: $0 dir1 dir2 dir3 ... dirN"
if [ "$#" = "0" ]; then
echo "$USAGE"
exit 1
fi
# $#=0 means false
while (( "$#" )); do
if [[ $(ls "$1") = "" ]]; then
echo "Empty directory, nothing to be done."
else
find "$1" -type f -a -atime +365 -exec rm -i {} \;
fi
shift
done
Structure
#####
if <commande>
then
<instruction>
fi
#####
if <commande>
then
<instruction1>
else
<instruction2>
fi
#####
if <commande>
then
<instruction1>
elif <com2>; then
<inst2>
...
else
<instN>
fi
Exemples
if test $# -eq 0
then
echo Pas de paramètres
fi
if cc -o tp tp.c
then
tp
else
echo Erreurs...
fi
Exemples
test "01" = "1" && echo OK || echo KO #KO
test "01" -eq "1" && echo OK || echo KO #OK
test 01 = 1 && echo OK || echo KO #KO
test 01 -eq 1 && echo OK || echo KO #OK
a=""
test "$a" = 1 && echo OK || echo KO #KO
test $a = 1 && echo OK || echo KO #test: = : opérateur unaire attendu
[ $# -gt 1 ]Structure
while <commande>
do
<instructions>
done
Exemple
while [ -r "$1" ]
do
cat $1 >> liste
shift
done
Structure
for <var> [ in <liste> ]
do
<instructions>
done
Exemples
for f in tp1.c tp2.c
do
cc -c $f 2> trace
done
for f in *.c
do
cc -c $f 2> trace
done
echo "Paramètres :"
for f
do
echo $f
done
Structure
until <commande>
do
<instructions>
done
Exemple
until [ ! -r "$1" ]
do
cat $1 >> liste
shift
done
#!/bin/bash
if test $# -eq 0
then
echo Usage: testFicMult nomFichier1 ... nomFichiern
else
for i in $*
do
if [ -d "$i" ]; then
echo $i est un repertoire
elif [ -f "$i" ]; then
echo le fichier $i existe
else
echo $i n\’existe pas
fi
done
fi
find <chemin(s)> <critère(s)> <action(s)>
find /home /usr -name 'ab*' -print 2> /dev/nullfind . -name "*.o" -ok rm {} \;find . ! -user root -printgrep <regexp> [fichier ...]
grep -ni "ab.." *-E):
. – un caractère quelconque.* – zéro ou plus d'occurrences du caractère précédent.+ – un ou plus d'occurrences du caractère précédent.? – zéro ou une occurrence du caractère précédent.^ – début du pattern.$ – fin du pattern.() – groupe pattern.[...] – plage de caractères.[^...] – plage de caractères interdits.?, +, {, |, (, et ) perdent leur signification spéciale, il faut utiliser à la place leurs versions avec la contre-oblique \?, \+, \{, \|, \(, et \).curl -o GPL-3 https://www.gnu.org/licenses/gpl-3.0.txt
grep "GNU" GPL-3
grep -i "license" GPL-3
grep "^GNU" GPL-3
grep "and$" GPL-3
grep "..cept" GPL-3
grep "t[wo]o" GPL-3
grep "([A-Za-z ]*)" GPL-3
grep -E "(copy)?right" GPL-3
grep -E "free[^[:space:]]+" GPL-3
liste.txt :
cut -d":" -f3,6 liste.txtcut -c1-10 liste.txtExemple :
sed 's/droit/schtroumpf/g' droits-de-lhomme.txt
Le s/ au début veut dire substituer.
le g à la fin veut dire global → remplacement sur toutes les occurrences trouvées dans chaque ligne
sed -n '3,7p' fichier → affiche les lignes 3 à 7 (-n supprime l'affichage par défaut p pour print)sed 's/^[ \t]*//;s/[ \t]*$//' fichier → supprime les espaces (et les tabulations) en début et fin de lignesed '2,5d' fichier.txt → supprime les lignes 2 à 5 (d pour delete)sed '2i\Texte ajouté' fichier.txt → insère "Texte ajouté" avant la ligne 2sed '3a\Nouvelle ligne ici' fichier.txt → ajoute "Nouvelle ligne ici" après la ligne 3sed '1,5s/foo/bar/g' fichier.txt → remplace "foo" par "bar" dans les lignes 1 à 5sed '/^$/d' fichier.txt → supprime les lignes videss/foo/bar/ → remplace seulement la première occurrence par ligne.s/foo/bar/2 → remplace uniquement la 2ᵉ occurrence dans la ligne.s/foo/bar/3 → la 3ᵉ occurrence, etc.s/foo/bar/p → affiche la ligne seulement si un remplacement a eu lieu.s/foo/bar/w fichier.txt → écrit les lignes modifiées dans un fichier de sortie.s/foo/bar/Ip (ou avec l’option -i) → insensible à la casse
tr translate: manipulation de caractère
cat liste.txt|tr ',' ' '
sed, awk manipulation de texte
sed s/droit/schtroumpf/g droits-de-lhomme.txt
https://wiki.deimos.fr/Sed_&_Awk_:_Quelques_exemples_de_ces_merveilles.html
https://wiki.deimos.fr/sed-awk-some-examples-of-these-wonders/
wc Word Count : compter les mots, lignes ou caractères d'un fichier texte
wc monFichier.txt
sort : trier les lignes d'un fichieruniq : éliminer les doublons (sur fichier trié)