linux:memo_bash
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:memo_bash [30/05/2012 19:47] – "$@" et pas $@ daniel | linux:memo_bash [28/08/2025 09:25] (Version actuelle) – [Commandes] daniel | ||
|---|---|---|---|
| Ligne 2: | Ligne 2: | ||
| * [[http:// | * [[http:// | ||
| + | * http:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| ===== vrac ===== | ===== vrac ===== | ||
| + | |||
| ==== Redirection ==== | ==== Redirection ==== | ||
| Pour rediriger les erreurs dans le meme log : commande >log 2>&1 | Pour rediriger les erreurs dans le meme log : commande >log 2>&1 | ||
| + | * http:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | Cf aussi | ||
| + | trap commande signal | ||
| + | pour exécuter une commande en cas de signal (le try/catch du bash) | ||
| + | |||
| + | Attention, si on capture stdout avec un truc comme | ||
| + | <code bash> | ||
| + | exec > >(while read line; do echo " | ||
| + | </ | ||
| + | le contenu du fichier $LOGRAP est pas immédiatement disponible dans le script principal (quand un sous-shell écrit dans un fichier, faut visiblement qu'il ait terminé pour que le parent soit sûr de récupérer le contenu. | ||
| ==== gestion des processus liés au terminal (avant/ | ==== gestion des processus liés au terminal (avant/ | ||
| Ligne 19: | Ligne 39: | ||
| ==== jobs et at ==== | ==== jobs et at ==== | ||
| On peut lister les jobs en cours avec '' | On peut lister les jobs en cours avec '' | ||
| - | |||
| - | |||
| ==== variables ==== | ==== variables ==== | ||
| Ligne 92: | Ligne 110: | ||
| chaine=/ | chaine=/ | ||
| </ | </ | ||
| + | |||
| ==== substitution de variable ==== | ==== substitution de variable ==== | ||
| bash ne permet pas l' | bash ne permet pas l' | ||
| + | |||
| + | Mais pour des booléens on peut utiliser le test -v " | ||
| ==== tableaux ==== | ==== tableaux ==== | ||
| Ligne 114: | Ligne 135: | ||
| 5 => hello | 5 => hello | ||
| </ | </ | ||
| + | |||
| + | |||
| ==== tests ==== | ==== tests ==== | ||
| Ligne 119: | Ligne 142: | ||
| * Tester un fichier [ option fichier ] | * Tester un fichier [ option fichier ] | ||
| - | * -e il existe | + | * -e : il existe |
| - | * -f c'est un fichier normal | + | * -f : c'est un fichier normal |
| - | * -d c'est un répertoire | + | * -d : c'est un répertoire |
| - | * -r | -w | -x il est lisible | modifiable | exécutable | + | * -L : c'est un symlink |
| - | * -s il n'est pas vide | + | * -h : c'est un symlink valide (marche pour les dossiers) |
| + | * -r | -w | -x | -k | -p | -u : lisible | modifiable | exécutable | ||
| + | * -p | -t | -S : tube nommé | file descriptor | socket | ||
| + | * -O | -G : il m' appartient | appartient à mon groupe | ||
| + | * -s : il n'est pas vide | ||
| + | * fichier_1 -ef fichier_2 : vrai si le fichier_1 et fichier_2 sont hard linkés (equal files) | ||
| + | * fichier_1 -nt fichier_2 : vrai si le fichier_1 est plus récent (newer than) que le fichier_2 ou si fichier_1 existe et non fichier_2 | ||
| * Tester une chaine [ option chaine ] | * Tester une chaine [ option chaine ] | ||
| * -z | -n la chaine est vide / n'est pas vide | * -z | -n la chaine est vide / n'est pas vide | ||
| * = | != les chaines comparées sont identiques | différentes | * = | != les chaines comparées sont identiques | différentes | ||
| + | * -v variable : $variable existe et a été assignée | ||
| ATTENTION à quoter la variable à tester : | ATTENTION à quoter la variable à tester : | ||
| Ligne 166: | Ligne 196: | ||
| ===== Commandes perso ===== | ===== Commandes perso ===== | ||
| + | |||
| + | |||
| + | * Pour lister le nb de fichiers/ | ||
| + | <code bash> | ||
| + | uniq -c < / | ||
| ==== Scripts ==== | ==== Scripts ==== | ||
| + | |||
| === afflign.sh - afficher une (ou des) lignes d'un fichier === | === afflign.sh - afficher une (ou des) lignes d'un fichier === | ||
| Ligne 174: | Ligne 210: | ||
| ===== Commandes ===== | ===== Commandes ===== | ||
| + | Cf http:// | ||
| + | |||
| + | ==== find / grep / awk ==== | ||
| + | |||
| + | Un exemple pour virer tous les ''?>'' | ||
| + | |||
| + | <code shell> | ||
| + | find . -type f -name ' | ||
| + | if ( m{([^\n]*? | ||
| + | unless ( $1 =~ /<\?=/ ) { # si on a pas de "<? | ||
| + | s/ | ||
| + | } | ||
| + | } | ||
| + | ' {} + | ||
| + | </ | ||
| + | |||
| + | Pour lister toutes les fins de fichiers php qui contiendrait un ?> (même avec un ''<? | ||
| + | grep -rPlz ' | ||
| + | |||
| + | Pour virer les espaces (ou caractères BOM) qui précèderaient un ''<? | ||
| + | |||
| + | grep -rPlz ' | ||
| + | | tr ' | ||
| + | | xargs -r perl -0777 -pi -e ' | ||
| + | * '' | ||
| + | * -P pour grep c'est passer en perl regexp (pour avoir les ancres '' | ||
| + | * -z affiche '' | ||
| ==== vrac ==== | ==== vrac ==== | ||
| Ligne 202: | Ligne 265: | ||
| </ | </ | ||
| - | Pour RECOPIER UNE ARBORESCENCE (et son contenu) se placer dans le répertoire de destination et entrer | ||
| - | (cd / | ||
| - | explication dans "le système Linux", | ||
| - | Apparemment devenu inutile depuis que cp a l' | ||
| - | |||
| - | ==== cat ==== | ||
| - | < | ||
| - | -b, --number-nonblank | ||
| - | -E, --show-ends | ||
| - | -n, --number | ||
| - | -s, --squeeze-blank | ||
| - | -T, --show-tabs | ||
| - | -v, --show-nonprinting | ||
| - | </ | ||
| - | ==== tail ==== | ||
| - | < | ||
| - | Usage: tail [OPTION]... [FILE]... | ||
| - | Print the last 10 lines of each FILE to standard output. | ||
| - | With more than one FILE, precede each with a header giving the file name. | ||
| - | With no FILE, or when FILE is -, read standard input. | ||
| - | |||
| - | --retry | ||
| - | | ||
| - | | ||
| - | -c, --bytes=N | ||
| - | -f, --follow[={name|descriptor}] output appended data as the file grows; | ||
| - | -f, --follow, and --follow=descriptor are | ||
| - | | ||
| - | -n, --lines=N | ||
| - | --max-unchanged-stats=N | ||
| - | with --follow=name, | ||
| - | | ||
| - | to see if it has been unlinked or renamed | ||
| - | (this is the usual case of rotated log files) | ||
| - | --pid=PID | ||
| - | -q, --quiet, --silent | ||
| - | -s, --sleep-interval=S | ||
| - | | ||
| - | -v, --verbose | ||
| - | --help | ||
| - | --version | ||
| - | |||
| - | If the first character of N (the number of bytes or lines) is a `+', | ||
| - | print beginning with the Nth item from the start of each file, otherwise, | ||
| - | print the last N items in the file. N may have a multiplier suffix: | ||
| - | b for 512, k for 1024, m for 1048576 (1 Meg). A first OPTION of -VALUE | ||
| - | or +VALUE is treated like -n VALUE or -n +VALUE unless VALUE has one of | ||
| - | the [bkm] suffix multipliers, | ||
| - | or -c +VALUE. | ||
| - | |||
| - | With --follow (-f), tail defaults to following the file descriptor, which | ||
| - | means that even if a tail' | ||
| - | its end. This default behavior is not desirable when you really want to | ||
| - | track the actual name of the file, not the file descriptor (e.g., log | ||
| - | rotation). | ||
| - | named file by reopening it periodically to see if it has been removed and | ||
| - | recreated by some other program. | ||
| - | </ | ||
| - | |||
| - | ==== ls ==== | ||
| - | < | ||
| - | -l format long | ||
| - | -h human readable | ||
| - | -S sort by file size | ||
| - | -t sort by modification time | ||
| - | -X sort alphabetically by entry extension | ||
| - | </ | ||
| - | |||
| - | ==== wc ==== | ||
| - | "word count" | ||
| - | |||
| - | wc -l donne le nb de lignes | ||
| - | |||
| - | cat toto.txt | grep titi | wc -l | ||
| - | donne le nb de lignes où ' | ||
| - | grep -c titi toto.txt | ||
| - | |||
| - | ==== tar ==== | ||
| - | |||
| - | tar cvzf archive.tgz repertoire_a_archiver | ||
| - | prends tous les fichiers de repertoire_a_archiver (sous-rep inclus) et les mets dans archive.tgz, | ||
| - | tar cvjf archive.tar.bz2 repertoire_a_archiver | ||
| - | |||
| - | tar xvzf archive.tgz decompresse l' | ||
| - | et en général | ||
| - | tar xvf archive.tgz | ||
| - | suffit | ||
| - | |||
| - | ==== gzip ==== | ||
| - | < | ||
| - | usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] | ||
| - | -c --stdout | ||
| - | -d --decompress | ||
| - | -f --force | ||
| - | -h --help | ||
| - | -l --list | ||
| - | -L --license | ||
| - | -n --no-name | ||
| - | -N --name | ||
| - | -q --quiet | ||
| - | -r --recursive | ||
| - | -S .suf --suffix .suf use suffix .suf on compressed files | ||
| - | -t --test | ||
| - | -v --verbose | ||
| - | -V --version | ||
| - | -1 --fast | ||
| - | -9 --best | ||
| - | | ||
| - | </ | ||
| ==== find ==== | ==== find ==== | ||
| - | pour afficher tous les fichiers de + de 20Ko (FreeBSD, 20k autorise | + | pour afficher tous les fichiers de + de 20Ko (FreeBSD, |
| find /path \( -size +20000c \) -exec ls -l {} \; | find /path \( -size +20000c \) -exec ls -l {} \; | ||
| lister les fichier de /tmp de 0 octets de + de 60mn | lister les fichier de /tmp de 0 octets de + de 60mn | ||
| Ligne 320: | Ligne 274: | ||
| pour renommer les mp3 en swf | pour renommer les mp3 en swf | ||
| for i in *.mp3; do mv $i ${i%mp3}swf ;done | for i in *.mp3; do mv $i ${i%mp3}swf ;done | ||
| - | |||
| - | ==== grep ==== | ||
| - | < | ||
| - | Usage: grep [OPTION]... PATRON [FICHIER] ... | ||
| - | Search for PATTERN in each FILE or standard input. | ||
| - | Example: grep -i 'hello world' menu.h main.c | ||
| - | |||
| - | Regexp selection and interpretation: | ||
| - | -E, --extended-regexp | ||
| - | -F, --fixed-regexp | ||
| - | -G, --basic-regexp | ||
| - | -e, --regexp=PATTERN | ||
| - | -f, --file=FILE | ||
| - | -i, --ignore-case | ||
| - | -w, --word-regexp | ||
| - | -x, --line-regexp | ||
| - | -z, --null-data | ||
| - | non pas par un retour de chariot | ||
| - | |||
| - | Divers: | ||
| - | -s, --no-messages | ||
| - | -v, --revert-match | ||
| - | -V, --version | ||
| - | --help | ||
| - | --mmap | ||
| - | |||
| - | Output control: | ||
| - | -b, --byte-offset | ||
| - | -n, --line-number | ||
| - | -H, --with-filename | ||
| - | -h, --no-filename | ||
| - | -q, --quiet, --silent | ||
| - | --binary-files=TYPE | ||
| - | TYPE is ' | ||
| - | -a, --text | ||
| - | -I equivalent to --binary-files=without-match | ||
| - | -d, --directories=ACTION | ||
| - | ACTION is ' | ||
| - | -r, --recursive | ||
| - | -L, --files-without-match only print FILE names containing no match | ||
| - | -l, --files-with-matches | ||
| - | -c, --count | ||
| - | -Z, --null | ||
| - | |||
| - | Contrôle du contexte: | ||
| - | -B, --before-context=N | ||
| - | -A, --after-context=N | ||
| - | -C, --context[=N] | ||
| - | à moins que -A ou -B ne soit spécifié | ||
| - | -N identique à --context=N | ||
| - | -U, --binary | ||
| - | les fins de lignes (MS-DOS) | ||
| - | -u, --unix-byte-offsets | ||
| - | aucun CR n' | ||
| - | |||
| - | `egrep' | ||
| - | Sans FICHIER, ou si - est utilisé comme nom de FICHIER, la lecture | ||
| - | se fait de l' | ||
| - | est implicite. Termine avec 0 s'il y a concordance avec 1 si aucune. | ||
| - | Termine avec 2 s'il y a des erreurs de syntaxe ou de système. | ||
| - | </ | ||
| ==== sed ==== | ==== sed ==== | ||
| Ligne 423: | Ligne 316: | ||
| Voir aussi tr qui remplace des caractères (sans regexp, lire le man pour les pbs avec l' | Voir aussi tr qui remplace des caractères (sans regexp, lire le man pour les pbs avec l' | ||
| - | sed est aussi efficace pour afficher une ligne particulière | + | sed est aussi efficace pour afficher une ligne particulière |
| - | sed -e '288 !d' </ | + | sed -e '288 !d' <fichier |
| - | affichera la ligne 288 (ou plutôt n'effacera pas, le " | + | ou |
| - | et | + | sed -ne '288 p' |
| + | |||
| + | ou un bloc de lignes | ||
| sed -e ' | sed -e ' | ||
| - | affichera les lignes 288 à 291, tout comme | + | ou |
| sed -ne ' | sed -ne ' | ||
| - | (on affiche pas sauf demande explicite) | ||
| ==== cut ==== | ==== cut ==== | ||
| Ligne 438: | Ligne 332: | ||
| pour récupérer les GUIDuser du log nl3i | pour récupérer les GUIDuser du log nl3i | ||
| grep kne nl3i_access.log | grep 'GET / | grep kne nl3i_access.log | grep 'GET / | ||
| - | |||
| - | ==== php ==== | ||
| - | < | ||
| - | sur ns2230, le binaire php est dans / | ||
| - | Usage: php [-q] [-h] [-s] [-v] [-i] [-f < | ||
| - | php < | ||
| - | -a Run interactively | ||
| - | -C Do not chdir to the script' | ||
| - | -c < | ||
| - | -n No php.ini file will be used | ||
| - | -d foo[=bar] | ||
| - | -e | ||
| - | -f < | ||
| - | -h This help | ||
| - | -i PHP information | ||
| - | -l | ||
| - | -m Show compiled in modules | ||
| - | -q | ||
| - | -s | ||
| - | -v | ||
| - | -w | ||
| - | -z < | ||
| - | </ | ||
| ==== mysql ==== | ==== mysql ==== | ||
| Ligne 486: | Ligne 357: | ||
| ex de backup & mail | ex de backup & mail | ||
| + | |||
| <code bash> | <code bash> | ||
| #!/bin/sh | #!/bin/sh | ||
| Ligne 496: | Ligne 368: | ||
| / | / | ||
| </ | </ | ||
| + | |||
| + | ==== mail ==== | ||
| un simple | un simple | ||
linux/memo_bash.1338400035.txt.gz · Dernière modification : 30/05/2012 19:47 de daniel