1416 links
  • Animal
  • Home
  • Login
  • RSS Feed
  • ATOM Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
◄Older
page 1 / 2
26 results tagged Bash x
  • filesystems - Calculating total file size by extension in shell - Server Fault

    Je recopie ici la commande (un peu adaptée) pour obtenir :

    • La taille totale des fichiers se terminant par .abc.
    • Contenus dans le répertoire /path et ses sous-répertoires.
    • La taille est donnée en octets.
    find /path -regex ".*/.*\.abc" -exec ls -l {} \; | awk '{ Total += $5} END { print Total }'

    Note : d'autres exemples existent avec la commande du. Cependant l'option du -b ne semble pas fonctionner sur tous les shells.

    Mon Jun 26 21:58:06 2023 - permalink -
    QRCode
    - https://serverfault.com/a/367195
    Bash Extension Fichiers Sh Shell Taille Totale
  • Debugging Bash scripts

    Ah le Bash ! Ce vrai et beau langage qui continue son exécution même après qu'une erreur s'est produite.

    Dans leur grande sagesse, les développeurs ont eu la bonne idée d'y associer un mode de débuggage, qui permet d'afficher la valeur des variables.

    Quand on en a marre de débugger un script à coup de echo toutes les deux lignes, cela s'avère pratique.

    Pour l'activer :

    1) On peut lancer tout le script en mode débug :

    bash -x monScript.sh

    2) On peut également intégrer l'option directement au niveau du shebang :

    #!/usr/bin/env bash -x

    3) On peut enfin ne placer qu'une partie du script en mode débug. Il suffit d'activer le mode avant le code suspect, et de le désactiver ensuite :

    #!/usr/bin/env
    
    # Le code qui ne pose pas de problème
    ...
    # Activation du mode debug
    set -x
    # Le code foireux
    ...
    # Désactivation du mode debug
    set +x
    # Code exécuté après

    Il y a quelques autres options, mais en gros c'est l'idée.

    Sat Jan 30 23:17:09 2021 * - permalink -
    QRCode
    - https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html
    Bash Debug Linux Mode Script Shell
  • Use multiple CPU Cores with your Linux commands -- awk, sed, bzip2, grep, wc, etc. | RankFocus - Systems and Data

    J'adore le shell !

    Wed Apr 17 23:00:09 2019 - permalink -
    QRCode
    - http://www.rankfocus.com/use-cpu-cores-linux-commands/
    Bash Coeurs Cores CPU Linux Multiple Parallel Shell
  • Bash : colorer un pattern dans un texte

    Pour cela, il suffit de rediriger un flux vers grep de cette façon :

    cat monfichier | grep -E --color 'PATT3RN|$'

    Ainsi, l'ensemble du texte d'origine est affiché. Et si le pattern apparaît, celui-ci apparaît en couleur.
    Par exemple, dans le cas où l'on souhaite afficher l'arbre des dépendances d'un module maven, et qu'on cherche quelles dépendances dépendent de slf4j :

    mvn dependency:tree | grep -E --color 'slf4j|$'

    Note : Sans le |$, seules les lignes contenant le pattern sont affichées.

    Wed Feb 20 14:46:09 2019 - permalink -
    QRCode
    - https://cakeozolives.com/shaarli-animal/?IPNS2g
    Bash Couleur Grep Pattern Texte
  • linux - Add up a column of numbers at the Unix shell - Stack Overflow

    La commande shell utile pour additionner une colonne de nombres, grâce à l'outil awk.

    Soit le fichier suivant :

    cat monfichier
    3
    183
    10
    69

    Pour additionner ces nombres, j'utilise la commande awk suivante :

    cat monfichier | awk '{total = total + $1}END{print total}'

    Le résultat affiché est bien entendu 265.

    Tue Jan 15 16:37:14 2019 - permalink -
    QRCode
    - https://stackoverflow.com/questions/926069/add-up-a-column-of-numbers-at-the-unix-shell/926146#926146
    Addition awk Bash Colonne Linux
  • Bash : Supprimer le contenu d'un répertoire

    Petite astuce bash pour supprimer le contenu d'un répertoire :

    find $REPERTOIRE -mindepth 1 -delete

    -mindepth 1 permet de ne lister que les fichiers (et répertoires) situés au moins au niveau 1 de profondeur. Donc en pratique, tout ce qui se trouve dans le répertoire $REPERTOIRE.

    -delete supprime tous les fichiers (et répertoires) listés.

    Note : les fichiers cachés (commençant par un '.') sont également supprimés.

    Thu Nov 29 17:50:55 2018 * - permalink -
    QRCode
    - https://cakeozolives.com/shaarli-animal/?Z4PfgQ
    Astuce Bash Contenu Répertoire Supprimer
  • Vérifier qu'un utilisateur a accès à un répertoire
    sudo -u www-data stat /mon/repertoire
    Fri Sep 28 01:24:41 2018 - permalink -
    QRCode
    - https://cakeozolives.com/shaarli-animal/?TIvE7A
    accès Bash droits répertoire
  • How to use "grep" command to find text including subdirectories - Ask Ubuntu

    Pour chercher une chaine de caractères dans un répertoire de façon récursive :

    grep -rl "string" "$PATH"
    • -r permet de faire la recherche récursive dans les fichiers situés dans "$PATH";
    • -l permet de n'afficher que les noms des fichiers contenant le texte recherché. Sans cette option, la commande grep affichera les lignes contenant le texte recherché.
    Thu Sep 20 16:29:25 2018 * - permalink -
    QRCode
    - https://askubuntu.com/questions/55325/how-to-use-grep-command-to-find-text-including-subdirectories/55333#55333
    Bash Caractères chaine grep rechercher récursif
  • Haché un mot de passe en SHA-512 avec sel en Python - Antichesse

    Je te prends ça. Pour les hash de mots de passe dans ansible (module user).

    Thu Sep 20 15:10:34 2018 - permalink -
    QRCode
    - https://www.cakeozolives.com/shaarli-antichesse/?jJSqsQ
    Bash Hash MotDePasse Password Python Sel SHA
  • bash wget - check if file exists at url before downloading · GitHub

    Pour tester si une page existe sans la télécharger :

    #!/bin/bash
    
    # Renvoie "true" si la page passée en argument existe.
    # @param $1 : l'URL de la page dont on veut tester l'existence.
    # @return true si la page existe, false sinon.
    is_URL_real()
    {
        local page_exists
        page_exists="false"
    
        if [[ `wget --server-response --spider "$1"  2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then
            page_exists="true"
        fi
    
        echo "$page_exists"
    }
    
    is_URL_real "$1"

    Ce qui donne à l'exécution :

    ./test_URL.sh "https://www.qwant.com"
    true
    Wed Jun 27 17:52:24 2018 * - permalink -
    QRCode
    - https://gist.github.com/hrwgc/7455343
    Bash existence Linux page test wget
  • Local Variables

    A propos des variables de type local en Bash.

    Tout d'abord, la sécurité.
    Afin d'écrire plus rapidement, on se retrouve souvent à déclarer et initialiser la variable en même temps :

    local var="plouf plouf"

    Sauf qu'en faisant ça, l'ordre d'exécution est le suivant :

    • attribution de la valeur plouf plouf à la variable var;
    • restriction de la portée de la variable var au niveau local.

    Ce qui signifie que la variable reste accessible pendant un instant au niveau global. Il faut donc mieux faire la déclaration et l'instanciation en deux temps :

    local var
    var="plouf plouf"

    Ce qui m'amène au deuxième point. Une fois qu'une variable a été déclarée local, il n'est pas besoin de remettre le mot-clef local à chaque instanciation. Ainsi, si je considère le script suivant :

    #/usr/bin/env bash
    
    ma_fonction()
    {
        local var = "ALEX"
        echo "$var"
    
        var="TOM"
        echo "$var"
    }
    
    ma_fonction
    
    echo "<$var>"

    La sortie sera :

    ALEX
    TOM
    <>
    Tue Jun 26 18:48:10 2018 * - permalink -
    QRCode
    - http://tldp.org/LDP/abs/html/localvar.html
    Bash Linux Local Variable
  • Astuce bash

    Un moyen de créer des répertoires plus rapidement.

    Je veux créer des répertoires ayant un nom basé sur le même modèle. Par exemple REPERTOIRE.ABC.08.

    Pour créer tous les répertoires de 08 à 14, je peux utiliser une boucle for dans laquelle un compteur s'incrémente dans une string, laquelle est passée à mkdir.

    Ou alors je peux utiliser une capacité de la commande mkdir :

    mkdir REPERTOIRE.ABC.{08..14}
    # Ce qui me donne :
    ls -a
    REPERTOIRE.ABC.08
    REPERTOIRE.ABC.09
    REPERTOIRE.ABC.10
    REPERTOIRE.ABC.11
    REPERTOIRE.ABC.12
    REPERTOIRE.ABC.13
    REPERTOIRE.ABC.14

    Je peux utiliser une suite de lettres :

    mkdir REPERTOIRE.{a..f}
    # Ce qui me donne :
    ls -a
    REPERTOIRE.a
    REPERTOIRE.b
    REPERTOIRE.c
    REPERTOIRE.d
    REPERTOIRE.e
    REPERTOIRE.f

    Je peux utiliser plusieurs "suites" dans le même motif. Attention toutefois, car toutes les combinaisons seront créees :

    mkdir REPERTOIRE.{a..c}_{0..3}
    # Ce qui me donne :
    ls -a
    REPERTOIRE.a_0
    REPERTOIRE.a_1
    REPERTOIRE.a_2
    REPERTOIRE.a_3
    REPERTOIRE.b_0
    ...
    REPERTOIRE.c_3

    Le bonus de fin : je peux parcourir une suite de nombres avec un pas supérieur à 1 :

    # Pour un pas de 2
    mkdir REPERTOIRE.{1..7..2}
    # Ce qui me donne :
    ls -a
    REPERTOIRE.1
    REPERTOIRE.3
    REPERTOIRE.5
    REPERTOIRE.7

    Edit : si au lieu d'une suite de caractères je veut utiliser une liste de valeurs prédéfinies je peux utiliser la virgule :

    mkdir dossier_{toto,1,007,AZ}
    # Ce qui me donne
    ls -a
    dossier_toto
    dossier_1
    dossier_007
    dossier_AZ

    Pour une arborescence, j'utilise aussi l'option -p :

    mkdir -p parent{1..4}/enfant{bill,bob,ben}
    # Ce qui me donne
    tree
    .
    ├── parent1
    │   ├── enfantben
    │   ├── enfantbill
    │   └── enfantbob
    ├── parent2
    │   ├── enfantben
    │   ├── enfantbill
    │   └── enfantbob
    ├── parent3
    │   ├── enfantben
    │   ├── enfantbill
    │   └── enfantbob
    └── parent4
        ├── enfantben
        ├── enfantbill
        └── enfantbob
    Tue Jun 26 00:33:06 2018 * - permalink -
    QRCode
    - https://cakeozolives.com/shaarli-animal/?jSfAOw
    Astuce Bash Création Linux mkdir Répertoire
  • Tri de données : sort | Mon pense-bête

    Trier un fichier selon la colonne souhaitée.

    Soit le fichier suivant, écrit en 3 colonnes :

    Tend Jean 23
    Car Thierry 34
    Tatouille Sarah 12

    Pour trier le fichier selon la deuxième colonne (alphabétique donc) :

    cat mon_fichier | sort -k 2,2
    # Ce qui donne :
    Tend Jean 23
    Tatouille Sarah 12
    Car Thierry 34

    Pour le trier selon la troisième colonne (ce sont des nombres) :

    cat mon_fichier | sort -k 3,3 -n
    # Ce qui donne :
    Tatouille Sarah 12
    Tend Jean 23
    Car Thierry 34

    Explication de la commande :

    • -k indique un tri par colonne;
    • 2,2 signifie de la colonne 2 à la colonne 2;
    • -n signifie que la colonne ne contient que des nombres.
    Mon Jun 25 16:27:12 2018 * - permalink -
    QRCode
    - http://www.quennec.fr/comment/313
    Bash Colonne sort Tri
  • shell - Bash tool to get nth line from a file - Stack Overflow

    Pour mémoire.
    Comment extraire la n-ème ligne d'une fichier en bash?

    Soit le fichier suivant :

    Ligne 01
    Ligne 02
    Ligne 03
    Ligne 04
    Ligne 05
    Ligne 06
    Ligne 07

    Avec l'outil sed :

    # J'extrais la 4eme ligne du fichier
    cat mon_fichier | sed "4q;d"
    # Ce qui donne
    Ligne 04
    # J'extrais la 67eme ligne (avec une variable)
    var="67"
    cat mon_fichier | sed "${var}q;d"
    Sun Jun 24 02:24:48 2018 * - permalink -
    QRCode
    - https://stackoverflow.com/a/6022431
    Bash ligne Linux n-eme numéro sed
  • Boucles for en bash

    Aujourd'hui je suis tombé sur ça :

    for i in $(seq 0 $var)
    do
       echo "bla bla bla"
    done

    Il s'agit d'une des multiples façons d'utiliser la boucle for en bash. Sauf que :

    • la boucle dépend de la commande seq, qui prend une quantité de RAM importante pour de grandes séquences;
    • il s'agit d'une façon désuète d'utiliser la boucle for. Elle ne devrait être utilisée que pour des raisons de retro-compatibilité avec de vieux shells.

    Depuis la version 4 de bash qui, je le rappelle, est sortie en février 2009, il existe une nouvelle façon d'utiliser la boucle for :

    # Pour i de 1 à $var par pas de 1
    for (( i=1; i<=$var; i++ ))
    do
       echo "bla bla bla"
    done

    Ou encore :

    # Pour i de 3 à 47 par pas de 4
    for i in {3..47..4}
    do
       echo "bla bla bla"
    done

    Il serait temps de s'y mettre !

    Sun Jun 24 01:54:23 2018 - permalink -
    QRCode
    - https://cakeozolives.com/shaarli-animal/?VtRUVA
    Bash boucle for Linux
  • getopt(1): parse command options - Linux man page

    Afin d'éviter de créer des scripts troués, une bonne pratique est d'utiliser le double-tiret -- pour marquer la fin des options d'une commande bash.

    En effet, supposons que je veuille lister les fichiers d'un répertoires. Rien n'empêche qu'un répertoire s'appelle -o et active donc l'option associée. Pour signifier à la commande ls d'ignorer ce qui suit mes options je procède ainsi :

    # Mon répertoire s'appelle "-o -a"
    var="-o -a"
    # J'ajoute un double-tiret pour signifier la fin des options
    ls -l -- "$var"
    # Une fois la variable évaluée, la commande ressemblera à ceci
    ls -l -- -o -a
    # Et seule l'option -l sera prise en compte

    Cette convention est reprise par toutes les commandes built-in de bash (+ d'autres shells comme csh et sh) sauf une poignée (true, false, echo et eval).

    J'avais fais quelques tests il y a quelques mois, pour voir ce qu'on pouvait faire en "hackant" les options des commandes. Pour ls c'est ennuyeux. Mais il suffit d'imaginer les conséquences avec rm par exemple ...

    Note à moi-même : il faudra que j'essaie getopt pour créer un parseur d'options en bash.

    Sat Jun 23 03:05:06 2018 * - permalink -
    QRCode
    - https://linux.die.net/man/1/getopt
    Bash Double_Tiret Linux Options Parseur Sécurité
  • Using SED and AWK to Print Lines Between Two Patterns - ShellHacks - Animal

    La même chose mais avec l'outil sed cette fois.

    Je veux donc afficher ce qui se trouve entre deux motifs, mais en utilisant des variables à la place des motifs. J'utilise le fichier suivant :

    Ce fichier est un fichier particulier
    car il contient un passage sensible situé
    entre MOTIF_01 et
    une balise
    de fin
    appelée MOTIF_02. Il s'agit d'extraire
    ce qui se situe entre les deux.

    Pour cela j'utilise sed de la façon suivante :

    # Le cas classique avec MOTIF_01 et MOTIF_02
    cat mon_fichier | sed -n "/MOTIF_01/,/MOTIF_02/p"
    # Ce qui me donne
    entre MOTIF_01 et
    une balise
    de fin
    appelée MOTIF_02. Il s'agit d'extraire

    En fait, cela me donne ce qui se trouve entre les lignes comprenant les motifs, en plus des lignes comprenant les motifs. Après ça, un substitution avec sed "s///" finit le travail.

    # En utilisant des variables (il suffit de les ajouter aux motifs)
    cat mon_fichier | sed -n "/MOTIF_01$VAR_01/,/$VAR_02/p"
    Fri Jun 22 19:58:49 2018 * - permalink -
    QRCode
    - https://www.cakeozolives.com/shaarli-animal/?1Az-Fg
    Bash Entre Lignes Linux Motifs sed Variables
  • Using SED and AWK to Print Lines Between Two Patterns - ShellHacks

    Cette fois c'est une capacité de l'outil awk qui m'intéresse.

    Comment afficher ce qui se trouve entre deux motifs ? Le point fort est que cette méthode fonctionne même si les motifs ne sont pas sur la même ligne :

    # J'affiche ce qui se trouve entre le motifs MOTIF_01 et MOTIF_02
    cat mon_fichier | awk "/MOTIF_01/,/MOTIF_02/"

    Dans ce cas, les motifs sont affichés avec ce qui les sépare. Le résultat peut ressembler à quelque chose comme ça :

    bla bla bla MOTIF_01 toc
    //Plein de trucs se trouvant entre les motifs
    paf pouf MOTIF_02 plouf plouf
    Fri Jun 22 18:45:38 2018 * - permalink -
    QRCode
    - https://www.shellhacks.com/sed-awk-print-lines-between-two-patterns/
    awk Bash Entre Lignes Linux Motifs
  • How to grep for lines above and below a certain pattern - Stack Overflow

    Une option bien utile de l'outil grep.

    Je veux chercher un motif dans un fichier texte. Mais je veux également afficher un certain nombre de lignes avant/après ce motif. J'utilise le fichier suivant :

    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Nulla et vehicula lectus.
    Integer sit amet augue est.
    Vivamus vestibulum pretium ex.
    Praesent in nunc nec turpis aliquam porttitor.
    Etiam leo quam, bibendum nec velit eget, aliquam malesuada justo.
    Aliquam sit amet dapibus enim.
    Proin eget velit vehicula, vulputate augue eget, maximus diam.
    Aenean pellentesque, nisi id viverra tempor, neque dui lacinia nisi, et ultricies nunc turpis at mauris.

    Pour cela, j'utilise les options -A et -B de grep ainsi :

    # En plus du motif recherché, j'affiche 2 lignes au-dessus et 3 lignes en-dessous
    cat mon_fichier | grep -E " turpis aliquam " -A3 -B2

    Ce qui me donne

    Integer sit amet augue est.
    Vivamus vestibulum pretium ex.
    Praesent in nunc nec turpis aliquam porttitor.
    Etiam leo quam, bibendum nec velit eget, aliquam malesuada justo.
    Aliquam sit amet dapibus enim.
    Proin eget velit vehicula, vulputate augue eget, maximus diam.

    Il faut lire ces options comme :

    • -A pour After;
    • -B pour Before.

    Le nombre qui les suit indique le nombre de lignes à garder avant/après.

    Si le nombre de lignes à garder avant/après est le même, alors je peux utiliser l'option -C :

    # En plus du motif recherché, j'affiche 1 ligne au-dessus et en-dessous
    cat mon_fichier | grep -E "amet dapibus" -C1

    Ce qui me donne

    Etiam leo quam, bibendum nec velit eget, aliquam malesuada justo.
    Aliquam sit amet dapibus enim.
    Proin eget velit vehicula, vulputate augue eget, maximus diam.
    Fri Jun 22 18:26:32 2018 * - permalink -
    QRCode
    - https://stackoverflow.com/a/19313500
    Après Avant Bash grep Linux motif
  • bash - choosing between $0 and BASH_SOURCE - Stack Overflow

    Pour connaître le path d'un script à l'intérieur de ce même script, il faut utiliser :

    PATH=${BASH_SOURCE[0]}

    Au lieu de :

    PATH=$0

    En effet, la première méthode retourne le path du script courant même s'il est sourcé (ie lancé comme ceci : ./script.sh).

    Mon Jun 18 21:50:28 2018 - permalink -
    QRCode
    - https://stackoverflow.com/questions/35006457/choosing-between-0-and-bash-source
    Bash Linux Path Script
Links per page: 20 50 100
◄Older
page 1 / 2
Shaarli - The personal, minimalist, super-fast, database free, bookmarking service by the Shaarli community - Help/documentation