====== Outils et astuces ====== ===== Éditer un fichier ===== Que votre éditeur favori soit //vim//, //nano//, //emacs// ou autre, il faut vous assurer : * de connaître ses commandes (aller à la ligne X, faire un chercher/remplacer, réindenter) * de savoir activer la coloration syntaxique. Ça paraît superfétatoire, mais c'est essentiel car cela vous permet de vous repérer plus rapidement dans le fichier voire de détecter des erreurs de syntaxe. Il est nécessaire de connaître son éditeur pour être efficace. Pour //vim//, vous pouvez lancer //vimtutor// qui vous fera passer par des exercices pour vous familiariser avec //vim//. Le site [[http://vimcasts.org/episodes/|VimCasts]] regorge de tutoriaux et d'astuces. ===== Les processus ===== ==== htop ==== //htop// permet de lister les processus, rechercher un processus, tuer des processus, trier les processus selon différents critères... Il affiche également des informations sur le système : occupation mémoire, utilisation des processeurs, charge du système, etc. Pour n'afficher que les processus de l'utilisateur ''%%foo%%'', faites ''%%htop -u foo%%''. Voir https://peteris.rocks/blog/htop/ pour comprendre les informations fournies par //htop//. ==== iotop ==== Dans la même veine que htop mais particulièrement détaillé pour les IO (input/output) sur le disque ==== iftop / iptraf ==== iftop : Dans la même veine que htop mais dédier au réseau. Faites ''%%iftop -i eth0%%'' pour voir le trafic réseau de l'interface eth0 iptraf : Plus pour avoir des statistiques globales sur les ports, le trafics.. ==== kill ==== La commande //kill// permet d'envoyer un signal à un processus. On peut indifféremment utiliser le n° ou le nom d'un signal pour l'utiliser. Ainsi ''%%kill -9 %%'' est normalement équivalent à ''%%kill -KILL %%'' Pour être bien certain du signal envoyé, il est préférable d'utiliser son nom : tous les signaux n'ont pas un n° attribué de façon certaine. Voir https://en.wikipedia.org/wiki/Unix_signal#POSIX_signals pour la liste des signaux POSIX. ==== killall ==== //killall// est le petit frère de //kill//. Il permet d'envoyer des signaux aux processus sans connaître leur PID, juste avec leur nom. Comme //killall// peut ratisser large, il vaut mieux lui préférer le couple //pgrep/////pkill//. ==== pgrep / pkill ==== //pgrep// permet de rechercher parmi les processus, //pkill// permet d'envoyer un signal aux processus avec la même syntaxe de recherche que //pgrep//. # Rechercher un processus par son nom pgrep nom # Rechercher un processus par l'intégralité de sa ligne de commande pgrep -f nom # Rechercher un processus par son nom, appartenant à l'utilisateur foo pgrep -u foo nom # Afficher le nom du processus en plus de son PID pgrep -l nom # Afficher la ligne de commande complète en plus de son PID pgrep -a nom # Envoyer le signal SIGTERM aux processus correspondants à la recherche pkill SIGTERM nom ==== lsof ==== //lsof// permet de connaître le ou les processus utilisant une ressource. # Qui utilise /home/foo ? lsof /home/foo # Qui utilise /dev/sda ? lsof /dev/sda # Qui utilise le port 80 ? lsof -i :80 ===== Le réseau ===== ==== SS ==== SS (pour Socket Statistics) est un outil qui vient remplacer l’ancien netstat aujourd’hui déprécié. SS permet en outre de récupérer un plus grand nombre d’informations que netstat, il est plus rapide, et va chercher ses informations directement dans /proc. Quelques exemples: # Lister les connexions tcp (-t) en stauts "listenning" (-l) par un processus (-p) ss -nltp # Lister le connexions udp (-u) et force l'affichage de ces connexions (-a) ss -au # Afficher des stats (-s) ss -s # Affichier les temps de connexions (-o) uniquement pour tcp ipv4 (-t4) ss -t4on SS permet aussi d'aller un peu plus loin avec un système de filtres. # Filtrer par état ss -t4 state established # Filtrer par port ss -at '( dport = :ssh or sport = :ssh )' # ou plus court ss -nt4 dst :22 or src :22 # Filtrer par IP (src = ip local et dst = ip distante) ss -nt4 src 192.168.0.1 ==== Netcat (nc) ==== Netcat (à ne pas confondre avec netstat) est un outil qui permet d'ouvrir ou tester des connexions TCP ou UDP. Il permet aussi beaucoup choses plus exotique comme le transfert de fichier, l'exécution de binaire (bash) à distance, proxy basique, messagerie instantanée etc. Bref un outil très complet et pratique en cas de diagnostique. > Noter qu'en cas d'utilisation pour le transfert de fichier ou autres truc exotique, celui-ci le fait sans chiffrement des connexions. Il est recommandé d'utiliser Cryptcat qui est un fork de netcat implémentant le chiffrement. Quelques exemples: # Tester le port 80 nc -v -w2 -z wiki.chatons.org 80 # Se connecter au serveur smtp de google nc smtp.gmail.com 25 # Effectuer un requête "GET" sur une serveur web printf "GET / HTTP/1.0\r\n\r\n" | nc wiki.chatons.org 80 # Lancer une écoute sur le port 3737 nc -l -p 3737 ===== Les logs ===== ==== multitail ==== //multitail// permet de suivre les modifications d'un ou plusieurs fichiers à la manière d'un ''%%tail -f%%'' mais est bien plus souple d'usage. # Lire plusieurs fichiers multitail mail.log kern.log # Filtrer les lignes affichées d'un fichier selon une regex multitail -e regex mail.log kern.log # Filtrer les lignes affichées de *tous* les fichiers selon une regex multitail -E regex mail.log kern.log Une fois //multitail// lancé, un grand nombre de raccourcis claviers permet de le manipuler : * ''%%Entrée%%'' : Affiche une ligne rouge avec l'heure et la date sur chaque fenêtre d'affichage de fichier (utile pour se donner un repère avant un test générant des logs) * ''%%O%%'' (la lettre o en majuscule) : Efface l'affichage de toutes les fenêtres * ''%%/%%'' : Effectue une recherche dans toutes les fenêtres * ''%%b%%'' : Permet de revenir en arrière sur une fenêtre * ''%%F1%%'' : affiche l'aide, avec tous les raccourcis claviers ==== ztools ==== Ce que j'appels //ztools// (peut être à tord), ce sont les outils zcat, zless etc qui permettent de manipuler les fichiers compressés sans avoir à le décompresser avant. Très pratique donc pour lire les logs compressés par le logrotate. Par exemple pour le syslog: ''zless /var/log/syslog.1.gz'' ==== goaccess ==== //goaccess// va analyser en temps réel les logs d'un serveur pour fournir des statistiques. On pourra alors voir rapidement quelle est l'adresse IP qui se connecte le plus, quelle est la page la plus visitée, etc. ===== La veille technologique ===== Non, passer du temps sur [[https://linuxfr.org|LinuxFR]] ou sur le [[https://www.journalduhacker.net/|Journal du hacker]] n'est pas du temps perdu, quoi qu'on en dise. Il est en effet important d'effectuer une veille technologique régulière afin de découvrir de nouvelles technologies, de nouvelles astuces ou d'être averti de nouvelles failles de sécurité. Votre meilleur ami pour cette veille sera un lecteur de flux RSS. En effet, un lecteur de flux a cet immense avantage sur les réseaux sociaux d'être asynchrone : partez en vacances deux semaines, revenez, et lisez tout ce que vous avez loupé (essayez un peu de faire avec Twitter : impossible). Vous pouvez aussi généralement le configurer pour qu'il vous envoie un résumé par mail de vos flux RSS… parfait quand on le couple à la liste de discussion des autres administrateurs systèmes ! Attention : les réseaux sociaux comme Twitter peuvent aussi être utiles, de par leur propension à propager (très) rapidement l'information. Le revers de la médaille est qu'il faudra bien vérifier la véracité de la-dite information. ===== SSH ===== ==== Concierge ==== SSH fonctionne bien de base, mais avoir un fichier de configuration SSH améliore grandement les choses. Exemple : votre identifiat sur votre machine locale est ''rim'', mais ''rimd'' sur la machine ''mavrick.chatons.org''. Pour vous connecter, vous lancez la commande ssh rimd@mavrick.chatons.org Avec un fichier de configuration ssh (''~/.ssh/config'') contenant Host mavrick HostName mavrick.chatons.org User rimd vous pourrez vous connecter avec un simple ssh mavrick Avec quelques serveurs, la gestion de ce fichier ne pose pas de problème, mais on s'aperçoit, au fur et à mesure que l'on a plus de serveurs à gérer que cela devient une plaie. C'est là qu'intervient //concierge//. //[[https://github.com/9seconds/concierge|concierge]]// permet de gérer son fichier de configuration avec un langage de //template//. On pourra donc écrire {% for i in ('dorone', 'khais') %} Host {{i}} HostName {{i}}.chatons.org User rimd IdentitiesOnly yes IdentityFile /home/%u/.ssh/id_chatons {% endfor %} {% for i in ('gohan', 'diren') %} Host {{i}} HostName {{i}}.perso.org User rim IdentitiesOnly yes IdentityFile /home/%u/.ssh/id_perso {% endfor %} Ce qui créera des entrées dans le fichier de configuration SSH pour les serveurs ''dorone'', ''khais'', ''gohan'', ''diren''. Voir https://github.com/9seconds/concierge pour l'installation de //concierge//. ==== Mssh ==== //mssh//, disponible habituellement dans les dépôts de votre distribution préférée, vous permettra de lancer plusieurs connexions SSH en même temps. La fenêtre contiendra autant de terminaux que de connexions SSH. Les commandes tapées seront envoyées à tous les terminaux en même temps (il est possible de n'envoyer la commande que sur un seul serveur ou de "désactiver" certains serveurs. //mssh// est très utile pour effectuer des tâches simultanément. On lance //mssh// ainsi : mssh gohan diren ==== screen ==== Permet de lancer une session tty en tâche de fond. Exemple d'usage : Vous vous connecter en SSH depuis une connexion internet qui coupe de temps en temps : ssh bob@lamachine2bob screen Mince, une coupure, c'est pas grave : ssh bob@lamachine2bob screen -r Et on retrouve ce qu'on était en train de faire. C'est aussi très pratique pour lancer un traitement/script depuis SSH sans avoir à laisser le terminal ouvert ou craindre un timeout. Il est aussi possible d'être plusieurs dans la même "session screen" (même tty) 1er utilisateur : ssh bob@lamachine2bob screen -S nomDeLaSession # Création de la session Le 2ème : ssh bob@lamachine2bob screen -x nomDeLaSession # Rejoint une session existante Ces deux utilisateurs se retrouve dans le même terminal, session de travail colaborative. Pour sortir d'une session screen en cours en la laissant en arrière plan : //CTRL+A+D// ===== Confort visuel ===== ==== redshift ==== //[[http://jonls.dk/redshift/|redshift]]//, lui aussi généralement dans les dépôts, ajuste la température de votre écran en fonction de l'heure. L'idée est de rougir graduellement l'écran afin d'éviter la fatigue visuelle due à la lumière bleue de votre écran. ===== Confort dans le terminal ===== ==== bash-completion ==== Activer l'utilisation d'une complétion avancée des commandes se fait dans Debian en décommentant les lignes suivantes du fichier ''/etc/bash.bashrc'' : #if ! shopt -oq posix; then # if [ -f /usr/share/bash-completion/bash_completion ]; then # . /usr/share/bash-completion/bash_completion # elif [ -f /etc/bash_completion ]; then # . /etc/bash_completion # fi #fi Cela permettra, par exemple, de compléter les options d'un logiciels, le nom d'un paquet à installer, etc. Sans cela, vous n'aurez que la complétion du logiciel que vous voulez utiliser et des chemins de votre système de fichiers. ==== Partage de .bash_alias ==== Affiche un fichier sans ces commentaires : alias cgrep="grep -E -v '^(#|$|;)'" alias nocomment='cgrep' Crée une sauvegarde du fichier passé en paramètre, en rajoutant l'heure et la date function bak() { cp "$1" "$1_`date +%Y-%m-%d_%H-%M-%S`" ; } alias bak="bak" alias back="bak" Êtres gentil avec les ressources de son système : function nicecool() { if ! [ -z "$1" ] then # Prendre en paramètre un pid ionice -c3 -p$1 ; renice -n 19 -p $1 else # Si il n'y a pas de paramètre on nice le pid courant (le bash) ionice -c3 -p$$ ; renice -n 19 -p $$ fi } alias niceprod="nicecool" alias np="niceprod" Permet d'extraire des fichiers compressés de toutes sortes : function extract() { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) rar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *) echo "'$1' cannot be extracted via extract()" ;; esac else echo "'$1' is not a valid file" fi } alias extract="extract" alias unall="extract" ==== tree ==== //tree// affichera l'ensemble d'une arborescence… sous forme arborescente 😛 Ce qui permet de parcourir un dossier très vite. % tree foo foo └── bar └── baz.txt 1 directory, 1 file ==== ncdu ==== //ncdu// permet de visualiser de façon graphique (terminal) l'espace disque que prend chaque dossier (un //du//++) ncdu 1.12 ~ Use the arrow keys to navigate, press ? for help --- /usr/lib ------------------------------------------------------------------- 488.4 MiB [##########] /x86_64-linux-gnu 276.0 MiB [##### ] /jvm 93.6 MiB [# ] /python2.7 83.5 MiB [# ] /gcc 23.9 MiB [ ] /python3.5 17.8 MiB [ ] /git-core 13.9 MiB [ ] /locale 10.0 MiB [ ] /ruby 8.6 MiB [ ] /php 8.4 MiB [ ] /apache2 8.0 MiB [ ] /dovecot ... ===== Sécurité ===== ==== mkpasswd.pl ==== Fourni par le paquet ''libstring-mkpasswd-perl'' dans Debian, //mkpassword.pl// permet de générer des mots de passe aléatoires, éventuellement en forçant quelques paramètres. % mkpasswd.pl -l 20 -s 4 kta*wvN:g7bxM/se8a-b * ''-l 20'' : 20 caractères * ''-s 4'' : avec 4 caractères spéciaux (ponctuation, pourcent, etc) ===== Divers ===== ==== watch ==== //watch// permet de lancer une commande à intervalle régulier. Après une modification DNS, ''watch dig chatons.org'' pourra par exemple vous permettre de surveiller la prise en compte de cette modification sur votre résolveur. ==== truncate ==== //truncate// permet de réduire ou étendre la taille d'un fichier à la taille indiquée. ==== split ==== //split// permet de découper un fichier en plusieurs parties. ==== wall ==== //wall// permet d'envoyer un message à tous les utilisateurs connectés à la machine.