Utiliser des commandes shell avec le terminal

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Consulter les fichiers partagés sur le FTP
Le Redmine : Consulter le 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 :
Ctrl+alt+F7
# Ou :
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.
# Mettre à jour tous les paquets pouvant être mis à jour :
apt-get full-upgrade
# Mettre à jour de la distribution complète :
apt-get dist-upgrade
# Des paquets sont restés en état après une mise à jour :
apt get update upgrade
# 0 mis à jour, 0 nouvellement installés, 0 à enlever et xxx non mis à jour.
# Consulter les paquets qui n'ont pas été mis à jour mais qui pourraient être mis à jour :
apt list --upgradable
# Simuler l'installation d'un de ces paquets pour consulter l'erreur de dépendance :
apt -s install paquet
# Resolve a généré des ruptures, ce qui a pu être causé par les paquets devant être gardés en l'état.

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.deb

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.
# Ajouter | less pour pouvoir faire défiler vers le bas et vers le haut.
dpkg --list | less

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
Source : https://memo-linux.com/comment-verifier-les-dependances-dun-paquet-sur-ubuntu-ou-debian/

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

# Avec cette commande, on enregistre tout, ce qui peut représenter beaucoup d'informations :
strace -f -o strace.log la-commande-que-je-veux-tracer
# 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 le fichier obtenu 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.
# Exemple pour tracer rsyslogd :
# Dans une première console, lancer la commande suivante :
sudo strace -p $(pgrep rsyslogd) -o fichier.trace

# Ouvrir une deuxième console, et, redémarrer par exemple Rsyslog :
sudo /etc/init.d/rsyslog restart
# 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 d'un dossier :
tree Dossier
# Afficher l'arborescence en ajoutant le propriétaire et le poids du fichier :
tree Dossier -Csu

Afficher l'arborescence des services avec la commande pstree

# Exemple :
pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─acpid
        ├─agetty
        ├─at-spi-bus-laun─┬─dbus-daemon
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───2*[{at-spi2-registr}]
        ├─avahi-daemon───avahi-daemon
        ├─blueberry-tray─┬─python3───rfkill
        │                └─4*[{blueberry-tray}]
        ├─bluetoothd
        ├─clamd───{clamd}
        ├─colord───2*[{colord}]
        ├─cron
        ├─cupsd
        ├─2*[dbus-daemon]
        ...

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é avec who et finger

# Savoir qui est connecté :
who
# Fonctionne depuis le serveur distant Debian mais pas depuis ma machine locale Mint :
# Afficher l'adresse IP du client utilisateur connecté :
who | awk '{ print $5 }' | sed 's/^.\{1\}\(.*\).\{1\}$/\1/'
xx.xx.xxx.xx

# Afficher l'adresse IP du client utilisateur connecté et la mettre dans une variable :
myip=$(who | awk '{ print $5 }' | sed 's/^.\{1\}\(.*\).\{1\}$/\1/')
echo $myip
xx.xx.xxx.xx

# Alternative pour l'adresse IP depuis la machine locale, sans utiliser who :
wget -qO- icanhazip.com
wget -qO- checkip.dyndns.org | grep -oP "\d+\.\d+\.\d+\.\d+"
# Afficher le nombre d'utilisateurs connectés :
who | wc -l
# Afficher les pseudos et le nombre d'utilisateurs connectés :
who -q
# Afficher les pseudos et la date de connexion des utilisateurs connectés :
who | awk '{print $1" "$3}'
w
# Indique les utilisateurs connectés et retourne le contenu des informations qui ont été saisies lors de la création de l'utilisateur avec la commande adduser.
finger

Effectuer une recherche

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.
Source complémentaire : https://www.tecmint.com/35-practical-examples-of-linux-find-command/

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>

Utiliser grep sur plusieurs fichiers ou dossiers

# Utiliser grep pour chercher, substituer, supprimer une chaîne de caractères dans plusieurs fichiers ou dossiers.

La syntaxe de la commande grep

grep [options] expreg [fichiers...]
grep [options] -e expreg1 -e expreg2 [fichiers...]
grep [options] -f fichier_expreg [fichiers...]

Principales options de grep

