La commande screen

Une commande indispensable pour bien administrer ses serveurs, j’ai nommé la commande screen.
Le principe est simple : si on se connecte en ssh et qu’on lance une commande ou un processus, la fermeture de la fenêtre provoque l’arrêt du processus en question. On va donc utiliser screen pour remédier à ce problème.

Installation

apt-get install screen

Utilisation

Pour une première utilisation, je propose de suivre un exemple concret. On se connecte en ssh sur un serveur, ce qui ouvre une console qu’on appellera console principale.

  • on commence par s’assurer qu’il n’y a aucun screen en cours dans la console principale
    screen -ls
  • puis on lance screen avec la commande screen
  • on se retrouve désormais dans la fenêtre de screen. Avec espace on crée une nouvelle console screen
  • on a maintenant deux consoles : la console screen et la console principale
  • deux possibilités pour revenir à la console principale :
    • en faisant Ctrl+A puis D on revient à la console principale tout en « détachant » la console screen
    • en tapant exit, on ferme la console screen et on revient à la console principale
  • on choisit de revenir à la console principale en détachant la console screen, on fait donc Ctrl+A puis D

Voilà, on vient de créer deux consoles dont une qui va survivre à la fermeture de la session ssh. Maintenant, lors d’une prochaine connexion ssh, on va se retrouver dans la console principale. On commence par lister les consoles disponibles :

$ screen -ls
There are screens on:
	1235.pts-1.ladameduweb1	(25/02/2019 21:30:33)	(Detached)
	1224.pts-1.ladameduweb1	(25/02/2019 21:30:16)	(Detached)
2 Sockets in /var/run/screen/S-root.

On voit qu’on a deux consoles détachées. Pour reprendre (rattacher) l’une des deux consoles :

$ screen -r 1224

On vient de rattacher la console de pid 1224, qui est une console screen. Lister les consoles disponibles depuis une console screen :

$ screen -ls
There are screens on:
        4188.pts-1.ladameduweb1 (25/02/2019 21:49:28)   (Detached)
        1224.pts-1.ladameduweb1 (25/02/2019 21:30:17)   (Attached)

Ah ! On voit bien que la console de pid 1224 est désormais rattachée. Maintenant, pour fermer la console de pid 1224, on tape simplement exit. Cela provoque le retour à la console principale.

Principales commandes

Principales commandes à partir de la console principale:

  • screen : lance un screen
  • screen -r [pid] : reprends (rattache) le screen pid précédemment détaché
  • screen -ls : liste les screens

Principales commandes à partir d’une console screen :

  • Ctrl+A puis D : détache la console screen et revient sur la console principale
  • Ctrl+D ou exit: ferme la console screen. Lorsqu’il n’y a plus qu’une seule console, screen est arrêté
  • Ctrl+P : passer à la console screen précédente
  • Ctrl+N : passer à la console screen suivante
  • screen -X -S [pid] kill: termine un screen encore attaché (suite à une perte de connexion par exemple)
Principales commandes Linux

Principales commandes Linux

Sommaire

Opérations sur les fichiers

awk

$ awk [-F] '{action-awk}' [fic1 ... ficn]
$ awk [-F] -f script-awk [fic1 ... ficn]

Effectue des opérations sur un fichier.

Exemples

# Liste les différentes extensions et leur nombre
$ find ./ -type f -name '*.*' | awk -F '.' '/gal_/ {A[$3]++}END{for(i in A)print i,A[i]}'
JPG 6257
jpg 337505

find

$ find [options]

Effectue une recherche dans une arborescence. Principales options :

OptionDescriptionValeurs possible
-nameRecherche par nom de fichier.A vous de voir…
-typeRecherche par type de fichier.b : fichier spécial en mode bloc (avec buffer)
c : fichier spécial en mode caractère (sans buffer)
d : répertoire
p : tube nommé (FIFO)
f : fichier
l : lien symbolique
s : socket
-userRecherche par propriétaire.
-groupRecherche par appartenance à un groupe.
-sizeRecherche par taille de fichier.
-atimeRecherche par date de dernier accès.
-ctimeRecherche par date de création.
-mtimeRecherche par date de dernière modification.

Les options -size, -atime, -mtime et -ctime requièrent un paramètre supplémentaire, précédé d’un + ou - (voir exemples).

Exemples

# Recherche de fichiers ayant été modifié il y a moins de 24h
$ find . -type f -mtime -1

# Recherche de fichiers ayant été modifié il y a plus de 48h
$ find . -type f -mtime +2

# Recherche des fichiers ayant été créé il y a moins d'une heure
$ find . -type f -cmin -60

mount

$ mount [options] [-t type] [-o options de montage] <périphérique> <point de montage>

Monte un système de fichiers. Principales options :

