La commande find (suite)

Suite à la publication de mon article sur la commande find, plusieurs personnes sont revenu vers moi afin de me demander d’autre options.

Voici donc 2 exemples d’options que j’utilise très souvent.

Trouver un fichier d’un autre utilisateur

J’avais déjà indiqué comment trouver un fichier d’un utilisateur dans l’article sur la commande find.
Ici, le but est de trouver un fichier n’appartenant pas à un user.

Prenons pour exemple le dossier home du user Christian.

find /home/christian ! -user christian -type f

Cette commande va me sortir tous les fichiers présents dans /home n’appartenant pas au user Christian.

De plus, en couplant cela avec un -exec, nous pouvons en tirer plus d’informations.

find /home/christian ! -user christian -type f -exec ls -lsa {} \;

Trouver un fichier ancien

Cette option est particulièrement intéressante dans le cas où vous auriez à gérer des logs et que vous manquez de place.

Dans le cas où je chercherais les fichiers ayant une date de modification de plus de 30 jours :

find /var/log/nginx -mtime +30

Il est à noter que, couplé avec d’autres options pour la taille, ou l’exécution, la commande devient, comme toujours, très puissante.

find /var/log/nginx -type f -mtime +30 -size +1G -exec rm {} \;

Ici, on cherche et supprime tous les fichiers de +30 jours de modification et ayant plus de 1 Go de taille.

La commande find

Il y a maintenant plusieurs années, j’avais écrit un article sur la commande grep intitulé recherche-rapide-dans-un-fichier-linux.
J’y expliquais la puissance de la commande permettant de trouver dans un fichier une expression souhaité.

Je me rends compte que je n’ai jamais parlé de la commande « Find » que j’utilise tout autant.

Au contraire de grep, find va me permettre de trouver un fichier ou un dossier en particulier.

Syntaxe de base

Comme toujours, je commence par un man de la commande afin de récupérer la syntaxe de base

find <path> -name=<string|regex>

À partir de là, l’utilisation basique de la commande peut se faire ainsi.

find /home/christian -name "maRecherce"

Trouver un fichier ou un dossier

Là où la commande devient plus intéressante, c’est que je peux décider de lui assigner un type recherché (fichier, dossier) avec l’option « type »

Par exemple, pour chercher un fichier

find /home/christian -type f -name "monFichier"

Et pour rechercher un dossier

find /home/christian -type d -name "mon dossier"

Trouver un fichier de plus de 1Go

Jusqu’ici, je peux trouver un dossier ou un fichier.
Néanmoins, j’aimerais avoir la liste des fichiers de plus de 1Go dans un dossier.
Pour cela, rien de plus simple, je vais utiliser l’option « size »

find /home/christian -type f -size 1G

Trouver un fichier d’un utilisateur

Il est aussi possible de chercher des fichiers d’un utilisateur avec l’option « user ».

find /temp -user Daniel

En plus de l’option « user », il est aussi possible d’utiliser l’option « uid »

find /temp -uid 1008

Exécuter une commande

Désormais, imaginons que j’aimerais exécuter une commande sur un fichier recherché. Et bien cela est tout à fait possible. Il suffit de suivre cette syntaxe.

find <path> -name <string|regex> -exec <command> {} \;

Les deux crochets ‘{}’ à la fin de la commande sont des caractères de remplacement. Ils seront remplacés par les fichiers et/ou les répertoires renvoyés par la commande find. Le signe ‘\;’ à la fin termine la commande find.

Considérons par exemple, que je souhaite copier tous les fichiers pdf de mon répertoire vers un autre. Voici la commande que je vais utiliser.

find /home/christian -name="*.pdf" -type f -exec cp {} /temp/pdf \;

Conclusion

La commande find est un outil extrêmement puissant.
Je n’ai pas présenté toutes les options, je vous encourage à regarder le man de la commande.

Nous pouvons bien sûr combiner plusieurs des options présentés pour rendre cela encore plus puissant.

