Chercher une string dans les fichiers d’un répertoire de manière récursive

grep -r "password" ~/Dev

i stands for ignore case.
r ou R stands for recursive.
l stands for "show the file name, not the result itself".

Alternative: utiliser ack (https://beyondgrep.com/install/) $ ack "http://" ~/Dev/

Autre alternative: utiliser ag (https://github.com/ggreer/the_silver_searcher) $ ag "password" ~/Dev


Localiser un fichier

sudo find / -name "*filename"

Changer la date d’un fichier

touch -d "2 hours ago" /tmp/test

Boucle infinie

Pour ré-exécuter la même commande à l’infini par exemple:

while true
> do
>     touch -d "2 hours ago" /tmp/test
>     sleep 2
> done

Voir le code retour de la dernière commande:

echo $?

Inline if statement

Example: Retourner un exit 1 si la date du fichier /tmp/test est supérieure à 50 minutes

if [ $(find /tmp/test -type f -mmin +50 | wc -l) -gt 0 ]; then exit 1; fi

Liste des ports par défaut des utilitaires de base

vi /etc/services

Créer un groupe

sudo groupadd -g 4001 mon_groupe

Ajouter/ Retirer un groupe à un utilisateur

# delete
gpasswd –d group user

# add
gpasswd –a group user 

# Alternative
sudo usermod -aG mon_groupe olivier

Ajouter un nouvel utilisateur sans droit de login

useradd –s /sbin/nologin user

Si useradd/adduser ne fonctionne pas, il est possible de créer un utilisateur manuellement:

  • Ajouter une entrée pour l’utilisateur dans /etc/passwd
  • Idem dans le fichier /etc/group
  • Créer le répertoire home de l’utilisateur
  • Créer le password pour l’utilisateur avec passwd

Voir toutes les variables d’environnement du système

env

# ou 
printenv

Rediriger STDOUT and STDERR en Bash

Rediriger STDOUT vers un fichier en ajoutant > entre les commandes. 
Rediriger STDOUT vers une autre commande STDIN en ajoutant | entre les commandes.
Rediriger STDERR vers un fichier en ajoutant 2> entre les commandes.
Rediriger STDERR vers STDOUT en ajoutant 2>&1 entre les commandes.

Dupliquer un flux de données

Utiliser la commande tee

ifconfig -a | tee net.txt

Exemple: Faire tourner un script Bash et à la fois voir son output dans le terminal et l’enregistrer dans une fichier:

bash_script 2>&1 | tee bash_script.log 

Retourner les premières lignes d’un fichier

head fichier
# inverse de tail 

  • Symlinks point to another file by name, if you change the contents of the file, but not the name it will point to the file with new content. If you remove the source or change the name to it, the symlink it no longer works.

  • Hardlinks point to the file by inode number, if you modify the file name or even delete it still works until every hard link to it is removed.

An inode is a data structure used to represent a filesystem object. Lots of fields are stored in an inode ex: Inode number, direct/indirect disk blocks, number of blocks, change and modification time, File deletiontime, size, type, group, owner, permissions, etc.


Forcer un check filesystem lors du prochain reboot

touch /forcefsck

Voir les ports utilisés par les process

netstat -tulpn

Utiliser une machine comme router entre 2 subnets

echo "1" > /proc/sys/net/ipv4/ip_forward

Différence entre un process et thread?

Threads sont utilisées pour des petites tâches alors que les process sont utilisés par des tâches plus “lourdes” comme l’exécution d’applications.


Différence entre exec and fork?

Fork duplique le process actuel. Exec exécutes un process en utilisant l’executable cible et vous n’avez pas 2 processes qui font tourner le même code ou qui hérite du même état.


Différence entre les 2 commandes ?

omyvar=helloo
export myvar=hello
  • 1er cas: omyvar est restreint uniquement au shell
  • 2ème cas: exporter la variable la rend accessible à n’importe quel process

Limiter la mémoire utilisée par un process

Soit en utilisant ulimit pour un changement temporaire ou sysctl -a pour un changement permanent


Voir les logs system (systemd)

journalctl -f 

Voir les logs system et filtrer (systemd)

journalctl -f -u le_filtre

Nettoyer les logs de plus de 2 jours (systemd)

journalctl --vacuum-time=2d

Ne garder que 500 Mo de logs (systemd)

journalctl --vacuum-size=500M

Voir les logs d’un service avec follow + tail et affichage des résultats sans pagniation (systemd)

journalctl -u blabla.service -n 50000 --no-pager

Montage/Démontage NFS

# Montage
mount -t nfs SERVER:MONTAGE_SUR_BAIE ./dossier_local/

# Démontage
umount ./dossier_local

Afficher les paramètres kernel configurés dans /etc/sysctl.conf

sysctl -p

Afficher les erreurs kernel en mode readable

dmesg -T

Debug réseau avec TCPdump

Ouvrir dans 1er terminal:

tcpdump -vnni any host dns_a_filtrer

tcpdump -vnni any port 5000

tcpdump -vnni any not dst net 192.168.0.1/8

tcpdump -vnni eth0 not dst net 192.168.0.1/8

Dans un second terminal:

ping dns_a_filtrer

docker pull dns_a_filtrer

curl dns_a_filtrer

Scanner son réseau avec nmap

# apt install nmap
# Scanner les machines dans un réseau sans chercher à savoir si les ports sont ouverts:
nmap -sn 192.168.0.0/24

# ou scan plus complet:
nmap 192.168.0.0/24

Monitoring (simple) de host

# IO par disque
sar -d

# Etat des IO disque
sar -b

# Etat du Swap
sar -W

# Etat de la mémoire
sar -r

# Etat du CPU
sar -u

# All
sar -A

Copier tout un dossier et gérer les IO Errors

Workaround:

rsync -auv --delete --ignore-errors /Volumes/Olivier/* /Volumes/LaCie/

Lister les services

systemctl list-units --type=service

# Ou 
systemctl -l -t service | less

Systemd et cgroup

image


Linux Filesystem Hierarchy

image

Lien vers le standard: https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html


Raccourcis pour le terminal

Key combination Action
Ctrl + A Move to the beginning of the line
Ctrl + E Move to the end of the line
Alt + B Move to the previous word
Alt + F Move to the next word
Ctrl + U Erase to the beginning of the line
Ctrl + K Erase to the end of the line
Ctrl + W Erase the previous word
Ctrl + P Browse previously entered commands
Ctrl + R Reverse search for previously entered commands

ln -s dossier_cible nom_du_lien

Par exemple:

$ ln -s /etc/hostname name
$ ls -l
total 12
-rw-rw-r--. 1 olivier olivier   13 Jan 16 21:14 hello.txt
lrwxrwxrwx. 1 olivier olivier   13 Jun 16 22:32 name -> /etc/hostname

$ cat name
localdev.local

Si on efface le fichier original sur lequel point le soft link alors ce dernier devient inutile parce qu’il va pointer sur un fichier qui n’existe plus. Les soft links peuvent aussi pointer sur des fichiers dans un autre file system.


Exemple:

$ echo "Hello World!" > hello.txt
$ ln hello.txt bye.txt

$ ls -l
total 16
-rw-rw-r--. 2 fedora fedora   13 Jun 16 21:14 bye.txt
-rw-rw-r--. 2 fedora fedora   13 Jun 16 21:14 hello.txt
lrwxrwxrwx. 1 fedora fedora   13 Jun 16 22:32 name -> /etc/hostname

$ cat hello.txt
Hello World!

$ cat bye.txt
Hello World!

$ echo "1234" > hello.txt
$ cat bye.txt
1234

$ cat hello.txt
1234

$ rm hello.txt
$ cat bye.txt
1234

$ ls -l
total 12
-rw-rw-r--. 1 olivier olivier    13 Jun 16 22:39 bye.txt
lrwxrwxrwx. 1 olivier olivier   13 Jun 16 22:32 name -> /etc/hostname

Dans l’exemple précédent, on a créé un hard link en utilisant la commande ln. Quand on a fait un changement dans le fichier original hello.txt file, le changement a été répercuté sur le fichier bye.txt.

Mais comme bye.txt est un hard link, même si on efface hello.txt le hard link existe toujours et son contenu reste le même que le contenu original.


Fichiers tar

Extraire un tar

$ tar -xzvf files.tar.gz
hello.txt
bye.txt

Le fichier files.tar.gz est compressé avec gzip. Si le fichier termine par .tar.bz2, alors il est compressé avec bzip2.

$ tar -xjvf files.tar.bz2
hello.txt
bye.txt

Créer un tar

$ tar -czvf files.tar.gz hello.c bye.txt
hello.txt
bye.txt

$ ls
bye.txt  files.tar.gz  hello.txt

Lire un fichier /etc/passwd

root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin
lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
sync❌5:0:sync:/sbin:/bin/sync
shutdown❌6:0:shutdown:/sbin:/sbin/shutdown
halt❌7:0:halt:/sbin:/sbin/halt
mail❌8:12:mail:/var/spool/mail:/sbin/nologin
operator❌11:0:operator:/root:/sbin/nologin
games❌12💯games:/usr/games:/sbin/nologin
ftp❌14:50:FTP User:/var/ftp:/sbin/nologin
nobody❌99:99:Nobody:/:/sbin/nologin
systemd-timesync❌999:998:systemd Time Synchronization:/:/sbin/nologin
systemd-network❌192:192:systemd Network Management:/:/sbin/nologin
systemd-resolve❌193:193:systemd Resolver:/:/sbin/nologin
dbus❌81:81:System message bus:/:/sbin/nologin
sshd❌74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony❌998:995::/var/lib/chrony:/sbin/nologin
systemd-coredump❌994:994:systemd Core Dumper:/:/sbin/nologin
olivier❌1000:1000:Olivier:/home/olivier:/bin/bash

# Please note --> "❌" = ": x :" (sans espace)
FIELD MEANING
username the username
password the password of the user
uid Numeric user id
gid Numeric group id of user
gecos arbitary field
/home/dirname Home directory of the user
shell Which shell to use for the user

/etc/group

Si un utilisateur est membre du groupe wheelcela signifie qu’il a accès à sudo.

To be able to use sudo command, you must have your user mentioned in the /etc/sudoers file. The best way to edit the file is to use visudo command as root user.


she-bang ou sha-bang dans les fichiers exécutables

she-bang ou sha-bang est la première ligne d’un script qui débute par #! suivi du path de l’exécutable du script.

Example: #!/bin/bash


Lister les dossiers les plus lourds

du --max-depth=7 /* | sort -n

Obtenir mon IP externe via google

dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'

Obtenir le header réponse à une requête

Tout simplement curl -I http://www.example.org.


Obtenir la version de l’OS/ distro/ distribution

cat /etc/os-release

Lister les packages Debian installés

sudo apt list --installed

Convertir un timestamp unix en date lisible

date -d 1656894384

Voir les différences entre 2 commandes

diff -u <(ls -l ~/Dev/ ) <(ls -l ~/Dev2/ ) | colordiff

Chercher dans apt les packages disponibles

apt-cache search VOTRE_PACKAGE

JQ ou Python pour formatter un json

cat mon_fichier.json | jq

# ou
cat mon_fichier.json | python -m json.tool

Proxy netcat

nc -l 8080 | nc VOTRE_HOST 80