Configuration et utilisation de bash sous Debian

Configuration et personnalisation du système

Généralement la personnalisation du système se fait juste après le reboot de fin d'installation.

Pour connaitre la version d'une distribution linux

lsb_release -a

Raccourcis clavier dans bash

Ctrl a > retour début de ligne
Ctrl e > fin de ligne
Ctrl l > efface l'écran
Ctrl s > masque la saisie (Ctrl+q pour revenir)
Ctrl u > efface tout à gauche du curseur
Ctrl w > efface le mot à gauche du curseur
Ctrl r > pour une recherche dans l'historique

Important

Pour la suite de ce tutoriel, je noterais les raccourcis A-x pour les raccourcis avec la touche Alt et C-x pour ceux avec la touche Ctrl.

Manipuler le curseur

Commençons par le commencement : comment avancer et reculer le curseur de texte
C-f : avancer d’un caractère
C-b : reculer d’un caractère

Il est aussi possible de déplacer le curseur d’un mot plutôt que d’un caractère :
A-f : avancer d’un mot, s’arrêter à la fin de celui-ci
A-b : reculer d’un mot, s’arrêter au début de ce dernier.

Pour aller en début et en fin de ligne, utiliser :
C-a : début de la ligne
C-e : fin de ligne
C-xx : alterner entre la position actuelle du curseur et le début de la commande

Historique et exécution de commandes

Pour exécuter une commande que vous venez de taper, pressez:
C-m : retour charriot.

Si vous voulez naviguer dans l’historique des commandes, comme avec les touches fléchées :
C-p : commande précédente (p en référence à previous)
C-n : commande suivante (n pour next).

Il est aussi possible de rechercher une commande dans l’historique :
C-r : recherche dans l’historique
A-r : si, dans l’invite de commande, vous avez modifié une ligne rappelée de l’historique, ce raccourcis la remet en l’état (telle qu’elle se trouve dans l’historique).

Lorsque vous recherchez dans l’historique avec C-r et que plusieurs occurrences sont trouvées, appuyez plusieurs fois sur C-r pour passer de l’une à l’autre. La recherche se fait de la commande la plus récente à la plus ancienne.

Lors de l’écriture d’une commande, vous pouvez insérer le premier mot de la précédente commande exécutée. Pour cela :
A-. : rappelle le premier mot de la précédente commande.

Manipuler le texte

Il est possible de supprimer un caractère avant ou après le curseur avec les raccourcis
C-d : supprimer le caractère qui se trouve après le curseur
C-h : supprimer le caractère qui se trouve avant le curseur

Ces fonctions sont également disponibles pour supprimer les mots et les lignes :
A-d : supprimer le mot qui se trouve après le curseur
C-w : supprimer le mot qui se trouve avant le curseur
C-k : supprimer du curseur jusqu’à la fin de la commande
C-u : supprimer du curseur jusqu’au début de la commande

À noter que les mots ou lignes supprimés avec les commandes précédentes se retrouveront dans le presse-papiers de Bash. Ce presse-papiers est différent de celui du bureau, avec lequel il ne communique pas. Il offre toutefois la fonction de Kill-ring, comme Emacs : lorsque vous remplissez le presse-papiers, ce dernier n’oublie pas ce qu’il contient. Tout est gardé en mémoire et vous pouvez choisir ce que vous voulez « coller ».

Les raccourcis du presse‐papiers de Bash sont :
C-y : « coller » le dernier élément présent dans le presse-papiers
A-y : après avoir utilisé C-y, intervertit le texte collé avec ce qui se trouvait précédemment dans le presse-papiers

Bash permet également d’intervertir deux lettres ou deux mots :
C-t : intervertit la lettre sous le curseur avec celle qui la précède
A-t : pareil, avec deux mots

Enfin, il est possible de transformer la casse d’un mot :
A-u : convertit un mot en majuscules
A-l : convertit un mot en minuscules
A-c : capitalise un mot.

Auto complétion