Par exemple, si je souhaite copier tous les fichiers png, de 2 utilisateurs.
Les fichiers doivent faire plus de 10k et avoir un nom contenant « profil ».
Voici une proposition de commande:

find . '(' -user "daniel" -o -user "christian" ')' -type f -name "*profil*.png" -size 10k -exec cp {} /tmp/ \;

Utiliser SCP sous linux

Aujourd’hui, je vais parler d’un outil que j’utilise tous les jours. Cet outil est SCP.

SCP me permet de copier de manière sécurisée des fichiers vers, ou depuis, des hôtes distants.

Celui-ci utilise SSH pour transférer des données d’un hôte à l’autre, et utilise les mêmes authentifications et sécurité que SSH.

Les base de la commande SCP

La syntaxe de base est celle-ci:

scp [options] source … cible

Avec « source » une liste de fichiers ou de répertoires à copier sur l’hôte cible.
Et « cible » l’hôte et l’emplacement vers lequel je copie les fichiers.

Quelques exemple

Fichier local vers distant

Dans le cas où je voudrais copier un fichier depuis mon ordinateur vers un serveur

scp monfichier user@x.x.x.x:/home/user/monfichier

Multiple Fichiers locaux vers distant

Dans le cas où je voudrais copier des fichiers depuis mon ordinateur vers un serveur.

scp monfichier1 monfichier2 user@x.x.x.x:/home/user/

Fichier local vers distant en utilisant une clef rsa

Dans le cas où je voudrais copier un fichier depuis mon ordinateur vers un serveur, mais que cependant, je ne veux pas entrer de mot de passe, je peux utiliser une clef rsa.

scp -I ~/.ssh/id_rsa monfichier user@x.x.x.x:/home/user/monfichier

Fichier distant vers distant

Vous l’aurez compris, je vais simplement utiliser les mêmes méthodes pour faire l’opération d’un serveur à l’autre.

scp user@y.y.y.y:/home/user/monfichier user@x.x.x.x:/home/user/monfichier

Il y a bien sûr plein d’autres méthodes et options. Si je veux récupérer des fichiers distants vers du local, il suffit de mettre en source les identifiants, hôte et emplacement des fichiers en premier. Si vous souhaitez aller un peu plus loin je vous conseil de regarder le « man » de la commande qui propose quelques autres options intéressantes.

News Semaine 44 2022

Voilà maintenant une petite semaine, que je me suis remis à écrire quelques articles rapides. Comme indiqué dans mon article refonte-de-mon-site-internet et news-semaine-43-2022, me permets de mieux gérer certains de mes nouveaux process.

Je fais donc un premier état d’avancement.
Durant cette semaine, j’ai utilisé un framework qui s’appelle H.U.G.O.
Et c’est un plaisir de l’utiliser.

Malheureusement, je me retrouve aussi face à quelques points importants à résoudre.

Par exemple. J’ai actuellement activé la pub Google sur ce site internet. Malheureusement, je ne vois pas encore comment la faire fonctionner correctement avec HUGO.

Il faut aussi que je me prenne le temps de refaire absolument tout le design du nouveau site internet. De plus, il faut que je reprenne l’intégralité de mes articles depuis la dernière refonte de ce site (juin 2015).

Une sacrée montagne de tâches à gravir

Configurer le réseau sur Centos6

Je continue dans mes écritures de petits articles Gnu/linux, comme indiqué dans mon article de cette semaine intitulé news-semaine-43-2022.

Dans cet article, je parlerais de la configuration réseau sur une vielle distribution Centos 6. Dans mon cas, impossible d’utiliser des outils comme nmui ou nmcli ni même system-config-network-tui. Je vais donc vous montrer comment effectuer ces modifications depuis les fichiers de configuration.

Continuer la lecture

Notion de Swappiness

Dans mon dernier article, ajouter-du-swap-gnu-linux, je vous parlez de la notion de Swappiness.

