Unix

Bienvenue sur mon petit mémo des bases d’Unix !

VIVE LINUX ❤️


Les extensions sont une saloperie Windowsienne !

Les scripts se lancent dans un shell séparer, ils n’ont donc pas accès au différentes variables ou fonction ajouté dans notre shell actuel.

Si on veut garder des informations entre deux scripts, il faut les stocker séparément, dans un fichier, base de données, etc.

Le signe # indique que la ligne est un commentaire

Manuel

Si jamais vous voulez connaître le fonctionnement d’une commande, vous pouvez utiliser man.

Par exemple pour ouvrir le manuel de ls :

man ls

Déplacement

Afficher les fichiers actuels :

ls

Afficher les fichers actuels avec leurs droits dans une liste :

ls -al

Se rendre dans un dossier :

cd nom_du_dossier

Afficher l’emplacement actuel :

pwd

Supprimer un fichier :

rm nom_du_fichier

Pour bouger un fichier/dossier (On peut également renommer un fichier/dossier) :

mv /chemin/vers/lemplacement/dorigine/fichier /chemin/vers/le/nouvel/emplacement/fichier

Pour copier un fichier :

cp fichier1 fichier2

Pour copier 1 ou plusieurs fichier dans un dossier :

cp fichier1 fichier2 fichier3 dossier

Pour copier un dossier :

cp -r dossier1 dossier2

Caractères spéciaux

* permet de remplacer par ce que l’on veut.

Par exemple, nous avons 4 fichiers :

ls fichier*

On va récupérer

4fichier ne sera pas afficher car il commence par 4 et nous chercher des fichiers qui comment par fichier.

? permet de remplacer une lettre :

Par exemple, nous avons 4 fichiers :

ls fichier?_*

On va récupérer seulement :

[a-h] va récupérer toute les lettres entre a et h.

Par exemple, nous avons 4 fichiers :

ls [a-h]*

On va récupérer seulement :

! permet de faire l’inverse d’une opération.

Dossier

Création :

mkdir nom_du_dossier

Création de plusieurs dossiers à la fois (si le dossier existe déjà ça ne fait rien) :

mkdir -p nom_du_dossier_1/nom_du_dossier_2

Suppresion :

rm -r nom_du_dossier
# ou
rmdir nom_du_dossier

ATTENTION: rm -r va supprimer récursivement, donc le dossier et son contenu

Fichiers

Pour créer un fichier vide :

touch nom_du_fichier
# Ou
cat </dev/null > nom_du_fichier

Pour entrer du texte dans le fichier directement depuis le shell

En EN ÉCRASANT LE CONTENU DU FICHIER :

echo "test" > nom_du_fichier

En ajoutant à la fin :

echo "test 2" >> nom_du_fichier

On peut afficher le contenu d’un fichier :

cat nom_du_fichier

On peut également l’ouvrir avec un éditeur de texte :

nano nom_du_fichier

Deux éditeurs de textes sont généralement installé sur les différentes distributions Linux, nano et vi.

Généralement nano est le plus simple à prendre en main.

Les types de fichier

On peut simplement les voir en faisant ls -al. C’est le premier caractère avant les droits. J’explique cela plus en détail après si jamais.

Alias

On peut créer des alias dans Bash.

Pour faire cela on peut ajouter l’alias dans la session actuelle :

alias salut="ls"

On peut également l’ajouter dans le fichier .bashrc qui se trouve à la racine du home :

nano ~/.bashrc

Pour l’ajouter directement à la fin du fichier :

echo 'alias salut="ls"' >> ~/.bashrc

On peut charger les changements en rechargeant le fichier bashrc :

source ~/.bashrc

Arguments au lancement d’un script

Exemple :

# On boucle pour afficher tous les arguments

for i in $#
do
        echo "$@"
done

Quote

Si on colle les double quotes on faite un unique mot :

test="jean"
echo "$test""$test""$test"

Echo / print

Echo permet uniquement de sortir des lignes classique, pour afficher de meilleurs sorties, on peut utiliser printf.

Boucles

for :

for i in $var
do
    echo "$i"
done

while (ATTENTION: ici c’est une boucle infinie):

while [1 != 2]; do
    echo "1"
done

Switch

case "$a" in
    a) var=b;;
    b) var=c;;
    c) var=d;;
    *)
esac

*) représente la case par défaut, si aucun autre cas n’est valide.

Conditions

if [ $a != a ]; then
    echo "$a";
fi

Functions

ATTENTION : Les fonctions ne peuvent pas être vide

Version pour les soixantenaire, moi j’aime bien :

name_of_func() {
    echo "Hello World"
}

Ou version plus “moderne” :

function name_of_func {
    echo "Hello World"  
}

On peut envoyer des arguments en les ajoutant après l’appel de la fonction :

name_of_func "arg1" "arg2" "$var_arg3"

Pour inclure une fonction d’une autre fichier, pour cela il faut lancer un script dans un shell ou ces fonctions on déjà été importé.

On peut lancer un script dans un shell existant avec :

. ./script.sh

On peut donc ensuite appeler toutes les fonctions présentes dans le script.

ATTENTION: Ce n’est pas vraiment une bonne pratique, à ne faire qu’uniquement en cas de strict nécessité

Processus

Pour avoir les différents processus qui tourne :

ps -aux

On peut aussi utiliser :

top

Si jamais un processus pose problème on peu le “tuer” avec la commande kill ainsi que son id, trouvable avec soit ps ou top :

kill 12345

Plusieurs niveau de kill, existe. De base, kill envoie un SIGTERM, c’est-à-dire un 15. Dans le cas où le processus ne veut vraiment pas se fermer, on peut envoyer un SIGKILL, c’est-à-dire un 9.

kill -9 12345

Gestion des droits

Les droits Unix sont diviser en 3.

On peut voir les différents droits avec ls -al

Image d’explication d’un ls -al

L’utilisateur est le créateur du fichier.

Les droits fonctionnent avec trois lettres :

On peut également donner ces droits avec des octales (base 8)

Posséder tous les droits : rwx ou 7

Si tout le monde possède tous les droits (utilisateur, groupe, everyone) : rwxrwxrwx ou 777. ATTENTION: il ne faut jamais attribuer tous les droits, c’est un risque de sécurité majeure !

On peut changer ces droits avec la commande chmod.

Pour ajouter les droits d’exécution pour le propriétaire sur le fichier fichier :

chmod u+x fichier

En octale on peut par exemple donner tous les droits au propriétaire et aucun au groupe et à tous le monde :

chmod 700 fichier

On peut également modifier le propriétaire et le groupe d’un fichier avec chown :

chown nv_user:nv_grp fichier

Maintenant le fichier appartient à l’utilisateur nv_user et au groupe nv_grp.

On peut également changer les droits des dossiers, les commandes sont les mêmes. La seul différence, est que “l’exécution” d’un dossier revient à avoir le droit de rentrer dedans.

Un dossier est de type d.

On peut également ajouter le paramètre -R à chmod et chown, afin de changer les droits récursivement. Donc pour tous les dossier et fichier contenue dans le dossier sur lequel on change les droits.

Droits par défaut

On peut changer les droits pas défaut, lors de la création d’un fichier.

Par exemple, tous les nouveaux fichiers ai du 740 en droits :

umask 017

Généralement, le système d’exploitation aura par défaut des droits “raisonnable”, donc à ne changer qu’en cas de stricte nécessité