Faire appel à l’auto‐complétion de Bash peut se faire avec le raccourci :
C-i : équivalant à la touche Tab.

Annuler

Il existe deux raccourcis pour annuler :
C-/ : annule la dernière action
C-g : quitte une recherche dans l’historique.

Gérer les processus

Quand un processus est lancé en premier plan depuis Bash, les raccourcis suivants sont disponibles :
C-c : terminer le processus. Ne vous inquiétez pas, il ne souffrira pas
C-Z : mettre en pause le processus. Peut être relancé en premier plan ou en arrière‐plan avec les commandes fg ou bg. La commande jobs liste les processus en pause.

À noter que lors de l’écriture d’une commande, C-c faite sauter le curseur sur une nouvelle ligne de commande vide.

Nettoyer et gérer l’affichage
Il est possible de manipuler ce que montre Bash à l’écran avec ces trois raccourcis :
C-l : nettoie l’écran, pour ne montrer qu’une invite de commande vide ; similaire à la commande clear
C-s : stoppe l’affichage ; très utile quand un programme très verbeux s’exécute
C-q : reprend l’affichage stoppé avec C-s.

End Of File

Il existe un raccourci pour envoyer le caractère EOF (End Of File) : C-d.
Si l’on envoie ce caractère sur une ligne de commande, cela équivaut à la commande exit.

Paramétrer nano

nano /etc/nanorc
Options intéressantes:
## Automatically indent a newly created line to the same number of
## tabs and/or spaces as the preceding line -- or as the next line
## if the preceding line is the beginning of a paragraph.
set autoindent
## Automatically hard-wrap the current line when it becomes overlong.
set breaklonglines
## Constantly display the cursor position in the status bar.  Note that
## this overrides "quickblank".
set constantshow
## Remember the used search/replace strings for the next session.
set historylog
## Display a "scrollbar" on the righthand side of the edit window.
set indicator
## Enable vim-style lock-files.  This is just to let a vim user know you
## are editing a file [s]he is trying to edit and vice versa.  There are
## no plans to implement vim-style undo state in these files.
set locking
## Enable mouse support, if available for your system.  When enabled,
## mouse clicks can be used to place the cursor, set the mark (with a
## double click), and execute shortcuts.  The mouse will work in the X
## Window System, and on the console when gpm is running.
set mouse
## Spread overlong lines over multiple screen lines.
set softwrap
## Use the end of the title bar for some state flags: I = auto-indenting,
## M = mark, L = hard-wrapping long lines, R = recording, S = soft-wrapping.
set stateflags
## Use this tab size instead of the default; it must be greater than 0.
set tabsize 4
## Paint the interface elements of nano.  These are examples;
## by default there are no colors, except for errorcolor.
set titlecolor bold,lightwhite,blue
## To include most of the existing syntax definitions, you can do:
include "/usr/share/nano/*.nanorc"

Paramétrer les fichiers modéles de nano pour la coloration syntaxique

Editer les fichiers situés dans: /usr/share/nano

cd /usr/share/nano/
asm.nanorc
awk.nanorc
cmake.nanorc
c.nanorc
conf.nanorc
css.nanorc
debian.nanorc
fortran.nanorc
gentoo.nanorc
groff.nanorc
html.nanorc
java.nanorc
makefile.nanorc
man.nanorc
mgp.nanorc
mutt.nanorc
nano-menu.xpm
nanorc.nanorc
objc.nanorc
ocaml.nanorc
patch.nanorc
perl.nanorc
php.nanorc
pov.nanorc
python.nanorc
ruby.nanorc
sh.nanorc
tcl.nanorc
tex.nanorc
xml.nanorc

Chaque fichier correspond à une coloration syntaxique lié au type d'extension désigné dans chaque fichier. Par exemple, pour conf.nanorc on trouve à la section syntax la liste des fichiers reconnus comme étant pour l'exemple des fichiers de configuration.

