LINUX *¶
- Auteur:
J.Soranzo
- Date:
Octobre 2019
- Societe:
VoRoBoTics
- Entity:
VoLAB
Ci dessous mes notes personnelles concernant Linux. Comme je n’ai pas de mémoire, il s’agit principalement ici de lignes commandes que j’ai trouvé intéressantes. (Reprise carte Heuristique en cours…)
Doc¶
Avant que de n’aller plus loin, jeter un oeil au journal de manip de Pierre partie Linux [1] . Dans la suite abrégé JdMdP
Un cours complets sur Linux France.org [2]
Programmation shell¶
http://www.gecif.net/articles/linux/gcc.html
Man référence en français sur manpagesfr.free.fr [4]
Les différents shell¶
Les différents shell:
sh : Bourne Shell. L’ancêtre de tous les shells.
bash : Bourne Again Shell. Une amélioration du Bourne Shell, disponible par défaut sous Linux et Mac OS X.
ksh : Korn Shell. Un shell puissant assez présent sur les Unix propriétaires, mais aussi disponible en version libre, compatible avec bash.
csh : C Shell. Un shell utilisant une syntaxe proche du langage C.
tcsh : Tenex C Shell. Amélioration du C Shell.
zsh : Z Shell. Shell assez récent reprenant les meilleures idées de bash, ksh et tcsh.
Le fameux shebang qu’on met au début des scripts:
- En début de script ::
#!/bin/sh -x #!/bin/bash #!/usr/bin/perl #!/usr/bin/tcl #!/bin/sed -f #!/usr/awk -f #!/usr/bin/python
Connaître son shell : tout simplement help !
Mes commandes intéressantes¶
System¶
répéter la dernière commande en sudo :
sudo !!
- Liste des ports USBlsusb
cette commande ne dit pas par exemple sur quoi est mappé le périphérique
Par exemple lsusb tty.
List des port com :
ls /dev/tty*
A la place, il est nécessaire de scripter:
#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
(
syspath="${sysdevpath%/dev}"
devname="$(udevadm info -q name -p $syspath)"
[[ "$devname" == "bus/"* ]] && exit
eval "$(udevadm info -q property --export -p $syspath)"
[[ -z "$ID_SERIAL" ]] && exit
echo "/dev/$devname - $ID_SERIAL"
)
done
Lister les disque:
lshw -C disk
sudo fdisk -l : list les disk avec info technique et fdisk seul
sfdisk -l -uM
df : only mounted file systems
parted -l list les partitions
@ : ctrl+shift+u + 0040
: + 005c
gestionnaire de packet synaptique
connaître les interfaces réseau : ifconfig
apt-get update
versusupgrade
: update met à jour les dépots, upgrade met à jour les packets installésnom de la machine et autre info cat /proc/cpuinfo
list repo : grep ^[^#] /etc/apt/sources.list /etc/apt/sources.list.d/*
Quel os ?
cat /proc/version
Version du noyau Linux
cat /etc/issue
Nom et version de la distribution
cat /etc/os-release
cat /proc/cpuinfo
rebooter en ligne de commande:
sudo reboot
ousudo shutdown -r
Savoir si un commande est installée :
dpkg -l | grep le_nom_du_paquet
oucommand -v command
ou encorewhich cmd
les appli installées
dpkg -l
Qui écoute quel port :
sudo lsof -i -P -n | grep LISTEN
voir les dernière info hardware
dmesg
créer un lien symbolique :
ln -s dossier_cible nom_du_lien
Pour les utilisateurs¶
list des group d’un utilisateur : groups nom
changer d’utilisateur : su nom
se mettre root pour éviter de taper sudo sudo -s
Liste des utilisateurs dans un système:
cut -d: -f1 /etc/passwd
lister tous les groups :
less /etc/groups
lister tous les utilisateurs d’un groupe
lister tous les groupes d’un utilisateur :
groups username
ajouter un utilisateur a un group :
usermod -a -G examplegroup exampleusername
Cron¶
Il s’agit ici de lancer un programme de manière cyclique sans intervention évidement.
Dans le journal de manip de Pierre, créer une tâche planifiée [6], il n’y a vraiment que la base de la base !
Samba¶
Tout est dit dans le JdMdP rubrique SAMBA [8]
Par rapport à la doc de Pierre : smbpasswd crée l’utilisateur et demande la création du mdp dans la foulée. Il est nécessaire que cet utilisateur existe au niveau Linux.
Avertissement
Ne pas taper smbpasswd sans rien !
La doc officielle Samba [9] mais n’apporte pas grand chose ! Trop complexe.
- Même si samba gère des mdp différents du système il n’empêcha que l’utilisateur samba doit existé en
tant qu’utilisateur système. Par défaut Samba partage le home dir de l’utilisateur en read only.
LINUX Partage de répertoire¶
Ou monter un répertoire d’une autre machine
mkdir /mnt/partage_nfs
# Montage d'un partage en NFS
mount -t nfs 192.168.1.12:/dossier/partage /mnt/partage_nfs
Les Makefile (en bref)¶
Mis ici en attendant d’avoir un emplacement dédié à la compilation
make tout seul exécute la première target du ficher Makefile
all: n’est pas une target spécial au sens de make mais c’est une habitude.
Target %: tous les noms de fichiers !!!
Que dire de cet exemple:
SHELL:=/bin/bash
ifeq ($(IDF_PATH),)
THIS_MK_FILE:=$(notdir $(lastword $(MAKEFILE_LIST)))
THIS_DIR:=$(abspath $(dir $(lastword $(MAKEFILE_LIST))))
IDF_PATH=$(THIS_DIR)/sdk/esp32-esp-idf
all:
. $(IDF_PATH)/export.sh && $(MAKE) "$@"
%:
. $(IDF_PATH)/export.sh && $(MAKE) "$@"
else
all:
$(IDF_PATH)/tools/idf.py $(IDFPY_ARGS) "$@"
%:
$(IDF_PATH)/tools/idf.py $(IDFPY_ARGS) "$@"
endif
Commentaires : #
.PHONY : une règle .PHONY ne rencontrera jamais le problème d’être déjà à jour. Utile pour les règles qui ne produisent aucun fichier et qui sont donc toujours à jour ! Une bonne pratique est de déclarer dans .PHONY toutes les règles de nettoyage de votre projet.
Et sur l’Université Lyon1 [11]
Exemples détaillés sur cs.colby.edu [12]
Des cibles, des règles, des macro et eventuellement des suffixes.
Règles:
cible [cible ...]: [composant ...]
[tabulation] commande 1
La « cible » est le plus souvent un fichier à construire, mais elle peut aussi définir
une action (effacer, compiler…).
Les « composants » sont des pré-requis nécessaires à la réalisation de l'action définie
par la règle.
Autrement dit, les « composants » sont les cibles d'autres règles qui doivent être réalisées
avant de pouvoir réaliser cette règle.
Macro:
Les macros peuvent être composées de commandes shell en utilisant l'accent grave (`) :
Il existe aussi des 'macros internes' à make :
$@ : fait référence à la cible.
$? : contient les noms de tous les composants plus récents que la cible.
$< : contient le premier composant d'une règle.
$^ : contient tous les composants d'une règle.
our utiliser une macro, il faut procéder à son expansion en l'encapsulant dans $() ou ${}.
Par exemple, pour utiliser la macro CC, il faudra écrire $(CC)
Il existe plusieurs manières de définir une macro :
Le = est une affectation par référence (on parle d'expansion récursive)
Le := est une affectation par valeur (on parle d'expansion simple)
Le ?= est une affectation conditionnelle. Elle n'affecte la macro que si cette dernière n'est pas encore affectée.
Le += est une affectation par concaténation. Elle suppose que la macro existe déjà.
Suffixe:
'%.o : %.c' (où % signifie n'importe quel nom de fichier)
La syntaxe pour définir la liste des suffixes est : .SUFFIXES: .suffixe_source .suffixe_cible
La syntaxe pour utiliser une règle de double suffixes est : .suffixe_source.suffixe_cible :
Exemple : .c.o:
une règle de suffixe ne peut avoir de cible (autre après les :)
Redirections¶
>> vers un fichier (append)
> vers un nouveau fichier
> /dev/null
2>error.log redirige les erreurs vers un fihcier de log (2 désigne stderr tout simplement)
ou 2>>err.log pour un append
2>&1 : indique qu'il faut rediriger les erreurs vers la sortie standard
Comment lancer une appli au boot¶
Là c’est différent l’appli n’est lancée qu’une seule fois au démarrage.
JdMdP partie lancer une appli au boot [7]
https://poltergeist42.github.io/JDM/Linux.html#pour-creer-un-script-qui-s-execute-au-demarrage-du-syteme