-
MINT > couteau suisse, truc, astuce et pense-bête
Modifier son nom d’utilisateur :
sudo ln -s /home/ancien_nom /home/nouveau_nom
.Firefox
Dans
about:config
, je metsmedia.autoplay.enabled falseparce que j’en ai marre des vidéos qui se lancent sans mon avis etmousewheel.with_control.action 1parce que j’en ai marre de zoomer/dézoomer par erreur avec la touche Ctrl appuyée.Dans Mieux utiliser la barre d’adresse de Firefox je vous expliquais mon workflow hautement basé sur les favoris/bookmarks. Il faut savoir que les bookmarklets javascript ne sont pas affichés par défaut dans la barre d’adresse, il faut browser.urlbar.filter.javascript false.
Stopper rsyslog
Pour ne rien loguer (éviter des écritures genre sur la carte SD d’une Raspberry Pi :
systemctl stop syslog.socket rsyslog.service
. La difficulté est de ne pas oublier d’arrêter le socket. Sur un serveur parfois les logs remplissent /var, ça permet au brave sysadmin de corriger le tir.syncthing
L’outil de synchronisation syncthing peut tourner en tant que service. Pour l’activer
systemctl enable syncthing@monjolinomdutilisateur.service
, pour le démarrersystemctl start syncthing@monjolinomdutilisateur.service
.Si comme moi vous utilisez un nœud (node) syncthing sur un serveur headless (sans interface graphique), on peut toujours se servir de SSH pour le configurer graphiquement
ssh -N -L 9090:127.0.0.1:8384 -i ~/.ssh/id_ed25519_pi -p 2222 pi@192.168.1.30
après quoi vous ouvrez votre navigateur sur 127.0.0.1:9090. Une fois que c’est fini vous fermez la connexion SSH avec Ctrl+c.Pour trouver les fichiers qui ont des conflits de synchronisation
find ~/Sync -name *sync-conflict-*
et pour tous les supprimerfind ~/Sync -name *sync-conflict-* -exec rm '{}' +;
.Retrouver son petit dans un réseau local
J’ai la flemme de me connecter sur la box pour savoir quelle adresse IP un périphérique chope en DHCP du coup
nmap -sP 192.168.1.0/24
. Si on ne connait pas la plage à scanner, on la retrouve avecip a
. L’avantage étant que ces commandes sont simples à retenir.Cron au démarrage
La syntaxe cron pour lancer une tâche au boot :
@rebootJe m’en sers pour faire une sauvegarde du pc portable 20 mn après le démarrage.
@reboot nomUtilisateur sleep 1200 && /bin/bash ~/scripts/borg_backup.sh > ~/logs/borg_backup.log 2>&1
Lister les disques avec classe
for device in /dev/sd?; do echo $device; smartctl -i $device | grep 'Model\|Serial\|Firmware\|Capacity'; done;
Vous devrez peut-être rajouter sudo devant smartctl (et évidemment
apt install smartmontools
).for device in /dev/sd?; do echo $device; sudo smartctl -i $device | grep 'Model\|Serial\|Firmware\|Capacity'; done; /dev/sda Model Family: Indilinx Barefoot_2/Everest/Martini based SSDs Device Model: OCZ-VERTEX4 Serial Number: OCZ-07613G13Z3ZGF8CD Firmware Version: 1.5 User Capacity: 128 035 676 160 bytes [128 GB] /dev/sdb Model Family: Seagate Barracuda 7200.14 (AF) Device Model: ST1000DM003-1ER162 Serial Number: S4Y34AQ3 Firmware Version: CC45 User Capacity: 1 000 204 886 016 bytes [1,00 TB] /dev/sdc Model Family: Samsung based SSDs Device Model: Samsung SSD 850 PRO 256GB Serial Number: S251NSAG412256S Firmware Version: EXM02B6Q User Capacity: 256 060 514 304 bytes [256 GB]
Plus simple :
ls /dev/sd*[a-z]
# Montre juste les disques, ignore les partitions. Exemple : /dev/sda
ls /dev/sd*
# Montre les partitions. Exemple : /dev/sda /dev/sda1La Bible
Rappelons à tous la Bible Bash : The Bash Hackers Wiki. J’aime relire le soir au coin du feu les quelques lignes qui m’ont montré la voie, il ne faut plus utiliser les backticks ` mais
$(COMMANDS)
ni&>LOGFILE
mais>LOGFILE 2>&1
.Rsync sélectif
find source -name "*.php" -print0 | rsync -av --files-from=- --from0 ./ ./destination/
Grep forcer l’affichage du nom du fichier
limiter aux fichiers *.php via find mais j’avais pas les noms :
find . -name "*.php" -exec grep "<?php" {} \; <?php $ezcyp = 'ac142v_#9\'-ug*p3Hrx7mn08fsykolitbed';$hhvjzur = Array();... <?php <?php This page sets a max-age cache control for <?php echo $secs?> seconds. The header looks like this:<br>
Pas pratique, car grep pense dans ce cadre qu’il est tout seul. Il suffit de tricher un peu au niveau de grep :
find . -name "*.php" -exec grep "<?php" {} /dev/null \; ./mal.php:<?php $ezcyp = 'ac142v_#9\'-ug*p3Hrx7mn08fsykolitbed';$hhvjzur = Array();... ./terraform-aws-labs/content-post.php:<?php ./dev/siege/html/cache-control.php:<?php ./dev/siege/html/cache-control.php:This page sets a max-age cache control for <?php echo $secs?> seconds. The header looks like this:<br>
En rajoutant /dev/null, on fait croire à grep qu’on travaille sur plusieurs fichiers, donc il va afficher le nom du « vrai » fichier à chaque trouvaille.
SSH, bastion, éviter le ProxyCommand
configurer finement SSH : dans le ssh_config de l’utilisateur, j’ai un alias *.domain.tld qui définit un ProxyCommand, soit une commande pour rebondir sur une autre machine. Mais je devais accéder à une machine sur ce domaine sans passer par le bastion :
Host machine1.domain.tld ProxyCommand none Host *.domain.tld ProxyCommand ssh -F ~/.ssh/config-proxy rebond.domain.com nc %h %p
Récupérer de l’espace disque gratuitement
Les blocs réservés dans ext4, sur une partition non système on peut réduire le pourcentage par défaut :
df -h /home Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/sda4 358G 133G 208G 39% /home sudo tune2fs -m1 /dev/sda4 tune2fs 1.44.4 (18-Aug-2018) Définition du pourcentage de blocs réservés à 1% (955536 blocs) df -h /home Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/sda4 358G 133G 223G 38% /home
grep vs find
La commande
find . -name "*.php" -exec grep "<?php" {} /dev/null \;peut se réécriregrep -r --include=’*.php’ ‘<?php’ .-rest le mode récursif et –include permet de filtrer les fichiers.Et si tu veux forcer l’affichage du nom des fichiers, l’option
-Hle fait.~~~~
curl -4 -s -G http://localhost:8086/query?db=telegraf&pretty=true –data-urlencode "q=SHOW series"Afficher les processus qui consomment du Swap
Un serveur tabasse régulièrement son swap sans qu’on aie pour l’instant la cause profonde sachant qu’il a largement de quoi rester en RAM pour bosser. Pour afficher quels processus consomment du swap :
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
UPDATE : version avec awk fait tout le taf sans la boucle for :
awk '/Name/ {printf $2} /VmSwap/ {print " ",$2}' /proc/*/status |sort -k 2 -n -r |less
Comparer deux arborescences pour détecter des fichiers modifiés
Une routine crade, lente, mais utile pour tenter de détecter des traces d’attaques sur des fichiers :
find original/ -type d -exec md5sum {} \; |sed -e 's/^original/infected/' |md5sum -c |grep -Ev "OK$"
Virtualbox, USB3, erreur bizarre lors du l’ajout d’un disque
Sur le PC du boulot, Full USB3, je dois brancher un disque dur externe à la VM Virtualbox, je me prend un joli fail :
En fait, il faut faire attention au type de contrôleur dans la configuration de la VM (nécessite le pack d’extensions à la licence limite) :
Faut mettre full USB3 pour tout le monde, et ça marche beaucoup mieux curieusement
Fusion d’images avec ImageMagick
Deux problèmes, les photos sont à la verticale et j’aimerais les fusionner. J’aurais pu perdre du temps dans le GIMP nouvelle génération mais j’ai voulu plutôt bricoler en ligne de commande :
convert carte_visite_resto_1.jpg -rotate 270 carte_visite_resto_1_rotated.jpg convert carte_visite_resto_2.jpg -rotate 270 carte_visite_resto_2_rotated.jpg montage carte_visite_resto_*rotated.jpg -tile x1 -geometry +0+0 carte_visite_resto.jpg convert carte_visite_resto.jpg -resize 1920x1080 -quality 85 carte_visite_resto_resized.jpg
Lancer vlc avec l’utilisateur root
Par défaut pas le droit, mais c’est possible avec un hack dégueu :
sed -i ‘s/geteuid/getppid/’ /usr/bin/vlcDésactiver les rétroliens sur vos articles WordPress
Grosse méthode de bourrin, pratique si vous n’en avez rien à foutre des rétroliens, et que vous avez beaucoup d’articles. Ça se passe dans Mysql :
MariaDB [c0blog]> update wp_posts set ping_status = 'closed'; Query OK, 1015 rows affected (0.06 sec) Rows matched: 3466 Changed: 1015 Warnings: 0
Si vous utilisez des plugins de cache quelconques, vous devrez peut-être avoir à les flusher, je vous recommande d’utiliser l’excellent wp-cli pour ça.
Tester un port distant sans telnet/netcat/nmap
$ timeout 2 bash -c '</dev/tcp/91.121.61.180/443 && echo Port is open || echo Port is closed' || echo Connection timeout Port is open $ timeout 2 bash -c '</dev/tcp/91.121.61.180/444 && echo Port is open || echo Port is closed' || echo Connection timeout bash: connect: Connexion refusée bash: /dev/tcp/91.121.61.180/444: Connexion refusée Port is closed
Compresser à la volée une image disque
dd if=/dev/sda2 | gzip > /media/disk/sda2-backup-10august09.gz
Si le temps d’exécution n’est pas un problème pour vous, vous pouvez également utiliser xz qui sera plus performant mais beaucoup plus lent
Rediriger la sortie d’une commande effectuée avec sudo
sudo ne s’applique qu’à la commande en cours et pas à d’éventuelles redirections. Il faut englober la commande et la redirection sur une nouvelle instance de bash :
sudo bash -c "dd if=/dev/sda2 | gzip > /media/disk/sda2-backup-10august09.gz"
Supprimer le début d’un fichier à partir d’une ligne
fichier encodé en base64 à la fin. La solution, chercher une ligne de référence à partir de laquelle je conserve tout, et supprime le début :
sed -i.bak '1,/application\/pdf/d' fichier_mail
Un petit vim pour nettoyer quelques lignes superflues, et on peut décoder :
base64 -d fichier_mail > cv.pdf file cv.pdf cv.pdf: PDF document, version 1.5
Tiret au début d’un nom de fichier
Il y a des gens comme ça sur terre qu’il faudrait brûler, parmi eux ceux qui me collent un tiret au début du nom d’un fichier. Pourquoi ? Ben le tiret en question est couramment utilisé pour désigner des options de commandes, et ça débouche sur ce genre de message d’erreur à la con sur une palanquée de commandes :
mv -fichier-pourri.txt fichier-pourri.txt mv : option invalide -- 'c' Saisissez « mv --help » pour plus d'informations.
Guillemets simples, doubles, rien n’y fait. Pour contourner, il faut que j’utilise une autre astuce, le chemin :
mv ./-fichier-pourri.txt fichier-pourri.txt l fichier-pourri.txt -rw-r--r-- 1 seboss666 seboss666 0 21.04.2018 09:55 fichier-pourri.txt
Deux caractères, une frustration évacuée
Convertir une vidéo en série d’images
Un petit défi trouvé je ne sais plus où : retrouver une image précise, dans une vidéo où celles-ci défilent très vite. Plutôt que de m’emmerder à lire au ralenti, à repasser 50 fois en espérant voir quelque chose, il « suffit » de convertir et de générer un fichier image par image de vidéo. Pour ça, il faut extraire le nombre de fps de la vidéo en question, et réutiliser ce paramètre pour qu’ffmpeg fasse le boulot :
ffmpeg -i DMdLcMPW4AUQV9t.mp4 -vf fps=27.5 out%d.png
On a ensuite autant de fichiers images qu’il y a d’images dans la vidéo, et celle qu’on recherche va forcément apparaître.
L’optimisation d’image rapide pour les pressés
find . -iname "*.png" -exec optipng -o5 -strip all {} \; find . -iname "*.jpg" -exec jpegoptim -m90 --strip-all {} \;
Les deux logiciels sont à installer.
zcat et zgrep
Avant pour lire un fichier de log compressé, je faisais
gzip -d syslog.2.gz
puiscat syslog.2
mais ça c’était avant. Maintenant je fais directementzcat syslog.2.gz
, je me sens tellement mieux ! Si vous faites un petitdpkg -S zcat
sur votre Ubuntu/Debian, vous apprendrez qu’il existe zcat (gzip), xzcat (xz-utils), bzcat (bzip2), elle est pas belle la vie ! Faites un petitdpkg -L gzip
, il existe également zgrep, zless, zdiff…Effacer le contenu d’un fichier en ligne de commande
Tout le monde procède différemment pour effacer le contenu d’un fichier en ligne de commande. Moi ça donnait
echo > ~/Documents/temp.txt
mais l’utilisateur averti remarquera que ça laisse un saut de ligne dans le fichier. J’ai appris que la bonne manière de faire c’est> ~/Documents/temp.txt
.hgrep
Lorsqu’on passe sa journée dans un terminal, on se sert beaucoup de l’historique. J’ai un alias tout simple qui me suit depuis de nombreuses années
alias hgrep='history | grep -i --color=always'
. On le lance ainsihgrep 'motifrecherché'
, ça va afficher les entrées de l’historique contenant ‘motifrecherché’ en couleurs. Un petit rien finalement très utile. Pour rappel on peut ré-exécuter une commande (par exemple la 128) de l’historique avec!128
.lsof pour retrouver les fichiers marqués deleted mais qui prennent encore de la place sur le disque
lsof -n | grep /var | grep deleted
sauve des ours polaires (et des sysadmins). Typiquement un fichier de log n’apparaît plus lorsqu’on fait unls
mais pourtant il prend encore de la place sur le disque, le processus (genre rsyslog) verrouille le fichier qui ne peut pas être « bien » supprimé. Afin que le processus « relâche » ce fichier, il y a plusieurs méthodes dont lui envoyer un signal (pour rsyslog par exemplekill -HUP $(cat /run/rsyslogd.pid)
), relancer le service, tuer le processus.Récupérer le chemin vers un fichier aisément
J’utilise de plus en plus la commande
git diff fichier1 fichier2
, je trouve la sortie très claire. Il y en a qui vont crier au scandale mais je fais encore pas mal de choses dans mon navigateur de fichiers (Caja). J’ai découvert par hasard que si on copie un fichier (dans le navigateur de fichiers) puis qu’on colle dans un terminal, ça colle le chemin vers le fichier… on en apprend tous les jours