syntax "conf" "(\.(conf|config|cfg|cnf|rc|lst|list|defs|ini|desktop|mime|types|preset|cache|seat|service|htaccess|local|old|com|key|keys|options|cf)$|(^|/)(\w*crontab|mirrorlist|group|hosts|passwd|rpc|netconfig|shadow|fstab|inittab|inputrc|protocols|sudoers)$|conf.d/|.config/)"

Rendre opérant le pavé numérique dans nano ou vi/vim depuis putty

Si vous utilisez PuTTY comme client SSH Windows, vous avez certainement remarqué que les touches du pavé numérique ne fonctionnent pas dans certaines applications, notamment les deux éditeurs de textes les plus populaires : Vi et Nano.

Pour utiliser le pavé numérique, il faut modifier un paramètre de la configuration de session PuTTY.

Dans Terminal > Features et cocher la case "Disable application keypad mode" : Le pavé numérique Dans certains cas (suivant la configuration du serveur) il est également nécessaire de modifier l'option Keyboard (toujours dans la rubrique Terminal) de "ESC[n~" vers "Linux": Le pavé numérique Pour mémoriser ce/ces choix par défaut pour vos futures connexions SSH, cliquer sur Session > Default Settings puis Save : Configuration de PuTTY Vous éviterez ainsi de nombreuses surprises quand vous utiliserez le pavé numérique, surtout avec vi !

Credits: Blogmotion

Mettre en place le bon .bashrc avec les raccourcis qui vont bien dans .bash_aliases

nano /home/user/.bashrc
nano /root/.bashrc

Si ce n'est déjà fait, décommentez:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Créer le fichier

nano /home/user/.bash_aliases
nano /root/.bash_aliases

contenant:

#Alias 
alias ll='ls -l'
alias la='ls -A'  
alias l='ls -CF'  
alias lsk='ls -ohFA'                                    # Alias personnel
alias du='du -h'  
alias tarzip='tar -zcvf'                                # Alias personnel
alias untarzip='tar -zxvf'                              # Alias personnel
alias vim='vi'  
alias iptablesL='sudo iptables -L -n -v --line-numbers' # Alias personnel
alias ip6tablesL='sudo iptables -L -n -v --line-numbers'# Alias personnel
alias vnc='x11vnc -many -rfbauth ~/.vnc_passwd'         # Alias personnel
alias ps='ps -efjHF f'                                  # Alias personnel
alias back='cd .. && lsk'                               # Alias personnel
alias tree='tree -aphFD --du --dirsfirst'               # Alias personnel 
alias maj='apt-get update && apt-get upgrade'           # Alias personnel
alias ip='ip -c'                                        # Alias personnel

Changer le prompt

PS1='${debian_chroot:+($debian_chroot)}[\D{%d/%m/%y-%H:%M}]\[\e[1;31;47m\]\u\[\e[m\e[00;1;37;46m\] @ \[\e[m\e[0;1;41m\]\H\[\e[m\e[1m\]\\>\[\e[m\]<\[\e[m\e[01;34m\]\w\[\e[m\]>\$ '
                                       [   jj/mm/aa-hh:mm ]               user                     @                   host            \>        <                 dir       >#$
