Petite astuce bash pour supprimer le contenu d'un répertoire :
find $REPERTOIRE -mindepth 1 -delete
-mindepth 1
permet de ne lister que les fichiers (et répertoires) situés au moins au niveau 1 de profondeur. Donc en pratique, tout ce qui se trouve dans le répertoire $REPERTOIRE.
-delete
supprime tous les fichiers (et répertoires) listés.
Note : les fichiers cachés (commençant par un '.') sont également supprimés.
Lorsqu'on ajoute des dépôts à une Debian via Ansible, la mise à jour des répo semble ne pas fonctionner avec l'option update_cache: yes du module apt.
A la place, il faut insérer un module apt dont le seul rôle est de mettre à jour les répo, puis utiliser un autre module apt pour faire l'installation.
Exemple :
- name: "Adds backports to apt sources (Debian 8 Jessie)."
copy:
content: "deb http://ftp.debian.org/debian jessie-backports main"
dest: "/etc/apt/sources.list.d/backports_jessie.list"
when: ansible_distribution == "Debian" and ansible_distribution_major_version == '8'
- name: "Update repositories cache"
apt:
update_cache: yes
- name : 'Installs certbot (Debian 8 Jessie).'
apt :
update_cache : no
name : 'certbot'
state : 'present'
default_release: 'jessie-backports'
when: ansible_distribution == "Debian" and ansible_distribution_major_version == '8'
L'astuce du jour : trouver les X fichiers les plus volumineux dans un PATH donné ?
find / -xdev -type f -size +100M -exec du -sh {} ';' | sort -rh | head -n50
Cette commande affiche sur la sortie standard tous les fichiers :
Un moyen de créer des répertoires plus rapidement.
Je veux créer des répertoires ayant un nom basé sur le même modèle. Par exemple REPERTOIRE.ABC.08
.
Pour créer tous les répertoires de 08 à 14, je peux utiliser une boucle for dans laquelle un compteur s'incrémente dans une string, laquelle est passée à mkdir.
Ou alors je peux utiliser une capacité de la commande mkdir :
mkdir REPERTOIRE.ABC.{08..14}
# Ce qui me donne :
ls -a
REPERTOIRE.ABC.08
REPERTOIRE.ABC.09
REPERTOIRE.ABC.10
REPERTOIRE.ABC.11
REPERTOIRE.ABC.12
REPERTOIRE.ABC.13
REPERTOIRE.ABC.14
Je peux utiliser une suite de lettres :
mkdir REPERTOIRE.{a..f}
# Ce qui me donne :
ls -a
REPERTOIRE.a
REPERTOIRE.b
REPERTOIRE.c
REPERTOIRE.d
REPERTOIRE.e
REPERTOIRE.f
Je peux utiliser plusieurs "suites" dans le même motif. Attention toutefois, car toutes les combinaisons seront créees :
mkdir REPERTOIRE.{a..c}_{0..3}
# Ce qui me donne :
ls -a
REPERTOIRE.a_0
REPERTOIRE.a_1
REPERTOIRE.a_2
REPERTOIRE.a_3
REPERTOIRE.b_0
...
REPERTOIRE.c_3
Le bonus de fin : je peux parcourir une suite de nombres avec un pas supérieur à 1 :
# Pour un pas de 2
mkdir REPERTOIRE.{1..7..2}
# Ce qui me donne :
ls -a
REPERTOIRE.1
REPERTOIRE.3
REPERTOIRE.5
REPERTOIRE.7
Edit : si au lieu d'une suite de caractères je veut utiliser une liste de valeurs prédéfinies je peux utiliser la virgule :
mkdir dossier_{toto,1,007,AZ}
# Ce qui me donne
ls -a
dossier_toto
dossier_1
dossier_007
dossier_AZ
Pour une arborescence, j'utilise aussi l'option -p :
mkdir -p parent{1..4}/enfant{bill,bob,ben}
# Ce qui me donne
tree
.
├── parent1
│ ├── enfantben
│ ├── enfantbill
│ └── enfantbob
├── parent2
│ ├── enfantben
│ ├── enfantbill
│ └── enfantbob
├── parent3
│ ├── enfantben
│ ├── enfantbill
│ └── enfantbob
└── parent4
├── enfantben
├── enfantbill
└── enfantbob
Tant qu'à parler d'astuces : j'utilise ce comportement depuis un certain temps maintenant. Il s'avère que dans Nemo (le gestionnaire de fichiers de Cinnamon), on peut annuler la suppression ou le déplacement d'un fichier. Pour cela, il suffit de faire un CTRL + Z dans la fenêtre du répertoire où à été réalisée l'action.
Pour ceux qui l'ignoreraient, il est possible d'annuler la fermeture d'un onglet sous Firefox en faisant un clic-droit sur la barre d'onglets puis Annuler la fermeture de l'onglet.
Mais pour les aficionados des raccourcis clavier, il y a aussi ceci : CTRL + SHIFT + T
Pour éviter de réinstaller une VM Windows 7 tous les 30 jours:
1) Quand le message "Windows is not Genuine" apparait en-bas à droite du bureau, déterminer le nombre de rearm restant:
(console en mode Administrateur)
slmgr /dlv
2) S'il reste au moins 1 rearm, taper:
(console en mode Administrateur)
slmgr /rearm
3) S'il en reste zéro, créer un fichier (par exemple "activer_Win7.bat") à la racine du disque c: contenant les trois lignes suivantes:
reg load HKLM\MY_SYSTEM "%~dp0Windows\System32\config\system"
reg delete HKLM\MY_SYSTEM\WPA /f
reg unload HKLM\MY_SYSTEM
4) Redémarrer l'ordinateur en mode recovery:
c:
dir
activer_Win7.bat
5) Une fois revenu sous Windows, activer Windows 7 avec une clef provisoire (chercher sur un moteur de recherche) correspondant à la version de Win7 (Home, Enterprise...):
(console en mode Administrateur)
slmgr -ipk H7X92-3VPBB-Q799D-Y6JJ3-86WC6
6) Vérifier le nombre de rearm restant (3 ou 4 normalement):
(console en mode Administrateur)
slmgr /dlv
7) Le message "Windows is not Genuine" devrait disparaître d'ici quelques secondes, ainsi que le message à l'ouverture de session demandant de s'enregistrer.
Pour activer la coloration syntaxique dans nano (pour le shell sh ou bash par exemple):
nano ~/.nanorc
Ajouter la ligne suivante:
include /usr/share/nano/sh.nanorc
Il existe beaucoup d'autres langages pris en comptes:
ls /usr/share/nano/
Pour récupérer le n-ème argument en bash:
#!/bin/bash
n=3
echo "${!n}"
Résultat:
bash script.sh voiture camion "tati danielle" raclette "pommes de terre" exponentielle logarithme
tati danielle
Et pour récupérer les m premiers arguments à partir du n-ème (compris):
#!/bin/bash
n=4
m=2
echo "${@:$n:$m}
Résultat:
bash script.sh voiture camion "tati danielle" raclette "pommes de terre" exponentielle logarithme
raclette pommes de terre
L'astuce du jour.
J'ai un fichier comportant trois colonnes, et structuré de cette manière:
Nom Prénom DateDeNaissance
Le séparateur de colonnes est une tabulation.
Question: comment construire la regexp correcte dans un terminal, pour décrire ce fichier (dans sed ou grep par exemple)?
En effet, il n'est pas possible de "juste" taper sur la touche tabulation. Rien ne se produit.
Pour intégrer la tabulation il faut:
1) Appuyer sur les touches CTRL + V. Cela informe le terminal que la prochaine touche devra être prise "littéralement".
2) Appuyer sur la touche tabulation. Celle-ci est alors inséree dans la ligne de commande comme n'importe quel autre caractère.
Voilà
PS: Je sais maintenant pourquoi un CTRL+V dans un terminal ne "colle" pas le presse-papier.
Dans un script shell bash, pour une utilisation de yum, faire ainsi:
paquets_a_installer="mercurial zip gcc nano"
sudo yum install -y $paquets_a_installer
Le point important est qu'il NE FAUT PAS entourer la variable $paquets_a_installer avec des guillemets, lors de l'appel à yum. Sinon yum s'écrase au sol comme un gros caca des familles: il considère que les différents paquets contenus dans la variable n'en forment en réalité qu'un seul.