Dossier | Description |
---|---|
/boot | Contient le fichier qui est utilisé par le boot loader (grub.cfg) |
/root | Le repertoire de l'utilisateur root différent de / |
/dev | les périphériques |
/etc | configuration |
/bin -> /usr/bin | Les commandes quotidienne de l'utilisateur |
/sbin -> /usr/sbin | commandes système/sytèle de fichier |
/opt | application complémentaire optionnelle ( pas partie de l'OS ) |
/proc | processus en cour ( n'existe qu'en mémoire ) |
/lib -> /usr/lib | Fichiers de librairie du langage C dont ont besoin les commandes et les applications strace -e open pwd |
/tmp | repertoire temporaires |
/home | repertoire utilisateur |
/var | log system |
/run | Démons système qui démarrent très tôt (systemd, udev ) pour stocker les fichiers d'exécution temporaires comme les fichiers PID |
/mnt | pour monter un système de fichiers externe |
/media | CDROM |
Télécharger l'image ici la version light est suffisante
Formater depuis un windows avec l'invite de commande
diskpart
list disk
select disk
clean
create partition primary
active
format fs=exfat quick
assign
exit
exit
Avec rufus ou etcher
créer un fichier à la racine ssh
et en même temps wpa_supplicant.conf
avec ces infos
country=fr
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid="nameofnetworknotnetwork5GHZ"
psk="motdepasse"
}
Ecrire ces informations en EOL Unix avec Notepad++ dans le menu Edit/EOL Conversion, les réseau 5GHZ ne fonctionneras pas. Aprés chaque redemarrage la configuration seras supprimé
sudo nano /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.1.2/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
sudo raspi-config
changer les options de locatisations (FR UTF8)
sudo su
apt update -y && apt upgrade -y && sudo apt full-upgrade -y
apt install ntpdate
apt install ntp
apt-get install bash-completion
Changer le mot de passe
passwd
Mettre a jour le Noyau
yum update kernel -y
Activier l'auto-complétion
nano /etc/bash.bashrc
Decommentez les lignes comme ci-dessous
# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
cat /etc/hostname
hostnamectl set-hostname <newname>
Creer votre clée public, et votre clée privée, laissez les double côte
# Version secure
ssh-keygen -t rsa -b 4096 -C "email_address"
# Version basic
ssh-keygen -t rsa -C "email_address"
Pour tester votre clée avec github, une fois votre clée publique sur github
ssh -T git@github.com
Sous windows
type C:\Users\name\.ssh\id_rsa.pub
Mettre les bon droits au fichier générés
sudo chmod 600 ~/.ssh/id_rsa
sudo chmod 600 ~/.ssh/id_rsa.pub
Envoyé la clée OPENSSH au rasp
cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
Autoriser les authorized_keys dans sshd_config
nano /etc/ssh/sshd_config
et decommentez
AuthorizedKeysFile /.ssh/authorized_keys
et recharger la config ssh
/etc/init.d/ssh force-reload
vous pouvez vous connectez avec cette ligne de commande
ssh -i /root/.ssh/<KEY> <USERNAME>@<IP_ADRESSE>
Marche aussi avec Rsync
rsync -e « ssh -i /root/.ssh/<KEY> » -av <USERNAME>@<IP_ADRESSE>:/source/destination/
Si vous êtes sur windows vous pouvez utiliser Pageant et wsl-ssh-pageant-amd64-gui pour ne plus à avoir entrer les clée privé à chaque fois
Dans votre dossier .ssh creer un fichier config sans extension, vous pouvez créer des alias pour vous connectez plus rapidement
Host *
ForwardAgent yes
Host <ALIAS>
HostName <SERVEUR>
Port <PORT>
User <USER>
# Tunnel SSH
# ProxyCommand ssh <USER>@<SERVEUR> -W %h:%p
Sur unix dans votre dossier home
nano ~/.ssh/config
chmod 600 ~/.ssh/config
chown $USER ~/.ssh/config
dans ~/.ssh creer un fichier config de la même façon que pour windows pour les racourcis
sudo apt-get install libx11-dev libxkbfile-dev libsecret-1-dev fakeroot rpm
docker run -it -p 127.0.0.1:8080:8080 -v "${HOME}/.local/share/code-server:/home/coder/.local/share/code-server" -v "$PWD:/home/coder/project" codercom/code-server:v2
npm rebuild dans vscode pour recompiler si des problèmes persistes
sudo apt install -y xrdp
acces depuis windows et mac (rajouter .local pour mac) avec mstsc
sudo apt install -y samba
configurer samba
mkdir /home/pi/shares
chmod 777 /home/shares/public
sudo rm /etc/samba/smb.conf
sudo nano /etc/samba/smb.conf
[global]
netbios name = server
server string = server
workgroup = WORKGROUP
security = user
[server]
comment = server
path = "/home/pi/shares"
public = yes
guest ok = yes
read only = no
sudo pdbedit -a -u pi
sudo service smbd restart
Installation de samba
sudo apt install -y samba
On créer un groupe
groupadd <group>
On créer un dans le groupe
useradd -g <group> <user>
On lui donne un mot de passe pour samba
smbpasswd -a <user>
On créer un dossier partagé avec les droit adéquat
mkdir -p /<partage>/<groupe>
chown -R root:<groupe> /<partage>/<groupe>/
chmod -R 770 /<partage>/<groupe>/
On historise la configuration par defaut de samba
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
vi /etc/samba/smb.conf
# Ajouter la configuration ci-dessous
#======================= Global Settings =======================
[global]
workgroup = WORKGROUP
server string = %h
public = yes
security = user
encrypt passwords = true
#======================= Share Definitions =======================
[<group>]
comment = répertoire du <groupe>
path = <partage>/<groupe>
valid users = @<groupe>
writable = yes
directory mask = 0770
create mask = 0770
force create mode = 0770
dans valid users on écri @groupe1, @groupe2 et user1, user2
On test si tout es bon
testparm smb.conf
On redemarre si tout est bon
/etc/init.d/samba restar
Façon Node
curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g npm
Façon linux
//verfier si arm7 ou plus
cat /proc/cpuinfo
// aller sur navigateur web chercher la bonne installation
wget https://nodejs.org/dist/...
// decompresser et supprimer le fichier compresser aussi
tar xf node-v...
// renomer en node
mv node-v... node
// creer les lien
ln -s /var/www/node/bin/node /usr/sbin
ln -s /var/www/node/bin/npm /usr/sbin
sudo /etc/init.d/apache2 stop
sudo systemctl disable apache2
sudo apt-get remove --purge libreoffice*
curl -sSL get.docker.com | sh
npm install pm2 -g
demander a pm2 de ce lancer au demarrage du raspberry
pm2 startup
monitorer le serveur complet
pm2 install pm2-server-monit
Supervision en temp réel
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Installer ncdu avec apt pour visualiser les fichiers trop volumineux
ce placer à la racine
ncdu -x
Installer tmpreaper avec apt
lors de l'installation avec apt, il faut commenter la ligne showing dans le fichier etc/tmpreaper
Analyser les log avec lnav installation simple avec apt
lnav /var/log/messages*
journalctl | lnav
journalctl -f | lnav
journalctl -o short-iso | lnav
journalctl -o json | lnav
journalctl -a -o json | lnav
journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav
logrotate est déja présent sur les distribution linux, il permet d'effecctuer des actions de rotations et de compression sur les logs
Assurons-nous que cette ligne n'est pas commentez
cat /etc/logrotate.conf | grep "include"
Voici un exemple
/var/log/mylogs/auth.log {
su <user> <group>
monthly
rotate 3
compress
missingok
create 644 <user> <group>
}
/var/log/mylogs/errors.log {
su <user> <group>
monthly
rotate 3
compress
missingok
create 644 <user> <group>
}
- monthly : la rotation se fait mensuellement
- rotate 3 : le nombre de fichiers qu’on souhaite conserver
- compress : les anciens fichiers sont compressés
- missingok : ne considère pas l’absence du fichier comme une erreur
- create 644 root root : créer le fichier de log immédiatement après la rotation avec les droits adéquats
Petite verification
logrotate --force /etc/logrotate.d/mylogs
iftop
nethogs
iptraf-ng
apt install sysstat
# Regarder la crontab
cat /etc/cron.d/sysstat
# les fichiers générés
ls /var/log/sa
# CPU
sar -u
# Memoire
sar -r
# Swap
sar -W
# Etat des IO disque
sar -b
# Entree sortie
sar -d
# Une période
sadf -s 05:00:01 -e 06:00:01 -dT /var/log/sa/sa15 -- -A
curl -LO "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.sh"
path correspond à notre repertoire de travail exemple : /maboite/miniconda3
sh Miniconda2-4.7.12.1-Linux-x86_64.sh -b -p <path>
conda install -y "jupyter" "numpy" "pandas"
history
supprimer une ligne génante
history -d numeroligne
Tout nettoyer
history -c
Si je veux l'historique sans les ligne de commande ls -l
export HISTIGNORE='ls -l:pwd:history'
tout l'historique sont sauvegardé ici
/home/yourname/.bash_history
ctrl+r permet de faire une recherche dans les lignes de commande tapé
df -h
top
dmesg
iostat 1
free
cat /proc/cpuinfo
cat /proc/meminfo
Installer ncdu
avec apt pour visualiser les fichiers trop volumineux
ce placer à la racine
ncdu -x
Installer tmpreaper
avec apt
lors de l'installation avec apt, il faut commenter la ligne showing dans le fichier etc/tmpreaper
Analyser les log avec lnav
installation simple avec apt
lnav /var/log/messages*
journalctl | lnav
journalctl -f | lnav
journalctl -o short-iso | lnav
journalctl -o json | lnav
journalctl -a -o json | lnav
journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav
Il peux arriver qu'un dossier comporte tellement de fichier que vider le dossier deviens impossible meme avec un rm
find . -name "*.toto" -exec rm {} \;
Rechercher une chaine de caractère dans tout les fichiers du repertoire courant
grep -rnw './' -e 'machainearechercher'
Cette ligne de commande creer 9 fichiers
touch abcd{1..9}-wyz
Pour afficher un message il faudra l'écrire la dedans
/etc/motd
systemctl ps -aux top crontab -e pour creer un crontab crontab -l pour lister les crontab
on peux definir plus facilement les cron dans /etc/
ls -l | grep cron
Crtl-z, jobs, bg, fg, nohup &, ps, pkill, nice
Pour afficher un message il faudra ce deplacer ici
/etc/nologin
cat nologin
Ecrire votre message
passwd
Remplacer tout les mots ancien
par les mots nouveau
du fichier MonFichier
sed 's/ancien/nouveau/g' MonFichier
Rajouter l'argument -i pour que cela soit actif
sed -i 's/ancien/nouveau/g' MonFichier
Supprimer toutes les lignes dans le fichier contenant le mot ancien
dans MonFichier
sed '/ancien/d' MonFichier
Supprimer toutes les lignes vide dans MonFichier
sed -i '/^$/d' MonFichier
git clone –depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh https://qwant.com
Surveillez son linux en temp réel sur l'adresse htt://127.0.0.1:19999
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
https://github.com/stamparm/maltrail
Mise a jour
apt-get update
apt-get upgrade
dpkg -l | grep paquet_recherché
$ if ./empty-dir /home/sk/ostechnix; then echo "It is empty" ; fi
It is empty
./randpass -n 15
./since /var/log/apt/history.log
Exécuter un htop pendant 10h10m10s
$ ./timeout -t 10:10:10 htop
Voir les log
cd var/log
ls -ltr
ll | more
Voir les log de demarrage toujours dans var/log
more boot.log
voir quand est-ce que boot.log a été modifié
ls -l boot.log
voir les log du matériel
dmesg
Creer l'utilisateur toto
et l'ajouter au group sudo
useradd toto
usermod -aG sudo toto
Supprimer un utilisateur
userdel -r toto
Chercher toto dans /etc/group
grep toto /etc/group
Creer un groupe TEST
groupadd TEST
Voir la liste de tout les groupes
cat /etc/group/
Synchroniser deux repertoire sur un serveur local
rsync -zvr /var/opt/installation/inventory /root/temp
Creer un groupe sharing
addgroup --system sharing
Creer un groupe utilisateur sharing appartenant au groupe sharing
adduser --system sharing --ingroup sharing
Mot de passe
passwd sharing
Creer un repertoire partagé
mkdir /home/sharing/public
chmod 777 /home/sharing/public
Installer Samba
apt update && apt install samba -y
sudo rm /etc/samba/smb.conf
sudo nano /etc/samba/smb.conf
Copier dans le fichier
[global]
netbios name = server
server string = server
workgroup = WORKGROUP
security = user
[server]
comment = server
path = "/home/sharing/public"
public = yes
guest ok = yes
read only = no
sudo pdbedit -a -u guest
sudo service smbd restart
On recupére l'espace disque sur tout les serveurs
sudo apt-get install python-pip
sudo pip install pssh
pssh -h pssh-hosts -l root -A -i "df -hT"
Recupérer dd_rescue
Décompressez, puis make pour créer le binaire
Si le disque enfommagé est /dev/sdb1 Si le disque libre est /dev/sdc1
Information du disque
fdisk -l
Se placer dans le repertoire dd_rescue
dd_rescue -l transfert_errors.log /dev/sdb1 /dev/sdc1
Le fichier log va être créé et qui va lister les blocs qu'il n'a pas plus traiter
Choisisser un des lignes de commande ci-dessous selon votre système de fichiers
fsck.ext2
fsck.ext3
fsck.ext4
fsck.vfat
PowerShell en admin
Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName Microsoft-Windows-Subsystem-Linux
Restart-Computer
wsl --list
wsl --set-version Ubuntu 2
wsl ~ -d Ubuntu
Installer VcXsrv choisir One Large Windows
Choisir une distribution
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
- OpenSUSE Leap 15
- OpenSUSE Leap 42
- SUSE Linux Enterprise Server 12
- SUSE Linux Enterprise Server 15
- Kali Linux
- Debian GNU/Linux
- Fedora Remix pour WSL
- Pengwin
- Pengwin Enterprise
- Alpine WSL
sudo apt-get install xfce4
Lancer
xfce4-session --display=:0.0
Ouvrir l'explorateur windows
explorer.exe .
chronic execute une commande en silence sauf en cas d'échec, Il est utile pour les travaux de cron. Au lieu d'essayer de garder la commande silencieuse, et d'avoir à traiter des mails contenant des sorties accidentelles quand elle réussit, et pas assez verbeux quand elle échoue, vous pouvez simplement l'exécuter toujours verbalement, et utiliser Chronic pour cacher la sortie réussie.
Exemple :
Lors de la création d'un nouveau cron job, au lieu d'utiliser la ligne suivante ;
#0 1 * * * backup >/dev/null 2>&1
0 1 * * * chronic backup
Si on est amenée à faire du developpement en python ou avec node l'instance s'éteindra dès lors que vouq quitterez votre session SSH, puisque la tâche ( npm run start
ou node server.js
) tourne en foreground
.
Pour parrer à ça vous avez :
- screen
- tmux
- systemd
- pm2
Nous allons ici réaliser un service, il faut créer un fichier sur notre instance à l'emplacement /etc/system/system/.service, avec la syntaxe suivante:
# Configuration principale de notre service
[Service]
# Variables d'environnements à utiliser dans le service
# Ici, spécifiez les variables d'environnement demandées plus haut comme
Environment="NOM_DE_MA_VARIABLE=valeur"
Environment="DB_HOST=127.0.0.1"
Environment="DB_USER=infrauser"
# ...
# Suites de commande à exécuter pour chacun des états du service:
# Ici, cette commande sera exécutée lorsqu'on appellera systemctl start mon-service
ExecStart=cd <dossier-contenant-le-code-serveur> && npm run start
L'otion Restart=on-failure peut redemarrer si notre service rencontre une erreur journalctl -t dans le ExecStart serrais une bonne idée aussi pour avoir des log sur un canal en particuler
# Notifie systemd que la configuration a été modifiée, et qu'il faut donc la prendre en compte
sudo systemctl daemon-reload
# Démarrer le nouveau service que vous venez de créer
sudo systemctl start backend
# Vérifier l'état du service
sudo systemctl status backend