Sequence Description
\a le caractère BEL ASCII (you can also type \007)
\d Date au format "Mer 06 Sept"
\e Caractère ASCII d'échappement (you can also type \033)
\h Première partie du hostname
\H hostname complet
\j Le nombre de processus que vous avez suspendu dans ce shell et tapant ^Z
\l Le nom du terminal shell du périphérique The name of the shell's terminal device (such as "ttyp4")
\n Nouvelle ligne
\r Retour chariot
\s Le nom de l'exécutable shell (such as "bash")
\t Heure au format 24H (such as "23:01:01")
\T Heure au format 12H (such as "11:01:01")
\@ Heure au format 12H avec AM/PM
\u Votre username
\v Version de bash (such as 2.04)
\V Version de bash, incluant le niveau de patch
\w Dossier de travail courant (such as "/home/drobbins")
\W Le nom de base du dossier courant de travail (such as "drobbins")
\! Position de la commande courante dans le buffer de l'historique
\# Numéro de commande (cela incrémente à chaque prompt, aussi longtemps que vous tapez quelquechose) (this will count up at each prompt, as long as you type something)
\$ Si vous n'êtes pas root, insère "$"; Si vous êtes root, vous avez un "#"
\xxx Insère un caractère ASCII basé sur un nombre sur trois digits (remplacer les digits inutilisés par des zéros comme "\007")
\\ Un antislash
\[ Cette séquence doit apparaitre avant une séquence de caractères qui ne bougent pas le curseur (comme les séquences d'échappement de couleur). Cela permet à bash de calculer correctement le word wrapping.
\] Cette séquence doit apparaitre après une séquence de caractères non imprimables.
\[ => ouverture couleur
m\] => fermeture couleur
\e[m => reset couleur (])

couleurs:

code rendu Couleur
0 = normal
1 = gras
2 = sombre on
22 = sombre off ??
23 = italique off
24 = souligné off
26 = ??
25 = clignotant off ??
27 = inversé off
3 = italique on
30 à 37= couleur de police
4 = souligné on
40 à 47= couleur de fond
avec pour l'unité:
0 = noir
1 = rouge
2 = vert
3 = jaune
4 = bleu
5 = violet
6 = turquoise
7 = blanc
5 = clignotant on
6 = ???
7 = inversé on

Pour mettre en place l'auto-complétion sur les commandes ssh, scp et sftp

Editer votre fichier ~/.bashrc pour lui ajouter les deux lignes suivantes :

# Auto Completion SSH
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | sed -e s/,.*//g | uniq | grep -v "\["`;)" ssh scp sftp

Pour recharger le fichier .bashrc (après mofification par exemple)

source ~/.bashrc

Le répertoire ~/.bin

Il y a un certain nombre de commandes que l'on peut vouloir utiliser depuis n'importe quel répertoire.
Dans ce cas, il est fastidieux de :

Il suffit donc de mettre tous vos scripts dans un même répertoire, et de mettre ce répertoire dans le PATH. Par convention, ce répertoire s'appelle bin et se place dans votre répertoire personnel. Si votre répertoire personnel est /home/toto, ce répertoire sera donc /home/toto/.bin.
Commencez donc par créer ce répertoire :

cd ~
mkdir .bin

Ensuite, vérifiez qu'il soit bien dans votre PATH :

echo $PATH

Si vous voyez par exemple $HOME/.bin dans votre PATH, alors c'est bon, tous les fichiers exécutables situés dans ce répertoire seront accessibles depuis n'importe quel répertoire.
Si ce n'est pas le cas, il faut ajouter ce répertoire au PATH. Pour cela, ajoutez dans le fichier de configuration de votre shell, par exemple le fichier .bashrc, la ligne :

PATH=$PATH:$HOME/.bin

Cette ligne indique que la prochaine fois que vous ouvrirez votre shell, le répertoire bin figurera dans votre PATH.


Monter un cd:

Déjà il faut regarder le fichier "fstab" qui se trouve dans le répertoire "/etc", pour savoir où se trouve le CDrom.
On doit voir une ligne qui devrait ressembler à ça:

/dev/cdrom /mnt/cdrom auto ro,noauto,user,exec 0 0

Ensuite, en fonction de ce qu'indique le fichier "fstab", on tape en tant que "root":

mount /dev/cdrom /mnt/cdrom

ou "/dev/cdrom" correspond à la référence faite dans le fichier "fstab" et "/mnt/cdrom" correspond au point de montage spécifié pour le lecteur.
sous debian:

mount /dev/sr0 /media/cdrom

Supprimer un dossier non vide:

rm -r /nomdudossier

supprime un dossier vide

rmdir 

Configurer le réseau

Ethernet sur Debian

Le fichier de configuration réseau sous Debian se situe dans:

/etc/network/interfaces

Ce fichier principal permet de définir l'adresse IP de l'interface. Noter que l'exemple suivant présente:

nano /etc/network/interfaces

Configuration Statique

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# Configuration statique
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1

Configuration Dynamique DHCP

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# Configuration DHCP
auto eth0
iface eth0 inet dhcp

Monter une interface sans configurer d'adresse IP

pre-up ifconfig eth0 up
post-down ifconfig eth0 down

Configurer un VLAN sur une interface

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# Configuration statique avec VLAN 29
auto eth0.29
iface eth0.29 inet static
       address 10.2.1.2
       netmask 255.255.255.0
       gateway 10.2.1.1

Ajouter une adresse à une interface

auto eth0:1
iface eth0:1 inet static
       address 10.3.1.2
       netmask 255.255.255.0
       gateway 10.3.1.1

Pour calculer l'ipv6 avec l'adresse mac

Par convention, par défaut, l'ipv6 est calculée en fonction de l'adresse mac de la machine. Pour générer cette ipv6 voici la commande:

ipv6calc --action geneui64 --in mac --out eui64 addresse_mac

Wifi sur Debian

ajouter les sources non-free à la liste des sources Editer le fichier /etc/apt/sources.list

nano /etc/apt/sources.list
deb http://ftp.fr.debian.org/debian/ jessie main non-free 
deb-src http://ftp.fr.debian.org/debian/ jessie main non-free

deb http://security.debian.org/ jessie/updates main non-free
deb-src http://security.debian.org/ jessie/updates main non-free

# jessie-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ jessie-updates main non-free
deb-src http://ftp.fr.debian.org/debian/ jessie-updates main non-free

# jessie-backports
deb http://ftp.fr.debian.org/debian jessie-backports main non-free

Actualiser les sources:

apt-get update

Installer le paquet firmware-iwlwifi

apt-get install firmware-iwlwifi

Installer les net-tools

apt-get install net-tools

Le fichier hosts

Ce fichier permet de définir des DNS de façon local. La machine fait une requête DNS dans ce fichier avant d'en faire une aux serveurs DNS.

nano /etc/hosts
127.0.0.1   localhost.localdomain   localhost   monpc

Le fichier resolv.conf

Ce fichier définit les serveurs DNS. Il est possible d'en définir plusieurs.

nano /etc/resolv.conf
search
nameserver 192.168.1.1  #IP du DNS voulu
nameserver 192.168.10.1 #IP du DNS voulu

Redémarrer le réseau

/etc/init.d/networking restart

Flusher une interface

ip addr flush eth0

SSH

Pour importer une clé de connection SSH

A l'aide de puttygen, charger la clé locale ppk (qui contient la clé publique et privée) (connexion / SSH / Auth "Private key file for authentification".)
copier ce qui se trouve dans le champ "Public key for pasting OpenSSH authorized_keys file"
ouvrir/créer en root le fichier authorized_keys qui se trouve dans ~/.ssh sur le serveur
coller et enregistrer
De manière générale le fichier authorized_keys contient une liste de clés, une par ligne formatté de la façon suivante

typedecryptage clé commentaire
example:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQ.....K0r4FoNZhI0w$*ù rsa-key-20170611

Copie en ssh depuis une autre machine

scp login@host:/chemin/absolu/vers/le/fichier/nomfichier /destination/du/fichier/nomfichier

Par exemple:

scp chris@atkhost.com:/home/chris/.bashrc /home/chris/.bashrc
scp chris@atkhost.com:/home/chris/.bash_aliases /home/chris/.bash_aliases
scp chris@atkhost.com:/root/.bashrc /root/.bashrc
scp chris@atkhost.com:/root/.bash_aliases /root/.bash_aliases
scp chris@atkhost.com:/etc/profile /etc/profile
scp chris@atkhost.com:/home/chris/.vnc_passwd /home/chris/.vnc_passwd

Prendre la main à distance en mode graphique:

installer x11vnc:

apt-get install x11vnc

lancer:

x11vnc -many -rfbauth ~/.vnc_passwd

(paramètres mot de passe à compléter ici)


Gestion des paquets

Pour installer tous les paquets d'une autre machine:

Installer la même sélection de paquets plusieurs fois:
Il est parfois souhaitable de pouvoir installer systématiquement la même liste de paquets sur plusieurs ordinateurs.
C’est possible assez facilement.
Récupérons d’abord la liste des paquets installés sur l’ordinateur qui servira de « modèle » à dupliquer.

dpkg --get-selections > liste-pkg

Le fichier liste-pkg contient la liste des paquets installés. Il faut alors transférer le fichier liste-pkg sur les ordinateurs à mettre à jour et y employer les commandes suivantes pour mettre à jour la liste des paquets connus par dpkg.

avail=‘mktemp‘
apt-cache dumpavail > ”$avail”
dpkg --merge-avail ”$avail”
rm -f ”$avail”

Mettre à jour les sélections de dpkg

dpkg --set-selections < list-pkg

Demander à apt-get d’installer les paquets sélectionnés

apt-get dselect-upgrade

La première commande enregistre la liste des paquets disponibles dans la base de données de dpkg, puis dpkg --set-selections restaure les voeux de paquets à installer, que l’invocation d’apt-get exauce ensuite !
Aptitude n’offre pas cette commande.

Lister les paquets installés manuellement

apt-mark showmanual

Audit des paquets

Afin de voir les paquets qui ont été modifiés par rapport aux paquets d'origine provenant de Debian.
dpkg liste également plusieurs fichiers de configuration (identifiés par la lettre « c » du deuxième champ) qui ont été (légitimement) modifiés.

dpkg --verify

Gérer les utilisateurs

Ajouter un utilisateur

adduser nomutilisateur

Répertoire modèle pour la création de nouvel utilisateur

/etc/skel/

Liste des utilisateurs

nano /etc/passwd

liste des mots de passe chiffrés

nano /etc/shadow

Bloquer un compte utilisateur

passwd -l utilisateur

Débloquer un compte utilisateur

passwd -u utilisateur

Afficher les utilisateurs :

cat /etc/passwd | awk -F: '{print $ 1}'

Afficher les groupes :

cat /etc/group | awk -F: '{print $ 1}'

Mettre des alias pour tous les utilisateurs

nano /etc/profile

ajouter les alias à la fin


Mettre l'utilisateur dans le groupe des sudoers

visudo

Ajouter:

[USERNAME]  ALL=(ALL:ALL)   ALL

Utilitaires

Tree

Utilitaire pour voir l'arborescence en mode console

apt-get install tree

Créer l'alias pour le mettre à mon gout

alias tree='tree -aphFD --du --dirsfirst' >> /home/user .bash_aliases

Pour root

alias tree='tree -aphFD --du --dirsfirst' >> /root .bash_aliases

Screen

Lancer screen en lui donnant un [nom]

screen -S [nom]

Lorsque screen est lancé:
Pour nommer une fenêtre:

ctrl+a et A

Pour scinder horizontalement et avoir une seconde fenêtre:

ctrl+a et S (s majuscule)

Pour créer une fenêtre avec un shell:

ctrl+a et c

Pour passer d'une zone à l'autre:

ctrl+a et tab

Pour basculer d'une fenêtre à l'autre:

ctrl+a et espace ou n ou bien backspace ou p

Pour détacher le screen:

ctrl+a et d

Pour scroller:

ctrl+a et esc

Pour revenir:

esc

Pour rattacher un screen:

screen -r

Lynis

apt-get install lynis

Lynis est un utilitaire qui permet de faire un checkup complet du système et propose des solutions à mettre en place pour corriger les problèmes.
Pour le lancer, lancer la commande:

lynis audit system

A la fin, une liste de recommandation et de liens vers leurs explications/motivations est affichée.

Outils de lecture des logs

Lnav

Installer lnav

apt-get install lnav

Utiliser lnav

lnav /var/log

Logwatch pour avoir un rapport quotidien des logs

Installer logwatch:

apt-get install logwatch

Modifier le fichier /etc/logwatch/conf/logwatch.conf pour recevoir le compte rendu par mail

/etc/logwatch/conf/logwatch.conf
#To make email Default set Output = mail to save to file set Output = file
Output = mail
# Default person to mail reports to.  Can be a local account or a
# complete email address.  Variable Output should be set to mail, or
# --output mail should be passed on command line to enable mail feature.
MailTo = user@mondomaine.tld

Faire une recherche...

...de texte

Chercher un texte dans plusieurs fichiers:
Je trouve que cette commande n'est pas très utilisée mais elle est très puissante.
Comment faire pour rechercher un texte alors qu'on ne connait pas le fichier d'où il provient ?
C'est simple. Il faut utiliser la commande grep.
Si tous les fichiers sont dans le même répertoire, pour rechercher la chaîne "montexte", il suffit de faire :

grep montexte *

Sinon, si les fichiers sont dans une arborescence :

find . -type f -exec grep montexte {} \;

Explications :

Commande Explication
find . => rechercher à partir du répertoire courant
-type f => on cherche un fichier
-exec => on execute une commande à chaque fichier trouvé
grep montexte {} => on recherche "montexte" dans les fichiers ( {} remplace le nom des fichiers trouvés).
\; => fin de l'option exec ( \ permet d'ajouter à la suite d'autres commandes)

...de programme

Chercher ou se situe les fichiers d'un programme, par exemple screen:

whereis screen

Historique des commandes

D’abord, il faut savoir que l’historique contient uniquement vos propres commandes. Toutefois l’utilisateur root peut voir un historique global. Normal, c’est lui le patron ! Ce qui d’ailleurs est pratique pour savoir qui a fait quoi sur la machine.

Pour consulter votre historique, entrez simplement la commande :

history

Pour supprimer une ligne gênante, il suffit donc d’utiliser le paramètre -d comme ceci :

history -d 421

Et pour tout nettoyer :

history -c

Pour aller plus loin, si vous voulez voir la date et l’heure d’exécution de chaque commande, vous pouvez entrer cette commande:

export HISTTIMEFORMAT=’%F %T ‘

%F équivaut à la date au format %Y-%m-%d et %T équivaut à l’heure au format (%H:%M:%S).
Puis refaites un « history » Si vous remarquez beaucoup de commandes parasites, vous pouvez aussi indiquer à history de ne pas en tenir compte et de ne pas les logger. Pour cela, utilisez le paramètre export comme ceci avec la commande concernée. Par exemple si je veux masquer tout les « ls -l », les commandes pwd et la commande history elle-même, il suffit de faire :

export HISTIGNORE=’ls -l:pwd:history’

Et pour remettre ça à zéro, il suffit de laisser un HISTIGNORE vide ou avec des commandes différentes.

export HISTIGNORE= »

Ou faire un :

unset export HISTIGNORE

Ensuite, si vous voulez ignorer les commandes dupliquées dans le fichier, il faut faire un :

export HISTCONTROL=ignoredups

Et comme ci-dessus, pour remettre à zéro le paramètre, faites un

unset HISTCONTROL

Maintenant si certains de ces paramètres vous plaisent vous pouvez les configurer pour qu’ils soient permanents. Éditez ou créez le fichier .bash_profile et ajoutez y les paramètres voulus:

nano .bash_profile
    #Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
    # User specific environment and startup programs
    export HISTCONTROL=ignoredups
    export HISTIGNORE=’ls -l:pwd:history’
    PATH=$PATH:$HOME/bin
    export PATH

Enfin, pour désactiver le logging des commandes, vous pouvez aussi ajouter dans le fichier .bash_profile le paramètre

export HISTSIZE=0

Notez que si vous l’ajoutez au niveau du fichier /etc/profile, ce sera désactivé pour tous les users sur tout le système. Je ne le recommande pas spécialement, mais si vous opérez un serveur qui nécessite un bon niveau de confidentialité, c’est utile.

Enfin, pour consulter l’historique d’un utilisateur précis, il suffit d’aller voir le .bash_history qui se trouve dans son répertoire home comme ceci :

cat /home/UTILISATEUR/.bash_history


Utilisation du dique

Disk Filesystem, l'option -h permet un affichage "humain"

df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev                10M       0   10M   0% /dev
tmpfs              794M     41M  753M   6% /run
/dev/sda1          156G     42G  107G  28% /
tmpfs              2,0G       0  2,0G   0% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs              2,0G       0  2,0G   0% /sys/fs/cgroup
tmpfs              397M       0  397M   0% /run/user/1000

Disk Usage, l'option -h permet un affichage "humain"

du -h /home/chris/www/
8,0K    /home/chris/www/

Notes

Suite à une discussion sur le chat debian-facile.org

[21:46] <Marmotte> des erreurs du genre "plus d'espace" avec df -h qui ne donne pas de 100%, c'est souvent un souci d'inodes, qu'on voit avec df -i
[21:46] <Marmotte> l'autre possibilité que j'ai déjà vu souvent, c'est un fichier supprimé, mais qu'un programme continue de remplir
[21:46] <Marmotte> et ça, ça se voit avec "df -h" qui annonce un 100%, mais "sudo du -shx /" qui annonce moins que l'espace occupé au total
[21:47] <Marmotte> dans ce cas, on peut savoir quel est le fichier avec un "sudo lsof | grep deleted"
[21:47] <Marmotte> pour savoir quels sont les fichiers supprimés, mais encore utilisés
[21:40] <Marmotte> tente avec : sudo find /var/cache/useless -type f -empty -delete
[21:41] <Marmotte> c'est une commande qui supprime tous les fichiers vides présents dans le répertoire /var/cache/useless


Permissions

En octal (correspondance)

Ce qui permet de faire toutes les combinaisons :

    0 : - - - (aucun droit)
    1 : - - x (exécution)
    2 : - w - (écriture)
    3 : - w x (écriture et exécution)
    4 : r - - (lecture seule)
    5 : r - x (lecture et exécution)
    6 : r w - (lecture et écriture)
    7 : r w x (lecture, écriture et exécution)

Utilisateur groupe  autre
rwx         rwx     rwx
7           7       7


ccze pour coloriser les fichiers de log
$commande | ccze -A
installé sur ns1


Comparer deux fichiers sur deux serveurs différents avec Bash

Pour comparer deux fichiers situés sur deux serveurs différents en utilisant Bash, vous pouvez combiner la commande ssh avec diff.
Voici comment procéder :
Utiliser la commande diff avec ssh : Si vous êtes sur le serveur cible (serveur 2) et que vous souhaitez comparer un fichier local avec un fichier sur le serveur source (serveur 1), vous pouvez utiliser la commande suivante :

diff -y <(ssh utilisateur@serveur1 cat /chemin/vers/le/fichier) <(cat /chemin/vers/le/fichier)

Dans cette commande :

utilisateur@serveur1 doit être remplacé par votre nom d'utilisateur et l'adresse IP ou le nom d'hôte du serveur 1.
/chemin/vers/le/fichier doit être remplacé par le chemin du fichier que vous souhaitez comparer sur les deux serveurs.

Exemple
Supposons que vous voulez comparer un fichier de configuration nommé monfichier.conf :

diff -y <(ssh utilisateur@serveur1 cat /etc/monfichier.conf) <(cat /etc/monfichier.conf)

Comparer des répertoires Si vous souhaitez comparer le contenu de deux répertoires sur les serveurs, vous pouvez utiliser la commande suivante :

diff -y <(ssh utilisateur@serveur1 find /chemin/vers/le/repertoire | sort) <(find /chemin/vers/le/repertoire | sort)

Remarques

Assurez-vous que vous avez les permissions nécessaires pour accéder aux fichiers sur les deux serveurs.
La commande diff affichera les différences entre les fichiers ou les répertoires, vous permettant ainsi de vérifier que la copie a été effectuée correctement.