Recharger des fichiers de conf sans se déconnecter
. ~/.profile
est strictement équivalent à:
source ~/.profile
la commande source exécute le script spécifié dans le shell actuel.
Obtenir son adresse IP publique
dig +short myip.opendns.com @resolver1.opendns.com curl -s http://whatismyip.akamai.com curl wgetip.com
Changer de Shell
Vérifier si on est en shell Bash:
echo $SHELL retourne /bin/bash
pour passer sous Fish par exemple, ajouter le path du binaire du nouveau Shell /usr/bin/fish
dans /etc/shells
puis changer de shell par défaut en lançant la commande chsh
(Change Shell):
chsh -s /usr/bin/fish
Lister les port écoutés
sudo netstat -tupln4
ici les option utilisés permettent de lister les ports : TCP UDP en IPV4 locaux avec le nom du programme qui écoute avec le numéros de port (et non le nom du service).
Chemin complet
Pour afficher le chemin complet vers un fichier il est possible d’utiliser l’une de ces techniques :
readlink -f filename ls -d -1 "$PWD/www.conf" find "$(pwd)" -name www.conf
Explorateur de fichier
ranger est explorateur de fichier « graphique » pour la ligne de commande qui utilises vim pour l’édition de nom de fichiers/dossiers
Trouver l’emplacement d’un binaire
la commande command -v
est à favoriser par rapport à la commande which
qui est un process externe (sécurité, performances etc.) et cherche les binaires pas uniquement dans le PATH.
command -v monbinaire
locate
recherche des entrées dans une base de données mlocate mise à jour régulièrement par la système.
Cherche une correspondance sur tout le chemin, il est possible d’utiliser le paramètre -r
(regex)
locate -r '^.*/monbinaire
find
peut avec les arguments -exec
ou -ok
être utilisé pour exécuter des instructions sur les résultats de la commande
find -name '*onbinaire' -print -ok ls -l {} \;
grep -R
en excluant des dossiers
grep -iR --exclude-dir=node_modules ' port ' *
Fichiers et droits
chown
possède de nombreuses options, pour affecter des dossiers/fichiers de façon sélective:
chown www-data:www-data /tmp/toto # modifie user:groupe chown -R www-data:www-data /tmp/toto # modifie récursivement chown -h www-data:www-data /tmp/toto # modifier les droits sur les symlinks eux même (et non la cible du lien) chown --from=behrouze www-data /tmp/toto # modifie le owner des fichier de l'utilisateur spécifié chown --from=:old-group :new-group /tmp/toto # modifie le groupe des fichier du groupe old-group chown --reference=fichier-source fichier-cible # copie les droits d'un fichier existant chown g+s www-data /toto/ # utilisation du SGID, appliqué à tout nouveau fichier créé
voir l’admin guide avec également les setuid et setguid avec cette question.
Debugger en Bash
mode debug: set -x
et pour remettre en mode normal: set +x
Pour exécuter une successions de commandes en tant que root
Il suffit d’utiliser l’option -c
puis de l’ensemble des commandes englobés dans des quotes :
sudo sh -c 'cat fichier|grep -v "#" > /etc/nginx/sites-available/monsite.conf'
Et pour exécuter des commandes avec un user ne disposant pas de shell, la commande précédente nous renvoi un méchant This account is currently not available. pour byepasser cela il faut utiliser l’option -s
pour spécifier un shell:
su -s /bin/bash -c 'php /var/www/nextcloud/occ' www-data
Grep
grep -A 5 # affiche les 5 lignes suivants le pattern trouvé grep -B 5 # précédent grep -C 5 # avant et après grep -E -w 'version|number' fichier # cherche les mots version OU number dans le fichier
Resources monitoring
htop
: commandes listant les process et leurs consommation en direct, avec une interface moins austère que le classique topglances --theme-white
: beaucoup plus fourni que htop avec les métriques relatifs au réseau, infos générales etc.gpustat --watch
: infos concernant l’usage du GPUpgrep
: équivalent à unps | grep -v grep
👍pstree -a
: liste des process en arborescencewatch -n5 xxx
: boucle sur une commande toutes les 5 secondes (n arg) a utiliser par ex avec acpi (niveau de batterie)
Trie avec sort
du -sh /usr/share/* | sort -h
: taille des dossier trié par taillesort -n -k3 /usr/share/nmap/nmap-services
: trie selon un ordre numérique (-n
) et sur la 3ème colonne (-k3
).-t
pour spécifier un délimiteur autre qu’un délimiteur de transition non blanc => blanc
MAJ du système
Pour appliquer les MAJ de sécurité automatiquement utiliser l’utilitaire unattended-upgrades. A noter que mettre un apt update
dans un crontab
sera souvent en échec car le PATH n’est pas setté lors de l’exécution par le daemon cron
.
pour obtenir la date du dernier apt update
:
ls -l /var/cache/apt/pkgcache.bin # date de dernière modif stat /var/cache/apt/pkgcache.bin # avec les détails des dates d'accès
la date du dernier apt upgrade
:
tail -1 /var/log/apt/history.log
dans la même lignée, obtenir la date des 3 derniers reboot (ne fonctionne pas sur les Raspberry Pi utiliser uptime) :
last -x | grep shutdown | head -3 uptime -s # la date uptime -p # depuis quand
Changer l’éditeur de texte par défaut
Un éditeur de text par défaut doit être sélectionné pour utiliser par exemple les commandes tels que crontab -e
, et nous avons le choix parmis les éditeurs installés (souvent au moins vim
et nano
):
select-editor
Changer le nom de sa machine
il est possible d’utiliser les outils nmtui
, nmcli
ou hostnamectl
(sudo hostnamectl set-hostname xxx
, voir cet article) ou bien d’éditer directement les fichiers suivants:
vi /etc/hostname vi /etc/hosts
Distribution Linux
Pour déterminer la distribution les infos se trouvent:
hostnamectl | grep -i sys # hostnamectl fait parti de systemd cat /etc/os-release cat /proc/version
Grub
Pour customiser Grub (OS loader) en ajoutant la mémorisation du dernier choix, ainsi que l’ajout d’une image de background perso, il faut éditer le fichier sudo vi /etc/default/grub
et ajouter/modifier :
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true GRUB_BACKGROUND="/home/behrouze/Images/Grub.jpg"
et faire prendre en compte les modifications par un sudo update-grub
.
Changer de timezone
Lorsque l’horloge de la machine est détallée de X heures, penser à vérifier le fuseau horaire et le modifier si nécessaire:
sudo timedatectl # liste le fuseau horaire et l'heure locale et UTC sudo timedatectl list-timezones # liste les timezones existantes sudo timedatectl set-timezone Europe/Paris # fixe le fuseau horaire à Paris
LOCALS
Si en utilisant un système on a des erreurs nous indiquant LANGUAGE = (unset)
ou LC_ALL = (unset)
il nous faut configurer les locales pour notre environnement, qu’il est possible de lister avec la commande locale
.
Pour cela ajouter a notre .bashrc
:
export LC_ALL="fr_FR.UTF-8" export LANG="fr_FR.UTF-8" export LANGUAGE="fr_FR.UTF-8"
et générer puis reconfigurer les locales avec raspi-config
sur un Raspberry Pi ou sur un Linux quelconque :
locale-gen "en_US.UTF-8" dpkg-reconfigure locales
Alias paramétré
En bash, pour créer un alias qui exploite des paramètres, cad à qui on peut passer des arguments, il faut passer par une fonction. Mais il est possible de créer une fonction inline (pour éviter la déclaration) comme ceci:
alias mon-alias-avec-params='func(){ echo avant "$@" après; unset -f func; }; func'
L’alias est créé avec en 1ère partie la déclaration de la fonction (func) qui va prendre les arguments avec $@
ou $1 $2
etc. , suivi d’un unset -f
qui va supprimer cette fonction du scope, puis en 2ème partie l’appel de la fonction fun pour l’exécuter.
Random
Linux nous permet de générer des caractères aléatoires en utilisant le fichier /dev/urandom
:
head -c 30 /dev/urandom > random.txt # génère un fichier de 30 caractères head -30 /dev/urandom > random.txt # génère un fichier de 30 lignes base64 /dev/urandom | head -c 30 # génère une chaine de 30 caratères ascii
Modules Linux
Pour inspecter les modules chargé (actifs) sur votre système utiliser lsmod
. Cette commande va vous lister les modules non inclus dans le kernel chargés.modinfo
nous donnera plus d’infos sur un module donné et il est possible de spécifier le champs (non normalisé) à afficher (parmi notamment author, description, parm, depends, alias, etc.) avec un -F: modinfo ip_tables -F depends
.
Les chargement et déchargements de modules s’effectueront via les commandes sudo modprobe -a xxx
et sudo modprobe -r xxx
.
Il est possible d’empêcher le chargement de certains modules au démarrage du système grâce à un fichier de conf /etc/modprobe.d/
blacklist.conf.