OptionDescription
-tSpécifie quel type de système de fichiers la partition est censée héberger.
Il suffit de remplacer par le type de la partition (ext3, ext4, xfs, reiserfs,…). Sauf pour les partitions windows :
– pour le FAT, on doit mettre « vfat ». A part ça rien de sorcier.
– pour le NTFS, c’est un peu plus subtil. « ntfs » correspond à l’ancien driver ntfs, qui permet de le lire sur une partition NTFS, mais pas d’écrire dessus. Il peut être utile si vous voulez monter la partition en lecture seule (il y a aussi l’option ro sinon, voir plus bas).Pour pouvoir écrire sur du NTFS, il vous faut installer le paquet ntfs-3g et renseigner comme type « ntfs-3g ».
-oAjoute des options au montage.
On peut vouloir choisir des options au montage, il faudra alors indiquer les options, séparées par une virgule :
– « rw »ou « ro »: monte la partition en lecture/écriture (read-write) ou en lecture seule (read-only).
– « exec » ou « noexec » : permet ou ne permet pas de lancer des fichiers exécutables (programmes ou script) situés sur la partition.
– « loop » : permet de monter une image disque dans un dossier (loopback)

Exemples

Monte une partition sdb1 de type ext2 dans le dossier /mnt

$ mount -t ext2 /dev/sdb1 /mnt

Monte sda1, de type FAT, sur /media/usb0, en lecture seule, et ne permet pas à un éventuel script situé sur la partition de s’exécuter.

$ mount -t vfat -o ro,noexec /dev/sda1 /media/usb0

wc

$ wc [options] [fichier]

De l’anglais Word Count, permet de d’afficher des informations provenant d’un fichier ou provenant de la sortie standard d’une commande précédente (chaîner avec le pipe |). Options courantes :

  • -l : nombre de lignes
  • -w : nombre de mots
  • -c : nombre d’octets
  • -m : nombre de caractères
  • -L : longueur de la plus longue ligne

Exemples

$ wc .htaccess
212   650 13100 .htaccess
$ wc -l .htaccess
212 .htaccess

En combinaison avec ls, donne le nombre de fichiers/répertoires dans un répertoire :

ls -l | wc -l
33

Comptes utilisateurs

passwd

$ passwd [utilisateur]

Permet de changer le mot de passe du compte utilisateur passé en argument (l’utilisateur connecté si absence d’argument). Quelques options :

  • -h : affiche l’aide
  • -l : verrouille le mot de passe du compte (de l’anglais lock)
  • -u : débloque le mot de passe du compte (de l’anglais unlock)
  • -S : indique l’état du mot de passe du compte (de l’anglais status)

Transférer en SSH avec la commande scp

scp est un utilitaire en ligne de commande sous Linux qui permet de transférer des fichiers d’une machine à une autre en utilisant le protocole ssh. Sur macOS, le paquet est déjà installé.

Syntaxe

$ scp [Options] [sources] [destination]

Les options

  • -r pour copier le contenu d’un répertoire (récursif)
  • -p préserver les permissions et l’horodatage du fichier source sur le fichier de destination
  • -q ne pas afficher la barre de progression
  • -v mode verbose pour afficher plus de détails
  • -P xxxx se connecter avec un port spécifique (attention l’option est bien en majuscule)

Télécharger un fichier

Vous pouvez télécharger un fichier/répertoire d’un serveur ssh pour le sauvegarder en local.

$ scp [utilisateur]@[IP_ou_nom_machine]:[emplacement_fichier]
[Emplacement_local]

Exemple :
Télécharger le fichier distant foo.txt du compte nicolas sur le serveur 192.168.1.32 et le sauvegarder dans le répertoire courant ./.

$ scp nicolas@192.168.1.32:./foo.txt ./

Envoyer un fichier

Il est possible d’envoyer un fichier/répertoire local vers un serveur ssh.

$ scp [fichier_local_a_envoyer] [utilisateur]@[IP_ou_nom_machine]:
[emplacement_distant]

Exemple:
Envoyer le fichier foo.txt du compte nicolas sur le serveur 192.168.1.32 et le sauvegarder dans le répertoire courant /home/nicolas/utils.

$ scp foo.txt nicolas@192.168.1.32:/home/nicolas/utils

Pour simplement envoyer un ficher dans le répertoire racine du compte distant, il faut quand même mettre les : :

$ scp foo.txt nicolas@192.168.1.32:

La même chose en précisant le port :

$ scp -P 2200 foo.txt nicolas@192.168.1.32:

Références externes

Changer la date de modification d’un fichier

La commande touch est faite pour ça. Commençons par mettre la date actuelle sur un fichier :

$ touch file

Ce qui a pour résultat :

$ stat file

# Output
Fichier : file
Taille : 5464349 Blocs : 10680 Blocs d’E/S : 4096 fichier
Périphérique : 806h/2054d Inœud : 2893915 Liens : 1
Accès : (0644/-rw-r–r–) UID : ( 1000/ nicolas) GID : ( 1000/ nicolas)
Accès : 2018-08-31 15:12:28.761709712 +0200
Modif. : 2018-08-31 15:12:28.761709712 +0200
Changt : 2018-08-31 15:12:28.761709712 +0200
Créé : -

Maintenant, modifions la date d’accès (option -a) :

$ touch -a file

L’option -m fait la même chose pour la date de modification. Et enfin on peut combiner les deux pour modifier à la fois la date d’accès et la date de dernière modification :

$ touch -am file

Pour spécifier une date à la place de la date actuelle, on utilise l’option -d :

$ touch -d '1 May 2005 10:25' -m file

Ce qui change la dernière modification au 1er mai 2005 à 10h25.

Références externes