Skip to content

Instantly share code, notes, and snippets.

@leg0ffant
Last active December 20, 2015 09:46
Show Gist options
  • Save leg0ffant/9648c1fbda3150e4fd2b to your computer and use it in GitHub Desktop.
Save leg0ffant/9648c1fbda3150e4fd2b to your computer and use it in GitHub Desktop.

Cours shell UNIX - annotation - Anthony Le Goff


Démarrer sous shell UNIX 'crosh'

Résumer des commandes en shell UNIX pour débutant. Basic à connaitre pour naviguer sous un terminal UNIX (ie: Linux, Chromebook ou Mac OS)

ENTRER SHELL CROSH

ctrl + alt + t

lancer la commande dans le prompt: shell

PUIS ENTRER

référence

  • Pour aller plus loin avec la ligne de commande
  • Quick guide linux admin

UNIX

C'est un système d'exploitation (opérating system) qui a plus de 45 ans.

  • multi-utilisateurs : le système identifie des personnes logiques et permet à ces personnes d’utiliser le système dans certaines limites ;
  • multi-tâches : le système est étudié pour exécuter plusieurs programmes en même temps, grâce au concept de « temps partagé »;
  • multi-plateforme : on verra qu’unix n’est pas un système dédié à un processeur, mais que c’est une famille de systèmes que l’on retrouve sur une multitude de plates-formes.

Les créateurs du système UNIX sont Ken Thompson et Dennis Ritchie, créa au même moment le language C de chez Bell. 1972. Les mêmes personnes origine du langage Go de chez Google en 2007.

Au début des années 80, l’importance prise par la distribution BSD, crée des tensions avec AT&T. Les utilisateurs sont alors face à deux unix :

  • le Berkeley unix, préféré par les développeurs et porté par une société nouvellement créée par des étudiants de Berkeley : Sun ;
  • AT&T unix system V : le système du propriétaire d’unix et supposé être le standard. Plusieurs fabricants dont Hewlett Packard, IBM, Silicon Graphics créent des unix fondés sur la version de AT&T.

Architectures

Un ensemble d’utilitaires : dédiés à des tâches diverses :

  • des interpréteurs de commande appelés shells permettant de soumettre des tâches au système, tâches pouvant être concurrentes et/ou communicantes ;
  • des commandes de manipulation de fichiers (copie, déplacement, effacement, etc.) ;
  • des commandes de gestion d’activités du système (processus) ;
  • des commandes de communication entre utilisateurs ;
  • des outils de développement (éditeurs de texte, compilateurs, débogueurs, ...)
  • des outils de traitement de texte.

Une base de données système : un ensemble de fichiers contenant :

  • des informations sur la configuration des différents services ;
  • des scripts de changement d’état du système (démarrage, arrêt, ...).

Caractéristiques

  • un système hiérarchisé de processus et une « génétique des processus » : chaque processus hérite les caractéristiques de son parent lors de sa création ;
  • des points d’accès protégés aux services offerts par le noyau. Ces points d’accès sont des routines généralement écrites en C, appelés appels système et font l’objet de la norme POSIX ;
  • aspect multi-tâche : on a toujours « la main » ;
  • des langages de commande, véritables langages de programmation permettant l’écriture de commandes complexes pouvant elles-mêmes être utilisées comme les commandes existantes ;
  • un système de fichier hiérarchisé (fichiers, répertoires, liens physiques et symboliques) ;
  • utilisation du concept de filtrage et de redirections. C’est une des idées fondamentales d’unix qui en fait toute la souplesse et la puissance. Les filtrages et les redirections constituent les principes de bases permettant d’appliquer la philosophie de la boîte à outils d’unix : écrire des commandes élémentaires et homogènes, pouvant communiquer entre elles.

GNU/Linux & UNIX

Linux est un noyau UNIX

Ainsi Chromebook par exemple est un 'fork' (dérivé) sous Linux Gentoo intégrant noyau UNIX. Linux est principalement écrit en C. Le noyau linux est auto-suffisant dans le cadre informatique embarquée. Linux est né en 1991 via Linus Torvalds améliorant le système d'exploitation Mimix basé sous noyau UNIX et norme POSIX Noyau en anglais = kernel. Linux utilise une interface graphique pour l'utilisateur via gestionnaire graphique comme X.Org ou encore Freon.

Le Shell

