Utiliser des commandes shell avec le terminal

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
Consulter le wiki : Accueil du wiki - Objectifs - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack
Consulter le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur     Consulter le Redmine : Accueil du Redmine

Sommaire

Utiliser des commandes shell avec le terminal

Accéder rapidement à un terminal

# Ouvrir une fenêtre de terminal :
Ctrl+Alt+F1
Ctrl+Alt+F2
Ctrl+Alt+F3
Ctrl+Alt+F4
Ctrl+Alt+F5
Ctrl+Alt+F6
# Revenir au mode graphique :
Alt+F7 ou Alt+F8

Les couleurs dans le terminal

Les couleurs utilisées dans le terminal servent à identifier certains types de fichiers.
Source : https://web.archive.org/web/20140731121619/https://www.mistra.fr/tutoriel-linux-types-fichiers.html

Connaître la version de Linux utilisée

Les 4 commandes suivantes donnent des informations complémentaires sur la version de votre système GNU/Linux.
lsb_release -a
No LSB modules are available.
Distributor ID:	LinuxMint
Description:	Linux Mint 18.3 Sylvia
Release:	18.3
Codename:	sylvia
cat /etc/issue
Linux Mint 18.3 Sylvia \n \l
cat /proc/version
Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016
uname -m
x86_64
cat /etc/debian_version
9.1

Le symbole $

Le $ indiqué devant une commande permet de faire la différence entre la commande saisie, et, le texte en réponse obtenu une fois la commande lancée.
«$» indique qu'il s'agit d'un simple utilisateur.
«#» indique qu'il s'agit de l'administrateur également appelé root.

Les raccourcis avec un terminal

Déplacement

Ctrl + a : aller au début de la ligne
Ctrl + e : aller à la fin de la ligne
Alt + b : se déplacer mot par mot dans la ligne de commande en arrière (b pour backward)
Alt + f : se déplacer mot par mot dans la ligne de commande en avant (f pour forward)
Ctrl + xx : positionner le curseur au début du mot ou à la fin

Couper / Coller

Ctrl + k : couper la chaîne du curseur jusqu'à la fin de la ligne
Ctrl + u : couper la chaîne du curseur jusqu'au début de la ligne
Ctrl + w : couper le mot avant le curseur
Ctrl + y : coller une chaîne

Modification

Ctrl + t : inverser la position des deux caractères avant le curseur (pratique quand on tape par exemple, sl au lieu de ls)
Alt + shift + t : inverser la position des deux mots avant le curseur
Alt + shift + c : mettre une lettre en majuscule
Alt + shift + l : mettre un mot en minuscule (l pour lowercase)
Alt + shift + u : mettre un mot en majuscule (u pour uppercase)
Alt + shift + . : réécrire le paramètre de la dernière commande

Autres raccourcis pour le terminal

Ctrl + l : effacer le contenu de l'écran.
Ctrl + _ : annuler la dernière modification.
Ctrl + c : arrêter la commande en cours.
Ctrl + z : interrompt temporairement un processus, qui peut être relancé avec la commande fg (Au premier plan.) ou bg (En arrière-plan.).
Ctrl + d : quitter le shell en cours.
Ctrl + r : permet de rechercher une commande dans l'historique de la console.

Autocomplétion des commandes

La touche tabulation permet de compléter le nom des commandes.
Elle permet aussi de compléter le chemin vers un fichier.
Si cette fonction n'est pas ou plus activée, éditer le fichier /etc/bash.bashrc et décommenter les lignes concernant l'auto-complétion : 
# if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
# fi

Lancer plusieurs programmes à la suite

Utiliser le caractère "&".
programme&
autre_programme

Arrêter et relancer un service proprement

FTP (port 21)FTP est géré par ncftpd. www.ncftpd.com

Pour arrêter le service, éditer /etc/inittab (vérifier que vous avez une ligne concernant ncftpd) et redémarrer init
pico /etc/inittab
/sbin/init q
Pour redémarrer le service, tuer tous les processus ncftpd et il va redémarrer automatiquement.
killall -9 ncftpd
Tuer un service avec pkill :
pkill -f le_nom_du_service

DNS (port 53)DNS est géré par Bind www.isc.org/products/BIND/

Pour arrêter le service :
# /etc/init.d/named stop
Pour démarrer le service :
# /etc/init.d/named start

Web (port 80)La partie web est gérée par Apache httpd.apache.org

Pour arrêter le service :
# /etc/init.d/httpd stop
Pour démarrer le service :
# /etc/init.d/httpd start

SQL (port 3306)SQL est géré par MySQL www.mysql.com

Pour arrêter le service :
# /etc/init.d/mysql stop
Pour démarrer le service :
# /etc/init.d/mysql start

Webmin (port 10000)Webmin est géré par Webmin www.webmin.com

Pour arrêter le service :
# /etc/init.d/webmin stop
Pour démarrer le service :
# /etc/init.d/webmin start

Commandes APT

# Recherche dans les paquets disponibles :
apt-cache search <nom-du_paquet>
# Filtrer par un mot clé :
apt-cache search php | grep php-
sudo apt-cache pkgnames | grep php7.0
Liste le nom des paquets disponibles, ici, pour php7.0 par exemple.
apt-cache depends <nom-du_paquet>
Dépendances.
apt-cache madison <nom-du_paquet>
Versions disponibles et dépôt utilisé.
apt-cache policy <nom-du_paquet>
apt policy <nom-du_paquet>
Versions et possibilités.
apt-cache show <nom-du_paquet>
Informations sur le paquet.
apt-show-versions <nom-du_paquet>
Installer : apt-get install apt-show-versions
Alternative. Informations sur le paquet.
apt-show-versions <nom-du_paquet> pour connaître la version.
apt-show-versions apache2 -a pour connaître toutes les versions disponibles.
apt-get install <nom-du_paquet> -s
Simulation d'installation.
apt-get install <nom-du_paquet>
Installation du paquet mentionné.
apt-get remove <nom-du_paquet>
Désinstallation/suppression du paquet.
apt-get remove <nom-du_paquet> --purge
Désinstallation complète, fichiers de configuration compris.
# Vider le cache disque des paquets :
apt-get autoclean
# Pour chaque paquet installé, une copie est gardé en local dans /var/cache/apt/archives.
# Supprimer ces copies locales pour gagner de la place :
apt-get clean
Le cache contient notamment des paquets .deb utilisés récemment.
cd /var/cache/apt/archives
apt-get update
Chargement des données liées au sources.list.
# Forcer les dépendances après l'installation d'un paquet et faire la mise à jour des paquets au complet.
apt-get -f install
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt update
E: Le pilote pour la méthode /usr/lib/apt/methods/https n'a pu être trouvé.
N: Is the package apt-transport-https installed?
Installer alors : apt-transport-https
La mise à jour des paquets fonctionne à nouveau.
apt-get upgrade
Mise à jour des paquets.
apt-get dist-upgrade
Met à jour de la distribution complète.

Nohup apt upgrade

La commande nohup apt upgrade permet de garder une trace de la mise à jour dans un fichier texte.
La mise à jour n'est alors pas exécutée mais les informations de la mise à jour sont copiées vers le fichier texte.

Résoudre les problèmes apt

Documentation Ubuntu pour apt : https://doc.ubuntu-fr.org/probleme_apt

Empêcher les mises à jour pour un paquet

Source : https://askubuntu.com/questions/18654/how-to-prevent-updating-of-a-specific-package

Arrêter la mise à jour d'un paquet

# Il peut être nécessaire lors d'une mise à niveau, de bloquer l'état sur un paquet.
# Exemples pour les paquets php7.0 apache docker libc6 grub ncurse
apt install aptitude
aptitude hold  $(dpkg -l |awk '/php7.0/ {print $2}' | xargs)
aptitude hold $(dpkg -l |awk '/apache/ {print $2}' | xargs)
aptitude hold  $(dpkg -l |awk '/docker/ {print $2}' | xargs)
aptitude hold $(dpkg -l |awk '/libc6/ {print $2}' | xargs)
aptitude hold $(dpkg -l |awk '/grub/ {print $2}' | xargs)
aptitude hold $(dpkg -l |awk '/ncurse/ {print $2}' | xargs)
echo  "toto hold" | dpkg --set-selections

Remettre la mise à jour du paquet en service

echo  "toto install" | dpkg --set-selections

Gestion des paquets

Gestionnaire de paquets dpkg

Ok-ko.png Source : https://doc.ubuntu-fr.org/dpkg

Installer un paquet .deb

dpkg -i nom_du_paquet

Désinstaller un paquet .deb

dpkg -r nom_du_paquet

Vérifier si un paquet a été installé

dpkg -l |grep <nom-du_paquet>

On peut aussi tester cette autre méthode, pour lister les paquets installés d'une application.
dpkg -l |awk '/libreoffice-gtk/' est équivalent à dpkg -l |grep libreoffice-gtk
dpkg -l |awk '/libreoffice/ {print $1 " "$2 "  "$3}'

Lister tous les paquets installés

# Lister tous les paquets installés :
dpkg -l
ou
dpkg --list
Le terminal affiche la fin de la liste des paquets installés.

Sauvegarder la liste des paquets installés

Conserver cette liste en créant un fichier liste vide avec la commande touch liste.
Copier les information dans le fichier liste avec la commande dpkg -l >> liste.
A détailler : dpkg -l |grep ii
A détailler : dpkg --get-selections

Lister les paquets récemment installés

cat /var/log/apt/history.log

Connaître le status d'un service

service apache2 status

Lister les services démarrés

# Afficher les services et l'utilisateur ayant lancé le service :
ps -aux
# ps -eo euser,ruser,suser,fuser,f,comm,label
Man : http://man7.org/linux/man-pages/man1/ps.1.html
# Avec service :
service --status-all
# Avec sysv-rc-conf :
sudo apt install sysv-rc-conf
sudo sysv-rc-conf --list

Trouver les dépendances d'un paquet

Utiliser aptitude why

Connaître les dépendances d'un paquet logiciel avec aptitude why.
aptitude why gedit
Affichera :
i   gedit        Dépend     gedit-common (< 3.19)
i A gedit-common Recommande gedit

Utiliser dpkg-depcheck

 Le paquet dpkg-depcheck permet de connaître les dépendances nécessaires à un paquet.
 Voir le manuel : http://pwet.fr/man/linux/commandes/dpkg_depcheck
 Installer ce paquet : sudo apt install devscripts
 Lancer la commande : dpkg-depcheck GreeN-Project
 Packages used:
 green-project
 libc6:amd64
 tzdata
 libtinfo5:amd64
 coreutils

Utiliser apt-rdepends

Installer apt-rdepends sur Ubuntu ou Debian : sudo apt-get install apt-rdepends
Exemple sans avoir à utiliser les privilèges root : apt-rdepends nom-du-paquet
Le paquet apt-rdepends permet également de connaître les dépendances nécessaires à un paquet.
Installer apt-rdepends :
sudo apt-get install apt-rdepends
Lancer la commande pour connaître les dépendances d'un paquet :
apt-rdepends paquet

Visualiser les dépendances d’un paquet .deb de manière graphique

Le programme apt-rdepends peut exporter les informations de dépendances dans un fichier pour permettre à un éditeur graphique GUI appelé dotty de visualiser les dépendances dans un format graphique.
Installer l’outil éditeur de graphe Dotty :
sudo apt-get install graphviz 
Lister les dépendances d'un paquet avec apt-rdepends puis les exporter dans un fichier .dot :
apt-rdepends -d apt-rdepends | dot > apt.dot
Ouvrir le fichier avec l’éditeur dotty :
dotty apt.dot

Tracer une commande avec strace

strace -f -o strace.log la-commande-que-je-veux-tracer
Avec la ligne précédente, on enregistre tout, ça peut faire beaucoup.
Rajouter un filtre pour les appels système :
strace -f -o strace.log -eopen la-commande-que-je-veux-tracer
Ajouter -eread pour les appels en lecture.
Lire strace.log avec un pager (less, more...).
Sur un processus déjà en route, utiliser l'option `-p pid-du-processus` pour rattacher strace au processus.
man strace pour en savoir plus.

Installer un paquet logiciel

Debian / Ubuntu

Utiliser l'une des commandes suivantes pour installer un paquet logiciel.
sudo apt-get install NomDuPaquet
sudo aptitude install NomDuPaquet
sudo apt install NomDuPaquet
Ajouter l'argument --fix-missing pour résoudre automatiquement les dépendances manquantes.
Lorsque c'est possible, les informations du sources.list renseignent automatiquement le programme sur les dépendances manquantes.

