Outils pour utilisateurs

Outils du site


Panneau latéral

FOLLOW ...

Linux, freeBSD

Python

Plugins WP

Informatique et robotique

En classe
KTURTLE
Arduino

Shell/php scripts

php-bash:aide-memoire

Table des matières

2024/10/22 16:56

Aide mémoire Linux

Pourquoi ne pas lancer des applis X via le compte root (si non prévues)

Traduction d'un extrait d'archlinux

Exécuter des applications GUI en tant que root “Avertissement: toutes les méthodes suivantes ont des implications en matière de sécurité dont les utilisateurs doivent être conscients. Comme l'a dit Emmanuele Bassi, un développeur GNOME: «il n'y a pas de * vraies * raisons technologiques justifiées pour lesquelles quiconque devrait exécuter une application GUI en tant que root. En exécutant des applications GUI en tant qu'administrateur, vous exécutez littéralement des millions de lignes de code qui n'ont pas été audités correctement pour s'exécuter avec des privilèges élevés; vous exécutez également du code qui touchera des fichiers dans votre $ HOME et peut changer leur propriété sur le système de fichiers; connectez-vous, via IPC, à encore plus de code en cours d'exécution, etc. ouvrent une faille de sécurité massive et béante […]. “

Sources

Quelques liens :


Creation de paquets debians

Programmation BASH

BASH et les chaines de caractères

Perte mot de passe root

Solution 1

  • Trouver le nom de l'utilisateur dans /etc/passwd,
  • Supprimer le mot de passe correspondant dans /etc/shadow.
  • Redémarrer
  • Se connectet sans mot de passe
  • Créer un nouveau avec la commande “passwd”.

ATTENTION : débrancher l'ordi du réseau → sécurité car connexion sans mdp root

Solution 2

  • Trouver le nom de l'utilisateur dans /etc/passwd
  • Editer /etc/shadow et remplacer l'empreinte du mot de passe correspondant a ce compte par l'empreinte de ton mot de passe. Ca demande de connaitre l'empreinte de ton mot de passe, donc de l'avoir préparée au préalable a un endroit que tu pourra accéder quand tu feras la manip.

Solution 3

  • Trouver le nom de l'utilisateur dans /etc/passwd
  • utiliser un chroot pour lancer la commande passwd du système dont tu veux modifier le mot de passe.
  • Par exemple si tu as monté la partition système que tu veux modifier sur /mnt/root et tu vois que l'utilisateur s'appelle “bob” :
mount -o bind /proc /mnt/root/proc
mount -o bind /sys /mnt/root/sys
mount -o bind /dev /mnt/root/dev
chroot /mnt/root /bin/bash
passwd bob
exit
umount /mnt/root/dev
umount /mnt/root/sys
umount /mnt/root/proc
umount /mnt/root

alias utiles

Lister des fichiers

alias ls-list='ls -la | grep ^- | awk \'\''{print }\'\'''

Gel de paquets

Geler un paquet (n’apparait plus lors des mises à jour)

# aptitude hold LePaquet

Degeler un paquet (réapparait lors des mises à jour)

# aptitude unhold LePaquet

Recherche des paquets gelés

# dpkg --list | grep ^hi
# aptitude search "~ahold"

Aptitude ~i | !~i

Trouvé que le motif bash (dans le nom)

aptitude search '~i bash'

Trouvé que le motif bash (dans la description)

aptitude search '~i ~d bash'

Idem mais en non installé

aptitude search '!~i bash'

FREEBOX VLC

apt-cache search freeplayer
fbx-playlist - éditeur graphique pour la liste de lecture de la Freebox
freeplayer - Encapsuleur autour de VLC pour la FreeBox ADSL française

APTITUDE REVENIR VERSION ANTERIEURE

aptitude  show -v Logiciel
aptitude install=Version Logiciel

APTITUDE RECOMMENDS

aptitude install --with-recommends LePaquet
aptitude install --without-recommends LePaquet

INCROND

https://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/ Linux incrond inotify Monitor Directories For Changes And Take Action

Xinput

Lister les périph