Le Swappiness est une propriété du noyau Linux qui définit la fréquence d’utilisation de l’espace d’échange par le système. La valeur de Swappiness doit être comprise entre 0 et 100. Une valeur faible fera en sorte que le noyau essaiera d’éviter l’échange lorsque cela est possible, tandis qu’une valeur élevée fera en sorte que le noyau utilisera l’espace d’échange de manière plus agressive.

Autrement dit, si je mets 0, le noyau n’utilisera pas du tout le swap. Au contraire, si je mets 100, le swap sera toujours utilisé.

Par défaut, la valeur est à 60. Si je veux voir la valeur présente sur votre machine, il suffit de taper cette commande :

cat /proc/sys/vm/swappiness

Cependant, bien que la valeur à 60 soit la plupart du temps bonne, il peut arriver que j’ai à agir sur cette valeur (sur des serveurs d’application en production par exemple).

Pour ce faire je vais utiliser la commande « sysctl »

sudo sysctl vm.swappiness=20

Néanmoins, la modification que je viens d’effectuer n’est pas permanente. Au redémarrage de la machine, je devrais ré-effectuer cette opération. Pour changer cela, je dois ajouter/changer la variable « vm.swappiness » dans le dossier « /etc/sysctl.conf »

Ajouter du swap (GNU/Linux)

Lorsque nous utilisons des applications, il peut arriver que celles-ci soient énormément gourmandes en ressources. Comme je le disais déjà dans mon article Comment vide le swap (GNU/Linux) Il existe le Swap pour parer ce genre de problème.

Le swap, aussi appelé espace d’échange, permet de simuler une mémoire vive à partir d’une mémoire de masse (disque dur).
En effet, celui-ci sert alors à décharger des données de la mémoire vive dans l’espace d’échange.

Continuer la lecture

News Semaine 43 2022

Suite à ma news sur la refonte de mon site internet, j’ai décidé d’effectuer cette tâche, tout en écrivant à nouveau des articles.
Le fait d’effectué cette tâche me permettra d’automatiser et de tester au maximum mes nouveaux process.

Mes nouveaux articles seront plutôt rapide et je ne rentrerais surement pas autant dans les détails qu’auparavant.

Je pense écrire principalement des articles sur des commandes ou outils Gnu/Linux

Refonte site internet ?

Depuis un peu plus de deux ans, j’ai malheureusement laissé ce site assez à l’abandon.
Et pourtant, je fais énormément de choses à côté (écriture de ModOp, Scripts, passage de certifications).
Mais voilà, le CMS que j’utilise depuis de très nombreuses années pour gérer ce site ne me plaît plus.

Depuis deux ans environ, j’utilise en parallèle une méthode de publication « automatique » de certains de mes contenus. Pour cela, j’utilise un bon vieux git et des méthodes de CI/CD mis en place grâce à Gitlab (et autres).

J’ai dans un premier temps mis en place un système pour automatiser ma documentation personnelle.
Grâce à des outils comme Mkdocs (ou sphinx par exemple) j’ai expérimenté une écriture de documentation en Markdown.Je synchronise ensuite les fichiers avec mon dépôt Git distant et celui-ci lance automatiquement un pipeline pour se connecter au serveur et générer des fichiers en html/css afin de créer mon site internet.

L’incident des serveurs OVH, réduisant à néant certains de mes wikis de documentation, m’a forcé et conforté dans mon idée et dans ma volonté de passer sur ce nouveau système.
En effet, le fait d’utiliser Git me permet de remonter un site de documentation en un rien de temps. De plus, toutes mes documentations sont sauvegardées dans un dépôt local et distant, donc peu de risque de perte.

Ceci explique pourquoi, ces deux dernières années, mon site de documentation et devenue mon référencement au profit de ce site.

Suite à ce retour d’expérience, je me pose donc la question de migrer mon site actuel.
L’opération sera longue, mais je gagnerais en rapidité de publication et en place serveur (pas de base de données avec ce système).

Bref, sûrement pas mal de changement à venir sur ce site (enfin)