# Linux General Cheat Sheets

# Information système

<table id="bkmrk-commande-commentaire"><thead><tr><th>Commande</th><th>Commentaire</th></tr></thead><tbody><tr><td>uname -a</td><td>Afficher les informations systèmes de linux</td></tr><tr><td>uname -r</td><td>Afficher la version du noyau</td></tr><tr><td>uptime</td><td>Afficher le temps d'activité du système et affiche la charge</td></tr><tr><td>hostname</td><td>Affiche le nom d'hôte de la machine</td></tr><tr><td>hostname -I</td><td>Affiche l'adresse IP de l'hôte</td></tr><tr><td>last reboot</td><td>Afficher l'historique des redémarrages</td></tr><tr><td>date</td><td>Afficher la date et l'heure du système</td></tr><tr><td>cal</td><td>Affiche le calendrier du mois</td></tr><tr><td>w</td><td>Affiche qui est en ligne</td></tr><tr><td>whoami</td><td>Affiche où nous sommes loggué en tant que qui</td></tr></tbody></table>

# Information matérielle

<table id="bkmrk-commande-commentaire-1"><thead><tr><th>Commande</th><th>Commentaire</th></tr></thead><tbody><tr><td>dmesg</td><td>Affiche les messages du noyau</td></tr><tr><td>cat /proc/cpuinfo</td><td>Affiche les informations du CPU</td></tr><tr><td>cat /proc/meminfo</td><td>Affiche les informations de la RAM</td></tr><tr><td>free -h</td><td>Affiche la mémoire libre et utilisé (-h pour lisible par l'homme, -m for MB et -g pour GB)</td></tr><tr><td>lspci -tv</td><td>Affiche les périphériques PCI</td></tr><tr><td>lsusb -tv</td><td>Affiche les périphériques USB</td></tr><tr><td>dmidecode</td><td>Affiche les information DMI/SMBIOS (informations systèmes) depuis le BIOS</td></tr><tr><td>hdparm -i /dev/sda</td><td>Affiche les informations du disque /dev/sda</td></tr><tr><td>hdparm -rT /dev/sda</td><td>Faire un test de vitesse de lecture sur le disque /dev/sda</td></tr><tr><td>badblocks -s /dev/sda</td><td>Test le disque /dev/sda pour d'éventuels blocks défectueux</td></tr></tbody></table>

##### ls - Lister le contenu d'un répertoire

**Permet de lister le contenu d'un répertoire**  
Syntaxe :

```bash
ls <option> répertoire
```

<div class="toolbar" id="bkmrk-"><div class="toolbar-item">  
</div></div><table id="bkmrk-option-commentaire--"><thead><tr><th>Option</th><th>Commentaire</th></tr></thead><tbody><tr><td>-a</td><td>Lister tout le répertoire (y compris fichier caché)</td></tr><tr><td>-l</td><td>Afficher le répertoire sous forme de tableau, avec permission, ...</td></tr><tr><td>-i</td><td>Affiche les inodes</td></tr><tr><td>-h</td><td>Affiche la taille dans un format lisible par l'homme (Mo par exemple)</td></tr><tr><td>-R</td><td>Liste également les sous-répertoires</td></tr><tr><td>-s</td><td>Affiche la taille des répertoires</td></tr></tbody></table>

##### pwd - Afficher le répertoire courant

**Affiche le répertoire dans lequel on se situe.**  
Syntaxe :

```bash
pwd
```

##### mkdir - Créer un répertoire

**Créer un répertoire.**

```bash
mkdir -p /chemin/répertoire/à/créer
```

<div class="toolbar" id="bkmrk--1"><div class="toolbar-item">  
</div></div><table id="bkmrk-option-commentaire---1"><thead><tr><th>Option</th><th>Commentaire</th></tr></thead><tbody><tr><td>-p</td><td>Créer les répertoires parents si ces derniers n'existent pas</td></tr></tbody></table>

*Exemple : Je souhaite créer un répertoire **truc** dans /home/user1/test1, mais le fichier test1 n'existe pas.*  
Syntaxe :

```bash
mkdir -p /home/user1/test1/truc
```

##### cd - Changer de répertoire

**Permet de se déplacer dans l'arborescence**  
Syntaxe :

```bash
cd /répertoire/de/destination
```

##### cat - Afficher le contenu d'un fichier

**Permet d'ouvrir un fichier et d'afficher son contenu.**  
Syntaxe :

```bash
cat <option> fichier
```

<div class="toolbar" id="bkmrk--2"><div class="toolbar-item">  
</div></div><table id="bkmrk-option-commentaire---2"><thead><tr><th>Option</th><th>Commentaire</th></tr></thead><tbody><tr><td>-b</td><td>Numéroter toutes les lignes non vides</td></tr><tr><td>-n</td><td>Numéroter toutes les lignes</td></tr></tbody></table>

##### df - Afficher la taille d'un répertoire

**Permet d'afficher la taille d'un répertoire.**  
Syntaxe :

```bash
df <option> répertoire
```

<table id="bkmrk-option-commentaire---3"><thead><tr><th>Option</th><th>Commentaire</th></tr></thead><tbody><tr><td>-h</td><td>Permet d'obtenir un résultat plus lisible pour un humain (*ex Mo, Ko,...*)</td></tr><tr><td>-i</td><td>Affiche les inodes</td></tr><tr><td>-k</td><td>Affiche le résultat en kilobytes</td></tr><tr><td>-m</td><td>Affiche le résultat en megabytes</td></tr><tr><td>-d **n**.</td><td>Affiche la taille des sous-répertoires jusqu'au **n**ème</td></tr></tbody></table>

##### mv - Déplacer un fichier ou dossier

**Permet de déplacer un fichier ou un répertoire.**  
Syntaxe :

```bash
mv <option> /chemin/source /chemin/destination
```

<table id="bkmrk-option-commentaire---4"><thead><tr><th>Option</th><th>Commentaire</th></tr></thead><tbody><tr><td>-f</td><td>Forcer le déplacement</td></tr><tr><td>-i</td><td>Demander la confirmation de l'utilisateur</td></tr></tbody></table>

##### rm - Supprimer un fichier ou dossier

**Permet de supprimer un fichier ou un dossier**  
Syntaxe :

```bash
rm <option> /chemin/truc/a/supprimer
```

<table id="bkmrk-option-commentaire---5"><thead><tr><th>Option</th><th>Commentaire</th></tr></thead><tbody><tr><td>-d</td><td>Efface un répertoire</td></tr><tr><td>-f</td><td>Force la suppression</td></tr><tr><td>-i</td><td>Demande confirmation à l'utilsateur (*Inutile avec `-f`*)</td></tr><tr><td>-r</td><td>Récursif</td></tr></tbody></table>

##### groups - Afficher les groupes d'appartenance d'un utilisateur

**Permet d'afficher dans quels groupes se trouve l'utilisateur**  
Syntaxe :

```bash
groups utilisateur
```

##### passwd - Changer le mot de passe

\*\*Permet de changer le mot de passe d'un utilisateur  
Syntaxe :

```bash
passwd <option> utilisateur
```

<table id="bkmrk-option-commande--d-s"><thead><tr><th>Option</th><th>Commande</th></tr></thead><tbody><tr><td>-d</td><td>Supprimer le mot de passe</td></tr><tr><td>-e</td><td>Faire expirer le mot de passe</td></tr><tr><td>-i</td><td>Rendre un compte inactif</td></tr><tr><td>-l</td><td>Verouille le mot de passe et empêche sa modification par l'utilisateur</td></tr><tr><td>-S</td><td>Affiche le status du compte</td></tr><tr><td>-u</td><td>Déverouille un mot de passe</td></tr></tbody></table>

##### Faire un rechercher remplacer récursif :

Remplacer "texte1" par "texte2".

```
find . -name "*" -exec sed -i 's/texte1/texte2/g' {} \;
```

##### Rechercher une chaine présente dans des fichiers d'un dossier de manière récursive : 

```
grep -rnw /PATH/TO/THE/FOLDER -e 'MA-CHAÎNE'
```

##### Répéter une commande en boucle :

```
watch macommande [options]
```

#### Couper le début d'une réponse

```
cat /mon/fichier | cut -c 19- 


--> On retire les 18 premiers chars
```

##### Envoyer une commande à un autre utilisateur :

```
su - UTILISATEUR -c "MA COMMANDE"
```

##### Mettre à jour à la fois les paquets mais aussi la version de la distribution :

```
apt-get full-upgrade
```

##### Lister les IP D'un CIDR : 

```
nmap -sL -n 10.10.64.0/27 | awk '/Nmap scan report/{print $NF}'


# Résultat :
10.10.64.0
10.10.64.1
10.10.64.2
10.10.64.3
10.10.64.4
10.10.64.5
10.10.64.6
10.10.64.7
10.10.64.8
10.10.64.9
10.10.64.10
10.10.64.11
10.10.64.12
10.10.64.13
10.10.64.14
10.10.64.15
10.10.64.16
10.10.64.17
10.10.64.18
10.10.64.19
10.10.64.20
10.10.64.21
10.10.64.22
10.10.64.23
10.10.64.24
10.10.64.25
10.10.64.26
10.10.64.27
10.10.64.28
10.10.64.29
10.10.64.30
10.10.64.31
```


##### Supprimer les dossier datant de plus de quinze jours : 

```
DIR=/backup
find $DIR -type d -ctime +15 -exec rm -rf {};
```

##### Savoir le load du proc : 

```
cat /proc/loadavg
```

##### Installer un environnement graphique :

```
apt-get install task-lxde-desktop
```

##### Ajouter un utilisateur à la liste des Sudoers :

Avec l'utilisateur Root exécutez la commande ci-dessous :

```
sudo usermod -a -G sudo <username>
```

<p class="callout success">L'utilisateur peut désormais faire la commande sudo !</p>

##### Mettre une adresse IP fixe sur Linux :

On modifie le fichier situé dans /etc/network/interfaces :

```
nano /etc/network/interfaces
```

```
auto eth1
iface eth1 inet static
  address 192.168.0.42
  network 192.168.0.0
  netmask 255.255.255.0
  gateway 192.168.0.1
```

Puis on redémarre le service :

```
service networking restart
```

<p class="callout success">L'IP est désormais fixe !</p>

**Grep toutes les IPS d'un fichier**

```
cat mon_super_fichier | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
```

##### Savoir son adresse IP d'une manière lisible : 

```bash
ip -br a
```

Savoir la taille totale de RAM non-utilisée :

```
free
```

Détails de la RAM :

```bash
sudo dmidecode -t 17
```

Savoir le nombre de processeurs :

```
nproc
```

Détails du CPU :

```bash
lscpu
```

Changer le fuseau d'horaire :

```bash
dpkg-reconfigure tzdata
```

Changer le fuseau horaire sans intéraction :

```bash
ln -fs /usr/share/zoneinfo/Europe/Paris /etc/localtime
dpkg-reconfigure --frontend noninteractive tzdata
```

Générer une chaine aléatoire :

```bash
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
```

##### Filtrer le résultat d'une commande : Récupérer la X ième collone

docker ps

```
CONTAINER ID   IMAGE                  COMMAND              CREATED      STATUS      PORTS     NAMES
b47869c06afa   local_ansible:latest   "tail -F anything"   4 days ago   Up 4 days             XXXXXXXXXX.1.xkdfozjzesx3i9tiiwi7v4mx2
98d251874810   local_ansible:latest   "tail -F anything"   4 days ago   Up 4 days             XXXXXXXXXX.1.30q690xvddk600wt35tuii2qr
e59db4bf005e   local_ansible:latest   "tail -F anything"   4 days ago   Up 4 days             XXXXXXXXXX.1.wf6mpbnyl3fmvvl1dm6rvgx7q
d5bb4b393058   local_ansible:latest   "tail -F anything"   4 days ago   Up 4 days             XXXXXXXXXX.1.ug7xuyrdx61jz2hyir01i85dl
c7e24c57b1c3   local_ansible:latest   "tail -F anything"   4 days ago   Up 4 days             XXXXXXXXXX.1.xgn2wopz174n4vsq8sfu1hbuz

```

docker ps | awk '{print $1}'

```
CONTAINER
b47869c06afa
98d251874810
e59db4bf005e
d5bb4b393058
c7e24c57b1c3
```

<p class="callout info">$1 représente la première collone ; pour la suivante ce sera $2 etc.</p>


##### Lister les processus : 

```bash
ps aux
```

##### KILL un processus : 

```bash
sudo kill -9 ID
```

##### Faire un SSH via un proxy : 

```shell
# Forward le trafic sur le port 8080 de mon ordinateur vers le port 80 de l'hote distant 
ssh -L 8080:localhost:80 remote_host

```

Afficher les logs du boot précédent et ainsi voir à la toute fin, les logs de la dernière extinction du système.

```bash
journalctl -b -1
```

##### Actualiser le /etc/fstab : 

```bash
sudo mount -a
```

##### Couper un affichage à partir d'un caractère :

```bash
cat monfichier.log | cut -d "|" -f 2
```

#### Journalclt purge :

<div class="page-content" id="bkmrk-per-days"><div dir="auto">- Per days

</div></div>```bash
journalctl --vacuum-time=2d
```

<div class="page-content" id="bkmrk-per-size"><div dir="auto">- Per size

</div></div>```bash
journalctl --vacuum-size=500M
```

**--&gt; Après purge des fichiers de logs, pour libérer l'espace (uniquement si on supprime rsyslog ou daemon.log ):**

```bash
systemctl restart rsyslog
```


#### Taille dossier d'un niveau uniquement :

```bash
du -h --max-depth=1
```

<span style="text-decoration: underline;">**Supprimer un hostname des know\_host ssh :** </span>

```bash
ssh-keygen -R hostname
```

<span style="text-decoration: underline;">**Lister les services actuellement fonctionnels :** </span>

```bash
sudo systemctl --type=service --state=running | awk '{print $1}'
UNIT
chrony.service
containerd.service
cron.service
dbus.service
docker.service
getty@tty1.service
google-cloud-ops-agent-diagnostics.service
google-cloud-ops-agent-fluent-bit.service
google-cloud-ops-agent-opentelemetry-collector.service
google-guest-agent.service
google-osconfig-agent.service
haveged.service
mariadb.service
nmbd.service
polkit.service
rsyslog.service
serial-getty@ttyS0.service
smbd.service
ssh.service
systemd-journald.service
systemd-logind.service
```

#### Certificats :

<span style="text-decoration: underline;">**Etablir une connexion ssl pour tester les certificats :**</span>

```bash
openssl s_client -connect host:port -CAfile chemin_vers_certificat_public_de_la_ca.pem
```


#### Debug Deep : 

<span style="text-decoration: underline;">**Afficher les logs du noyeau linux :**</span>

```bash
dmesg
```

#### Kernel :

\--&gt; On va lister les vieux kernels présents sur le system. Puis on va les supprimer pour faire de l'espace dans /boot.

<span style="text-decoration: underline;">**Kernel actuellement en cours d'execution :**</span>

```bash
uname -r
```

```
X.X.X-26-amd64
```

J'utilise donc le kernel : X.X.X-26-amd64

<span style="text-decoration: underline;">**Liste des kernels présents dans le système (exépté le kernel actuellement utilisé) :**</span>

```bash
sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`
```

```
linux-image-X.X.X-18-amd64
linux-image-X.X.X-19-amd64
linux-image-X.X.X-20-amd64
linux-image-X.X.X-21-amd64
linux-image-X.X.X-22-amd64
linux-image-X.X.X-23-amd64
```

Ici, nous allons pouvoir supprimer les versions **X.X-18-amd64** à **X.X-23-amd64** compris. Il faut toujours garder deux versions de kernels précédentes.

<span style="text-decoration: underline;">**Pour supprimer les anciens kernels, je vais réaliser les commandes suivantes :** </span>

```bash
sudo apt purge linux-image-X.X.X-18-amd64
sudo apt purge linux-image-X.X.X-19-amd64
sudo apt purge linux-image-X.X.X-20-amd64
sudo apt purge linux-image-X.X.X-21-amd64
sudo apt purge linux-image-X.X.X-22-amd64
sudo apt purge linux-image-X.X.X-23-amd64
sudo apt purge linux-image-X.X.X-24-amd64
```

<span style="text-decoration: underline;">**Puis, je vais réaliser une purge des packets qui sont désormais obsolètes :** </span>

```bash
sudo apt autoremove
```

<span style="text-decoration: underline;">**Enfin, on met à jour la liste des noyeaux grub :**</span>

```bash
sudo update-grub
```

<span style="text-decoration: underline;">**Conclusion :** </span>

<p class="callout success">Mon /boot est passé de 427 Mo utilisés à 168 Mo.</p>

## TCPDUMP : 

#### ARP: 

```bash
sudo tcpdump -nni any vrrp
```

\--&gt; Sur toutes les interfaces.

### Récupérer un fichier perdu, supprimé :

Foremost permet de récupérer les fichiers supprimés. Cette récupération n'est pas parfaite car les données perdues peuvent être écrasés par une réécriture :

```bash
foremost -t all -i /dev/sda1
```

### Gestion du disque linux (LVM) :

#### Afficher les volumes physiques :

```bash
pvdisplay
```

#### Afficher le groupe :

```bash
vgdisplay
```

#### Afficher les volumes logiques :


```bash
lvdisplay
```

#### Augmenter la taille d'un volume :

```bash
# Taille définie :
lvextend -L '+9G' /dev/vg0/lib
# Taille relative :
lvextend -l '+100%FREE' /dev/vg0/lib

```

#### Affecter la nouvelle taille :

```bash
xfs_growfs /var/lib
```

#### Supprimer un volume récalsitrant :

```bash
# Eteindre le volume.
lvchange -an -v /dev/vg0/lib 


# Afficher les process qui utilisent le volume
lsof | grep /var/lib

# Si besoin de debug : Afficher les processus cachés qui utilisent le volume
grep -l /var/lib /proc/*/mountinfo
# --> Cette commande nous retounre des PID. Faire : ps -aux | grep <PID_ID> ; pour connaitre les service qui continuent d'utiliser le volume. 

# Maintenant que nous avons éteinds tous les services qui posent problème, nous pouvons supprimer le volume. 
lvremove -f vg0/lib

lvcreate -n lib -l 100%FREE vg0
mkfs.xfs /dev/vg0/lib
```

#### Procédure pour augmenter la SWAP :

```bash
free -h
swapoff /dev/vg0/swap
lvextend -L '+6G' /dev/vg0/swap
mkswap /dev/vg0/swap
swapon /dev/vg0/swap
free -h
```

#### Procédure pour supprimer un volume "100%FREE" qui nous empéche forcément de créer un volume /home de 20 Go : 

```bash
# Démonter /var/lib ; sauvegarder ; préparer au redémarrage
cp -pR /home /root/
cp -pR /var/lib /root/

umount /var/lib
cp -pR /root/lib/* /var/lib/
############################

############################
COMMENER LE /ETC/FSTAB (ligne lib) :
#/dev/vg0/lib       /var/lib        xfs        rw,noatime,logbufs=8,logbsize=256k,inode64        1        2
############################

############################
Reboot
############################

############################
# Supprimer le volume
lvremove -f vg0/lib


##############################
# Créer les volumes qu'il faut

lvcreate -n home -L "20G" vg0
mkfs.xfs /dev/vg0/home

#...

lvcreate -n lib -l 100%FREE vg0
mkfs.xfs /dev/vg0/lib


##############################
# supprimer les données résiduelles avant remontage
rm -r /var/lib/* 
rm -r /home/*

############################
DECOMMENTER LE /ETC/FSTAB !
+
AJOUTER LES MONTAGES neccessaires :

/dev/vg0/lib       /var/lib        xfs        rw,noatime,logbufs=8,logbsize=256k,inode64        1        2
/dev/vg0/home       /home        xfs        rw,noatime,logbufs=8,logbsize=256k,inode64        1        2

############################

mount -a

# VERIFIER 
mount | grep /home
mount | grep /var/lib

# Réimporter les datas dans les volumes
cp -pR /root/lib/* /var/lib/
cp -pR /root/home/* /home/

# Reboot
reboot

# vérification 
ls -lisa /var/lib
ls -lisa /home


# suppression des données dupliquées
rm /root/home -r
rm /root/lib -r


```

## SSHD - Only sftp

<span style="text-decoration: underline;">**Prérequits**</span> :

<div class="page-content" id="bkmrk-home-de-l%27user-toto-"><div dir="auto">- home de l'user toto : /opt/toto

</div></div><span style="text-decoration: underline;">**Configuration /etc/ssh/sshd\_config :** </span>

```
Match User toto
     ChrootDirectory /opt/toto
     X11Forwarding no
     AllowTcpForwarding no
     AllowAgentForwarding no
     PasswordAuthentication no
     ForceCommand internal-sftp -d /%u
```

<span style="text-decoration: underline;">**Commandes pour rendre la chose fonctionelle :** </span>

```bash
mkdir /opt/toto/data
chown root:root /opt/toto
chown -R toto:toot /opt/toto/*
systemctl restard sshd
```

<span style="text-decoration: underline;">**Test :** </span>

```bash
sftp -i id_rsa toto@SERVEUR <<< 'put fichier.txt /data/'

# Test de perms
ssh -i id_rsa toto@SERVEUR
This service allows sftp connections only.
Connection to SERVEUR closed.

```

## Gérer les ACL

**<span style="text-decoration: underline;">Récupérer les informations d'un fichier :</span>**

```bash
stat launch_kee.sh
====================================================
  Fichier : launch_kee.sh
   Taille : 82        	Blocs : 8          Blocs d'E/S : 4096   fichier
Périphérique : 254/1	Inœud : 4718858     Liens : 1
Accès : (0755/-rwxr-xr-x)  UID : (    0/    root)   GID : (    0/    root)
 Accès : 2024-06-10 11:24:44.881570498 +0200
Modif. : 2024-06-10 11:24:33.865592246 +0200
Changt : 2024-06-10 11:24:41.201577761 +0200
  Créé : 2024-06-10 11:24:29.949599980 +0200

```

<span style="text-decoration: underline;">**Récupérer les ACL d'un fichier :**</span>

```bash
getfacl launch_kee.sh 
=========================
# file: launch_kee.sh
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

```

<span style="text-decoration: underline;">**Ajouter les perms à un utilisateur :** </span>

```
sudo setfacl -m user:nehemie:rw- launch_kee.sh 
```

<span style="text-decoration: underline;">**Constat :** </span>

```bash
getfacl launch_kee.sh 
==============================
# file: launch_kee.sh
# owner: root
# group: root
user::rwx
user:nehemie:rw-
group::r-x
mask::rwx
other::r-x

```

<span style="text-decoration: underline;">**Supprimer les perms à un utilisateur :** </span>

```bash
sudo setfacl -Rm user:nehemie:--- launch_kee.sh
```

<div class="page-content" id="bkmrk---r-%3A-acl-r%C3%A9curcif"><div dir="auto">- - R : ACL Récurcif

</div></div><span style="text-decoration: underline;">**Constat :** </span>

```bash
getfacl launch_kee.sh 
====================================
# file: launch_kee.sh
# owner: root
# group: root
user::rwx
user:nehemie:---
group::r-x
mask::r-x
other::r-x

```

<span style="text-decoration: underline;">**Réduire la valeur des ports privilégiés:** </span>

```bash
echo 80 | sudo tee /proc/sys/net/ipv4/ip_unprivileged_port_start
```

<span style="text-decoration: underline;">**Lister les démons qui utilisent le dossier :** </span>

```bash
sudo lsof /var/lib/
```

<span style="text-decoration: underline;">**Convertir des timestamps milisencondes en date humaines :**</span>

```bash
# dans mon fichier tmp j'ai des lignes de timestamp en format ms
for line in $(cat /var/lib/db_backup/tmp); do date -ud @$(($line / 1000)); done;
```

<div class="page-content" id="bkmrk-activer-la-gestion-d"><div dir="auto"><div id="bkmrk-activer-la-gestion-d-1"><div><div><span style="text-decoration: underline;">**Activer la gestion du temps via vmware :** </span></div><div>  
</div></div></div></div></div>```bash
vmware-toolbox-cmd timesync enable
```

<div class="page-content" id="bkmrk--23"><div dir="auto"><div id="bkmrk--24"></div></div></div><span style="text-decoration: underline;">**Installer un packet dans un conteneur debian bizzare :** </span>

```bash
apk add curl
apk add jq
```

<div class="page-content" id="bkmrk--26"><div class="text-muted text-small"></div></div>