Most

Most est un programme de défilement qui affiche, une pleine page à la fois, le contenu d’un fichier sur un terminal.
Une ligne d'état en bas de l'écran affiche le nom du fichier, le numéro de la première ligne affichée à l'écran et le pourcentage du fichier qui a déjà été affiché.

Contrairement à d'autres programmes de visualisation, most peut afficher un nombre arbitraire de fenêtres tant qu'elles peuvent toutes être affichées.
Différentes fenêtres peuvent être utilisées pour montrer le même fichier à différents endroits.
En plus d'afficher des fichiers textes ordinaires, most peut aussi afficher des fichiers binaires ou avec des caractères ASCII quelconques.
sudo apt-get install most

Evernote

http://sourceforge.net/projects/nevernote/files/
sudo dpkg -i nixnote2-2.0-beta6_amd64.deb
sudo apt-get -f install

Compresser une vidéo avec Handbrake sur Debian Jessie

Vérifier cette procédure. Je l'avais supprimée de mes notes, peut être que Handbrake était bogué ou dépassé.
Installer Handbrake pour compresser une vidéo sur Debian Jessie.
Ajouter la liste des dépôts multimédia dans les sources.list
deb www.deb-multimedia.org jessie main non-free

apt-get update
apt-get install deb-multimedia-keyring
Valider oui.
apt-get update
apt-get upgrade
apt-get install handbrake-gtk

Manipuler des vidéos avec pitivi

Un bogue avec Debian empêche d'utiliser correctement pitivi.
Un paquet est manquant. Il devrait être corrigé prochainement, ou, peut être a t'il déjà été corrigé.

Manipuler des vidéos avec avidemux

Installer avidemux pour faire du montage de vidéos.
Ajouter le dépôt suivant dans /etc/apt/sources.list
deb http://www.deb-multimedia.org jessie main non-free
apt-get update
apt-get install deb-multimedia-keyring
sudo apt-get install avidemux
Le montage vidéo peut se faire sur openshot.

Clés de dépôts

# Paquets complémentaires pour ajouter un dépôt apt et les clés.
# sudo apt-get install software-properties-common
# sudo apt install dirmngr
Lister les clés : apt-key list
pub   rsa4096 2015-07-14 [SCEA]
     5811 8E89 F3A9 1289 7C07  0ADB F762 2157 2C52 609D
uid           [ unknown] Docker Release Tool (releasedocker) <docker@docker.com>
Supprimer une clé : apt-key del <key-id>
Supprimer la clé du dépôt de Docker : apt-key del 2C52609D

Installer des paquets avec ppa

Logiciels à installer avec ppa

Source : https://www.learn2crack.com/2013/08/ubuntu-apps-command-line-ppa.html

Lister les ppa installés

Lancer la commande suivante :
ls -l /etc/apt/sources.list.d/
Source : https://doc.ubuntu-fr.org/ppa

Un script permet d'ajouter des PPA a Debian avec la bonne syntaxe