Un shell est une interface du système UNIX. Crosh est le shell sous Chromebook, programme qu'on appelle interpréteur de commandes. C'est une interface utilisateur souvent appelé terminal ou console quelques noms de shells:

  • sh : fait initialement référence au premier shell d’unix conçu par Steve Bourne, utilisé notamment pour les scripts système ;
  • ksh : le Korn shell ;
  • csh : le C shell (dont la syntaxe rappelle vaguement celle du C pour ce qui est des structures de contrôle) ;
  • bash : le shell de gnu 1 qui est, comme mentionné dans la page de manuel, « trop gros et trop lent ». C’est malgré tout celui sur lequel nous nous attarderons dans ce manuel (Bash signifie « Bourne Again Shell » : un jeu de mot avec la construction anglaise « born again » qui signifie renaissance.);
  • tcsh : le Tenex C shell contient tout ce qu’apporte csh avec des fonctionnalités supplémentaires notamment une édition plus aisée de la ligne de commande ;
  • zsh le Zorn shell contenant un langage de programmation plus évolué que bash et des fonctionnalités de complétions avancées ;

Que Choisir?

La plupart utilise le shell Bash qui est part défaut des systèmes Linux. Utilisateur avancée et pour l'auto-complétion passe sous zsh.

Le shell à son ouverture attend des commandes : on appel le prompt cet attente de commande utilisateur d'un interpréteur (ie: ruby, python egalement)

Fonctionnement d'un shell, algorithme

Pour toujours Faire
  Afficher le prompt et attendre une commande
  Vérifier sa syntaxe
  Si la syntaxe est correcte Alors
    exécuter la commande
  Sinon
    afficher un message d’erreur

Ok et c'est quoi une commande?

nom-commande options arg1 arg2 ... argn PUIS ENTRER

nom-commande est le nom de la commande à exécuter ; cette dernière peut accepter un certain nombre d’options dont la syntaxe est en général :

  • -option par exemple -a, ou
  • --option par exemple --verbose.

Exemple sous crosh shell

chronos@localhost ~/Downloads/ruby $ ls -l variable.rb 
-rw-r--r-- 1 chronos chronos 437 Dec 17 21:11 variable.rb

Sous les droits chronos dans dossier nommé Downloads et Ruby on appel commande ls et l'option -l d'un fichier nommé variable.rb

Impossible de comprendre la sortie, chinois de cet commande ? Normal

Et puis vu que c'est du charabia, efface le prompt, remet ceci au propre

$ clear

L'algorithme shell devient

Pour toujours Faire
  Afficher le prompt et attendre une commande
  Vérifier sa syntaxe
  Si la syntaxe est correcte Alors
    Si c’est une commande interne Alors
      l’exécuter
    Sinon
      chercher le fichier exécutable correspondant
      l’exécuter
  Sinon
    afficher un message d’erreur

Commande interne et externe? Rappeler langage Go. Fonction builtin son interne au langage et externe sont des fichiers binaires dans un répertoire défini par une variable d'environnement nommé PATH. Pareil Shell langage C.

Deux nouvelles commandes après ls

$ type cat
cat is /bin/cat
$ type echo
echo is a shell builtin

Commande cat est dans le répertoire /bin fichier /cat et echo indique interne shell. Pourquoi $? Juste syntaxe pour dire que c'est le prompt et donc une commande après. Ainsi la ligne sans $ indique la sortie de la commande. type défini le type de la commande

Composer de commande

Les programmeurs sont paresseux et donc utilise plusieurs commande sur la même ligne. On retrouve des opérateurs tels que:

  • && (sans erreur)
  • || (renvoie erreur en cas prob)
  • ; fait des commandes à la suite

Navigation

Il y a un historique des commandes quand vous êtes sur le prompt via 'fleche du haut et fleche du bas' revenir sur vos anciennes commandes. Egalement l'auto-completion (à utilisé massivement) en utilisant la touche Tab permet de compléter les noms de commandes, les noms de fichiers, de répertoires à partir des premiers caractères.

D'ou que les programmeurs les plus paresseux passent sous zsh shell plus évolué.

Variable environnement

Lorsqu’un shell est exécuté par le système, un certain nombre de variables dites d’environnement sont instanciées. Ces variables permettent à l’utilisateur et aux programmes lancés par le shell d’obtenir plusieurs informations sur le système, la machine et l’utilisateur, entre autres. La commande env affiche à l’écran toutes les variables d’environnement pour le shell

exemple chronos

$ env
MANPATH=/usr/local/share/man:/usr/share/man
TERM=xterm
SHELL=/bin/bash
DATA_DIR=/home/chronos
PORTAGE_CONFIGROOT=/usr/local
LC_ALL=en_US.utf8
USER=chronos
PATH=/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/local/go/bin:/home/chronos/user/Downloads/gocode/bin
CHROMEOS_SESSION_LOG_DIR=/home/chronos/user/log
PWD=/home/chronos/user/Downloads/ruby
EDITOR=/bin/nano
GOPATH=/home/chronos/user/Downloads/gocode
DEVICETYPE=CHROMEBOOK
GOOGLE_RELEASE=7520.62.0

Un peu complexe au départ, souvent de l'anglais. On apprend éditeur de texte par défaut est nano, ou le type ordinateur 'chromebook' ou chemin accès des sources de code en Go. Egalement on note que le shell est bien /bin/bash et non zsh.