-c affiche le nombre de lignes trouvées
-e permet de spécifier plusieurs expressions régulières
-E permet d'utiliser les ERe
-f permet de lire les expressions régulières à partir d'un fichier
-F permet de ne pas interpréter le motif de recherche comme une expression régulière
-i permet une recherche insensible à la casse
-l permet de seulement afficher les noms des fichiers contenant l'expression régulière recherchée
-n permet de numéroter les lignes trouvées
-q permet d'effectuer une recherche sans afficher le résultat à l'écran
-v permet une recherche ne contenant pas l'expression régulière
-w l'expression recherchée doit correspondre à un mot entier
-x l'expression recherchée doit correspondre à une ligne entière

Nombreux exemples pour utiliser grep

# Pour faire une recherche d'un mot dans plusieurs fichiers ou dossiers, utiliser la commande grep recursive.
# Le paramètre -r rend la recherche récursive, elle cherchera tout les fichiers contenant le mot "requête" dans le répertoire ciblé et ses sous-dossiers.
# Effectuer la recherche depuis le répertoire actuel :
grep -r requête ./
# Le paramètre -w permet de faire une recherche strict sur le mot requête, pas de résultat pour le mot "requêtes" au pluriel :
grep -r -w requête ./
# Le paramètre -i de la commande rend la recherche insensible à la casse pour ne pas faire de différence entre majuscules et minuscules :
grep -r -i "requête" /chemin/vers/répertoire/
# Chercher le terme "requête" uniquement dans les fichiers du répertoire courant :
grep "requête" * -ri
# Le paramètre -l permet de ne pas afficher le texte supplémentaire dans la réponse :
grep -r -i -l requête ./
# Commande équivalente à la commande précédente avec le paramètre -l pour 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 les lignes correspondantes à un mot clé "requête" dans un fichier :
grep requête /var/log/apache2/access.log
# Effectuer une recherche à choix multiples insensible à la case dans un fichier :
grep -E -i '(paris|strasbourg)' departements-2020.txt
# Afficher les lignes commençant par le chiffre 3 :
grep -v '^3' departements-2020.txt
# Afficher les lignes commençant par un 3 ou se terminant par un z :
grep -e '^3' -e 'z$' departements-2020.txt
# Afficher et numéroter les lignes commençant par 11 :
grep -n '^11' departements-2020.txt
# Effectuer une recherche sans afficher le résultat mais afficher le code de retour de la commande pour vérifier l'état de la recherche :
grep -q '^11' departements-2020.txt
echo $?
# Afficher le nombre de lignes trouvées :
grep -c -e '^0' -e 's$' departements-2020.txt
# Afficher les lignes contenant au moins 2 caractères à l'aide d'une expression régulière :
grep '..' departements-2020.txt
# Utiliser le paramètre -F pour ne pas interpréter les points comme étant une expression régulière :
grep -F '..' departements-2020.txt
# Affichera :
..
# Rechercher les lignes ne contenant que des chiffres.
# Avec l'option -x :
grep -E -x '[0-9]+' departements-2020.txt
# Afficherait par exemple :
2
34
546

# Même résultat mais sans l'option -x :
grep -E '^[0-9]+$' departements-2020.txt
# Afficherait par exemple :
2
34
546
# Utiliser un fichier pour rechercher certaines expressions régulières :
# Le fichier rechercher contient les lignes suivantes :
# Rechercher les lignes se terminant par la lettre t
t$
# Rechercher les lignes contenant uniquement des chiffres
^[0-9]+$