#!/bin/bash
if [ $# -eq 1 ]
NM=`uname -a && date`
NAME=`echo $NM | md5sum | cut -f1 -d" "`
then
ppa_name=`echo "$1" | cut -d":" -f2 -s`
if [ -z "$ppa_name" ]
then
echo "PPA name not found"
echo "Utility to add PPA repositories in your debian machine"
echo "$0 ppa:user/ppa-name"
else
echo "$ppa_name"
echo "deb http://ppa.launchpad.net/$ppa_name/ubuntu xenial main" >> /etc/apt/sources.list
apt-get update >> /dev/null 2> /tmp/${NAME}_apt_add_key.txt
key=`cat /tmp/${NAME}_apt_add_key.txt | cut -d":" -f6 | cut -d" " -f3`
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
rm -rf /tmp/${NAME}_apt_add_key.txt
fi
else
echo "Utility to add PPA repositories in your debian machine"
echo "$0 ppa:user/ppa-name"
fi
Sauvegarder ce fichier dans /usr/sbin/
cp add-apt-repository.sh.txt /usr/sbin/add-apt-repository
Changer la permission pour exécuter.
chmod o+x /usr/sbin/add-apt-repository
Changer le propriétaire pour root.
chown root:root /usr/sbin/add-apt-repository
Ajouter normalement un PPA.
sudo add-apt-repository ppa:ppa-name
Suivre ce tutoriel. Le script d'origine, à l'étape 1, lucid est remplacé par xenial.
Comment installer un logiciel avec ppa sur Debian : https://blog.anantshri.info/howto-add-ppa-in-debian/

Vérifier les pilotes qui sont chargés

Vérifier les pilotes qui sont chargés :
lspci -k
Plus d'informations sur un pilote, par exemple nvme, avec la commande modinfo :
modinfo nvme
filename:       /lib/modules/4.15.0-36-generic/kernel/drivers/nvme/host/nvme.ko
version:        1.0
license:        GPL
author:         Matthew Wilcox <willy@linux.intel.com>
srcversion:     3B317A06BCAB696AA0B63BD
alias:          pci:v0000106Bd00002003sv*sd*bc*sc*i*
alias:          pci:v0000106Bd00002001sv*sd*bc*sc*i*
alias:          pci:v*d*sv*sd*bc01sc08i02*
alias:          pci:v00001D1Dd00002807sv*sd*bc*sc*i*
alias:          pci:v00001D1Dd00001F1Fsv*sd*bc*sc*i*
alias:          pci:v0000144Dd0000A822sv*sd*bc*sc*i*
alias:          pci:v0000144Dd0000A821sv*sd*bc*sc*i*
alias:          pci:v00001C5Fd00000540sv*sd*bc*sc*i*
alias:          pci:v00001C58d00000023sv*sd*bc*sc*i*
alias:          pci:v00001C58d00000003sv*sd*bc*sc*i*
alias:          pci:v00008086d00005845sv*sd*bc*sc*i*
alias:          pci:v00008086d0000F1A5sv*sd*bc*sc*i*
alias:          pci:v00008086d00000A55sv*sd*bc*sc*i*
alias:          pci:v00008086d00000A54sv*sd*bc*sc*i*
alias:          pci:v00008086d00000A53sv*sd*bc*sc*i*
alias:          pci:v00008086d00000953sv*sd*bc*sc*i*
depends:        nvme-core
retpoline:      Y
intree:         Y
name:           nvme
vermagic:       4.15.0-36-generic SMP mod_unload 
parm:           use_threaded_interrupts:int
parm:           use_cmb_sqes:use controller's memory buffer for I/O SQes (bool)
parm:           max_host_mem_size_mb:Maximum Host Memory Buffer (HMB) size per controller (in MiB) (uint)
parm:           sgl_threshold:Use SGLs when average request segment size is larger or equal to this size. Use 0 to disable SGLs. (uint)
parm:           io_queue_depth:set io queue depth, should >= 2

Différer des commandes avec at

Ok-ko.png Source : https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/executer-un-programme-a-une-heure-differee

Afficher l'arborescence d'un répertoire avec le paquet tree

# Installer le paquet tree :
sudo apt-get install tree
# Afficher l'arborescence :
tree Dossier
# Afficher l'arborescence en ajoutant le propriétaire et le poids du fichier :
tree Dossier -Csu

Devenir root

Bascule l'utilisateur vers le root, nécessite le mot de passe root.
su -
Bascule l'utilisateur vers le root, nécessite le mot de passe de l'utilisateur.
sudo su -
Donne l'accès root pour une commande spécifique, nécessite le mot de passe de l'utilisateur.
sudo <command>
Relancer un commande ou l'on a oublié sudo sans avoir à ressaisir la ou les commandes.
sudo !!
Devenir root avec sudoers sur une distribution live de GNU/Linux.
sudo bash

Quitter le mode root

ctrl d ou exit

Savoir qui est connecté

finger
who
Avoir les pseudos et le nombre d'utilisateurs connectés : who -q
Avoir les pseudos et la date de connexion des utilisateurs connectés : who | awk '{print $1" "$3}'
Avoir le nombre d'utilisateurs connectés : who | wc -l
w

Faire une recherche de fichier avec find

# Trouver un fichier ici le fichier nomdefichier recherché sur toute la racine "/".
find / -name nomdefichier
# Trouver un fichier dans le répertoire courant et sous répertoires :
find -iname "nomdefichier"
# Trouver les fichiers avec une correspondance partielle :
find /home/pat -iname "*.conf"
# Faciliter la lecture :
find /home/pat -iname "*.conf" | less
# Trouver des types spécifiques de résultats :
# Pour chercher des fichiers normaux (f), des répertoires (d), des liens symboliques (l), des périphériques de caractères (c), des dispositifs de blocage (b). 
find / -type f -iname "nomdefichier"
# Trouver des résultats en fonction de la taille :
find / -size +50M -iname "nomdefichier"
# Trouver en combinant des filtres de recherche :
find /photosdevacances -type f -size +200k -not -iname "*2015*"
# Chercher des fichiers par propriétaire ou par permissions :
find / -user pat -iname "nomdefichier"
find / -group users -iname "nomdefichier"
find / -perm 777 -iname "nomdefichier"
# Combiner les commandes pour faire exécuter des actions quand les fichiers sont trouvés.
# Changer les permissions de 777 vers 755 :
find . -type f -perm 777 -exec chmod 755 {} \;
# Utiliser -iname au lieu de -name fait ignorer la casse de votre requête.
# La commande -name est sensible à la casse.

Faire une recherche de fichiers ou de programmes avec locate

# Installer locate :
sudo apt-get install locate
sudo apt-get install mlocate
# La commande locate ne pourra rien trouver tant que sa base de données n'aura pas été construite et mise à jour.
# Cela se fait automatiquement tous les jours, mais vous pouvez lancer une mise à jour manuellement pour utiliser locate immédiatement.
sudo updatedb
# L'option -i permet d'ignorer la case.
# Ne pas mettre -i pour ne pas ignorer la case.
locate -i *text.txt*
/home/USER/TEXT.txt
/home/USER/text.txt
# Afficher les 20 premiers résultats :
locate -n 20 -i "*.jpg"
# Afficher le nombre de réponses :
locate -c *.jpg
4581
# Chercher dans la base de données mlocate.db avec -e :
locate -i -e *text.txt*
/home/USER/text.txt
# L'option -q permet de ne pas afficher les messages d'erreur qui précisent que l'on n'est pas root quand on lance la commande en simple utilisateur :
locate "\*.dat" -q*
# Consulter les détails de la base de données :
locate -S
# Faire une recherche sur un autre fichier mlocate.db
locate -d <new db path> <fichier_a_rechercher>

Faire une recherche de chaîne de caractères dans plusieurs fichiers avec grep

# Utiliser la commande grep pour chercher des suites de caractères dans des fichiers.
# L'option -r rend la recherche récursive, elle cherchera tout les fichiers contenant la suite de caractères de la requête dans le dossier actuel et ses sous-dossiers.
grep -r -i "requête" /chemin/vers/répertoire/
# Ne pas afficher le texte supplémentaire dans la réponse.
grep -r -i "requête" /chemin/vers/répertoire/ | cut -d: -f1
# Cacher les messages d'erreurs, en cas de permissions non autorisées par exemple :
grep -r -i "requête" /chemin/vers/répertoire/ 2>/dev/null
# Chercher le terme "add_image_size" dans les fichiers du répertoire courant :
grep "add_image_size" * -ri

Utiliser les espaces pour les dossiers et les fichiers

cd espace\ de\ travail
ou
cd "espace de travail"
ou encore
REP='espace de travail'
cd "${REP}"

Faut t'il interpréter les variables

Un intéressant problème de shell.
Ici bash fait la transformation : cd $rep ==> cd espace de travail  ==> 'cd' 'espace' 'de' 'travail'
Avec zsh par contre, ceci marche parfaitement, la variable rep occupe un seul argument pour la commande 'cd'.
rep="blah blah"
cd $rep
C'est donc un choix qui est fait par le shell.

Informations sur un dossier ou un fichier

Connaître la date de création ou de modification d'un dossier ou d'un fichier

ls --full-time pour lister les dossiers et les fichiers avec la date de création / modification.

Connaître l'encodage d'un dossier ou d'un fichier

# Un fichier utilisant uniquement des caractères ASCII ordinaires ne peut pas être distingué d'un fichier UTF-8.
# La conversion ne fonctionnera pas sur un fichier ne contenant pas de caractères accentués.
# Par définition, les caractères ASCII 7 bits sont mappés 1 à 1 en UTF-8.
# Utiliser la commande file.
file tesat.sql
tesat.sql: UTF-8 Unicode text, with very long lines
# Connaître l'encodage d'un fichier :
file -i nom_du_fichier
nom_du_fichier: text/plain; charset=utf-8
# Afficher uniquement l'encodage :
file -i nom_du_fichier | cut -d= -f2
utf-8
# Afficher le type mime, équivalent à l'encodage :
file -b --mime-encodin nom_du_fichier
utf-8
# Capturer la valeur de l'encodage :
encodage=$(file -i nom_du_fichier | cut -d= -f2)
# Script pour afficher l'encodage d'un fichier:
#!/bin/bash
echo "Donner le nom et l'emplacement d'un fichier";
read fichier;
encodage=$(file -i $fichier | cut -d= -f2);
echo "Ce fichier est encodé en $encodage.";
# Script pour déterminer si un fichier est encodé en UTF-8:
#!/bin/bash
echo "Donner le nom et l'emplacement du fichier à tester";
read fichier;
encodage=$(file -i $fichier | cut -d= -f2);
if $encodage == "utf-8" 
 then
  echo "Ce fichier est bien encodé en UTF-8.";
 else
  echo "Ce fichier n'est pas encodé en UTF-8. Il est encodé en $encodage.";
fi
# Afficher le type de fichier :
file -i nom_du_fichier | cut -d= -f1
nom_du_fichier: text/plain; charset
# Autre possibilité pour trouver l'encodage avec uchardet
sudo apt-get install uchardet
uchardet file.txt
--> windows-1252
--> 0.009 s
# Autre possibilité pour trouver l'encodage avec python-chardet
sudo apt-get install python-chardet
chardet file.txt
--> file.txt: ISO-8859-2 (confidence: 0.86)
--> 1.892 s
# Utiliser chardet si file ne retourne rien :
sudo apt install chardet
chardet nom_du_fichier
# Autre possibilité pour trouver l'encodage avec Gedit.
Ouvrir le fichier avec l'éditeur de texte Gedit.
Depuis "Fichier / Enregistrer sous, l'encodage est présenté.

Changer l'encodage sur un ou plusieurs fichiers

iconv

# Un fichier utilisant uniquement des caractères ASCII ordinaires ne peut pas être distingué d'un fichier UTF-8.
# La conversion ne fonctionnera pas sur un fichier ne contenant pas de caractères accentués.
# Par définition, les caractères ASCII 7 bits sont mappés 1 à 1 en UTF-8.
# Consulter la liste des encodages disponibles :
iconv -l
# Changer l'encodage d'un fichier avec iconv :
iconv -f UTF-8 -t UTF-17 fichier.txt >> new-encodage.txt
iconv -f ASCII -t UTF-8 upload_tmp_dir.php > ww.php
iconv -f ASCII -t UTF-8 fichier1 -o fichier2
# Le manuel :
man iconv
# Vérifier que iconv est bien présent sur l'ordinateur :
which iconv
/usr/bin/iconv
# Réinstaller iconv :
sudo apt-get install --reinstall libtext-iconv-perl
# La réinstallation ne change rien.

recode

Le manuel : https://linux.die.net/man/1/recode
#!/bin/bash
# file name: to_utf8

# current encoding:
encoding=$(file -i "$1" | sed "s/.*charset=\(.*\)$/\1/")

if [  "${encoding}" = "iso-8859-1" ] || [ "${encoding}" = "iso-8859-2" ]; 
then
echo "recoding from ${encoding} to UTF-8 file : $1"
recode ISO-8859-2..UTF-8 "$1"
fi

#example:
#find . -name "*.php" -exec to_utf8 {} \;

konwert

sudo apt install konwert
source : https://opensharing.fr/commandes-linux-konwert

Connaître les droits sur un dossier ou un fichier

ls -ltr nomdufichier
ll est un raccourci pour ls -l et permet de lister le contenu d'un dossier et d'afficher les droits.

Toutes les options de la commande ls

Ok-ko.png Source : http://geekstrick.com/ls-command-with-all-its-parameter-in-linux/

Vérifier la date du système

Utiliser la commande date pour vérifier la date du système.
Utiliser la commande dpkg-reconfigure tzdata pour reconfigurer la date du système.

Heure du serveur et horloge atomique

NTPD

Présentation rapide du protocole NTP : https://wiki.debian.org/fr/NTPProtocole
Le paquet ntp et ntp-simple font tourner un daemon pour synchroniser en permanence la machine.
Le paquet ntp-doc contient toute la documentation au format HTML pour le paquet NTP.
Durant l'installation, dpkg détecte que vous avez déjà un fichier /etc/default/ntp-servers et propose de modifier votre configuration.
Choisir no pour pourvoir modifier vous-même le fichier de configuration.
Les fichiers principaux se trouvent aux endroits suivants:
Le fichier de configuration de NTP, on y retrouve les serveurs avec lesquels ntpd doit se synchroniser :
/etc/ntp.conf
La documentation ntp au format HTML :
/usr/share/doc/ntp-doc/html/index.htm
L’exécutable principal :
/usr/sbin/ntpd
Le script d'initialisation de ntp :
/etc/init.d/ntp
NTP permet de synchroniser l'heure du serveur avec des horloges atomiques.
apt-get install ntp ntpdate.
Éditer /etc/ntp.conf ou /etc/default/ntpdate pour vérifier la configuration.
Éventuellement modifier les adresses des serveurs avec les plus proches de chez vous : http://support.ntp.org/bin/view/Servers/NTPPoolServers
# Liste des serveurs NTP de référence
# server ntp.via.ecp.fr
# server ntp.obspm.fr
# server ntp.univ-lyon1.fr
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org
J'obtiens les logs suivantes depuis syslog :
Il me semble que ses adresses ne sont pas autorisées, et, avortent de leurs actions.
Je préférerais ne pas avoir ce type de logs et filtrer ces requêtes pour pouvoir les interdire.
95.81.173.8 {ntp-1.arkena.net} local addr 10.0.2.15 {NomDeLaMachine} -> <null>
163.172.25.19 {nsa.priv.pw} local addr 10.0.2.15 {NomMachine} -> <null>
91.189.91.157 {alphyn.canonical.com} local addr 10.0.2.15 {NomDeLaMachine} -> <null>

Afficher la liste des serveurs qui seront utilisés

ntpq -p

Vérifier que l’accès au pool de serveurs fonctionne

Vérifier que le process ntp est arrêté :
/etc/init.d/ntp stop
Lancer une synchro forcée avec ntpdate :
ntpdate 0.fr.pool.ntp.org
Redémarrer le service ntp :
/etc/init.d/ntp restart

Chrony

Voir aussi le passage de chrony à systemd timesyncd : https://www.dsfc.net/logiciel-libre/linux/ntp-passage-de-chrony-a-systemd-timesyncd/
Source : https://wiki.debian.org/fr/NTP

Ouvrir un fichier texte

Ouvrir un fichier texte avec un pager

Ouvrir le fichier texte dialogue.
Pour lire un long fichier de journal (log), on utilisera un pager comme less ou most qui rend la lecture plus confortable.
{less || more || most}  dialogue
Pour ne lire que le début où la fin du fichier dialogue, on utilisera head ou tail.
{head || tail}  dialogue

Ouvrir un fichier texte avec un éditeur

nano dialogue
mcedit dialogue
vim dialogue
emacs dialogue
Éditeur depuis le terminal.

Écrire dans le terminal

Afficher des informations avec cat dans le terminal

Lancer la commande cat redirige le texte vers la sortie standard, la console, avec le symbole -.
Le mot clé EOF est le marqueur de fin de fichier.
cat <<- EOF
Saisir ou copier coller les informations suivantes, puis, faire entrée.
Ceci est un test
si on met une commande ça fait quoi ?
who
et comme ça ?
`who`
Hoo, et alors avec ça ?
$(uname -r)
"$(uname -r)"
Mais je veux juste l'écrire, pas l'exécuter !
\$(uname -r)
C'est mieux.
* $ ^
Tiens, ça ne fait rien avec les caractères spéciaux...
Fini pour le moment.
EOF
Résultat affiché dans le terminal.
Ceci est un test
si on met une commande ça fait quoi ?
who
et comme ça ?
nomutilisateur  tty7         2017-04-03 08:44 (:0)
nomutilisateur  pts/1        2017-04-03 10:35 (:0.0)
Hoo, et alors avec ça ?
4.4.0-21-generic
"4.4.0-21-generic"
Mais je veux juste l'écrire, pas l'exécuter !
$(uname -r)
C'est mieux.
* $ ^
Tiens, ça ne fait rien avec les caractères spéciaux...
Fini pour le moment.
Les commandes entourées par des simples côte ' ' sont évaluées. (Voir le deuxième 'who'.)
Pour conserver la valeur littérale, écrire la commande, elle ne sera pas évaluée. who
Afficher la valeur d'une variable avec $variable ou "$variable".
Pour conserver la valeur littérale, utiliser \. \$PATH affiche $PATH et non pas la valeur de la variable.

Utiliser echo dans le terminal

echo -e alternative au texte précédent \n
alternative au texte précédent n

Créer un dossier

# Créer un dossier dans le répertoire courant :
mkdir dossier
# Créer plusieurs dossiers en une fois
mkdir -p /path/dossier/1/2/3/
mkdir -p $HOME/dossier/1/2/3/

Lire, écrire et concaténer avec cat

Une version améliorée de cat existe pour GNU/Linux Debian, nommée dog. Le chien serrait meilleur que le chat.
Voir man cat et man dog.
dog n'est pas une commande standardisée, à éviter dans des scripts pour des raisons de portabilité.
dog possède de nombreuses options supplémentaires et peut travailler par exemple sur des url.

Lire deux fichiers texte

$ cat test.txt
blabla, ceci et un test.
$ cat test2.txt
Et voici un deuxième fichier de test.

Ecrire jusqu'à un mot clé prédéfini et sur une ligne

# Créer un fichier texte.
touch une-ligne.txt
# Modifier la date de création du fichier avec touch.
# Permet de créer de vieux fichiers pour faire des tests.
touch -t [AAMMJJhhmm] fichier
# Ajouter du texte dans le fichier.
cat << FIN >> une-ligne.txt
Je veux écrire du texte dans un fichier.
Ça je voudrais bien\
que ça tienne sur une ligne.

FIN
# Affiche
Je veux écrire du texte dans un fichier.
Ça je voudrais bien que ça tienne sur une ligne.
La touche entrée correspond à un saut de ligne.
Une ligne laissée vide affichera une ligne laissée vide.
Le symbole \ supprime un retour à la ligne éventuel.
Le mot FIN n'est pas écrit dans le fichier, c'est notre marqueur de fin de fichier défini dans la commande.
On peut utiliser n'importe quel mot comme marqueur. Par convention on trouvera souvent EOF qui signifie “End Of File” (“fin de fichier” en Anglais).

Concaténer avec cat

Concaténer des fichiers texte avec la commande cat.
La commande cat peut aussi mettre bout-à-bout deux archives vidéo ou images .iso.

Concaténer vers un fichier texte

$ cat -n test.txt test2.txt > test3.txt
Symbole de redirection et utilisation.
> fichier 	Crée le fichier s'il n'existe pas, remplace son contenu s'il existe.
>> fichier 	Crée le fichier s'il n'existe pas, ajoute à la fin du fichier s'il existe.
Afficher alors le nouveau fichier obtenu.
$ cat test3.txt
1 blabla, ceci et un test.
2 Et voici un deuxième fichier de test.

Concaténer vers une image .iso

Les images .iso ou vidéo doivent avoir été découpées volontairement.
Exemple pour découper une image .iso de 95Mo en deux avec split en précisant une taille maximale pour des parties de 50Mo avec l'option --bytes=.
Deux fichiers “xaa” et “xab”, noms par défaut de la commande split, sont créés.
split --bytes=50M pmagic-4.2.iso
ls
pmagic-4.2.iso xaa  xab
Exemple pour reconstruire l'image .iso avec cat. Le nom de l'archive reconstruire est modifiée en pmagic-4.2_2.iso.
Vérification de la somme de contrôle md5 pour vérifier que l'opération n'a pas altérée l'image reconstruite. Ce sont bien les mêmes.
cat xaa xab > pmagic-4.2_2.iso
md5sum pmagic-4.2.iso
8a1ad4e84cae8fe1d1e230cdc8ec1bd2  pmagic-4.2.iso
md5sum pmagic-4.2_2.iso
8a1ad4e84cae8fe1d1e230cdc8ec1bd2  pmagic-4.2_2.iso

Concaténer vers une vidéo

Les images .iso ou vidéo doivent avoir été découpées volontairement.
Il faut que les vidéos aient les mêmes propriétés (Format, débit, encodage).
Exemple pour découper une vidéo puis la concaténer à nouveau.
split --bytes=1M lion.ogv
ls
lion.ogv  xaa  xab  xac  xad
cat xaa xab xac xad > lion2.ogv
Cette manipulation peut permettre de déplacer plus facilement de gros fichiers.

Écrire dans un fichier avec EOF

Ecrire du texte statique

#Créer un fichier texte dialogue.
touch dialogue
#Ouvrir un fichier.
cat dialogue
#Aller à la suite et enregistrer un texte.
cat >dialogue <<EOF
Ceci est un essai.
EOF

Ecrire la valeur de variables

Le commande pwd indique le chemin du répertoire dans lequel on se trouve.
La variable $PWD contient la même information. Afficher le chemin du répertoire courant avec echo $PWD.
cat << EOF > fichier
heredoc> cd "$HOME"
heredoc> echo "$PWD"
heredoc> EOF
Affiche :
cd "/home/user"
echo "/home/user"
A noter que ajouter un antislash avec la commande suivante par exemple echo \$PWD affichera $PWD alors que echo $PWD affichera la valeur de la variable.

Écrire dans un fichier - Alternative

echo -e alternative au texte précédent \n >> dialogue

Différences entre fichiers ou dossiers

Faire un diff et conserver les changements dans un fichier

# Installer diffutils :
sudo apt install diffutils patch
# Comparer deux fichiers :
diff -u ancien-fichier nouveau-fichier
# Exporter les changements vers un fichier.diff :
diff -u ancien-fichier nouveau-fichier > fichier.diff
# Exporter les changements du fichier.diff vers un fichier de patch troisieme-fichier :
patch -i fichier.diff troisieme-fichier
# Revenir au fichier ancien-fichier initial :
patch -R -i fichier.diff ancien-fichier
Ok-ko.png Source : https://wiki.debian-fr.xyz/Utiliser_diff_et_patch

Meld

Meld permet de faire la différence sur les fichiers mais également les dossiers.

Copier vers le presse papier

# To copy output from shell to X11 clipboard:
pwd | xclip
# To paste from X11 clipboard to shell:
xclip -o | ls
Le programme « xclip » n'est pas encore installé. Vous pouvez l'installer en tapant :
sudo apt install xclip
Source : https://doc.ubuntu-fr.org/xclip
Source : https://codeyarns.com/2016/03/09/how-to-use-xclip/

Formater un texte

Organiser un texte sur une certaine largeur de caractère avec la commande fmt source > sortie
Supprimer les retours à la ligne avec la commande tr -d '\n' < input.txt > output.txt

Copier un fichier

cp source destination
# Conserver les attributs autant que possible.
# -a
# --archive
# Effectuer des sauvegardes des fichiers sur le point d'être écrasés. (?)
# -b
# --backup
# Si le fichier est un lien symbolique, copier le lien lui-même plutôt que le fichier sur lequel il pointe.
# -d
# --nodereference
# Forcer la suppression des fichiers cibles.
# -f
# --force
# Dans le cas où TARGET est un fichier existant, demandez à l'utilisateur avant de le supprimer. (?)
# -i
# --interactive
# Créer un lien physique au lieu de copier le fichier.
# -l,
# --link
# Préserver le propriétaire, le groupe, les autorisations et l'horodatage du fichier d'origine.
# -p
# --preserve
# Conserver le chemin du répertoire.
# -P, --parents
# Copier récursivement tous les sous-répertoires disponibles.
# -r
# -R, --recursive
# Dans le cas où un fichier est fragmenté, traiter la séquence fragmentée comme indiqué. Auto, toujours ou jamais.
# --sparse
# Créer des liens symboliques au lieu de copies réelles.
# -s
# --symbolic-link
# Dans le cas où le fichier cible existe déjà et à une heure de mise à jour plus récente que la source, ne pas faire la copie.
# -u
# --update
# Mode verbeux.
# -v
# --verbose

Copier un répertoire vers plusieurs répertoires

# Copier le répertoire /home/user/multi/wallpaper dans les répertoires /tmp /var/tmp /home/user en une seule ligne de commande :
for i in /tmp /var/tmp /home/user ; do cp -rf /home/user/multi/wallpaper $i ; done

Déplacer un fichier ou un dossier

mv source destination

Renommer un fichier

Renommer un fichier par date de création

Script de test

Créer un fichier renommer-fichiers.sh et ouvrir le fichier avec l'éditeur de texte.
#!/bin/bash 
for f in *.*  
do  
 mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S")_VisionduWeb_$f"  
done
# $f = Nom d'origine du fichier avec l'extension.
# J'utilise un nom identique pour chaque fichier: _VisionduWeb_
# L'extension n'est plus affichée. Il faut ajouter l'extension: _VisionduWeb.pdf ou faire appel au nom d'origine avec $f qui va réinscrire le nom du fichier d'origine mais aussi conserver l'extension.
sudo sh renommer-fichiers.sh

Script fonctionnel

J'aimerais conserver l'extension sans avoir à conserver le nom d'origine : datecreation_heurecreation_NomDuFichierUniqueEtStatique.extension
Placer le script dans le dossier ou les fichiers sont à renommer.
#!/bin/bash 
for f in *.* 
do 
       extension="${f##*.}" 
       mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S")_VisionduWeb.$extension" 
done
sudo sh renommer-fichiers.sh
Merci à [croftman] de développez.

Script fonctionnel avec passage de paramètres

Placer le script ou vous voulez et passer le paramètre pour définir la cible ou sont placés les fichiers à renommer.
#!/bin/bash 
if [ -n $1 ]
	then
		cd $1
fi

for f in *.* 
do 
      extension="${f##*.}" 
      mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S")_VisionduWeb.$extension" 
done
sudo sh renommer-fichiers.sh dossier1/dossier2

Renommer des extensions

Pour renommer par exemple les fichiers .odt.txt en .txt, utiliser la commande rename avec la syntaxe PERL : rename 's/.odt.txt/.txt/' *

Supprimer un fichier

# Supprimer le contenu d'un fichier : Vider un fichier :
echo  | tee fichier.log
# Supprimer un fichier :
rm fichier
# Supprimer tout sauf un ou plusieurs fichiers.
for f in `ls | grep -vE '^XX$|^YY$'`
do
    echo Suppression de $f
    rm -rf $f
done

Changer les droits sur un fichier avec chmod

0400	Allows the owner to read
0200	Allows the owner to write
0100	Allows the owner to execute files and search in the directory
0040	Allows group members to read
0020	Allows group members to write
0010	Allows group members to execute files and search in the directory
0004	Allows everyone or the world to read
0002	Allows everyone or the world to write
0001	Allows everyone or the world to execute files and search in the directory
1000	Sets the sticky bit
2000	Sets the setgid bit
4000	Sets the setuid bit
Ok-ko.png Source : https://doc.ubuntu-fr.org/droits
Ok-ko.png Source : https://www.washington.edu/computing/unix/permissions.html
Ok.png Source : https://www.cyberciti.biz/faq/unix-linux-bsd-chmod-numeric-permissions-notation-command/

Lecture seule pour certains fichiers

Protéger certains fichiers /index.php, /administrator/index.php et /templates/votretemplate/index.php en chmod 444 pour réduire les risques de modification :
sudo chmod 444 index.php /administrator/index.php /templates/votretemplate/index.php

Changer les droits sur les dossiers et les fichiers en 755

Le dossier contenant le site visionduweb est passé en 755 en local.
chmod -R 755 /opt/lampp/htdocs/visionduweb

Changer les droits uniquement sur les dossiers

find . -type d -exec chmod  755 {} \;

Changer les droits uniquement sur les fichiers

find . -type f -exec chmod  644 {} \;
Avoir des droits par défaut à 644 sur les fichiers, c'est bien, mais, certains fichiers peuvent nécessiter des droits plus élevés.
Adapter alors au cas par cas.
Avoir des droits par défaut à 644 sur les fichiers, c'est bien, mais, certains fichiers peuvent également avoir des droits plus restreints.
C'est le cas par exemple du fichier .htaccess ou du fichier de configuration.php de Joomla :
sudo chmod -R 0444 configuration.php .htaccess

Réattribuer des droits à un ensemble de types de fichiers

Réattribue les droits 644 aux images d'un dossier.
Noter que en bash les parenthèses et les pipelines dans une expression rationnelle (regex) doivent être échappées.
find /chemin/vers/dossier -regex ".+\.\(jpe?g\|gif\|png\)" -exec chmod 644 {} \;

Rendre un fichier exécutable

Sous linux la commande chmod permet de modifier les droits des fichiers. Pour transformer un fichier en fichier exécutable il faut lancer la commande suivante :
Cette commande ajoute les droits d'exécution au propriétaire du fichier.
chmod u+x fichier.sh
Pour rendre le fichier exécutable pour le groupe utilisateur il faut lancer :
chmod g+x fichier.sh
Rendre le script exécutable pour les autres utilisateurs :
chmod o+x fichier.sh
Autoriser tout le monde :
chmod ugo+x fichier.sh
- u pour user correspond à l'utilisateur
- g pour group correspond au groupe
- o pour other correspond à tous les autres utilisateurs
La lettre x correspond aux droits d'exécution.

Accorder un accès en écriture

Accorder un accès en écriture uniquement en cas de nécessité.
Certaines applications Web telles que Wordpress et d’autres peuvent nécessiter un répertoire de mise en cache.
Vous pouvez accorder un accès en écriture au répertoire de mise en cache à l'aide des commandes suivantes :
chmod a+w /var/www/html/blog/wp-content/cache
# On interdit la consultation du cache avec cette règle pour Apache2.2 :
echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess

Protéger un fichier en écriture

Protéger un fichier en écriture afin qu'aucun autre utilisateur ne puisse le modifier :
chmod go-w data.txt
Permettre aux ayants droits d'écrire sur le fichier :
chmod go + w data.txt

Changer le propriétaire et le groupe

Changer le propriétaire et le groupe pour le premier utilisateur installé
chown 1000:1000 NomDuFichier
1000 = Premier utilisateur installé.
0 = Utilisateur root
8 = Service mail

Le chmod permet aussi de donner d'autres droits moins connus

Le Sticky bit

En informatique, le sticky bit est un indicateur de droit d'accès appartenant à un utilisateur qui peut être attribué à des fichiers et des répertoires sur des systèmes de type Unix.
Lorsque le bit collant d'un répertoire est défini, le système de fichiers traite les fichiers de ces répertoires d'une manière spéciale afin que seul le propriétaire du fichier, le propriétaire du répertoire ou l'utilisateur root puisse renommer ou supprimer le fichier. Sans le sticky bit défini, tout utilisateur disposant des autorisations d'écriture et d'exécution pour le répertoire peut renommer ou supprimer des fichiers contenus, quel que soit le propriétaire du fichier. Généralement, il est défini dans le /tmp pour empêcher les utilisateurs ordinaires de supprimer ou de déplacer les fichiers d'autres utilisateurs.
Source : https://en.wikipedia.org/wiki/Sticky_bit
Il permet lorsqu'on l'applique à un exécutable, de le garder en mémoire lors de sa première exécution.
Lorsqu'on l'applique à un répertoire, seul le propriétaire du fichier ou le propriétaire du répertoire a le droit d'effacer les fichiers.
chmod u+t fichier

Le SUID, le SGID

Le SUID permet d'avoir accès aux droits du propriétaire à l'intérieur du programme, pour avoir accès aux fichiers de configuration, par exemple.
Pour des raisons de sécurité, le SUID ne s'applique qu'aux programmes binaires compilés à l'exception des scripts Perl.
Le SGID permet de déterminer le groupe des fichiers créés dans le répertoire.
# Pour le setgid SGID
chmod g+s rep/ ou chmod 2755 rep/
# Pour le setuid SUID
chmod u+s prog ou chmod 4755 prog

Ajouter et supprimer un utilisateur

Définition d'un utilisateur sous Linux

Les utilisateurs systèmes servent aux tâches spécifiques régulières qui souvent portent le même nom que l’utilisateur. Exécution de logiciels ou de commandes.
Les utilisateurs réels sont associés à des personnes qui se connectent sur la machine via une interface graphique ou un accès en ligne de commande.

Vérifier si un utilisateur existe

Méthode 1 :
getent passwd UTILISATEUR || { echo "L'utilisateur n'existe pas."; }
Méthode 2 :
grep "^$user:" /etc/passwd > /dev/null && echo "ok" || echo "ko"
if grep "^$user:" /etc/passwd > /dev/null; then
    echo "ok"
else
    echo "ko"
fi
Noter les : après le nom d'utilisateur, qui permet de retourner ok en cas de correspondance sur plusieurs noms.
Par exemple, on recherche Alex: et le résultat ok est retourné si Alexandre existe.

Lister tous les utilisateurs

cat /etc/passwd

Ajouter un utilisateur

adduser toto
Des questions facultatives sont demandées par le système qui demandera également un mot de passe pour créer l’utilisateur "toto" sur le système.
Les options par défaut lors de la création d'un utilisateur sont définies dans le fichier de configuration /etc/adduser.conf
Modifier par exemple les répertoires utilisateur par défaut ou les groupes auxquels les utilisateurs sont affiliés.
Par défaut le répertoire utilisateur sera /home/toto
L'utilisateur toto qui a été créé possède maintenant des privilèges de compte réguliers.
Il est parfois nécessaire de faire des tâches administratives qui nécessitent les privilèges supplémentaires de sudoers.

Ajouter un utilisateur à un groupe

sudo adduser non_utilisateur nom_du_groupe

Ajouter un utilisateur système

# La commande adduser accepte les options suivantes :
# Ajoute un utilisateur système.
# Par défaut, les utilisateurs du système sont placés dans le groupe "nogroup".
# Les utilisateurs du système seront créés sans informations de vieillissement dans /etc/shadow.
# Pour placer le nouvel utilisateur du système dans un nouveau groupe avec le même ID, utiliser l'option --group.
# Pour placer le nouvel utilisateur du système dans un groupe déjà existant, utiliser les options --gid ou --ingroup.
# Un répertoire de base est créé selon les mêmes règles que pour les utilisateurs normaux. (vs) (useradd ne créera pas de répertoire de base pour un utilisateur système) (vérifier)
# Le nouvel utilisateur du système aura le shell /bin/false par défaut.
# Les fichiers de configuration "squelettiques" ne sont pas copiés.
# Les connexions seront désactivées.
--system
# Lorsqu'il est associé à --system, un groupe portant le même nom et le même ID que l'utilisateur système est créé.
# Si il n'est pas combiné avec --system, un groupe portant le nom donné est créé. C'est l'action par défaut si le programme est appelé en tant que addgroup.
# Permet de placer l'utilisateur dans un groupe avec le même ID.
--group
# Ajouter le nouvel utilisateur à un groupe existant au lieu d'un groupe d'utilisateurs ou du groupe par défaut défini par USERS_GID dans le fichier de configuration.
# Cela affecte le groupe principal des utilisateurs.
# Voir l’option add_extra_groups pour ajouter des groupes supplémentaires.
--ingroup
# Lors de la création d'un groupe, cette option oblige le nouvel identifiant de groupe à correspondre au numéro indiqué.
# Lors de la création d'un utilisateur, cette option le placera dans ce groupe.
--gid
# Ajouter un utilisateur à plusieurs groupes.
--add_extra_groups
# Permet de spécifier l'emplacement du répertoire utilisateur.
--home /home/utilisateur
# Ne pas créer de répertoire utilisateur.
--no-create-home
# La valeur par défaut est de laisser ce champ vide.
# Vérifier la configuration présente dans useradd ou adduser.
# Le système sélectionne le shell de connexion par défaut spécifié par la variable SHELL du fichier de configuration /etc/default/useradd (SHELL=/bin/sh)
# Le système sélectionne le shell de connexion par défaut spécifié par la variable DSHELL du fichier de configuration /etc/adduser.conf (DSHELL=/bin/bash)
# Si laissé vide, la valeur par défaut renseignée par la commande adduser est "/bin/bash".
--shell /bin/bash
# Bloquer le shell si nécessaire.
--shell /bin/false
###
### L'utilisation de false tant que shell est probablement une simple convention héritée des débuts d'UNIX.
### La page de manuel de nologin indique qu’elle a été créée dans la version 4.4 BSD (début des années 1990); elle est donc arrivée longtemps après la création de false.
### Lorsque /sbin/nologin est défini en tant que shell, si un utilisateur connecté à celui-ci se connecte, il recevra un message indiquant: "Ce compte n'est pas disponible pour le moment".
### Ce message peut être modifié depuis le fichier /etc/nologin.txt
###
### /bin/false est juste un binaire qui se ferme immédiatement, renvoyant false quand il est appelé.
### Ainsi, lorsqu'un utilisateur ayant false comme shell se connecte, il est immédiatement déconnecté "lorsque false ferme" (?).
### Définir le shell sur /bin/true a le même effet que de refuser la connexion à un utilisateur.
### false est probablement utilisé comme convention plutôt que true car il est bien plus efficace pour véhiculer le concept selon lequel une personne n'a pas de shell.
### /bin/false est une commande système utilisée chaque fois que vous devez passer une commande à un programme qui ne devrait rien faire d'autre que de quitter avec une erreur.
### C'est le compagnon de /bin/true et les deux sont des utilitaires POSIX très anciens et standard qui ne produisent aucun résultat par définition.
###
### nologin est l'option la plus conviviale, avec un message personnalisable donné à l'utilisateur qui tente de se connecter.
### nologin et false auront le même résultat final: si quelqu'un n'a pas de shell, il ne peut pas entrer sur le serveur.
###
### Voir à utiliser /usr/sbin/nologin pour les distributions basées sur Debian.
### Certains serveurs FTP ne vous autoriseront l'accès FTP que si vous avez un shell valide.
### /sbin/nologin est considéré comme un shell valide, alors que /bin/false n'est pas considéré comme tel.
### Cela fait probablement partie du programme FTP utilisant pam et pam utilisant pam_shells qui vérifie /etc/shells.
###
### /usr/sbin/nologin est spécialement conçu pour remplacer un shell et produit une sortie en se plaignant que vous ne pouvez pas vous connecter.
### Avant cela, il était courant d'utiliser /bin/false pour les utilisateurs factices, mais cela pouvait prêter à confusion, car l'utilisateur ne savait pas pourquoi il était renvoyé.
###
### nologin est préférable s’il est utilisé pour le compte d’une personne réelle qui parle anglais. Du point de vue de la sécurité, il n'y a pas de différence.
### /bin/false serait a utiliser pour les comptes système n'ayant pas d'utilisateur réel, et nologin serait a utiliser pour un compte utilisateur désactivé.
###
### Sur linux /sbin/nologin provient du projet util-linux alors que /bin/false fait partie de GNU Coreutils.
### Les commandes linux proviennent de BSD, où elles semblent être différentes depuis longtemps.
### FreeBSD false renvoie simplement 1 tandis que nologin vérifie son exécution sur un téléscripteur et envoie un message à syslog lors des tentatives de connexion.
###
### Le nom du programme dit tout.
### /bin/false est destiné à renvoyer une valeur false. Il est exécuté comme programme. Il est utile pour les utilisateurs non privilégiés.
### /bin/nologin est destiné à indiquer à l'utilisateur qu'aucune connexion n'est autorisée pour un compte. Il est exécuté comme un shell de connexion. Il est utile pour les utilisateurs privilégiés.
###
### Ok.png Source : https://unix.stackexchange.com/questions/10852/whats-the-difference-between-sbin-nologin-and-bin-false
###
# Ne pas définir le mot de passe avec passwd.
# L'utilisateur ne pourra pas utiliser son compte tant que le mot de passe n'aura pas été défini.
# Les connexions ne sont plus possibles.
--disabled-login
# Les connexions sont toujours possibles à l'aide de clés SSH RSA mais sans authentification par mot de passe.
--disabled-password
# Informations générales sur l'utilisateur, comme le téléphone ou autres indications.
--gecos 'Informations'
# Affiche la version et les informations de copyright.
--version
# Exemples de création d'utilisateur système.
sudo adduser --system --no-create-home --group utilisateur
sudo adduser --system --no-create-home --ingroup utilisateur --disabled-password utilisateur
# Exemple avancé pour la création d'un utilisateur système ayant un répertoire home, qui fera tourner un service web.
sudo adduser \
  --system \
  --shell /bin/bash \
  --gecos 'Utilisateur' \
  --group \
  --disabled-password \
  --home /home/utilisateur \
  utilisateur
# Afficher l'ID de l'utilisateur et du groupe.
id utilisateur
Ok.png Manuel pour la commande adduser : https://www.computerhope.com/unix/adduser.htm
Ok.png Manuel pour la commande adduser : https://linux.die.net/man/8/adduser

Groupe utilisateur

Vérifier si un groupe existe

Méthode 1 :
getent group GROUPE || { echo "Le groupe n'existe pas"; }
Méthode 2 :
grep "^$groupe:" /etc/group > /dev/null && echo "ok" || echo "ko"
if grep "^$groupe:" /etc/group > /dev/null; then
    echo "ok"
else
    echo "ko"
fi
Noter les : après le nom du groupe, qui permet de retourner ok en cas de correspondance sur plusieurs noms.
Par exemple, on recherche Alex: et le résultat ok est retourné si Alexandre existe.
# Voir les groupes existants
nano /etc/group

Voir les groupes d'un utilisateur

# Savoir si l'utilisateur est dans un groups :
groups nomutilisateur
nomutilisateur : nomutilisateur adm cdrom sudo dip plugdev lpadmin vboxsf sambashare vboxusers
# Obtenir l'id du groupe en plus :
id nomutilisateur
Ok-ko.png Complément : https://wiki.debian-fr.xyz/Commandes_utilisateurs_et_groupes

Supprimer un groupe utilisateur

sudo groupdel nom_du_groupe

Utilisateur sudoers

Ajouter le droit sudoers pour un utilisateur

Un utilisateur ayant les privilèges de sudoers possède le droit d'accès à la racine du système.
Un utilisateur ayant les privilèges de sudoers possède autant de droits que l'utilisateur root.
Permet d'éviter l'accès avec l'utilisateur root et complique le travail d'un pirate informatique qui devra connaître le nom d'utilisateur toto.
Cela permettra à un utilisateur normal d'exécuter des commandes avec des privilèges administratifs en plaçant le mot sudo avant chaque commande.
Debian 8 n'est pas installé avec sudo par défaut.
# Installer le paquet sudo pour utiliser les commandes sudo et visudo.
apt update
apt install sudo

Ajouter le droit sudoers avec le mode graphique

Placer l'utilisateur dans le groupe sudo afin qu'il puisse faire partie de la liste des sudoers et soit en mesure d'effectuer des tâches d'administration.

Ajouter le droit sudoers depuis le terminal

Par défaut, sur Debian 8, les utilisateurs qui appartiennent au groupe "sudo" sont autorisés à utiliser la commande sudo.
Pour ajouter le nouvel utilisateur au groupe "sudo", utiliser root et la commande suivante :
usermod -a -G sudo toto
Quitter totalement le système, redémarrer, pour que les changements de droits soient appliqués.
Plus d'informations sur les commandes usermod : https://www.computerhope.com/unix/usermod.htm

Retirer le droit sudoers pour un utilisateur

deluser utilisateur sudo

Adapter les droits sudoers d'un utilisateur

Utiliser sudo nécessite l'utilisation du mot de passe utilisateur.
Le mot de passe est mémorisé par défaut pour une durée de 15 minutes.
Pendant ce laps de temps, on peut toujours saisir des commandes avec sudo mais le mot de passe ne sera pas demandé.
sudo -i revient au même que la commande su - en terme de droits.
sudo -i est donc plus élégant que sudo su
Avec sudo -i, le mot de passe utilisateur est demandé.
Avec su -, le mot de passe root est demandé.
Oublier le mot de passe sudo après avoir saisi le mot de passe :
sudo -k
# Consulter le fichier de configuration de sudo :
sudo visudo
# Affiche par défaut :
...
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
...
Ajouter manuellement un utilisateur aux mêmes droits que root depuis le fichier sudoers
Éditer le fichier "/etc/sudoers" et copier la ligne avec les "ALL" et changer "root" par "utilisateur".
Le mieux sera de préférer l'utilisation des utilisateurs sudoers et, sudoers avec droits adaptés comme expliqué par après.
Chaque ligne du fichier est structurée de cette façon, un seul groupe ou utilisateur doit être représenté par ligne :
user ALL = (user) commande1,commande2,...
%groupe ALL = (user) commande1,commande2,...
user : Indique le nom d'utilisateur auquel le droit sudo s'appliquera ou %groupe indique le nom du groupe auquel le droit sudo s'appliquera. Le nom du groupe doit donc être précédé d'un %.
ALL : Désigne la ou les systèmes dans lesquels le droit sudo s'appliquera
(user) : Désigne l'utilisateur dont on prend les droits (ALL pour tous, y compris root)
commande : Représente des commandes pouvant être exécutées par l'utilisateur ou le groupe désigné en début de ligne. (si plusieurs commandes, les séparer par une virgule (ALL pour toutes). Utiliser le chemin complet de la commande. (Si on ne connaît pas le chemin de la commande, utiliser which : which ls). Il est possible de mettre un point d'exclamation (!) devant la commande pour interdire à l'utilisateur de l'exécuter avec sudo.
Préférer une approche plus fine pour paramétrer des commandes spécifiques autorisées pour l'utilisateur.
La méthode a privilégier pour accorder des autorisations individuelles (ou de groupe) consiste à ajouter des fichiers sous /etc/sudoers.d
Cela permet de séparer les modifications locales de la stratégie par défaut et fait gagner du temps en cas de modification du fichier sudoers de la distribution.
Par exemple, ajouter cette commande qui permet d'utiliser sudo sans avoir à saisir de mot de passe pour utilisateur1. Cela constitue un risque de sécurité en cas de piratage du système.
sudo echo "utilisateur1 ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/utilisateur1
Consulter /etc/sudoers.d/README pour plus d'informations.

Utiliser sudo sans mot de passe

Ajouter la ligne suivante au bas du fichier pour permettre à un utilisateur sudoers de pouvoir travailler sans demande de mot de passe.
Les prochaines commandes depuis la fenêtre du terminal lancées avec sudo <Commande> ne demanderont plus a entrer le mot de passe de l'utilisateur.
Il n'est pas forcément judicieux de paramétrer ainsi les droits de l'utilisateur sudoers, cela constitue un risque de sécurité en cas de piratage du système.
utilisateur1 ALL=(ALL) NOPASSWD: ALL
Autre exemple plus adapté. La commande 1 est autorisée via sudo avec un mot de passe, la commande2 est autorisée via sudo sans demande de mot de passe.
user ALL = commande1, NOPASSWD: commande2
Autoriser apache à lancer la commande service avec sudo sans demande de mot de passe :
apache ALL=(ALL) NOPASSWD: /usr/sbin/service
Autoriser l'utilisateur à exécuter toutes les commandes via sudo, avec un mot de passe :
utilisateur1  ALL=(ALL)       ALL
Autoriser utilisateur1 à exécuter toutes les commandes via sudo mais que sudo reboot ne demande pas le mot de passe :
utilisateur1 ALL=(ALL) ALL
utilisateur1 ALL=(ALL) NOPASSWD: /usr/sbin/reboot
Solutions de contournement non conseillées pour utiliser sudo sans mot de passe
Pour exécuter un script qui réclame une authentification par mot de passe, on peut utiliser le commutateur -S qui lit le mot de passe de STDIN.
Malgré tout la encore, entrer le mot de passe directement dans un script n'est pas recommandé.
echo <password> | sudo -S <command>

Activer - Désactiver le compte root

Activer le compte root

Activer les connexions root. Attention, l'activation du compte root est rarement nécessaire.
sudo passwd root

Désactivation du compte root

Si pour une raison quelconque vous avez activé votre compte root et souhaitez le désactiver à nouveau, utilisez la commande suivante dans le terminal :
sudo passwd -dl root
Hypothèse :
Si aucune configuration particulière n'avait été apporté à la configuration de sudoers, un utilisateur sudo qui pouvait se connecter sans avoir à saisir de mot de passe utilisateur devrait à nouveau voir apparaître la demande de mot de passe, suite à la saisie d'une commande avec sudo.

Informations complémentaires sur sudo et sudoers

Ok.png Sudo : Utiliser et paramétrer (sudoers) : https://www.linuxtricks.fr/wiki/sudo-utiliser-et-parametrer-sudoers
Ok-ko.png Plus d'informations sur sudoers : https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file-on-ubuntu-and-centos
Ok-ko.png Utiliser sudoers sans mot de passe : https://www.linuxtricks.fr/wiki/sudo-utiliser-et-parametrer#paragraph_utiliser-sudo
Ok-ko.png Documentation Ubuntu : https://doc.ubuntu-fr.org/sudoers

Ajouter une clé SSH à un utilisateur distant

SSH
Exporter la clé SSH publique du client vers un utilisateur du serveur distant
Se connecter en SSH avec un utilisateur sudoers pour configurer le serveur distant

Le fichier .bashrc

Le fichier .bashrc.

Changer d'utilisateur

su autre_utilisateur
Revenir à l’utilisateur précédent avec la commande exit.

Changer le mot de passe d’un utilisateur

Il est nécessaire de changer le mot de passe d'un utilisateur root surtout si celui-ci a été attribué par défaut.
Pour changer le mot de passe d’un utilisateur, se connecter avec l'utilisateur puis utiliser la commande passwd
A NE PAS FAIRE POUR UNE RELEASE 3 OVH PAR EXEMPLE.
Webmin et peut être d'autres services utilisent le mot de passe root.
Changer le mot de passe root pourrait alors créer un dysfonctionnement du serveur.

Tester la complexité des mots de passe utilisateurs

Les mots de passes des utilisateurs sont stockés dans le fichier /etc/shadow.
Seul l'utilisateur root peut lire ce fichier.
Installer en tant que root le programme john et le lancer sur le fichier /etc/shadow :
apt install john
john /etc/shadow
Quand john a trouvé un mot de passe, il l'affiche avec le login associé.
Attention, john utilisera le processeur à 100 % !

Supprimer un utilisateur du système

Désactiver un compte utilisateur

# Avant de supprimer un utilisateur, il est important de désactiver son compte.
# La commande suivante désactive le mot de passe, donc, permet de bloquer le compte.
sudo passwd -l <username>
# La commande suivante réactive le mot de passe, donc, permet de débloquer le compte.
sudo passwd -u <username>

Fermer les programmes lancés par un utilisateur et sa connexion

On ne peut pas supprimer un compte de quelqu’un qui est connecté sur la machine.
Fermer l’ensemble des programmes lancés par cet utilisateur ainsi que sa connexion.
Lister les pid des programmes utilisés par toto : sudo pgrep -u toto
Si aucun nombre n'est retourné, l’utilisateur n’est pas connecté et n’a lancé aucun programme.
Voir les programmes lancés par l’utilisateur avec sudo ps -fp $(pgrep -u toto)
Si l’utilisateur a des tâches CRON dans son fichier crontab, supprimez les avec la commande : crontab -r -u toto
Sinon, il faut tuer les connexions existantes avec killall -KILL -u toto
Une autre façon de tuer tous les processus d'un utilisateur : pkill -u user
Fonctionne très bien pour une connexion SSH, ou plusieurs utilisateurs serraient connectés plusieurs fois, suite à un plantage du terminal, et, une nouvelle connexion.
Supprimer l’utilisateur toto et son répertoire "home" ainsi que sa boîte email (avec l’option -r) avec la commande userdel : userdel -r toto

Ressources complémentaires

Ok-ko.png Les utilisateurs et les droits : https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/39044-les-utilisateurs-et-les-droits
Ok-ko.png Gestion des utilisateurs sous Ubuntu : http://guide.ubuntu-fr.org/server/user-management.html

Lancer un programme

Pour lancer un programme qui nécessite les droits d'exécution, utiliser ./ devant le nom du programme.
Exemple : ./blackcoin-qt pour lancer depuis la console l'exécution du logiciel Blackcoin QT en mode graphique.

Exécuter des programmes en arrière-plan avec screen

Screen permet de continuer à exécuter des programmes en tâche de fond et de conserver les messages du serveur.
Lorsque vous revenez sur la console de votre serveur, vous aurez accès aux messages affichés en votre absence.

Installer screen

sudo apt install screen

Utiliser screen

Screen sert a lancer un programme en tâche de fond quand il doit tourner sans s'arrêter, ou, qu'il prend du temps pour être traité.
Créer une nouvelle fenêtre virtuelle avec la commande :
screen
ou
Lancer un screen de sa machine locale vers son serveur distant :
ssh -t user@host2 /usr/bin/screen -xRR
Détacher ce programme de la console : Ctrl + a
Appuyer sur la touche d pour détacher screen et revenir à la fenêtre principale.
La console peut être fermée, le programme continuera de tourner.
CTRL+a d : Détacher le terminal. Il reste accessible.
Pour revenir à cette fenêtre lors de la prochaine connexion, lancer screen -r
Exemple concret pour un script de minage de BCN :
screen minergate-cli --user fxnj7sheb8hyhf6 --bcn 1
Détacher le terminal : Ctrl a + d
Lister les screen : screen -ls
Basculer vers un screen avec son id : screen -x 25374
Autres commandes de base :
Créer un screen nommé toto : screen -S toto
Lister les screen disponibles : screen -ls
Se connecter au screen toto : screen -x toto
Se connecter au screen avec l'id 3002 : screen -x 3002
Se connecter automatiquement à un screen si un seul disponible : screen -x
Raccourcis clavier :
CTRL+a CTRL+a : Revenir au terminal précédent
CTRL+a {0,9} : Aller au terminal n°x
CTRL+a p : Aller au terminal précédent
CTRL+a n : Aller au terminal suivant
CTRL+a " : Afficher la liste des terminaux disponibles et on peut choisir avec le numéro ou les flèches
CTRL+a A : Renommer le terminal courant
CTRL+a S : Spliter le terminal en 2
CTRL+a TAB : Basculer sur le split suivant
CTRL+a X : Fermer le split courant
CTRL+a x : Verrouiller le screen avec le mot de passe de l'utilisateur courant.
Observer le partage en console avec la commande screen-x
Ok-ko.png Documentation : https://doc.ubuntu-fr.org/screen
Ressources complémentaires
Ok-ko.png Source : https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/executer-des-programmes-en-arriere-plan
Ok-ko.png Source : https://wiki.debian.org/fr/Screen

Éditer le fichier .screenrc

Il est possible pour chaque utilisateur du système de personnaliser son screen grâce à un fichier de configuration spécifique ~/.screenrc placé dans le /home/user.
Un exemple de ce fichier est disponible dans /etc/screenrc.
Il vous suffit de faire : cp /etc/screenrc ~/.screenrc pour pouvoir configurer votre fichier .screenrc personnel.

Ne pas afficher la page de copyright

# Don't display the copyright page
# default: on
startup_message off
echo 'startup_message off' >> ~/.screenrc
Configurer le fichier screenrc dans /etc/screenrc ou ~/.screenrc

Copier et coller le fichier screenrc avec Vim

Aller dans home/user avec la commande cd~ ou cd $HOME
Créer le fichier .screenrc touch .screenrc
Ouvrir le fichier .screenrc vi .screenrc
Saisir le code :split /usr/share/doc/screen/examples/screenrc
Saisir la commande ggVG ( VG avec la touche maj. La commande ggVG sélectionne le texte qui vient d'être collé. ).
Saisir la lettre Y ( Voir comment faire pour saisir des majuscules ).
Saisir le raccourci clavier ctrl w (2x) pour changer d'écran.
Saisir la lettre P ( Voir comment faire pour saisir des majuscules ).
Saisir :wq!
Saisir :qa!

Solution rapide depuis le terminal - Vérifier si la manipulation fonctionne correctement

Depuis le dossier home/user
cat /usr/share/doc/screen/examples/screenrc >> ~/.screenrc
On peut le faire manuellement en GUI ou, avec cp .screenrc ~
Lancer most .screenrc
Quitter avec q.
Vérifier vimdiff /usr/share/doc/screen/examples/screenrc   .screenrc

Télécharger le bon fichier directement en ligne

wget path-a-trouver/(dot_)screenrc
Mettre ce fichier dans home/user/.screenrc
Ou avant ça, les comparer vimdiff   dot_screenrc    .screenrc
Une archive existe dans /usr/share/doc/screen/examples/screenrc

Changer la langue sur GNU/Linux

Les deux étapes, création des définitions des paramètres régionaux et positionnement de LANG, se font à l'aide de la commande suivante, sous root :
Reconfigurer la langue du system avec dpkg-reconfigure locales.
Après validation, il faut se déconnecter puis se reconnecter.
On peut alors vérifier le jeu de caractères utilisé qui est maintenant fr_FR.UTF-8 avec la commande locale :
locale
Sous Debian, la variable LANGUAGE n'est a priori pas nécessaire si LANG a été définie et si vous n'utilisez qu'une seule langue (Le français).
LANGUAGE n'est pas utilisée par tous les programmes et, lorsqu'elle l'est, chaque programme l'utilise « à sa manière ».
En général, LANGUAGE surcharge toutes les autres variables (LANG, LC_* et LC_ALL). 
Toutefois, vous pouvez ajouter LANGUAGE=fr dans le fichier /etc/environment.
Ok-ko.png Source : https://www.debian.org/doc/manuals/fr/debian-fr-howto/ch3.html

Pour Ubuntu

Avec l'interface graphique, aller dans le Menu / Système / Tous les paramètres, un icône permet de gérer les langues du système.
Depuis le terminal sudo apt install Language-support-fr Language-pack-fr Language-pack-fr-base
Installer également le pack de langue KDE ou GNOME en fonction de votre environnement graphique. Ce n'est pas nécessaire pour XFCE.
language-pack-kde-fr pour KDE
language-pack-gnome-fr et language-pack-gnome-fr-base pour GNOME

Pour Mint Mate

La solution graphique : Chercher language ou langue dans le menu. Choisir la langue et mettre à jour les paquets.
La solution console : sudo apt-get install language-pack-fr language-pack-fr-base language-pack-gnome-fr language-pack-gnome-fr-base
Supprimer les packs de langue qui ne sont pas en français. Je supprime les packs anglais également.
Redémarrer.

Pour Debian

Chercher task-french avec la commande apt-cache search task-french puis installer les paquets nécessaires.
task-french - environnement français
task-french-desktop - bureau français
task-french-kde-desktop - bureau KDE français
education-lang-fr - Debian Edu applications for French installs
education-lang-fr-desktop - Debian Edu Desktop applications for French installs
education-lang-fr-desktop-kde - French Debian Edu KDE desktop applications
iceowl-l10n-fr - French language package for iceowl-extension
texlive-latex-extra - TeX Live: LaTeX additional packages
galette-plugin-admintools - Administration tools for Galette
Voir les paquets a installer.
$ apt-cache search task-french
i   task-french                     - environnement français                    
i   task-french-desktop             - bureau français                           
i   task-french-kde-desktop         - bureau KDE français
Pour iceweasel
apt install iceweasel-l10n-fr
Pour Thunderbird, aller dans Add-ons / Extensions Français Language Pack (Thunderbird)

Changer de clavier qwerty pour azerty

Source : https://wiki.debian.org/fr/Keyboard

Pour Kali Linux

Chercher task french avec la commande apt-cache search task french puis installer les paquets nécessaires.

Pour Firefox

sudo apt install firefox-locale-fr

Pour VLC

Pour ce qui concerne VLC, s'assurer que le paquet VLC-I18n a bien été installé.

Utiliser le manuel en français

Utiliser man en français, depuis le terminal, c'est possible. Autant profiter du travail effectué par la communauté francophone.
sudo apt install manpages-fr
sudo apt install manpages-fr-dev
sudo apt install manpages-fr-extra

PGP vs GPG

"PGP" et "GPG" signifient "Pretty Good Privacy" et "Gnu Privacy Guard".
PGP et GPG sont utilisés pour crypter et appliquer des signatures numériques aux communications comme le courrier électronique.
Leur but est de rendre la communication impossible pour les autres à lire sauf s'ils ont la bonne clé de déchiffrement.
Lire : https://www.nextinpact.com/news/98509-openpgp-et-gnupg-25-ans-chiffrement-pour-tous-ce-quil-faut-savoir-avant-sy-mettre.htm

PGP

PGP a été développé par Phil Zimmermann.
Symantec a acheté les droits à PGP en 2010.
Installer pgp :
apt-get install pgp
Importer une clé privée PGP .asc : https://www.deepdotweb.com/2015/02/17/basic-guide-pgp-linux/

Signer un fichier avec GPG

Le programme gratuit de signature numérique et de cryptage des e-mails peut être téléchargé pour un usage personnel ou professionnel.
Toutes les données de l'algorithme sont stockées et documentées publiquement par OpenPGP Alliance.
GPG est plus compatible que l'original PGP avec OpenPGP.
GPG est la réécriture de PGP.
GnuPG, est libre.
Source complémentaire : https://www.cyberciti.biz/tips/linux-how-to-encrypt-and-decrypt-files-with-a-password.html

Installer GPG

apt-get install gpa gnupg2

Créer une clé GPG

# Générer une clé.
gpg --gen-key
4096
0
y
nom
mail
commentaire
passephrase
Ouvrir gpa pour gérer l'ensemble des clés: sudo gpa

Créer une clé GPG

gpg -k retourne toutes les clés, et gpg -K retourne notre ou nos clés privées.
gpg -K pour voir si une clé a été crée.
# Générer une clé.
gpg --gen-key
Nom : NOM
Mail : mon@mail.fr
Passe phrase : PASSE
pub   rsa3072 2018-03-09 [SC] [expire : 2020-03-08]
      7F038.........................970F0C30
Pour signer un fichier : gpg -umon@mail.fr --clearsign fichier.txt
Un fichier.txt.asc est créé.

Sinon : gpg --output fichier.sign --sign fichier.txt
Comment créer et gérer des clés : https://www.nextinpact.com/news/102685-gpg-comment-creer-paire-clefs-presque-parfaite.htm
Lire : https://www.gnupg.org/download/index.html
Lire : https://doc.ubuntu-fr.org/gnupg
Source : https://www.gnupg.org/gph/en/manual/x135.html
Utiliser GPG pour envoyer des e-mails chiffrés avec Thunderbird : http://lehollandaisvolant.net/tuto/gpg/

Connaître l'adresse IP d'un site internet et son mail principal déclaré

host -T visionduweb.com 
visionduweb.com has address 93.184.35.226
visionduweb.com mail is handled by 10 postmaster.visionduweb.com

Mount

Monter un partage CIFS

Source : https://www.it-connect.fr/monter-un-partage-cifs-sous-linux/

Monter une clé USB depuis le terminal avec mount

# Vérifier /etc/add_user.conf à la ligne 77 du ficher adduser.conf et à la ligne 81
# Se mettre dans plugdev crée une entrée dans le mtab. Monter les clés USB avec une entrée dans le fstab.
# adduser NomUser plugdev
## /dev/sdb1       /media/Zer00CooL  auto        user,noauto     0       0
# Créer l'entrée dans /media en étant root ou sudo.
## mkdir  /media/NomUser

Vérifier si le dossier Backup_vers_Samba en local est monté vers le partage de Samba

if mount|grep -q '^//192.168.X.X/dossier_samba_en_partage_distant'
then
 echo
 # Si la cible est montée alors ...
 echo "Le dossier Backup_vers_Samba local est déjà monté sur le réseau vers le partage de Samba."
 echo
else
 echo
 # Sinon la cible n'est pas montée alors ...
 echo "Le dossier Backup_vers_Samba local va être monté sur le réseau vers le partage de Samba."
 echo
 # Monter le dossier Backup_vers_Samba local sur le réseau vers le dossier en partage distant.
 mount -t cifs //192.168.X.XX/dossier_samba_en_partage_distant /media/Backup_vers_Samba/ -o username='utilisateur_samba',password='password_utilisateur_samba'
fi

unmount

umount /media/Backup_vers_Samba/
Si le dossier de montage n'est plus nécessaire, le supprimer.
rmdir /media/Backup_vers_Samba

Trier avec sort

Source : https://debian-facile.org/doc:systeme:sort

Rechercher avec lsof

lsof permet de lister les fichiers ouverts et les processus actifs.
lsof -i indique les processus de type internet.
On peut ne demander que pour un protocole lsof -ni tcp:25 ou que vers une machine lsof -ni @213.186.xx.xx:25
Pour connaître tous les fichiers ouverts sur /hda1 utiliser lsof /dev/hda1
lsof -i -a -p 1234 permet de connaître tous les ports réseau ouverts par le processus 1234 (-a est interprété comme AND).
lsof -p 1234, 12345 -u 500, toto permet de connaître tous les fichiers ouverts par l'utilisateur 500 ou toto ou par le processus 1234 ou 12345.
Il existe des commandes pour faire cela (fuser, ps, netstat...), mais lsof est très complet.
Ok-ko.png Source : http://www.hsc.fr/ressources/breves/ports-ouverts.html.fr

fsck

# La commande fsck peut permettre de réparer des problèmes liés aux fichiers ou à un disque.

# Suite à l'utilisation de Bleachbit pour nettoyer le système, il m'est arrivé de ne pas arriver à relancer le système au démarrage.
# La commande fsck permet alors de corriger les problèmes de démarrage, à adapter en fonction de la partition sur laquelle est installée le système.
fsck /dev/sda(num de partition)
# Il est possible de forcer le contrôle fsck au démarrage de la machine.
# Cette méthode ne fonctionnerait plus sur les versions supérieur à Ubuntu 16.04.
sudo touch /forcefsck
sudo touch /home/forcefsck
sudo reboot now
# La commande suivante devrais également forcer fsck au prochain démarrage :
shutdown -r -F now
# Supprimer le dirty bit automatiquement :
fsck -a /dev/sda(num de partition)
# Si fsck ne se lance pas, il semble que des partitions montées ne puissent pas être analysées.
# Lancer fsck sur toutes les partitions systèmes et exclure les partitions qui sont montées :
fsck -A -M

Que faire avec un paquet qui a un bogue

Utiliser apt-listbugs. Ce paquet est disponible dans les dépôts et permet de se prémunir, pour ceux qui sont en testing ou instable, de l'installation d'un paquet "bugué".
Source : https://wiki.debian-fr.xyz/Apt-listbugs
Il est très simple d'installation et d'utilisation ! Quand un bogue sérieux est identifié, geler le paquet jusque résolution du problème.
Pour retrouver les paquets gelés, utiliser la commande : dpkg -l |grep "^hi" ou encore dpkg --list | grep ^hi

Nettoyer Debian

Deborphan

Deborphan recherche les paquets orphelins qui ne sont plus utilisés, pas les fichiers de conf obsolètes.
Dans un premier temps on peut l'utiliser sans option.
apt-get remove --purge `deborphan --guess-all`
Attention! Deborphan considère certaines librairies comme inutilisées quand aucun paquet n'en dépend de manière essentielle alors qu'elles apportent des fonctionnalités utiles (Codec divX...).

Localepurge

Localepurge est un script qui récupère l'espace sur le disque gaspillé par des fichiers de locales et des pages de manuel localisées non nécessaires.
Il sera automatiquement invoqué à chaque installation avec apt.
# Installer Localepurge.
sudo apt install localepurge
# Lancer Localepurge.
localepurge

Fichiers de configurations

La commande suivante indique quels fichiers de configuration ne sont pas installés par un paquet.
dpkg -S /etc/init.d/* | grep "no path"
Enlève les fichiers de configuration associés à des paquets desinstallés.
dpkg --purge `dpkg --get-selections|awk '/deinstall/ {print $1}'`
Repérer les fichiers de configuration orphelins
dpkg -l | awk '$1~/^rc$/{print $2}' | xargs echo
Supprimer les fichiers de configuration orphelins
dpkg -P $(dpkg -l | awk '$1~/^rc$/{print $2}')
Une fois par mois faire un aptitude purge '~c' pour éliminer les fichiers de configuration des paquets qui ont été désinstallés et non purgés.

Vider les corbeilles : 3 types de corbeilles sont à prendre en compte

La corbeille utilisateur : ~/.local/share/Trash/ . pour la vider proprement:
rm -Rf ~/.local/share/Trash/*
La corbeille administrateur : /root/.local/share/Trash/ . pour la vider proprement:
rm -Rf /root/.local/share/Trash/*
Les corbeilles externes : situées sur vos disques dur externes, elles sont généralement nommées /media/votre_disque/.Trash_1000, ce qui correspond à votre identifiant utilisateur (uid)

Trouver les paquets supprimés mais non purgés

# Trouver les paquets supprimés mais non purgés :
dpkg -l |grep "^rc"
# Simuler la suppression :
aptitude --simulate purge ~c
# Purger :
aptitude purge ~c

Nettoyer les miniatures

# Nettoyer les miniatures :
rm -Rf ~/.thumbnails

Vider l'historique du terminal

# Afficher les 10 dernières commandes :
history | tail -n 10
# Écrire un contenu vide dans le fichier :
>.bash_history
# Pour une suppression immédiate et radicale :
rm ~/.bash_history
# Effacer l'historique des commandes dans un shell Bash :
history -c
# La directive -w remplace l'historique général des commandes par l'historique du shell courant qui vient d'être effacé.
history -w
# Supprimer une seule entrée :
history -d 51
# Supprimer plusieurs entrées, ne fonctionne pas très bien :
for (( i=27; i <= 42; i++ )) 
do 
history -d $i 
done
# Alternative pour supprimer plusieurs entrées, ouvrir directement le fichier :
nano ~/.bash_history
# Rappel de la dernière commande :
!!
# La 23ème commande :
!23
# L'avant-dernière commande :
!-2
# La dernière commande contenant le mot "profile" :
!?profile
# Substitution dans la dernière commande :
^13^14^
L'historique des commandes est enregistré à chaque fermeture de session dans le fichier ~/.bash_history
Pour éviter les doublons dans ce fichier, et donc, dans l'historique accessible à la ligne de commande, rajouter la ligne suivante dans ~/.bash_profile :
# La commande fonctionne immédiatement après avoir redémarré le terminal.
export HISTCONTROL=ignoredups
Forcer la mise à jour immédiate du fichier historique à chaque nouvelle commande, en ajoutant ou en modifiant la variable suivante dans le fichier ~/.bashrc :
PROMPT_COMMAND='history -a ; history -r'
# Ajouter un commentaire servant en quelque sort d'étiquette à la suite d'une commande.
# L'historique doit être activé !
/chemin/vers/commande --ultra=longue --complication --long # PenseBete
Rechercher cette commande avec ctrl-R et le mot clé PenseBete.
################
### A revoir ###
################
# Plus pratique, créer un alias dans le fichier .bashrc qui permettrait de ne pas loguer dans l'historique les commandes précédées d'un espace :
export HISTCONTROL=ignorespace
# Cette commande pourrait s’avérer contraignante.
# Ne plus enregistrer le shell courant qui reste en RAM :
unset HISTFILE
# Activation de la date et de l'heure dans la commande history :
HISTTIMEFORMAT= »[%d/%m/%Y %T]  »
# Ne pas laisser de trace dans .bash_history pour certaines commandes.
# [ t]* consiste à mettre un espace puis taper la commande, cette commande ne figurera pas dans .bash_history
export HISTIGNORE= »[ t]*:history:exit:firefox »
# Pour que la commande history contienne 20 000 entrées au lieu des 500 normalement :
sudo sh -c "echo '\nHISTFILESIZE=20000\nHISTSIZE=20000\nHISTCONTROL=ignoredups' >> /etc/environment"

Fichiers oubliés

A tester sur une machine virtuelle.
Afin de savoir s'il y a des fichiers temporaires oubliés :
root@serveur # find / -ignore_readdir_race -name "*~"
Libre à vous d'en faire ce que vous voulez, je vous recommande de les supprimer :
for f in $(find / -ignore_readdir_race -name "*~"); do rm $f; done

Fichiers sans propriétaire

A tester sur une machine virtuelle.
Afin de savoir s'il y a des fichiers sans propriétaire :
root@serveur # find / -ignore_readdir_race -nouser -nogroup
Libre à vous d'en faire ce que vous voulez, en théorie il ne devrait pas y en avoir.

Bleachbit

Nettoie automatiquement le système pour conserver de bonnes performances et réparer certaines erreurs.
sudo apt install bleachbit

Fslint

# Fslint, un outil complémentaire à Bleachbit.
# Permet de trouver des doublons, et, d'autres erreurs.
# Source : http://la-vache-libre.org/fslint-un-petit-couteau-suisse-a-garder-sous-la-patte/
# Installer Fslint
sudo apt install fslint

Supprimer les noyaux obsolètes

Inutile de conserver un noyau obsolète, si le nouveau noyau mis à jour permet à votre système de fonctionner.
Dans le cas de GNU/Linux Mint, sur une année d'utilisation, plusieurs Gigas peuvent être récupérés.

Ressources complémentaires pour nettoyer Debian

Ok-ko.png Source : https://wiki.debian-fr.xyz/Nettoyer_sa_Debian
Ok-ko.png Source : https://debian-facile.org/utilisateurs:arpinux:tutos:nettoyer-sa-debian
Ok-ko.png Source : http://doc.ubuntu-fr.org/optimisation

Récupérer la version d'origine d'un fichier de config d'un paquet

Savoir à quel package appartient un fichier de config :
sudo dpkg -S fichier
Changer le nom du fichier de configuration dont vous voulez avoir la version originale :
mv fichier fichier.bak
Cela ne touchera pas aux autres fichiers de config du package que vous auriez modifié. Seuls les fichiers de config manquant seront remis en place.
sudo apt-get install --reinstall -o Dpkg::Options::="--force-confmiss" nomDuPackage

Ressources système

Connaître les ressources système utilisées par un paquet logiciel.
sudo apt install htop
htop
Source complémentaires : https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/surveiller-l-activite-du-systeme

Redémarrer Linux en ligne de commande

sudo reboot
sudo shutdown -r
sudo shutdown -r now
#Dans une minute
sudo shutdown -r 1
#A 23h
sudo shutdown -r 23:00
#Annuler un redémarrage
sudo shutdown -c
#En passant par la commande associée au runlevel
sudo init 6
Ok-ko.png Source complémentaire : https://www.computerhope.com/unix/ushutdow.htm

Le Kernel : Noyau de Linux

# Lister les noyaux
dpkg -l |grep linux-image
# Supprimer un ancien noyau.
apt-get remove --purge linux-image-4.13.0-31-generic
# Mettre à jour le grub pour prendre en compte les changements.
# Ici, au démarrage sélectif, les noyaux supprimés précédemment apparaissent toujours.
sudo update-grub
# Mettre à jour Grub2 pour les nouvelles versions de GNU/Linux.
sudo update-grub2

Tentative pour accélérer le boot

# Utiliser tous les cores du CPU pendant le démarrage :
sudo gedit /etc/init.d/rc
Trouver la ligne : CONCURRENCY=none ou CONCURRENCY=makefile
Remplacer la par : CONCURRENCY=shell
Source : https://guideubuntu.blogspot.fr/2012/01/accelerer-le-demarrage-dubuntu.html

Couper la mise en veille du système

#!/bin/bash
echo "Stopper la mise en veille de l'écran !"
xset s off
xset -dpms
xset s noblanck
# Rendre cette commande permanente pour la lancer à chaque session :
echo "xset -dpms && xset s noblanck && xset s off" > ~/.xsessionrc

La souris

Ajouter de pointeurs pour la souris

dmz-cursor-theme : thème de pointeurs de souris « blancs »

Permettre la surbrillance dans un terminal à l'aide de la souris

gpm devrait permettre de copier coller, mais, je n'arrive pas à utiliser cette fonctionnalité.
Le curseur de la souris et la surbrillance fonctionnent parfaitement bien.
sudo apt-get install gpm
Source : https://formation-debian.viarezo.fr/gpm.html
Source : https://linux.developpez.com/formation_debian/gpm.html

Simulation du clavier et de la souris sous Linux

Xdotool est un programme capable de simuler des événements claviers et souris. On pourra s'en servir pour mettre en place de véritables "scénarios" d'action à rejouer.
Xdotool : simulation du clavier et de la souris sous Linux : http://www.tux-planet.fr/xdotool-simulation-du-clavier-et-de-la-souris-sous-linux/
Désinstaller xdotool :
sudo apt-get remove xdotool
Désinstaller xdotool et les paquets en dépendance :
sudo apt-get remove --auto-remove xdotool
Purger xdotool :
sudo apt-get purge xdotool
Supprimer la configuration et les dépendances :
sudo apt-get purge --auto-remove xdotool

pv : connaître la progression d’une tâche

sudo apt install pv
Création d’une clé bootable :
pv image.iso | dd of=/dev/sdb && sync
Sauvegarde d’une base de données MariaDB:
mysqldump mybdd | pv > mybdd.sql
Création d’une archive :
tar -czf - dossier | pv > dossier.tar.gz
Source : https://memo-linux.com/pv-comment-connaitre-la-progression-dune-tache-sous-gnulinux/

Lire un fichier en binaire

xxd -b fichier

Lire un fichier en hexadécimal

hd fichier
hd fichier | less
hd fichier | tail

Installer ncurses

sudo apt install libncursesw5-dev libncurses5-dev ncurses-doc

Liens complémentaires sur ncurses

Introduction à ncurses : http://linuxfocus.org/Francais/March2002/article233.shtml
https://fr.wikipedia.org/wiki/Ncurses
https://fr.wikipedia.org/wiki/Curses

Calcurses

Voir également avec calcurses.
Site officiel : http://calcurse.org (Ne fonctionne pas le 24 Juin 2018.)
apt-cache search calcurs

Wget

# Installer wget :
sudo apt install wget
# Télécharger un site pour navigation hors ligne.
wget -r -k -E -np URL_du_site
-r pour parcourir tous les liens du sites.
-k conversion des liens en liens locaux.
-E conversion php vers HTML, pour relire aisément avec Firefox.
-np pour ne pas remonter dans l’arborescence du site
# D’autres options utiles :
-lX, où X est un entier, pour ne parcourir que X niveaux de l’arborescence du site.
-c pour continuer un téléchargement interrompu.
-load-cookies si nécessaire.
# Les options pour ne pas dégrader la bande passante et la ram du serveur :
-limit-rate X, pour limiter la Bande Passante à X B/s
-w X pour attendre X secondes entre chaque téléchargement de fichiers.
-T X au bout de X secondes wget abandonne le téléchargement d’un fichier.
# Consulter le manuel :
man wget
# Exemple pour charger un site complet :
mkdir www.visionduweb.fr
cd www.visionduweb.fr
# Lancer le chargement :
wget \
 --tries=5 \
 --no-clobber \
 --continue \
 --no-host-directories \
 --html-extension \
 --recursive \
 --level=inf \
 --convert-links \
 --backup-converted \
 --page-requisites \
 --no-parent \
 --restrict-file-names=windows \
 --random-wait \
 --no-check-certificate \
   https://www.visionduweb.fr/
Les feuilles de style ne semblent pas, pas toujours, être prises en compte avec wget.

Httrack

Le programme httrack permet également de créer un site miroir : http://www.httrack.com/page/2/fr/index.html
Utiliser les valeurs 4/0 pour la profondeur du site.
Ne pas suivre les liens externes.

Ajouter une police de caractère

# Ajouter les fichiers TTF dans le dossier /usr/share/fonts
# Installer également des polices standardisées :
# Pour les émoticône :
sudo aptitude install ttf-ancient-fonts
# Pour les polices Microsoft :
sudo aptitude install ttf-mscorefonts-installer
# Pour les polices diverses :
sudo aptitude install ttf-ubuntu-font-family ttf-dejavu ttf-dejavu-extra ttf-liberation

# Recharger la liste des polices disponibles :
sudo fc-cache -f -v

Factoriser un nombre avec la commande factor

factor
5 
5: 5 
12 
12: 2 2 3 
1001 
1001: 7 11 13

Taille du disque et des fichiers

# Taille occupée par les dossiers et les fichiers en comptant les sous-dossiers mais sans les afficher :
du
du dossier
# Taille occupée par les dossiers en comptant les sous-dossiers mais sans les afficher :
du --max-depth=1 -h

Bibliographie

Ok.pngChecklist installation de Linux Mint 18.1 Mate : https://sebsauvage.net/wiki/doku.php?id=mint_customization_18_1
Ok-ko.png Ligne de commande : les 20 mémos d'un autodidacte : https://linuxfr.org/users/siltaar/journaux/ligne-de-commande-les-20-memos-d-un-autodidacte
Ok-ko.png Source : Les commandes fondamentales de Linux : http://wiki.linux-france.org/wiki/Les_commandes_fondamentales_de_Linux
Ok-ko.png Source : Commandes complémentaires : https://doc.ubuntu-fr.org/utilisateurs/fabux/brouillons/com_sh_reso
Ok-ko.png Source : Pages concernant la console : https://doc.ubuntu-fr.org/Console#pages_concernant_la_console
Ok-ko.png Source : http://wiki.linux-france.org/wiki/Les_commandes_fondamentales_de_Linux
Ok-ko.png Source : https://buzut.fr/101-commandes-indispensables-sous-linux/
Ok-ko.png Source : https://wiki.debian.org/fr/ShellCommands
Ok-ko.png Source : https://abs.traduc.org/abs-fr/

Commandes humoristiques pour GNU/Linux

Commandes humoristiques pour GNU/Linux.

Programmation en Shell Bash Linux

Programmation en Shell Bash Linux est un pense bête pour programmer en Shell Bash.

Utiliser Zenity

Utiliser Zenity.

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Les informations présentes sur ce wiki sont issues d'une recherche personnelle.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.
Consulter le miroir du wiki depuis Planet Hoster : Le miroir du wiki version du 12 Juillet 2019.