Cours shell UNIX - annotation - Anthony Le Goff
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
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.
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, ...).
- 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.
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.
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é.
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.
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.
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.
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.
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.
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.
- Connectée sous
anth
et invoque la commandesu
(super-user) viasudo
- Je me positionne dans le répertoire racine (root) avec
cd
dans/
- Je vérifie que le répertoire n'est pas vide, histoire de tous supprimer
ls
- 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
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 ~]$
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 dossierhome
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
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:
- le droit de lire (read) signalé par la lettre
r
; - le droit d’écrire (write) signalé par la lettre
w
; - 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 propriorw
, droit grouper
, droit autres utilisateursr
)1
nombre de lien sur le fichierchronos
propriétairechronos
groupe437
taille du fichier en octetsDec 17 21:11
data de dernière modifvariable.rb
nom du fichier
- 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
Mkdir s'occupe des répertoires et sa création mkdir Dossier1
et sa suppression
avec rm -rf Dossier1
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
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
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
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 sonpid
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
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 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.
- le flux de sortie (standard output) par défaut dirigé vers le terminal courant ;
- le flux d’erreur (standard error) également dirigé par défaut vers le terminal courant ;
- 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
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
$
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
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.
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
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
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
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
detar
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
degzip
permet de décompresserx
detar
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.
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.
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.
En fonction de la distribution linux, l'installation des paquets est différente.Et des distributions sous linux.... C'est pas ce qui manque
- 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
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