# Effectuer la recherche avec -E -f
grep -E -f rechercher departements-2020.txt
mots
5
31
# Utiliser grep avec un pipe pour rechercher un processus particulier :
sudo service apache2 start
ps -ef | grep apache2
root     19819     1  0 17:08 ?        00:00:00 /usr/sbin/apache2 -k start
zer00co+ 19820 19819  0 17:08 ?        00:00:00 /usr/sbin/apache2 -k start
zer00co+ 19821 19819  0 17:08 ?        00:00:00 /usr/sbin/apache2 -k start
root     21231 16896  0 17:09 pts/0    00:00:00 grep apache2
# Utiliser grep avec un pipe pour rechercher un processus particulier, et, demander à grep de ne pas afficher grep :
ps -ef | grep apache2 | grep -v grep
root     19819     1  0 17:08 ?        00:00:00 /usr/sbin/apache2 -k start
zer00co+ 19820 19819  0 17:08 ?        00:00:00 /usr/sbin/apache2 -k start
zer00co+ 19821 19819  0 17:08 ?        00:00:00 /usr/sbin/apache2 -k start
# Enlever les lignes commençant par "#" "//" ou ";" correspondantes à des commentaires :
grep -E -v '^(#|$|;)' /etc/proxy-suite/ftp-proxy.conf
# Alternatives pour un fichier de configuration :
grep ^[^#] /etc/named.conf
# Alternatives pour un fichier PHP :
grep ^[^\;] /etc/php/7/cli/php.ini

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
# Modifier un fichier créé depuis le terminal Linux, par exemple, un fichier robots.txt dont les accents ont été encodés si on souhaite consulter le fichier depuis un navigateur.
sudo touch robots.txt
# Ajouter le contenu dans le fichier puis le passer en ISO-8859-1 :
sudo iconv -f UTF-8 -t ISO-8859-1 robots.txt -o robots.txt
# Le contenu sera lisible depuis un navigateur web mais plus depuis le terminal.
# Faire l'encode inverse pour voir les accents correctement depuis le fichier du terminal :
sudo iconv -f ISO-8859-1 -t UTF-8 robots.txt -o robots.txt
# Un file robots.txt indiquera UTF-8 Unicode text. UTF-8 est le format recommandé pour le fichier robots.txt.
# Changer l'encodage du fichier robots.txt pour pouvoir consulter les accents depuis le navigateur n'est donc pas une bonne idée !
# 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

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.
# Lister les droits et le poids des fichiers en kilo octet :
ls -lah

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

Connaître la dernière modification d'un fichier

stat

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.

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

# Concaténer deux fichier en un seul :
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 le contenu à la fin du fichier si il existe.
# Afficher le nouveau fichier obtenu.
cat test3.txt
1 Ceci et un premier fichier de texte.
2 Voici un deuxième fichier de texte.
# Gagner en lisibilité dans un code plus complexe.
# Remplacer :
cmd1 >>/etc/hosts
cmd2 >>/etc/hosts
cmdX >>/etc/hosts
# Par :
{
cmd1
cmd2
cmdX
} >>/etc/hosts

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.

Créer un fichier

touch fichier
# 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

Écrire dans un fichier avec EOF

Remplacer echo par EOF pour écrire dans un fichier

echo "X"
echo "Y"
echo "Z"
# Deviens :
cat <<'EOF'
X
Y
Z
EOF

Écrire du texte avec EOF

# Créer un fichier texte dialogue :
touch dialogue
# Lire un fichier :
cat dialogue
# Ajouter un texte dans le fichier :
cat >dialogue <<EOF
Ceci est un essai.
EOF
# Ajouter du texte dans le fichier :
cat << FIN >> une-ligne.txt
Je veux écrire du texte dans un fichier.
Je voudrais\
que cette phrase tienne sur une ligne.

FIN
# 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).
# Le mot FIN n'est pas écrit dans le fichier, c'est notre marqueur de fin de fichier défini dans la commande.
# 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.

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
sudo -s
echo -e "<?php echo(\"Le Serveur Apache2 et PHP affichent un rendu pour le site local <a href='http://site.local.ext/'>http://site.local.ext/</a> qui est fonctionnel.\"); ?>" > /var/www/site.local.ext/index.php

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 avec mv

mv source destination
# La commande mv conserve les utilisateurs et groupes, donc il faudra penser a attribuer le fichier à root et au groupe root avec chown.

Déplacer l'emplacement d'un des dossiers utilisateur

sudo nano $HOME/.config/user-dirs.dirs
# Version française :
XDG_DESKTOP_DIR="$HOME/Bureau"
XDG_DOWNLOAD_DIR="$HOME/Téléchargements"
XDG_TEMPLATES_DIR="$HOME/Modèles"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Musique"
XDG_PICTURES_DIR="$HOME/Images"
XDG_VIDEOS_DIR="$HOME/Vidéos"
# Version anglaise :
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Template" (??)
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"

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

rw		600	Le propriétaire peut lire et écrire. Le groupe et les autres ne peuvent rien faire avec le fichier.
-rw-r-r-	644	Le propriétaire peut lire et écrire, le groupe et les autres peuvent lire.
-rw-rw-rw-	666	Le propriétaire, le groupe et les autres peuvent lire et écrire.
-rwx		700	Le propriétaire peut lire, écrire et exécuter. Le groupe et les autres ne peuvent rien faire avec le fichier.
-rwx-x-x	711	Le propriétaire peut lire, écrire et exécuter. Le groupe et les autres peuvent exécuter.
-rwxr-xr-x	755	Le propriétaire peut lire, écrire et exécuter. Le groupe et les’autres peuvent lire et exécuter.
-rwxrwxrwx	777	Le propriétaire, le groupe et autres peuvent lire, écrire et exécuter.
drwx		700	Seul le propriétaire peut lire et écrire dans ce répertoire.
drwxr-xr-x	755	Le propriétaire, le groupe et d’autres peuvent lire le répertoire, mais seul le propriétaire peut modifier son contenu.
0400		400	Autorise le propriétaire à lire le fichier.
0200		200	Autorise le propriétaire à écrire le fichier.
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/

Afficher la valeur octale du CHMOD d'un fichier

stat -c '%a' fichier
# Retournera par exemple 644.

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

Aller plus loin pour sécuriser les dossiers et les fichiers

Protéger les dossiers et les fichiers.

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

# Configuration des paramètres régionaux du système avec le paquet dpkg-reconfigure :
dpkg-reconfigure locales.
# Pour passer le système en français, utiliser la valeur "fr_FR.UTF-8 UTF-8".
# Une fois la configuration effectuée, il sera nécessaire de se déconnecter puis se reconnecter pour pouvoir utiliser la nouvelle langue.
# La commande "reset" pourrait permettre de prendre immédiatement en compte les nouvelles variables locales. (A tester.)
# Vérifier alors le nouveau jeu de caractères utilisé 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 une seule langue est utilisée.
# 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).
# On peut malgré tout ajouter LANGUAGE=fr dans le fichier "/etc/environment".
# Ce fichier est vide par défaut sur mon serveur Debian Stretch / Buster :
sudo nano /etc/environment
# Je ne suis pas sur de la valeur à indiquer, je part du principe que si cette variable peut en surcharger d'autres, il faut renseigner le même code langue que celui utilisé ailleurs :
# LANGUAGE=fr
LANGUAGE=fr_FR.UTF-8
# Il est également possible de renseigner la langue dans le fichier suivant :
sudo nano /etc/locale.conf
#LANG=en_US.UTF-8
LANG=fr_FR.UTF-8
# Il est possible de spécifier d'autres variables d'environnement comme LANG, LC_CTYPE, LC_NUMERIC ou n'importe quelle autre variable de la sortie de locale.
# Un exemple où LANG est définie à en_US.UTF-8 mais LC_CTYPE est défini juste à en_US est :
localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
Ok-ko.png Systemd : Gérer les locales et la langue avec localectl : https://www.linuxtricks.fr/wiki/systemd-gerer-les-locales-et-la-langue-avec-localectl
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
# Forcer le français dans le fichier suivant :
sudo nano /etc/locale.conf
#LANG=en_US.UTF-8
LANG=fr_FR.UTF-8

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.

Changer de langue pour certains paquets

Changer la langue de Firefox

sudo apt install firefox-locale-fr

Changer la langue de VLC

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

Changer la langue de thunderbird

.

Changer la langue de libreoffice

.

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/

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

# Commande minimaliste :
gpg --gen-key
4096
0
y
nom
mail
commentaire
passephrase
# Générer une paire de clé GPG en une seule commande :
gpg --quick-gen-key 'Visionduweb <mail@visionduweb.com>'
# Générer une paire de clé GPG en une seule commande, avec des paramètres supplémentaires :
gpg --quick-gen-key 'Visionduweb <mail@visionduweb.com>' rsa4096 - 1y
# Commande complète :
gpg --full-gen-key
# Voir si une clé a été crée :
gpg -K
# Afficher nos clés privées :
gpg -k 
# Ouvrir gpa pour gérer l'ensemble des clés :
sudo gpa

Créer une clé GPG en mode graphique

# Créer une clé en mode graphique :
sudo apt install seahorse
# Lancer l'application "Mots de passe et clés". ( Accessoires / Passwords and keys )
# Si la clé a été créée depuis le terminal, elle est déjà présente et peut être sauvegardée.
# Une fois la clé supprimée, je n'arrive pas à la réimporter à l'aide de seahorse.

Exporter ma clé publique

# C'est la clé qui pourra être distribuée librement.
# Créer la clé publique pubkey.txt en ASCII :
Liste toutes les clés et identifier le code à utiliser pour notre mail :
gpg -k
Le code apparenté au mail sera EF685E2241A7C26EDCC701752A58B920B7C4BC9B
# Exporter la clé publique :
gpg --armor --output pubkey.txt --export 'EF685E2241A7C26EDCC701752A58B920B7C4BC9B'
# Ou encore ainsi :
gpg -a --export mail@visionduweb.com > pubkey.gpg
# WKS/WKD permet de stocker un fichier dans un dossier prédéfini du serveur hébergé par un domaine pour y exposer les clés de ceux qui y disposent d'une adresse mail.
# Si un utilisateur veut chiffrer un document pour cette adresse, et qu'il ne dispose pas déjà d'une clé associée dans son trousseau local, GPG ira la chercher sur le serveur.
Source : https://www.nextinpact.com/news/104951-gnupg-web-key-directory-comment-diffuser-simplement-votre-cle-publique-via-votre-serveur.htm

Signer un fichier pour créer un fichier.asc

# Il est recommandé de signer sa clé publique.
http://www.rvq.fr/linux/filecrypt.php
# Le message est diffusé en claire mais avec une signature différente pour chaque nouveau message ce qui permet de s'assurer de sa conformité.
gpg -umail@visionduweb.com --clearsign fichier.txt

Chiffrer un fichier avec GPG

# GnuPG est souvent associé au chiffrement des mails mais il propose également le chiffrement des fichiers.
# Créer un fichier à chiffrer pour effectuer un test :
echo Coucou > fichier.txt
# Chiffrer un fichier :
gpg -r EF685E2241A7C26EDCC701752A58B920B7C4BC9B --encrypt --output fichier_chiffre.gpg fichier.txt
# Chiffrer un fichier :
gpg -e -r mail@visionduweb.com fichier.txt
# Chiffrer un fichier :
gpg2 -r mail@visionduweb.com --encrypt fichier.txt

Décrypter un fichier GPG

# Décrypter :
gpg -r EF685E2241A7C26EDCC701752A58B920B7C4BC9B --decrypt --output fichier_lisible fichier_chiffre.gpg
# Ou :
gpg2 -umail@visionduweb.com --output fichiervisibile --decrypt fichierchiffre.gpg

Complément

Comment créer et gérer des clés : https://www.nextinpact.com/news/102685-gpg-comment-creer-paire-clefs-presque-parfaite.htm
Crypter / Décrypter un fichier avec gpg : http://wiki.gantzer.eu/index.php/Crypter_/_D%C3%A9crypter_un_fichier_avec_gpg
Utiliser GPG pour envoyer des e-mails chiffrés avec Thunderbird : http://lehollandaisvolant.net/tuto/gpg/
Source : https://www.gnupg.org/gph/en/manual/x135.html
Lire : https://www.gnupg.org/download/index.html
Gnupg : https://doc.ubuntu-fr.org/gnupg

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

# Créer dans un premier temps un dossier dans le dossier /media :
sudo mkdir /media/usb
# Monter la clé :
sudo mount /dev/sdb1 /media/usb
# Aller dans le dossier et lister son contenu :
cd /media/usb
ls
# 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

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

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://web.archive.org/web/20180622102710/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

Connaître la progression d'une tâche avec pv

# Installer pv :
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
Ok-ko.png Source : https://memo-linux.com/pv-comment-connaitre-la-progression-dune-tache-sous-gnulinux/

Le fichier .bashrc

Le fichier .bashrc.

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

Ressources complémentaires

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/
Ok-ko.png Synthèse de commandes pour le terminal : https://github.com/jlevy/the-art-of-command-line/blob/master/README-fr.md

Commandes humoristiques pour GNU/Linux

Commandes humoristiques pour GNU/Linux.

Programmation en Shell Bash Linux

Programmation en Shell Bash Linux.

Utiliser Zenity

Utiliser Zenity.

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de VisionDuWeb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows en lisant la page dédié à la sécurité.
Améliorer le contenu des pages avec vos propositions depuis l'onglet discussion.

SOUTENIR CE WIKI

Soutenir 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.