====== Linux ======
===== find =====
find . -type d -name "xxx"
find . -type f -exec chmod -x {} \;
Pour traiter les répertoires : -type d
==== Chaînage ====
find . -maxdepth 1 -type d -newermt 2018-01-03 | cut -d'/' -f 6 | grep 2017
find . -maxdepth 1 -type d | grep -Ev "/[0-9]{4}$" | xargs rmdir
-Ev : Expression régulière étendue + résultat inversé
==== Additionner la taille des fichiers recherchés ====
find /path/to/files/ -name *.log* | xargs du -hs --total | tail -1
===== sed =====
sed -i 's/regex/string/g' file
==== Chaînage ====
cat infile | sed 's/regex1/string/' | sed -r 's/re\(g\)ex2/\str\1ing/' > outfile
-E, -r, --regexp-extended
==== rsync ====
Script de sauvegarde
#!/bin/bash
# A script to perform incremental backups using rsync
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="${HOME}"
readonly BACKUP_DIR="/mnt/data/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
--link-dest "${LATEST_LINK}" \
--exclude=".cache" \
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
# crontab -e
# 0 */12 * * * /path/to/backup-script.sh
----
===== Encodage des caractères =====
==== Voir l'encodage d'un fichier ====
file -i file.txt
ou
uchardet file.txt
==== Ajouter le BOM à un fichier UTF-8 ====
sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.txt
----
===== Logging =====
==== Logger la sortie d'une commande tout en l'affichant dans la console ====
echo "gromf!" 2>&1 | tee log.out
==== Compter le nombre de lignes par seconde ajoutées à un fichier de log ====
tail -f /var/log/haproxy.log | pv --line-mode --rate > /dev/null
----
===== Gestion des disques et de l'espace disque =====
==== Agrandissement d'une partition suite au redimensionnement d'un disque ====
A adapter selon le disque à redimensionner.
Initier un scan des nouvelles caractéristiques du disque :
echo 1 > /sys/class/block/sda/device/rescan
Vérifier la prise en compte de la demande de scan :
dmesg
[9937790.353627] sd 0:0:2:0: [sda] 419430400 512-byte logical blocks: (215 GB/200 GiB)
[9937790.353767] sda: detected capacity change from 209715200 to 419430400
Si nécessaire, installer growpart.\\
Sous Debian :
apt install cloud-utils
Agrandir la partition :
growpart /dev/sda 1
Agrandir le système de fichier :
resize2fs /dev/sda1
Pour automatiser le processus, il est possible de planifier l'exécution d'un script.\\
Attention, le script n'a pas été testé !\\
Source : https://codenotary.com/blog/enlarge-a-disk-and-partition-of-any-linux-vm-without-a-reboot\\
Par exemple, créer la tâche planifiée suivante dans ''/etc/cron.d/resize_disk'' :
*/5 * * * * root /usr/local/bin/disk_resize.sh
Contenu de disk_resize.sh :
#!/bin/bash
LOGFILE=/data/log/speed/resize.log
LOCKFILE=/tmp/enlarge.lock
export PATH=/usr/sbin:/usr/bin:/sbin:/bin
dotlockfile -r 0 $LOCKFILE || exit 1
echo 1 > /sys/class/block/sda/device/rescan
sleep 5
GROWPART_OUT=`growpart /dev/sda 2`
if [ $? -eq 0 ]; then
echo `date` >> $LOGFILE
echo "trying to resize fs" >> $LOGFILE
echo $GROWPART_OUT >> $LOGFILE
resize2fs /dev/sda2 >> $LOGFILE 2>&1
echo `date` >> $LOGFILE
echo "resize done" >> $LOGFILE
fi
echo 1 2>/dev/null >/sys/class/block/sdb/device/rescan
sleep 5
GROWPART_OUT=`growpart /dev/sdb 1`
if [ $? -eq 0 ]; then
echo `date` >> $LOGFILE
echo "trying to resize fs" >> $LOGFILE
echo $GROWPART_OUT >> $LOGFILE
resize2fs /dev/sdb1 >> $LOGFILE 2>&1
echo `date` >> $LOGFILE
echo "resize done" >> $LOGFILE
fi
dotlockfile -u $LOCKFILE
==== Contrôler la taille des fichiers du système ====
duc index -x --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/net --exclude=/run -v --debug /
==== Monitorer la taille d'un fichier en temps réel ====
watch -n 1 "ls -lh /root/.cache/duc | awk '{print \$5}'"
===== Gestion des utilisateurs =====
==== Ajouter un utilisateur à un groupe ====
usermod -aG
==== Désactiver un compte utilisateur ====
usermod -L -e 1
-e 1 : Date d'expiration au 02/01/1970 -> Désactivation définitive
----
===== Gestion des processus =====
==== Tuer à l'aide de la commande ps ====
kill $(ps aux |grep -i illustrator | awk '{print $2}')
===== Interactivité =====
==== Enregistrer une saisie ====
read -p "Veuillez saisir du texte" VAR
==== Enregistrer une saisie de mot de passe ====
read -s -p "Mot de passe :" PASSWD
----
===== Gestion de l'énergie =====
==== Eteindre la machine ====
shutdown -h now
OU
init 0
==== Niveaux d'exécution ====
* 0 — Arrêt.
* 1 — Mode texte mono-utilisateur.
* 2 — Pas utilisé
* 3 — Mode texte multi-utilisateurs complet.
* 4 — Pas utilisé
* 5 — Mode graphique multi-utilisateurs complet (avec un écran de connexion de type X Window)
* 6 — Redémarrage.
===== Gestion du réseau =====
==== Renouveler le bail DHCP ====
Libération du bail
sudo dhclient -r
Obtention d'un nouveau bail
sudo dhclient
==== Désactiver IPv6 ====
=== Méthode Grub ===
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
update-grub
/etc/netconfig
#udp6 tpi_clts v inet6 udp - -
#tcp6 tpi_cots_ord v inet6 tcp - -
=== Methode systemctcl ===
sudo vim /etc/sysctl.d/60-custom.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
sudo sysctl -p
sudo systemctl restart procps
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1
===== Gestion de la localisation =====
==== Configuration du clavier ====
dpkg-reconfigure keyboard-configuration
==== Réparation des problèmes de langues ====
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "fr_FR.UTF-8",
LC_MONETARY = "fr_FR.UTF-8",
LC_ADDRESS = "fr_FR.UTF-8",
LC_TELEPHONE = "fr_FR.UTF-8",
LC_NAME = "fr_FR.UTF-8",
LC_MEASUREMENT = "fr_FR.UTF-8",
LC_IDENTIFICATION = "fr_FR.UTF-8",
LC_NUMERIC = "fr_FR.UTF-8",
LC_PAPER = "fr_FR.UTF-8",
LANG = "en_GB.UTF-8"
are supported and installed on your system.
sudo locale-gen fr_FR.UTF-8
sudo dpkg-reconfigure locales
===== Sécurité =====
==== sudo ====
==== Ajouter un utilisateur au sudoers ====
La commande consiste simplement à ajouter l'utilisateur au groupe sudo.
usermod -aG sudo
=== Augmenter le délai de saisie du mot de passe ===
sudo visudo
Defaults timestamp_timeout=3600
-1 : illimité
Pour un utilisateur en particulier :
Defaults:username timestamp_timeout=3600
=== Masquer les astérisques lors de la saisie du mot de passe ===
echo 'Defaults !pwfeedback'|sudo tee /etc/sudoers.d/0pwfeedback
Le nom du fichier 0pwfeedback peut être à adapter selon les configurations.
===== Divers =====
==== Exécuter en tant que ====
=== Utilisateur standards ===
su - -c ""
=== Spécifier le groupe et le shell ===
su -g -s /bin/bash -c ""
==== Exécuter une commande n fois ====
for i in {1..n}; do command; done;
==== Exécuter une commande à intervalles réguliers ====
watch -n 1 date
==== Supprimer les noyaux inutilisés ====
echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge
sudo apt autoremove --purge
==== Déporter l'affichage en tant que root ====
sudo xauth add $(xauth -f ~befe/.Xauthority list|tail -1)
==== Créer un répertoire et se rendre à l'intérieur dans la foulée ====
mcd() { mkdir "$@" 2> >(sed s/mkdir/mcd/ 1>&2) && cd "$_"; }
==== Vérifier les mises à jour du BIOS (et autres firmwares) ====
fwupdmgr get-upgrades