Vous pouvez isolé les noms de variables pour obtenir la même chose. Exemple je veux le type de shell:

$ echo $SHELL
/bin/bash

C'est quoi commande echo? utilisateur sous linux vous dirait lance la commande man echo tu auras ta réponse. Sauf que commande man et crosh connait pas. man est la commande pour manuel la notice d'utilisation de chaque commande.

Normalement cela marche bien shell sous Linux

$ man echo
ECHO(1)                       User Commands                       ECHO(1)

NAME
       echo - display a line of text

SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION

DESCRIPTION
       Echo the STRING(s) to standard output.

English? Et oui que de l'anglais, pas le choix.

Caractère spéciaux

Un peu plus haut, découvert drôle de caractère

chronos@localhost ~/Downloads/ruby $

WTF?

  • Chronos Utilisateur de la session
  • localhost nom ordinateur local

Et puis tous ce complique.

  • / séparation de répertoire dans un chemin
  • $ permet le mécanisme d’expansion et donc permet de faire référence à la valeur de la variable nommée après, mais aussi de faire des calculs ou d’exécuter une autre commande ;
  • ~ remplace le répertoire privé de l’utilisateur ;
  • & lance une commande en arrière-plan ;
  • ***** remplace toute chaîne de caractères ;
  • ? remplace tout caractère (voir la section suivante pour ces deux caractères) ;
  • | pour créer un tube ;
  • > et < pour les redirections;
  • ; est le séparateur de commandes ;
  • # est le caractère utilisé pour les commentaires;

D'ou /home/chronos/user/Downloads/ruby équivaut à ~/Downloads/ruby

Le fameux dossier utilisateur "home" sous linux.

Le problème des espaces noms fichiers et dossiers

Envie d'effacer le fichier "Unix Guide.pdf" l'espace va poser problème

$ rm Unix Guide.pdf
rm: cannot remove ‘Unix’: No such file or directory
rm: cannot remove ‘Guide.pdf’: No such file or directory

Bref il n'a pas trouvé. Remplacer par la commande rm Unix\ Guide.pdf. Il est nécessaire d'échaper le caractère espace.

Caractères génériques dit "wildcards"

On retrouve le terme de wildcards dans l'achat de domaine.

$ ls Guide_Linux*
Guide_Linux.gdoc  Guide_Linux.pdf Guide_linux.odt

La wildcard liste tous les fichiers avec la fonction ls sous n'importe laquelle des extensions de fichiers.

Utilisateurs

Point très important sous shell, les utilisateurs et privilèges. Les utilisateurs ont un identifiant nommé uid et une chaine de caractère définissant le nom de l'utilisateur 'login'. Ensuite on retrouve le groupe dont l'utilisateur appartient, son répertoire privée 'dossier home utilisateur' et le shell de connexion (bsh, zsh)

Sous un terminal lancer la commande whoami pour connaitre l'utilisateur session. Puis son identité.

crosh> shell
chronos@localhost / $ whoami
chronos
chronos@localhost / $ id chronos
uid=1000(chronos) gid=1000(chronos) groups=1000(chronos),220(cras),240(brltty),208(pkcs11),18(audio),27(video),222(input),1001(chronos-access),403(devbroker-access)
chronos@localhost / $ 

Un peu de détail sur l'utilisateur chronos chromebook. On retrouve donc uid et les groupes de l'utilisateur chronos dans gid (group identifier) tels que audio, input : utilisateur qui a des droits , on parle élévation de droit.

Parlons rapidement du répertoire home

Revenons avec l'utilisation de ~ pour signifier le dossier privée de l'utilisateur

chronos@localhost / $ echo ~
/home/chronos/user

Ce dossier est propre à chronos et ne peu pas être compromis par un autre utilisateur.

ROOT & administrateur système

Voici Dieu dans toute son infini sous Linux. Nommé Root Vous pouvez être en root ou encore ce placer dans le root.

Avez vous compris?Non? C'est normal. Revenons.

  • Root est le super-administrateur de uid = 0 , vous avez tous les droits même de vider tous le systeme d'exploitation en vous plaçant dans le root.
  • Ce placer dans le root veut dire dans le répertoire racine. La base de tous le système et donc tous supprimé par exemple. Faites donc attention en mode root.

Allons-y démontrons cela. Connexion en root et rm root.