ragnarok@Fenrir:~$ xinput --list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad        	id=13	[slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick           	id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=9	[slave  keyboard (3)]
    ↳ Laptop_Integrated_Webcam_HD: In         	id=10	[slave  keyboard (3)]
    ↳ Dell WMI hotkeys                        	id=11	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=12	[slave  keyboard (3)]

Détailler le touchpad

ragnarok@Fenrir:~$ xinput list-props 13
Device 'AlpsPS/2 ALPS DualPoint TouchPad':
	Device Enabled (154):	1
	Coordinate Transformation Matrix (156):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Tapping Enabled (292):	1
	libinput Tapping Enabled Default (293):	0
	libinput Tapping Drag Enabled (294):	1
	libinput Tapping Drag Enabled Default (295):	1
	libinput Tapping Drag Lock Enabled (296):	0
	libinput Tapping Drag Lock Enabled Default (297):	0
	libinput Tapping Button Mapping Enabled (298):	1, 0
	libinput Tapping Button Mapping Default (299):	1, 0
	libinput Natural Scrolling Enabled (300):	0
	libinput Natural Scrolling Enabled Default (301):	0
	libinput Disable While Typing Enabled (302):	1
	libinput Disable While Typing Enabled Default (303):	1
	libinput Scroll Methods Available (304):	1, 1, 0
	libinput Scroll Method Enabled (305):	1, 0, 0
	libinput Scroll Method Enabled Default (306):	1, 0, 0
	libinput Middle Emulation Enabled (307):	1
	libinput Middle Emulation Enabled Default (308):	1
	libinput Accel Speed (309):	0.000000
	libinput Accel Speed Default (310):	0.000000
	libinput Left Handed Enabled (311):	0
	libinput Left Handed Enabled Default (312):	0
	libinput Send Events Modes Available (277):	1, 1
	libinput Send Events Mode Enabled (278):	0, 0
	libinput Send Events Mode Enabled Default (279):	0, 0
	Device Node (280):	"/dev/input/event2"
	Device Product ID (281):	2, 8
	libinput Drag Lock Buttons (313):	<no items>
	libinput Horizontal Scroll Enabled (314):	1

Activer une option (exemple tapping touchpad)

ragnarok@Fenrir:~$ xinput --set-prop 13 292 1

TOUCHPAD

Desactiver

  xinput --set-prop `xinput | sed -nr 's/.*TouchPad.*id=([0-9]*).*/\1/p'`  "Device Enabled" 0

Activer

  xinput --set-prop `xinput | sed -nr 's/.*TouchPad.*id=([0-9]*).*/\1/p'`  "Device Enabled" 1

xbindkeys / brightness

Nom touche

xbindkeys -k

Dispo clavier

xkbprint -label name $DISPLAY - | gv -orientation=seascape -

xbindkeys en toile de fond.

[ragnarok@asgard-freeBSD:~] $ cat .xbindkeysrc 
 
# PERSONNAL XBINDKEYS
 "intel_backlight decr 10"
 Alt + Down
 
 "intel_backlight incr 10"
 Alt + Up

FreeBSD : pkg install intel-backlight Debian : aptitude instatt xbacklight

Bash : recursif

#!/bin/bash
 
dossierDeTravail="/home/serveur";
 
recursiveSearch() {
    [ -r "$1" ] && [ -x "$1" ] || return 1 # Si on peut fouiller dans le dossier
    [ "`ls "$1" | wc -l`" == "0" ] && return 0 # Si le dossier est vide
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            recursiveSearch "$file"
        fi
        echo "$file"
    done
}
 
recursiveSearch  $dossierDeTravail

Bash : recursif 2 / zenity

#!/bin/sh
#
# Test de l'existence du programme ZENITY 
if which zenity > /dev/null; then
    echo "zenity already install. Fine."
else
    echo "zenity does not exist. Go for the installation"
    su -c "apt-get install zenity"
fi
 
dossier=`zenity --title="Choisir un dossier" --file-selection --directory` ; 
find $dossier -depth -name '*.wav' -execdir bash -c '[[ -f $0 ]] &&  flac -7 --replay-gain "$0" ' {} \;

Bash: jours semaine

#!/bin/sh
 
case $(LC_ALL=C date +%a) in
   (Mon) echo 'Bonjour :)';;
   (Thu) echo 'Bienvenue ;) ';;
   (Wed|Sat|Sun) echo 'YEP !!! :)';;
   (*) echo 'Hi ! ;)' ;;
esac

VIRTUAL BOX: racc.claviers

La touche Host est la touche Ctrl droite de votre clavier.

  Host: Active (intègre la souris et le clavier dans la machine)
  Host: Désactive le mode capturé (sortir de la machine capturé)
  Host + Début: Affichée la barre de menu en mode intégré
  Host + A: Ajuste la taille de l'écran invité
  Host + F: Passe l'affichage en mode plein écran
  Host + F: Passe l'affichage en mode normal
  Host + G: Ajuste automatiquement la taille et l'écran de l'invité
  Host + H: Arrêt par ACPI
  Host + I: Activation de l'intégration de la souris
  Host + I: Désactivation de l'intégration de la souris
  Host + L: Mode affichage intégré dans le bureau
  Host + P: Mettre la machine virtuelle en pause
  Host + P: Sortir la machine virtuelle du mode pause
  Host + Q: Fermer (quitter) la machine virtuelle
  Host + R: Redémarrer la machine virtuelle

sources.list

$ find /etc/apt -type f -name '*.list' -exec bash -c 'echo -e "\n$1\n"; nl -ba "$1"' _ '{}' \;

Bloquer l'USB

Bloquer les ports

serveur@serveurProliant:~$ lsusb -t
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 480M
    |__ Port 2: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 3: Dev 3, If 0, Class=Hub, Driver=hub/2p, 480M
    |__ Port 4: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M

Pour désactiver un port : (ici le bus 2 port 4)

echo '2-4' |sudo tee /sys/bus/usb/drivers/usb/unbind

Pour le réactiver

echo '2-4' |sudo tee /sys/bus/usb/drivers/usb/bind

Bloquer les périphériques de stockage

1. Initialiser l'usb-storage

cat /etc/modprobe.d/block_usb.conf
install usb-storage /bin/true

2.Blacklister usb-storage

cat /etc/modprobe.d/blacklist.conf
blacklist usb-storage
blacklist uas

find

find /var/log/ -maxdepth 3 -name "*gz*" -ctime +5

Explication :

”/var/log” : indique le répertoire ou nous allons chercher. Nous aurions aussi pu indiquer “.” pour spécifier le répertoire où nous nous trouvons.

“name “*tar*”“ : Permet de nous afficher tous les fichiers qui possèdent “tar” dans leur nom. On s'aide des “*” qui nous permettent de dire “tout à partir du moment ou il y a tar”.

“maxdepth 3” : permet d'indiquer que nous allons descendre dans les arborescences sur trois niveaux. Le trois à été choisi car on descend rarement plus de 3 niveaux dans les logs mais cela peut être plus où peut ne pas être indiqué pour descendre au maximum.

“ctime +5” : c'est l'option la plus intéressante, avec celle-ci nous n'affichons que les données dont la création est plus vieille que 5 jours.

Avec cette dernière option, nous pouvons trier les fichiers selon la date, mais il existe d'autres options :

“ctime” pour “creation time” : permet de n'afficher que les fichiers dont la création est plus ou moins vieille que le nombre de jour donné.

“atime” pour “access time” : permet de n'afficher que les fichiers dont le dernier accès est plus ou moins vieux que le nombre de jour donné

“mtime” pour “modification time”: permet de n'afficher que les fichiers dont la dernière modification est plus ou moins vieille que le nombre de jour donné

Sur ces trois options, nous pouvons spécifier un nombre de jours précédé d'un ”+” pour “plus vieux que X jours” ou un “-” pour spécifier “moins vieux que”.

Quelques exemples :

Pour lister les fichiers qui ont été modifiés il y a moins de trois jours :

find -mtime -3

Pour lister les fichiers qui ont été ouverts (lus) il y a plus de 20 jours :

find -atime +20

On peut bien entendu combiner l'une des trois options avec les autres options vues un peu plus tôt dans le tutoriel.

Supprimer les fichiers

Maintenant que nous savons lister les fichiers, nous voulons agir sur les fichiers que nous avons trouvés avec la même ligne de commande. On peut pour cela ajouter “-exec ”. Par exemple si nous souhaitons supprimer les archives qui date de plus de 30 jours dans le dossier “/var/log”

find /var/log/ -maxdepth 3 -name "*gz*" -ctime +30 -exec rm -f {} \;

“{}“ permet d'afficher le nom du fichier trouvé à la place de ces deux accolades.

“\;” : permet de terminer la commande proprement

Nous sommes libre d'effectuer la commande que l'on souhaite après le ”-exec”.

Vitesse démarrage

systemd-analyze blame

Pb write / USB key

PID

ps -ef | grep "NOM_PROCESSUS" | awk '{ print $2 }'

Et sur une boucle si plusieurs kills à tuer

for proc in $(pgrep <process command>); do kill $proc; done

CUP

ragnarok@debian-SID-64bit-vbox-freeBSD:~$ lscpu | grep bit
CPU op-mode(s):      32-bit, 64-bit
Address sizes:       36 bits physical, 48 bits virtual
if [[ $(sed -n '/flags/{/lm/ p;q}' /proc/cpuinfo) ]] ; then echo "Ton CPU est un 64 bits" ; else echo "Non-compatible 64 bits" ; fi

Packager sous DEBIAN

Xrandr : augmenter sa résolution

Visualiser la liste des résolutions natives de votre système

$ xrandr

Ensuite, calculez un modèle pour la résolution qui vous convient

$ cvt 1920 1080 

Ensuite, utilisez xrandr pour ajouter la résolution à l’affichage

$ xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
$ xrandr --addmode eDP-1 "1368x768_60.00"

Appliquer cette nouvelle résolution

$ xrandr --output eDP-1 --mode "1368x768_60.00"

xrandr Pour tester une configuration de suite

xrandr -s 1600x1024

Crontab USER

Vérifier ses variables d'environnement, notamment XDG_RUNTIME_DIR

serveur@serveurProliant:~$ env
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd    =40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;4    4:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;    31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7    z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=0    1;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tb    z=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:    *.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=0    1;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.m    jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;    35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.sv    gz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;3    5:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vo    b=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*    .flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35    :*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=0    0;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.    mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;3    6:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=192.168.1.10 51524 192.168.1.50 22
LANG=fr_FR.UTF-8
XDG_SESSION_ID=12
USER=serveur
PWD=/home/serveur
HOME=/home/serveur
SSH_CLIENT=192.168.1.10 51524 22
SSH_TTY=/dev/pts/0
MAIL=/var/mail/serveur
TERM=xterm
SHELL=/bin/bash
SHLVL=1
LOGNAME=serveur
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
_=/usr/bin/env

Puis cette variable

crontab -e
00 21 2 6 * XDG_RUNTIME_DIR=/run/user/1000 /ma/commande/De/Shell/Script

Voir aussi https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working

Modifier la date des fichiers Récursif

find date/  -print0 | xargs -0 -I '{}' touch -r '{}' -d '+2 day' '{}'

avec [u][b]date/[/b][/u] le répertoire à modifier

En pratique Création d'un répetoire à plusieurs niveaux et fichiers de test

ragnarok@Fenrir:~$ mkdir -p date/sousdate
ragnarok@Fenrir:~$ touch date/test date/test2 date/sousdate/test3 date/sousdate/test4

On regarde les dates

ragnarok@Fenrir:~$ ls -lR date/
date/:
total 4
drwxr-xr-x 2 ragnarok ragnarok 4096 juin   5 10:33 sousdate
-rw-r--r-- 1 ragnarok ragnarok    0 juin   5 10:33 test
-rw-r--r-- 1 ragnarok ragnarok    0 juin   5 10:33 test2
 
date/sousdate:
total 0
-rw-r--r-- 1 ragnarok ragnarok 0 juin   5 10:33 test3
-rw-r--r-- 1 ragnarok ragnarok 0 juin   5 10:33 test4

On les avances de 2 jours

ragnarok@Fenrir:~$ find date/  -print0 | xargs -0 -I '{}' touch -r '{}' -d '+2 day' '{}'

On vérifie

ragnarok@Fenrir:~$ ls -lR date/
date/:
total 4
drwxr-xr-x 2 ragnarok ragnarok 4096 juin   7  2019 sousdate
-rw-r--r-- 1 ragnarok ragnarok    0 juin   7  2019 test
-rw-r--r-- 1 ragnarok ragnarok    0 juin   7  2019 test2
 
date/sousdate:
total 0
-rw-r--r-- 1 ragnarok ragnarok 0 juin   7  2019 test3
-rw-r--r-- 1 ragnarok ragnarok 0 juin   7  2019 test4

C'est OK

Note

touch -a -m -t 201512180130.09 fileName.ext
-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

echo $var / echo "$var"

echo “$var” conservera la mise en page (retour à la ligne).

RUN fsck MANUALLY

“Exécuter fsck manuellement.”

Note que bien que les incohérences du système de fichiers ont été corrigées mais il ne s’en est pas forcément tiré sans dommage (perte de fichiers ou de modifications de fichiers). Au mieux les inodes faisant partie de la liste chaînée orpheline corrompue étaient des fichiers temporaires qui auraient de tout façon été supprimés à l’arrêt ou au redémarrage, au pire ce sont des fichiers importants qui étaient en cours de modification. Le contenu des fichiers orphelins se retrouve dans le répertoire spécial /lost+found, mais sans les noms d’origine.

P H Debian fr

Pour les utilisateurs du shell

Afin de ne pas laisser de tty ou consoles actives lorsque l'on quitte le PC (physiquement), il est possible de demander la déconnexion automatique du tty et de ces consoles.

Pour cela utiliser la variable TMOUT à positionner en secondes.

Pour un user uniquement : Editer son .bashrc ou .profile et ajouter

download
# Export TMOUT
# Délai inactivité avant deconnexion
TMOUT=600

Vous serez déconnecté automatiquement au bout de 10 minutes (si 300, 5 minutes… ).

Très utile en cas de connexion ssh également, ça évite de laisse une connexion ouverte sur un serveur distant (surtout en root)….

Afin que ce paramètre soit pris en compte de suite, recharger votre .bashrc

download
source .bashrc

Si vous voulez appliquer ce paramètre à tous vos users : apporter cette modification sur ce fichier

download
 sudo nano /etc/bash.bashrc

et

download
sudo source  /etc/bash.bashrc

Utilisateurs et services

Connaitre l'utilisateur qui fait tourner un service

ps auxn
ps auxnww
ps -eo euser,ruser,suser,fuser,f,comm,label
netstat -tulpan

Récupérer les mails d’un fichier sous Linux

Parse le fichier, récupère les mails, supprime les doublons et redirige la sortie standard via un fichier texte

$ grep -i -o '[A-Z0-9._%+-]\+@[A-Z0-9.-]\+\.[A-Z]\{2,4\}' inputMail.txt | sort -u > outputMail.txt

Inverse un motif dans un fichier selon des patterns

cat file.txt | awk '{split($0,a," : ") ; print "[[ "a[2] " | "  a[1] "]]"}'

Supprimer les kernels non utilisés

# dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs apt-get -y purge

Lister les repo d'apt et les sources.list

 find /etc/apt -type f -name '*.list' -exec bash -c 'echo -e "\n$1"; nl -ba "$1"' _ '{}' \;
grep -v "^#" /etc/apt/sources.list{,.d/*}
apt-cache policy | grep http | awk '{print $2 $3}' | sort -u
find /etc/apt -type f -name '*.list' | xargs cat | grep -v "^#" | grep -v '^ *$'

Temps d'execution d'un script et charge processeur

/usr/bin/time -f "\t%E real,\t%U user,\t%S sys, \t%P cpu" ls -Rls /

nmap

Scanner plusieurs IP

nmap 192.168.1.1 192.168.1.20 192.168.1.30 192.168.1.40

Scanner une plage d'IP

nmap 192.168.1.1-20
nmap 192.168.1.*

Scanner la totalité d'un réseau

nmap 192.168.1.0/24

Exclure un poste du scan

nmap 192.168.1.0/24 --exclude 192.168.1.5

Scann et recherche machine Up ou Down

nmap -sP 192.168.0.0/24

xfce4 : changer fond écran ligne de commande

Afin de déterminer les paramètres à utiliser, lancer

$ xfconf-query -c xfce4-desktop -m

Et modifier de façon traditionnelle le wallpaper

$ xfconf-query -c xfce4-desktop -m
Commencer à surveiller le canal « xfce4-desktop » :
 
définir: /backdrop/screen0/monitoreDP-1/workspace0/last-image

Pour avoir toutes les options de xfce4-desktop

xfconf-query -c xfce4-desktop -l

Modifier instantanément le wallpaper

$ xfconf-query  -c xfce4-desktop -p /backdrop/screen0/monitoreDP-1/workspace0/last-image -s "/chemin/vers/le/dossier/du/fond-ecran.png"

glances

Eviter les soucis de mise en page

alias 
alias glances='glances 2>/dev/null'

Mise à jour cassée ou interrompue

Nettoyer s'il y a des reliquats d'installation qui coincent

download
su - 
apt update

Lancer la réparation

download
dpkg --configure -a
apt install -f

Finir ta mise à jour (éventuellement)

download
apt upgrade

Réparer une clef USB

Identifier sa clef USB

download
$ lsblk

ou

download
$ blkid

On doit voir alors une sortie de ce style “/dev/sdc1”

Démonter la clef si elle est montée

download
# umount /dev/sdXY

Réparer la clef USB

download
# fsck /dev/sdXY

Crontab sans notification mail

Par défaut, lorsqu'une tâche cron est exécutée, cron envoie des notifications par courrier électronique au compte utilisateur.

Pour désactiver les notifications par e-mail, ajoutez

> /dev/null 2>&1

à la commande dans la tâche cron.

Cela redirige toute la sortie de la tâche cron vers le périphérique /dev/null.

Par exemple, la tâche cron suivante n'envoie pas de notifications par courrier électronique:

15 * * * Sun     ${HOME}/bigtask.sh > /dev/null 2>&1

Pour reprendre la réception des notifications par e-mail des tâches cron, supprimez simplement > /dev/null 2>&1 de la commande.

FLAC TO MP3

Avec ffmpeg

parallel ffmpeg -i {} -qscale:a 0 {.}.mp3 ::: ./*.flac

Avec lame

#!/bin/bash

for a in ./*.flac; do
  # give output correct extension
  OUTF="${a[@]/%flac/mp3}"

  # get the tags
  ARTIST=$(metaflac "$a" --show-tag=ARTIST | sed s/.*=//g)
  TITLE=$(metaflac "$a" --show-tag=TITLE | sed s/.*=//g)
  ALBUM=$(metaflac "$a" --show-tag=ALBUM | sed s/.*=//g)
  GENRE=$(metaflac "$a" --show-tag=GENRE | sed s/.*=//g)
  TRACKNUMBER=$(metaflac "$a" --show-tag=TRACKNUMBER | sed s/.*=//g)
  DATE=$(metaflac "$a" --show-tag=DATE | sed s/.*=//g)

  # stream flac into the lame encoder
  flac -c -d "$a" | lame -V0 --add-id3v2 --pad-id3v2 --ignore-tag-errors \
    --ta "$ARTIST" --tt "$TITLE" --tl "$ALBUM"  --tg "${GENRE:-12}" \
    --tn "${TRACKNUMBER:-0}" --ty "$DATE" - "$OUTF"
done

WMA TO MP3

En une ligne

find . -iname "*.wma" -execdir bash -c 'NAME="{}" && ffmpeg -y -i "$NAME" -ab 192k "${NAME/.wma/.mp3}" && rm "$NAME"' \;

En script

download
#!/bin/bash
	for i in *.wma; do
            j="${i%.wma}"
            soundconverter -b -m audio/mpeg -s .mp3 "$j.wma" && rm -f "$j.wma"  && echo "$i réencodé en mp3."
	done

Redimensionner des images

for f in *.jpeg ; do convert $f -resize 50% new_$f; done

Chercher [dans] les logs

Avec systemd, nous avons obtenu journalctl qui permet facilement un filtrage à grain fin comme celui-ci:

sudo journalctl --since "2 days ago"   
sudo journalctl --since "2019-03-10" --until "2019-03-11 03:00"
sudo journalctl -b # last boot 
sudo journalctl -k # kernel messages
sudo journalctl -p er # by priority (emerg|alert|crit|err|warning|info|debug)
sudo journalctl -u sshd # by unit 
sudo journalctl _UID=1000 # by user id

Fonction bash pour la gestion des couleurs

download
#!/bin/bash

couleur_rouge () {
    echo -e "\e[91m $@ \033[0m"
} 

echo  "Une phrase avec un $(couleur_rouge mot) voilà"

Et pour le référenciel des couleurs et bien plus : https://misc.flogisoft.com/bash/tip_colors_and_formatting

Retrouver la date de mise à jour d'un logiciel

download
grep installed /var/log/dpkg.log | grep <LE PAQUET>

Exemple, avec VLC

download
grep installed /var/log/dpkg.log | grep vlc
2022-01-26 16:39:29 status half-installed libvlccore9:amd64 3.0.16-1+b5
2022-01-26 16:39:29 status half-installed libvlc5:amd64 3.0.16-1+b5
2022-01-26 16:39:29 status half-installed vlc:amd64 3.0.16-1+b5
2022-01-26 16:39:29 status half-installed vlc-bin:amd64 3.0.16-1+b5
2022-01-26 16:39:29 status half-installed libvlc-bin:amd64 3.0.16-1+b5
2022-01-26 16:39:40 status half-installed vlc-plugin-base:amd64 3.0.16-1+b5
2022-01-26 16:39:41 status half-installed vlc-plugin-skins2:amd64 3.0.16-1+b5
2022-01-26 16:39:41 status half-installed vlc-plugin-qt:amd64 3.0.16-1+b5
2022-01-26 16:39:41 status half-installed vlc-plugin-video-output:amd64 3.0.16-1+b5
2022-01-26 16:41:11 status half-installed vlc-plugin-access-extra:amd64 3.0.16-1+b5
2022-01-26 16:41:11 status half-installed vlc-plugin-notify:amd64 3.0.16-1+b5
2022-01-26 16:41:11 status half-installed vlc-plugin-samba:amd64 3.0.16-1+b5
2022-01-26 16:41:11 status half-installed vlc-plugin-video-splitter:amd64 3.0.16-1+b5
2022-01-26 16:41:12 status half-installed vlc-plugin-visualization:amd64 3.0.16-1+b5
2022-01-26 16:41:54 status installed libvlccore9:amd64 3.0.16-1+b6
2022-01-26 16:41:54 status installed vlc-plugin-qt:amd64 3.0.16-1+b6
2022-01-26 16:42:48 status installed vlc-plugin-notify:amd64 3.0.16-1+b6
2022-01-26 16:42:48 status installed vlc-plugin-samba:amd64 3.0.16-1+b6
2022-01-26 16:42:49 status installed vlc-plugin-skins2:amd64 3.0.16-1+b6
2022-01-26 16:42:50 status installed vlc-plugin-video-splitter:amd64 3.0.16-1+b6
2022-01-26 16:42:50 status installed libvlc5:amd64 3.0.16-1+b6
2022-01-26 16:42:51 status installed vlc-plugin-visualization:amd64 3.0.16-1+b6
2022-01-26 16:42:51 status installed vlc-plugin-access-extra:amd64 3.0.16-1+b6
2022-01-26 16:42:53 status installed libvlc-bin:amd64 3.0.16-1+b6
2022-01-26 16:42:55 status installed vlc-bin:amd64 3.0.16-1+b6
2022-01-26 16:44:03 status installed vlc-plugin-video-output:amd64 3.0.16-1+b6
2022-01-26 16:44:04 status installed vlc-plugin-base:amd64 3.0.16-1+b6
2022-01-26 16:44:04 status installed vlc:amd64 3.0.16-1+b6
2022-01-26 16:44:05 status installed libvlc-bin:amd64 3.0.16-1+b6

Retrouver la date de mise à jour d'un logiciel

download
awk '/^Upgrade:/{getline;d=$2" "$3}END{print d}' /var/log/apt/history.log

fsck : régler le laps de temps de verif système

Pour connaître le réglage par défaut de la vérification de ta partition sda1 par exemple,

download
    # LANG=C tune2fs -l /dev/sda1 | egrep -i "mount count|Check interval|Last|Next"

Pour lancer la vérification avec fsck tous les 20 montages de la partition sda1,

download
    # tune2fs -c 20 /dev/sda1

Pour lancer la vérification avec fsck tous les 20 jours de la partition sda1,

download
    # tune2fs -i 20d /dev/sda1

Droits sur rep de pub web

A défaut

download
#!/bin/sh

chown -R www-data:www-data /var/www

find /var/www -name "*" -type d -exec chmod 755 {} \;

find /var/www -name "*" -type f -exec chmod 644 {} \;

Lister les noyaux

download
echo; dpkg -l | awk '!/^rc/ && / linux-(c|g|h|i|lo|m|si|t)/{print $1,$2,$3,$4 | "sort -k3V | column -t"}' ; echo -e "\nNoyau courant : $(uname -mr)"
ii  linux-image-5.10.0-10-amd64  5.10.84-1   amd64
ii  linux-image-5.10.0-15-amd64  5.10.120-1  amd64
ii  linux-image-5.10.0-17-amd64  5.10.136-1  amd64
ii  linux-image-5.10.0-19-amd64  5.10.149-2  amd64
ii  linux-image-amd64            5.10.149-2  amd64

Noyau courant : 5.10.0-19-amd64 x86_64

Connaître son screensize

Avec xrand

download
$ xrandr | awk '/ connected/{print sqrt( ($(NF-2)/10)^2 + ($NF/10)^2 )/2.54" inches"}'
13,9615 inches

Avec python3

Le script

download
#!/usr/bin/env python3
import gi
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk

dsp = Gdk.Display.get_default()
n_mons = dsp.get_n_monitors()

print(("\t").join(["Screen", "width", "height", "diagonal\n"+32*"-"]))

for i in range(n_mons):
    mon = dsp.get_monitor(i)
    mon_name = mon.get_model()
    w = mon.get_width_mm()/25.4
    h = mon.get_height_mm()/25.4
    d = ((w**2)+(h**2))**(0.5)
    print(("\t").join([mon_name]+[str(round(n, 1)) for n in [w, h, d]]))

L'output

download
$ python3 screensize.py 
Screen	width	height	diagonal
--------------------------------
eDP-1	12.2	6.9	14.0

Rebooter sur une entrée grub de son choix

download
# grub-reboot X
# reboot now

Et X préciser l'entrée du grub sur laquelle rebooter

Détection & installation des microprogrammes manquants

Très intéressante cette entrée dans le manuel, je l'avais zappée https://www.debian.org/releases/stable/amd64/install.fr.pdf

§ 6.4.3 Finaliser le système installé (à ce moment p. 59)

download
# apt install isenkram-cli
download
# isenkram-autoinstall-firmware

Changer la couleur de fond du terminal

download
$ echo -e '\e]11;Yellow\a'
download
$ echo -e '\e]11;Black\a'

Architecture

Connaître les architectures supportées

download
lscpu | head -n2

Architecture du système

download
dpkg --print-architecture

ou

download
arch

Ajout d'une architecture, ici 386

download
dpkg --add-architecture i386
apt update

Purge des paquets i386 puis suppression d'une architecture, ici 386

download
aptitude purge ~i~ri386
dpkg --remove-architecture i386
apt update

Lister les paquets installés, ici architecture i386

download
aptitude search ~i~ri386
aptitude search ~i~ri386aptitude search '~S ~i ~ri386' 
aptitude search '?narrow(?installed, ?architecture(i386))'

brightness / xrandr

download
xrandr --output $(xrandr | grep -w connected | cut -f '1' -d ' ') --brightness 0.5

Ajout d'extensions

download
rename s/$/.jpg/ *

Test si programme / service tourne...

download
###################
## pgrep example ##
###################
pgrep -x mysqld >/dev/null && echo "Process found" || echo "Process not found"
pgrep -x httpd >/dev/null && echo "Process found" || echo "Process not found"
 
###################
## pidof example ##
###################
pidof httpd >/dev/null && echo "Service is running" || echo "Service NOT running"
pidof nginx >/dev/null && echo "Service is running" || echo "Service NOT running"
 
################
## ps example ##
################
ps -C httpd >/dev/null && echo "Running" || echo "Not running"
ps -C nginx >/dev/null && echo "Running" || echo "Not running"

Avec systemd

download
systemctl is-active --quiet <service name> || systemctl restart <service name> &

Lancer serveur php sans conf particulière

download
php -S localhost:8000 -t /home/<USER>/web

Y accéder

http://localhost:8000/

php-bash/aide-memoire.txt · Dernière modification : 2024/10/22 16:56 de cyrille