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 [29/04/2011 16:34] – précisions manip de chaines 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 43: | Ligne 63: | ||
| $* La liste des arguments à partir de $1 | $* La liste des arguments à partir de $1 | ||
| - | $@ La liste des arguments à partir de $1, chacun étant entre " (le nb et les contenu sont donc préservé si l'un deux comporte une espace, cf http:// | + | $@ La liste des arguments à partir de $1, chacun étant entre " (le nb et les contenu sont donc préservé si l'un deux comporte une espace, cf http:// |
| + | |||
| + | '' | ||
| $$ le n° PID du processus courant | $$ le n° PID du processus courant | ||
| Ligne 49: | Ligne 71: | ||
| $! le n° PID du processus fils | $! le n° PID du processus fils | ||
| + | ==== Manipulation de chaînes ==== | ||
| + | Regarder la manipulation de chaines sur http:// | ||
| + | Attention, globing correspond à une expression de " | ||
| - | |||
| - | ==== Manipulation de chaînes ==== | ||
| - | |||
| - | Regarder la manipulation de chaines sur http:// | ||
| <code bash> | <code bash> | ||
| ${#chaine} # nb de car de $chaine | ${#chaine} # nb de car de $chaine | ||
| - | expr match " | + | expr match " |
| expr match " | expr match " | ||
| expr match " | expr match " | ||
| Ligne 67: | Ligne 88: | ||
| # Extraction d’une sous-chaîne | # Extraction d’une sous-chaîne | ||
| - | ${chaine:position} # Extrait une sous-chaîne de $chaine à partir de la position | + | ${chaine:pos} # Extrait une sous-chaîne de $chaine à partir de la position |
| - | ${chaine:position:longueur} # Extrait | + | ${chaine:pos:longueur} # Extrait |
| # Suppression de sous-chaînes | # Suppression de sous-chaînes | ||
| - | ${chaine#regex} # Supprime la correspondance la plus petite de regex à partir du début de $chaine. | + | ${chaine#globing} # Supprime la correspondance la plus petite de globing |
| - | ${chaine##regex} # Supprime la correspondance la plus grande de regex à partir du début de $chaine. | + | ${chaine##globing} # Supprime la correspondance la plus grande de globing |
| - | ${chaine%regex} # Supprime la plus petite correspondance de regex à partir de la fin de $chaine. | + | ${chaine%globing} # Supprime la plus petite correspondance de globing |
| - | ${chaine%%regex} # Supprime la plus grande correspondance de regex à partir de la fin de $chaine. | + | ${chaine%%globing} # Supprime la plus grande correspondance de globing |
| # Remplacement de sous-chaîne | # Remplacement de sous-chaîne | ||
| - | ${chaine/regex/ | + | ${chaine/globing/ |
| - | ${chaine//regex/ | + | ${chaine//globing/ |
| # ex pour échapper les slashes | # ex pour échapper les slashes | ||
| - | chaine=/ | + | chaine=/ |
| - | ${chaine/#regex/ | + | |
| + | ${chaine/#globing/ | ||
| # ex pour faire un basename | # ex pour faire un basename | ||
| chaine=/ | chaine=/ | ||
| - | ${chaine/%regex/ | + | ${chaine/%globing/ |
| + | chaine=/ | ||
| </ | </ | ||
| - | === subsitution | + | ==== substitution |
| bash ne permet pas l' | bash ne permet pas l' | ||
| - | === tableaux === | + | Mais pour des booléens on peut utiliser le test -v " |
| + | |||
| + | ==== tableaux | ||
| Cf http:// | Cf http:// | ||
| Ligne 116: | Ligne 141: | ||
| Source: http:// | Source: http:// | ||
| - | * Tester un fichier | + | * Tester un fichier [ option fichier ] |
| - | [ option fichier ] | + | |
| - | avec pour option | + | |
| - | -e il existe | + | |
| - | -f c'est un fichier normal | + | * -L : c'est un symlink |
| - | -d c'est un répertoire | + | * -h : c'est un symlink valide (marche pour les dossiers) |
| - | -r | -w | -x il est lisible | modifiable | exécutable | + | * -r | -w | -x | -k | -p | -u : lisible | modifiable | exécutable |
| - | -s il n'est pas vide | + | * -p | -t | -S : tube nommé | file descriptor | socket |
| + | * -O | -G : il m' appartient | appartient à mon groupe | ||
| + | | ||
| + | * 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 | + | * Tester une chaine [ option chaine ] |
| - | [ option chaine ] | + | |
| - | -z | -n la chaine est vide / n'est pas vide | + | |
| - | = | != 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 150: | Ligne 179: | ||
| et on peut combiner ça avec du -a (and) -o (or) et ! (not). Par exemple\\ | et on peut combiner ça avec du -a (and) -o (or) et ! (not). Par exemple\\ | ||
| [ ! -f $1 -a $2 -lt 10 ] && echo "OK, le 1er param n'est pas un fichier et le 2e est inférieur à 10" | [ ! -f $1 -a $2 -lt 10 ] && echo "OK, le 1er param n'est pas un fichier et le 2e est inférieur à 10" | ||
| + | |||
| + | |||
| + | ==== ulimit ==== | ||
| + | * -S :soft limit | ||
| + | * -H : hard limit | ||
| + | * -a : tout afficher | ||
| + | * -n : nb max de fichiers ouverts (socket & connexions comprises) | ||
| + | * -u : nb max de process lancés | ||
| + | * -T : nb max de threads | ||
| + | |||
| + | Cf man bash /ulimit pour le reste... (ou man dash, sous debian les process sont souvent lancés par dash, alias de sh, cf / | ||
| + | |||
| + | Ces valeurs sont fixées dans / | ||
| + | |||
| + | Attention, ces valeurs s' | ||
| ===== 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 163: | 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 191: | 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 ==== | ||
| - | < | ||
| - | Usage: cat [OPTION] [FILE]... | ||
| - | Concatenate FILE(s), or standard input, to standard output. | ||
| - | |||
| - | -A, --show-all | ||
| - | -b, --number-nonblank | ||
| - | -e | ||
| - | -E, --show-ends | ||
| - | -n, --number | ||
| - | -s, --squeeze-blank | ||
| - | -t | ||
| - | -T, --show-tabs | ||
| - | -u | ||
| - | -v, --show-nonprinting | ||
| - | --help | ||
| - | --version | ||
| - | |||
| - | With no FILE, or when FILE is -, read standard input. | ||
| - | </ | ||
| - | ==== 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. | ||
| - | </ | ||
| - | ==== chmod ==== | ||
| - | < | ||
| - | les droits sous UNIX | ||
| - | 4 == READ (r) | ||
| - | 2 == WRITE (w) | ||
| - | 1 == EXECUTE (x) | ||
| - | ie 700=rwx------ ou bien 644=rw-r--r-- | ||
| - | </ | ||
| - | |||
| - | ==== ls ==== | ||
| - | -l format long | ||
| - | -h human readable | ||
| - | -S sort by file size | ||
| - | -t sort by modification time | ||
| - | -X sort alphabetically by entry extension | ||
| - | ==== wc ==== | ||
| - | |||
| - | wc -l donne le nb de lignes | ||
| - | par exemple | ||
| - | cat toto.txt | grep titi | wc -l | ||
| - | donne le nb de lignes où ' | ||
| - | ==== rm ==== | ||
| - | |||
| - | Pour virer un rep entier | ||
| - | rm -Rf repertoire_a_vider | ||
| - | si marche pas : rm -Rf repertoire_a_vider/ | ||
| - | ==== 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 xvzf archive.tgz decompresse l' | ||
| - | |||
| - | ==== 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 | ||
| - | find /tmp -size 0 -amin -60 -exec ls -alh {} \; | + | |
| pour renommer les mp3 en swf | pour renommer les mp3 en swf | ||
| - | 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 ==== | ||
| fait du rechercher/ | fait du rechercher/ | ||
| + | |||
| + | cf [[sed]] | ||
| exemples sur http:// | exemples sur http:// | ||
| Ligne 404: | Ligne 297: | ||
| < | < | ||
| Début de ligne ^ | Début de ligne ^ | ||
| - | Fin de ligne $ | + | Fin de ligne |
| N' | N' | ||
| Zéro ou plusieurs * | Zéro ou plusieurs * | ||
| Ligne 421: | Ligne 314: | ||
| for fich in *.hosts; do digovh.sh `echo $fich | sed ' | for fich in *.hosts; do digovh.sh `echo $fich | sed ' | ||
| - | Voir aussi tr qui remplace des bouts de chaine | + | Voir aussi tr qui remplace des caractères |
| - | 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 | + | ou |
| + | sed -ne '288,291 p' </ | ||
| ==== cut ==== | ==== cut ==== | ||
| Ligne 436: | 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 467: | Ligne 340: | ||
| Quand on a perdu le mot de pase root: | Quand on a perdu le mot de pase root: | ||
| - | <file> | + | <code bash> |
| / | / | ||
| - | Restart it with the following: | + | # Restart it with the following: |
| / | / | ||
| - | Connect to the server with: | + | # Connect to the server with: |
| mysql mysql | mysql mysql | ||
| - | Enter the following: | + | # Enter the following: |
| UPDATE user SET password=PASSWORD(' | UPDATE user SET password=PASSWORD(' | ||
| - | Exit the client | + | # Exit the client |
| - | Shut down the server with: | + | # Shut down the server with: |
| mysqladmin shutdown | mysqladmin shutdown | ||
| - | Start the server back up properly with: | + | # Start the server back up properly with: |
| / | / | ||
| - | </file> | + | </code> |
| trouvé sur http:// | trouvé sur http:// | ||
| ex de backup & mail | ex de backup & mail | ||
| + | |||
| <code bash> | <code bash> | ||
| #!/bin/sh | #!/bin/sh | ||
| Ligne 494: | Ligne 368: | ||
| / | / | ||
| </ | </ | ||
| + | |||
| + | ==== mail ==== | ||
| un simple | un simple | ||
| - | cat fichier_a_joindre | uuencode nom_de_la_piece_jointe | mail -s " | + | cat fichier_a_joindre | uuencode nom_de_la_piece_jointe | mail -s " |
| marche aussi, équivalent à | marche aussi, équivalent à | ||
| - | uuencode fichier_a_joindre nom_de_la_piece_jointe | mail -s " | + | |
| ===== NFS ===== | ===== NFS ===== | ||
linux/memo_bash.1304087686.txt.gz · Dernière modification : 29/04/2011 16:34 de daniel