[anth@localhost ~]$ sudo su
Mot de passe [sudo] de anth :
[root@localhost anth]# cd /
[root@localhost /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
[root@localhost /]# rm -rf /*

Détruit le système, il ne reste plus rien à par le néant en quelques lignes. Analysons rapidement la démarche.

  1. Connectée sous anth et invoque la commande su (super-user) via sudo
  2. Je me positionne dans le répertoire racine (root) avec cd dans /
  3. Je vérifie que le répertoire n'est pas vide, histoire de tous supprimer ls
  4. Et je fais la commande magique supprime tous dossier, fichier dans root /

Fun sous UNIX? Surtout localhost d'un serveur qui n'est pas à vous.

Un mot sur SUDO : Très répandu, cette commande invoque droit super-user temporaire tels que pour installer un programme: tous ce qui change le système. Hors dans l'exemple on passe en root via sudo su permanent. Pour revenir a l'utilisateur et quitter root taper exit

Système de fichier

En faisant ls sous répertoire root / début arboresence des dossiers et fichiers de la partition linux. Ainsi en utilisant la référence absolue on part du dossier root vers le fichier tels que /home/user/mon_fichier.txt avec l'usage de séparateur entre dossier.

Le dossier de travail est le répertoire courant de la ligne de commande

Reprenons l'exemple plus haut. Au départ dossier de travail anth est le répertoire privée c'est à dire home puis via cd je change de répertoire courant vers répertoire racine / comme nouveau dossier de travail.

Simple en fin de compte?

Référence relative

La cela devient plus intéressant.

Deux répertoires particuliers existent dans chaque répertoire :

  • le répertoire . qui désigne le répertoire courant ;
  • le répertoire .. qui désigne le répertoire parent.

Le répertoire courant est très utilisé pour lancer des programmes alors que le répertoire courant est utilisé pour revenir dans l'arboresence

[anth@localhost ~]$ pwd
/home/anth
[anth@localhost ~]$ cd ~/Downloads/
[anth@localhost Downloads]$ cd ..
[anth@localhost ~]$

Partitions et arborescence

Ici commence le casse-tête et la base de la gestion des disques durs:

Vos données

Vos données sont disponible sur le disque et si vous avez 2 disques lorsqu' ils sont fusionné soit via un RAID ou alors un LVM. Je rentre pas dans le détail.

Ce qui devient intéressant c'est comment ce gère les partitions sous linux, le chiffrement de vos données

[anth@localhost ~]$ df -h
Sys. de fichiers               Taille Utilisé Dispo Uti% Monté sur
/dev/mmcblk0p1                   25G     15G  8,6G  64% /
devtmpfs                        1,9G       0  1,9G   0% /dev
shmfs                           1,9G    346M  1,6G  18% /dev/shm
tmp                             1,9G     35M  1,9G   2% /tmp
tmpfs                           387M    8,0K  387M   1% /run
tmpfs                           5,0M       0  5,0M   0% /run/lock
run                             1,9G    400K  1,9G   1% /var/host/dbus
/dev/mapper/encstateful         7,3G    110M  7,1G   2% /var/host/timezone
/dev/root                       1,2G    1,1G  142M  89% /usr/lib/modules/3.10.18
media                           1,9G       0  1,9G   0% /var/host/media
/home/.shadow/1f968f5d/vault     25G     15G  8,6G  64% /home/anth/Downloads
none                            1,9G       0  1,9G   0% /sys/fs/cgroup

Quelques notions:

  • Le répertoire racine / sur le disque 25go a été monté à partir /dev/mmcblk0p1 qui est le nom physique de votre espace de stockage
  • On retrouve d'autres partitions montée après le répertoire racine déja montée tels dossier temporaire tmp ou encore le dossier home specifique dans chromeOS dans téléchargement

Sachez que le montage des partitions au démarrage du système ce trouve dans /etc/fstab Et donc vos dossiers chiffrés et partitions. On monte via commande mount une partition

Privilèges

Il faut savoir que sous unix, on associe à chaque fichier trois types de propriétaires :

  • l’utilisateur propriétaire ;
  • le groupe propriétaire ;
  • les autres utilisateurs.

Attributs et droits:

  1. le droit de lire (read) signalé par la lettre r ;
  2. le droit d’écrire (write) signalé par la lettre w ;
  3. le droit d’exécuter (execute) signalé par la lettre x

Revenons un peu auparavant:

chronos@localhost ~/Downloads/ruby $ ls -l variable.rb 
-rw-r--r-- 1 chronos chronos 437 Dec 17 21:11 variable.rb
  • -rw-r--r-- bloc de droit (fichier normal, droit proprio rw, droit groupe r, droit autres utilisateurs r)
  • 1 nombre de lien sur le fichier
  • chronos propriétaire
  • chronos groupe
  • 437 taille du fichier en octets
  • Dec 17 21:11 data de dernière modif
  • variable.rb nom du fichier

Manipulation de fichiers

  • Copie cp
  • Déplacement mv
  • renommer

Utilisation de commande copie

[anth@localhost ~]$ ls -l *.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:50 manual_vim.odt
[anth@localhost ~]$ cp manual_vim.odt manual_vim_v2.odt
[anth@localhost ~]$ ls -l *.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:50 manual_vim.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:51 manual_vim_v2.odt
[anth@localhost ~]$ 

Et si je copie et déplace dans le dossier téléchargement?

[anth@localhost ~]$ cp manual_vim_v2.odt ~/Dowloads/manual_vim_v2.odt

Tous un dossier à copié dans le répertoire de travail? comme dossier bin

cp /usr/local/bin/*

Utilisation commande de déplacement et renommer

[anth@localhost ~]$ ls -l *.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:50 manual_vim.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:51 manual_vim_v2.odt
[anth@localhost ~]$ mv manual_vim.odt manual_vim_v3.odt
[anth@localhost ~]$ ls -l *.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:51 manual_vim_v2.odt
-rw-r--r-- 1 anth anth 56 19 déc.  21:50 manual_vim_v3.odt

Utiliser rm pour supprimer un fichier

Répertoire

Mkdir s'occupe des répertoires et sa création mkdir Dossier1 et sa suppression avec rm -rf Dossier1

Changer les droits

Connaitre les droits par défaut , défini par l'intermédiaire d'un masque à la création de fichier nommé umask

[anth@localhost ~]$ umask -S
u=rwx,g=rx,o=rx

Ce qui signifie qu’un fichier est créé avec par défaut :

  • pour le propriétaire : tous les droits ;
  • pour le groupe :
  • droits en lecture ;
  • droits en lecture et exécution pour les répertoires ;
  • idem pour les autres

La commande chmod permet donc de changer droit utilisateur. Seul l’administrateur (utilisateur root) a la possibilité de changer le propriétaire d’un fichier (commande chown). Enfin le groupe propriétaire peut être changé par le propriétaire (chgrp).

Code octal principaux type de droit:

  • -rwx------ codé par 700 ;
  • -rw-r-xr-x codé par 655 ;
  • -rw-r--r-- codé par 644.

exemple sur répertoire pour qu'il ne soit pas modifiable utilisateurs externes et groupes:

$ chmod 644 Dossier1

Liens

Introduire inode qui est un numéro, identifiant de fichier pour le système. On l'utilise particulièrement pour les liens et la commande ln

[anth@localhost ~]$ ls -li manual_vim_v3.odt
525252 -rw-r--r-- 1 anth anth 56 19 déc.  21:50 manual_vim_v3.odt

Les liens symboliques sont des liens référents un peu comme des raccourcis sous Windows. Et l'inode va changer pour le lien symbolique qui pointe vers l'inode parent.

[anth@localhost ~]$ cd ~/Downloads/
[anth@localhost Downloads]$ ln -s ~/manual_vim_v3.odt vimV3.odt
[anth@localhost Downloads]$ ls -li vimV3.odt 
262720 lrwxrwxrwx 1 anth anth 28 19 déc.  22:33 vimV3.odt -> /home/anth/manual_vim_v3.odt

Processus

Le système UNIX est multi-tache et multi-utilisateur, le noyau gère un ensemble de processus grâce à un ordonnanceur (scheduler) qui accorde au processus du temps-cpu

  • actif : le processus utilise le cpu
  • prêt : le processus attend que l’ordonnanceur lui fasse signe mais également :
  • endormi : le processus attend un évènement particulier (il ne consomme pas de cpu dans cet état) ;
  • suspendu : le processus a été interrompu par un signal

Chaque processus a un numéro d'identification appelé pid

examiner processus

Commande ps

[anth@localhost Downloads]$ ps
  PID TTY          TIME CMD
 9975 pts/1    00:00:00 bash
10056 pts/1    00:00:00 bash
10057 pts/1    00:00:00 bash
10483 pts/1    00:00:00 bash
12253 pts/1    00:00:00 ps

On apprend que le terminal xTerm lancé TTY numéro 1 utilise cmd bash et ps. D'autres terminal lancé peut-être?

$ ps x
12156 pts/2    Ss     0:00 /bin/bash /usr/bin/crosh
12240 pts/2    S      0:00 /bin/bash /usr/bin/crosh
12241 pts/2    S      0:00 /bin/bash -l
12251 pts/2    S+     0:00 vim
12330 pts/1    R+     0:00 ps x

En effet TTY numéro 2 vim sous crosh. Tenter ps aux affichera tous processus. Une commande également très utile est de listé processus par ordre pid et donc la séquence au démarrage via ps -ef

[anth@localhost Downloads]$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 déc.18 ?      00:00:00 /sbin/init
root         2     0  0 déc.18 ?      00:00:00 [kthreadd]
root         3     2  0 déc.18 ?      00:00:03 [ksoftirqd/0]
root         5     2  0 déc.18 ?      00:00:00 [kworker/0:0H]
root         7     2  0 déc.18 ?      00:00:00 [migration/0]
root         8     2  0 déc.18 ?      00:00:00 [rcu_bh]
root         9     2  0 déc.18 ?      00:00:39 [rcu_sched]
root        10     2  0 déc.18 ?      00:00:00 [watchdog/0]
root        11     2  0 déc.18 ?      00:00:00 [watchdog/1]
root        12     2  0 déc.18 ?      00:00:00 [migration/1]
root        13     2  0 déc.18 ?      00:00:02 [ksoftirqd/1]
root        15     2  0 déc.18 ?      00:00:00 [kworker/1:0H]
root        16     2  0 déc.18 ?      00:00:00 [khelper]
root        17     2  0 déc.18 ?      00:00:00 [kdevtmpfs]
root        18     2  0 déc.18 ?      00:00:00 [netns]
root        19     2  0 déc.18 ?      00:00:00 [writeback]
root        20     2  0 déc.18 ?      00:00:00 [bioset]
root        21     2  0 déc.18 ?      00:00:00 [kblockd]
root        22     2  0 déc.18 ?      00:00:00 [ata_sff]
root        23     2  0 déc.18 ?      00:00:00 [khubd]
root        26     2  0 déc.18 ?      00:00:00 [khungtaskd]
root        27     2  0 déc.18 ?      00:05:27 [kswapd0]
root        28     2  0 déc.18 ?      00:00:00 [fsnotify_mark]
root        29     2  0 déc.18 ?      00:00:00 [ecryptfs-kthrea]
root        30     2  0 déc.18 ?      00:00:00 [crypto]
root        45     2  0 déc.18 ?      00:00:00 [kpsmoused]

Personnalisé l'affichage avec une arborescence et des liens parents via cette commande ps --forest -eo pid,ppid,cmd

  • Changer priorité du processus avec commande nice
  • Utiliser kill tuer un processus et son pid signal extinction.

Notion de signal

Interompre un processus signifie envoyé un signal , option disponible via kill -l

[anth@localhost Downloads]$ ps -o pid,pcpu,pmem,state,cmd
  PID %CPU %MEM S CMD
 9975  0.0  0.0 S /bin/bash /usr/bin/crosh
10056  0.0  0.0 S /bin/bash /usr/bin/crosh
10057  0.0  0.0 S /bin/bash -l
10382 78.8 23.2 S window001 
10483  0.0  0.1 S -bash
12462  0.0  0.0 R ps -o pid,pcpu,pmem,state,cmd

Configuration étudié on remarque un programme utilisant bcp de ressource nommé window001 et pid = 10382 lançant signal d'extinction processus

kill 10382

Du processus au Daemon

Les services UNIX utilisent le principe client/serveur dans lequel le client est l'application vue par l'utilisateur et le serveur un daemon (disk and execution monitor) un programme qui tourne en tache de fond pour répondre à des requètes. Sous Archlinux on utilise la gestion via systemd. Quelques services courants:

  • CUPS (serveur impression, gestion imprimante)
  • Cron (plannification de tache) "sa contrab bien"
  • At (lancer une commande a une heure particulière)
  • nohup (commande non arrêté sous arret du système)

Quelques outils

Quelques soucis sur les expansions a noté avant et l'appel de variable

[anth@localhost ~]$ echo $USER
anth
[anth@localhost ~]$ echo '$USER'
$USER

La sortie n'est pas la meme chose pour la commande. Un processus à trois canaux de communications.

  1. le flux de sortie (standard output) par défaut dirigé vers le terminal courant ;
  2. le flux d’erreur (standard error) également dirigé par défaut vers le terminal courant ;
  3. le flux d’entrée (standard input) sur lequel transitent par défaut les données provenant du clavier.

Ainsi on retrouve:

$ echo salut
salut

Affiche salut sur le flux de sortie

$ ls amlkjg
ls: amlkj: No such file or directory

Affiche le message d'erreur sur le flux

$ read A
entre valeur

Attend saisie utilisateur sur le flux d'entrée et stock variable

nota EOF saisi par ctrl+d comme fin des donnée attente flux entrée

Avec le modèle de trois flux: on créé des redirections et composition

La redirection

Un petit exemple comprendre et créons un fichier texte en ajoutant à l'intérieur le mot salut

[anth@localhost ~]$ echo salut > coucou.txt
[anth@localhost ~]$ ls -l coucou.txt
-rw-r--r-- 1 anth anth 6 19 déc.  23:54 coucou.txt
[anth@localhost ~]$ cat coucou.txt
salut
[anth@localhost ~]$ echo yolo > coucou.txt
[anth@localhost ~]$ cat coucou.txt
yolo
[anth@localhost ~]$ echo LMAO >> coucou.txt
[anth@localhost ~]$ cat coucou.txt
yolo
LMAO

On note que cat affiche le texte et que > remplace alors que >> ajoute au niveau des redirections.

Flux d'entrée et exemple commande bc pour calculer

$ echo 2+2*3 > calcul.dat
$ cat calcul.dat
2+2*3
$ bc < calcul.dat
8
$

Le trou noir

Dans système UNIX un fichier particulier ce trouve dans /dev/null fonctionne comme un trou noir absorbant toute redirection, le fichier ne grossit pas en redirigeant les données. Utile pour faire disparaitre des fichiers ou messages erreurs.

id chronos > void 0 > /dev/null

Tubes 'pipes'

Les pipes permettent de composer plus commandes en connectant flux de sortie.

$ cat data1.txt
YOLO
LMAO
$ cat data2.txt
ROFL
$ cat data1.txt data2.txt | mail -s "+ data" personne

Ici les données data1 et data2 réalise une concatenatin des données avec la commande cat puis la commande mail envoie donnée à un destinataire.

On peut voir cela comme des filtres pour les programmes à travers les flux.

Afficher

La commande cat permet de concatener et afficher plusierus fichiers

cat fichier1 fichier2

Si l'affichage est trop long pour le terminal on utilise la commande less

cat fichier1 fichier2 | less

Trier

C'est la commande sort

sort -k3 indique la clé de tri 3 donc dans l'exemple via la date

$ sort -n -k3 fichier.dat
Michel Dupont 1965
Monique Petitvier 1971
Adam Clairedebois 1981

l'option -n permet d'utiliser l'ordre numérique

Tête à queue

Les commandes head et tail permettent d'afficher la tête ou la queue d'un fichier ou du flux d'entrée.

$ head -n 2 fichier.dat
Michel Dupont 1965
Monique Petitvier 1971

Afficher les deux premières lignes. Avec l'option -c permet d'afficher les premiers octets.

$ head -c 6 fichier.dat
Michel$

Et de manière analogue la fin du flux est affiché avec tail

$ sort -n 1 fichier.dat
Adam Clairedebois 1981

La commande tail est très utilisé pour vérifié en temps réel un fichier qui grossit tels que des logs. Surveillance de fichier

$ tail -f nombre.log
3
4
5
6
6
7
8

Pour intérompre un affichage et revenir prompt ctrl+c

Utilitaire disques et fichiers

Chercher

Pour chercher ou trouver un répertoire on peut utiliser la commande find tres pratique pour localiser des occurences et trier par critère.

$ find ~ -name core
/home/equipe/lozano/LaTeX/test/core
/home/equipe/lozano/LaTeX/these/core
/home/equipe/lozano/LaTeX/these/src/core
/home/equipe/lozano/src/pas/core
/home/equipe/lozano/install/ummstdod/core
$

On recherche dans le répertoire privée à partir du nom core

$ find . -name "*.tex"
./guide-unix.tex
$

Cette commande permet de trouver extension de fichier .tex à partir du répertoire courant. et:

$ find ~/cours -type d -a -name "po*"
/home/equipe/lozano/cours/pov
/home/equipe/lozano/cours/pov.bak
/home/equipe/lozano/cours/images/pov-hof
$

Trouve tous les répertoires dont le nom commence par po l'option -a couple les critères

Obtenir des informations

L'utilisation de ls est très courante pour savoir la taille ou encore inode d'un fichier. La commande du est plus utilisé pour des dossiers.

Pour le disque la commande df -h affiche les partitions ou encore l'utilisation de lsblk -a donne des informations complémentaire sur le nom des partitions.

[anth@localhost ~]$ lsblk -a
lsblk: dm-0 : échec d'obtention du chemin de périphérique
lsblk: dm-0 : échec d'obtention du chemin de périphérique
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0           7:0    0  7,3G  0 loop 
└─encstateful 254:1    0  7,3G  0 dm   /var/host/timezone
loop1           7:1    0        0 loop 
loop2           7:2    0        0 loop 
loop3           7:3    0        0 loop 
loop4           7:4    0        0 loop 
loop5           7:5    0        0 loop 
loop6           7:6    0        0 loop 
loop7           7:7    0        0 loop 
zram0         253:0    0  5,5G  0 disk [SWAP]
mmcblk0rpmb   179:48   0    4M  0 disk 
mmcblk0boot0  179:16   0    4M  1 disk 
mmcblk0boot1  179:32   0    4M  1 disk 
mmcblk0       179:0    0 29,1G  0 disk 
├─mmcblk0p1   179:1    0   25G  0 part /
├─mmcblk0p2   179:2    0   16M  0 part 
├─mmcblk0p3   179:3    0    2G  0 part 
├─mmcblk0p4   179:4        16M  0 part 
├─mmcblk0p5   179:5         2G  0 part 
├─mmcblk0p6   179:6       512B  0 part 
├─mmcblk0p7   179:7       512B  0 part 
├─mmcblk0p8   179:8        16M  0 part 
├─mmcblk0p9   179:9       512B  0 part 
├─mmcblk0p10  179:10      512B  0 part 
├─mmcblk0p11  179:11        8M  0 part 
└─mmcblk0p12  179:12       16M  0 part 

La mémoire SWAP est particuliere à Linux. A retenir que c'est une mémoire virtuelle souvent comme mémoire tampon à la mémoire physique RAM. Plus vous avez de la RAM moins la SWAP est grande et inversement.

Archivage

La jungle des archives. Tous on connait le fichier .zip ou .rar sous UNIX les formats changent un peu comme standard.

  • tar
  • gzip
  • bzip2

L'archivage consiste à rassembler plusieurs fichiers qui constitue l'archive. La compression des données est effectué en fonction de l'algorithme d'archivage

D'ou:

  • Pour archiver commande tar
  • La compression en fonction du format tels que commande gzip

Utilisation de tar

$ pwd
/home/equipe/lozano/cours/unix
$ cd ..
$ tar cvf ~/transfert/unix.tar unix      
unix
unix/arborescence.eps
unix/arborescence.fig
unix/flux.fig
... etc ...

Puis compression du fichier .tar

$ ls -l ~/transfert/unix.tar
-rw-r----- 1 lozano equipe 768000 Dec 13 14:49 unix.tar
$ gzip ~/transfert/unix.tar 
$ ls -l ~/transfert/unix.tar.gz
-rw-r----- 1 lozano equipe 239039 Dec 13 14:49 unix.tar.gz
$

Les options

  • l'option c de tar créé l'archive
  • l'option f précise que l'archive créé est un fichier
  • l'option v signifie verbose permet d'afficher l'opération en cours

On a ainsi un fichier unix.tar mais il n'est pas compressé. Il le devient une fois que le suffixe .gz a été ajouté. Tels que unix.tar.gz et l'utilisation de la commande gzip

Décompression

Options à connaitre:

  • -d de gzip permet de décompresser
  • x de tar d'extraire
$ gzip -d ~/transfert/unix.tar.gz
$ tar xvf ~/transfert/unix.tar 

Mais voila, le programmeur est paresseux, moins de ligne, mieux c'est. Faisons les deux à la fois avec l'option z avec gzip

$ tar xfz ~/transfert/unix.tar.gz
$

Utilisation d bzip2 et l'option j

$ tar xfj ~/transfert/unix.tar.bz2
$

Voila il y a les puristes et les paresseux qui ont compris que avec le modèle 3 flux des pipes on peut faire bcp de chose, d'ou pour la compression et archivage:

$ tar cf - unix | gzip -c > ~/transfert/unix.tar.gz
$

## et puis décompresse

$ gzip -dc ~/transfert/unix.tar.gz | tar xvf -
  • le caractère - indique à tar envoyé flux de sortie
  • gzip compresse le flux des données provenant de l'entrée avec l'option -c qui envoie au flux de sortir
  • le résultat est redirigé dans le fichier ~/transfert/unix.tar.gz

Le shell devient un langage à part entière. Les flux sont utilisable dans bien des situations et envoyé sur un serveur distant internet pour afficher des données qui provient de votre prompt tels que sprunge.us

L'utilisation des URL ce fait via la commande curl ou encore wget. L'utilisateur sous UNIX doit s'auto-former lui-même, trop de notion, en fonction du besoin ainsi réflexe pour trouver de l'aide, tels que les wiki spécifique comme celui de Archlinux.

Sprunge & curl sur wiki Arch

Utilisation avec la commande df -h

[anth@localhost ~]$ df -h | curl -F 'sprunge=<-' http://sprunge.us
http://sprunge.us/EZJV

En tapant la sortie du flux via URL fourni vous obtenez votre commande sur les serveurs de sprunge.

Crouton

Après quelques utilisations de crosh, la commande shell. On remarque une certaine limite du système, tels que l'installation de nouveau programme (paquets). Les développeurs ont souvent besoin de complément. Tels que des interpréteurs ou encore git. Rien de cela sous crosh, mais des programmeurs ont comblé le manque.

Crouton permet d'installer un système d'exploitation linux sous Chromebook.

Gestion des paquets

En fonction de la distribution linux, l'installation des paquets est différente.Et des distributions sous linux.... C'est pas ce qui manque

distro linux

  • Gentoo - format ebuild gestionnaire emerge
  • Arch - format .tar.xx gestionnaire pacman
  • Red Hat famille (fedora, Mandriva, OpenSuse) .rpm gestionnaire urpmi
  • Debian famille (Ubuntu, Mint) .deb gestionnaire apt

Le cas de Chromebrew

Un gestionnaire de paquet pour ChromeOS , c'est un début et déjà permet de ce passer de l'installation de crouton et d'un système d'exploitation complet.

# liens 

https://skycocker.github.io/chromebrew/

# install

wget -q -O - https://raw.github.com/skycocker/chromebrew/master/install.sh | bash
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment