Initialisation

This commit is contained in:
2024-01-07 10:02:35 +01:00
commit b7291133a3
4418 changed files with 169147 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
====== Exécution unique d'un script BASH ======
{{ :dummy.png?75x75|Nom de la section}}
Il arrive que l'on est besoin d'exécuter de manière un script. C'est à dire que le script ne doit pas démarré alors que le précédent lancement n'est pas terminé.
Il faut savoir que lorsqu'un script ou un programme s'exécute, le système d'exploitation lui attribue un identifiant unique, appelé **process id**.
Le script doit s'assurer une execution unique. Pour se faire, il déclarera son **process id** dans un fichier. Le fichier sera consulté systématiquement au démarrage. Si le **process id** est toujours en cours d'exécution, alors l'exéction qui vient de démarrer, s'arrêtera.
Voici l'algo proposé :
<code>
lire le process id dans le fichier
le process existe-il encore ?
si oui
alors EXIT
sinon
remplacer le process id par le notre
continuer l'execution du script
...
supprimer le fichier contenant le process id
</code>
En BASH, voici le code proposé pour un script de sauvegarde :
<code BASH>
if [ -f /root/save.pid ]; then
pid_in_file=$(cat /root/save.pid)
if [ -d /proc/$pid_in_file ]; then
echo -e Une sauvegarde est en cours
exit;
else
rm /root/save.pid
fi
fi
echo $$>/root/save.pid
....
rm /root/save.pid
</code>

View File

@@ -0,0 +1,31 @@
====== BASH ======
{{ :informatique:langage:logo_bash.png?nolink&75x75|Terminal}}
BASH est un interpréteur en ligne de commande de type script. C'est le shell Unix du projet GNU. Il est utilisé également utilisé avec Linux sous **Debian**, **Fedora**, **MX Linux**, **Mint** ou **Raspbian**.
===== Table des matières =====
<WRAP clear/>
<WRAP group>
<WRAP half column>
==== Les pages ====
<nav stacked="true" fade="true">
<nspages . -h1 -nbCol=1 -textNS=" " -textPages=" " -simpleList -exclude:cookie: -exclude:user: -exclude:playground: -exclude:[sidebar index start rightsidebar navbar topheader header help pageheader pagefooter legal-notices footer 404]>
</nav>
</WRAP>
<WRAP half column>
==== Les sous-catégories ====
<nav stacked="true" fade="true">
<nspages . -h1 -nbCol=1 -noPages -subns -textNS=" " -textPages=" " -simpleList -exclude:cookie: -exclude:user: -exclude:playground: -exclude:[sidebar index start rightsidebar navbar topheader header help pageheader pagefooter legal-notices footer 404]>
</nav>
</WRAP>
</WRAP>
~~NOTOC~~
~~NOCACHE~~

View File

@@ -0,0 +1,104 @@
====== Variables prédéfinies dans BASH ======
<code>
BASH
BASHOPTS
BASHPID
BASH_ALIASES
BASH_ARGC
BASH_ARGV
BASH_ARGV0
BASH_CMDS
BASH_COMMAND
BASH_COMPAT
BASH_ENV
BASH_EXECUTION_STRING
BASH_LOADABLES_PATH
BASH_LINENO
BASH_REMATCH
BASH_SOURCE
BASH_SUBSHELL
BASH_VERSINFO
BASH_VERSION
BASH_XTRACEFD
CHILD_MAX
COLUMNS
COMP_LINE
COMP_CWORD
COMP_POINT
COMP_TYPE
COMP_KEY
COMP_WORDBREAKS
COMP_WORDS
COMPREPLY
COPROC
DIRSTACK
EMACS
ENV
EPOCHREALTIME
EPOCHSECONDS
EUID
EXECIGNORE
FCEDIT
FIGNORE
FUNCNEST
GLOBIGNORE
GROUPS
histchars
HISTCMD
HISTCONTROL
HISTFILE
HISTFILESIZE
HISTIGNORE
HISTSIZE
HISTTIMEFORMAT
HOSTFILE
HOSTNAME
HOSTTYPE
IGNOREEOF
INPUTRC
INSIDE_EMACS
LANG
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_NUMERIC
LC_TIME
LINENO
LINES
MACHTYPE
MAILCHECK
MAPFILE
OLDPWD
OPTERR
OSTYPE
PIPESTATUS
POSIXLY_CORRECT
PPID
PROMPT_COMMAND
PROMPT_DIRTRIM
PS0
PS3
PS4
PWD
RANDOM
READLINE_LINE
READLINE_POINT
REPLY
SECONDS
SHELL
SHELLOPTS
SHLVL
TIMEFORMAT
TMOUT
TMPDIR
UID
</code>
===== Références =====
* [[https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html]]

View File

@@ -0,0 +1,229 @@
====== Rechercher sous Linux Terminal ======
{{ :informatique:bash:pasted:20211109-084357.png?100}}
===== Sommaire =====
Un petit mémo sur les recherches de fichiers en ligne de commande sous Linux avec **find** et **grep**. Pour tous les exemples de **find** jutilise loption **-exec** qui permet dappliquer une autre commande (**ls**, **rm**, etc…) aux résultats de la recherche. Évidemment on nest pas obligé.
===== - Recherche de fichiers et répertoires sur le nom =====
{{ :informatique:bash:pasted:20221118-084820.png?75|Chercher un fichier}}
Lister les fichiers dont le nom est « toto » à partir du répertoire courant :
<code bash>
find . -name "toto" -exec ls -lh "{}" \;
</code>
---
Pour ce type de recherche simple il ne faut pas oublier la commande locate, très rapide car elle va lire une base dindexation au lieu de parcourir larborescence des répertoires. Par contre les fichiers trop récents ne seront pas forcément indexés. La commande suivante recherche tous les fichiers dont le chemin contient « toto » :
<code bash>
locate toto
</code>
---
Pour faire une recherche insensible à la casse on utilise -iname à la place de -name :
<code bash>
find . -iname "toto" -exec ls -lh "{}" \;
</code>
---
Lister les fichiers dont lextension est « .log » à partir du répertoire courant :
<code bash>
find . -name "*.log" -exec ls -lh "{}" \;
</code>
---
Lister les répertoires dont le nom est « toto » à partir du répertoire courant :
<code bash>
find . -name "toto" -type d -exec ls -d "{}" \;
</code>
---
{{ :informatique:bash:pasted:20211113-073211.png?320}}
Lister les répertoires où se trouve le fichier de nom « toto » à partir du répertoire courant :
<code bash>
find . -name "toto" -exec ls -d "{}" \;
</code>
ou
<code bash>
find "toto" -name . -printf '%h\n'
</code>
<WRAP clear/>
---
Lister les répertoires dont le chemin contient « /local/bin » à partir du répertoire courant :
<code bash>
find . -wholename "*/local/bin*" -type d -exec ls -d "{}" \;
</code>
---
On peut combiner les critères avec les opérateurs -a pour et, -o pour ou et ! pour la négation.
Lister les répertoires dont le nom est « toto » qui ne sont pas un sous-répertoire de « /scripts/bash »
<code bash>
find . \( -name "toto" -a ! -wholename "*/scripts/bash/*" \) -exec ls -d "{}" \;
</code>
---
===== - Recherche de gros fichiers =====
{{ :informatique:bash:pasted:20221118-085145.png?75|Rechercher de gros fichiers}}
Pour lister les fichiers de plus de 500Mo à partir du répertoire courant :
<code bash>
find . -size +500M -exec ls -lh "{}" \;
</code>
Pour supprimer ces mêmes fichiers avec confirmation :
<code bash>
find . -size +500M -exec rm -iv "{}" \;
</code>
===== - Rechercher par la date =====
{{ :informatique:bash:pasted:20221118-084312.png?75| Recherche par date}}
Lister les fichiers qui nont pas été modifiés depuis 2 mois, à partir du répertoire courant :
<code bash>
find . -mtime 60 -exec ls -lh "{}" \;
</code>
===== - Comptage de fichiers =====
{{ :informatique:bash:pasted:20221118-084422.png?75|Compter}}
Compter le nombre de fichiers du répertoire courant :
<code bash>
find . -maxdepth 1 -type f | wc -l
</code>
{{:informatique:bash:pasted:20211113-073645.png}}
Compter le nombre de fichiers pdf dans le répertoire courant et ses sous-répertoires :
<code bash>
find . -type f -iname "*.pdf" | wc -l
</code>
===== - Rechercher dans le contenu des fichiers avec grep =====
{{ :informatique:bash:pasted:20221118-084724.png?75|Chercher dans le contenu des fichiers}}
Recherche les fichiers contenant « toto » dans le répertoire courant, affiche le nom du fichier et la ligne correspondante :
<code bash>
grep "toto" *
</code>
---
La même chose avec une recherche récursive dans les sous-répertoires :
<code bash>
grep -r "toto" *
</code>
---
Recherche sans tenir compte de la casse :
<code bash>
grep -i "toto" *
</code>
— //[[https://tavie.onsenfout.com/2015/03/03/recherche-de-fichiers-sous-linux/|Ta vie on s'en fout !]] 2021/11/07 12:38:21//
===== - Recherche dans le contenu des fichiers ODT / LibreOffice avec grep =====
{{ :informatique:bash:pasted:20221118-084045.png?75|Libre Office Icone}}
Script à écrire dans ''~/scripts/search-odt'' :
<code BASH>
#!/bin/bash
find . -type f -name "*.odt" | while read i ; do
[ "$1" ] || { echo "You forgot search string!" ; exit 1 ; }
unzip -ca "$i" 2>/dev/null | grep -iq "$*"
if [ $? -eq 0 ] ; then
echo "string found in $i" | nl
fi
done
</code>
Puis rendre executable le script :
<code BASH>
chmod +x ~/scripts/search-odt
PATH=$PATH:~/scripts
</code>
Appeler le script dans un dossier :
<code>
[cedric24c@dskstd courrier]$ search-odt finances publiques
1 string found in ./2012/20121025204239.odt
</code>
--- //[[https://askubuntu.com/questions/938834/grep-for-text-in-odt-or-doc-files]] 2019-11-26 18:15//
===== - Rechercher des dossiers vides =====
{{ :informatique:bash:rechercher:pasted:20221118-083640.png?75|Dossier vide}}
Effacer les dossiers et sous-dossiers vides.
<code>
find . -empty -type d -delete
</code>
--- //{{ :informatique:bash:rechercher:linux___unix_find_and_delete_all_empty_directories_files_-_nixcraft.pdf | Effacer les dossiers vides }} 2022-11-18 08:41:41//
===== - Voir aussi =====
Rechercher dans des fichiers :
* [[informatique:bash:rechercher:dans-la-description-des-manuels|]]

View File

@@ -0,0 +1,38 @@
====== Rechercher dans la description des manuels ======
{{ :dummy.png?75x75|Nom de la section}}
Sous Linux, la commande ''apropos'' permet de lister les manuels dont la description comprend les mots passés en arguments. Le mot-clé peut contenir des jokers (*) avec l'option -w.
Exemple :
<code>
cedric24c@cdcdsk001:~/scripts $ apropos cherche
apropos (1) - Chercher le nom et la description des pages de manuel
bsearch (3) - Recherche dichotomique dans un tableau trié
ffs (3) - Chercher le premier bit à 1 dans un mot
ffsl (3) - Chercher le premier bit à 1 dans un mot
ffsll (3) - Chercher le premier bit à 1 dans un mot
find (1) - Rechercher des fichiers dans une hiérarchie de répertoires
glob (3) - Rechercher un chemin d'accès correspondant à un motif
globfree (3) - Rechercher un chemin d'accès correspondant à un motif
index (3) - Recherche de caractères dans une chaîne
lfind (3) - Recherche linéaire dans un tableau
lsearch (3) - Recherche linéaire dans un tableau
memchr (3) - Rechercher un caractère dans une zone mémoire
memmem (3) - Rechercher une sous-chaîne
memrchr (3) - Rechercher un caractère dans une zone mémoire
rawmemchr (3) - Rechercher un caractère dans une zone mémoire
rindex (3) - Recherche de caractères dans une chaîne
strcasestr (3) - Rechercher une sous-chaîne
strchr (3) - Rechercher un caractère dans une chaîne
strchrnul (3) - Rechercher un caractère dans une chaîne
strpbrk (3) - Rechercher un ensemble d'octets dans une chaîne
strrchr (3) - Rechercher un caractère dans une chaîne
strstr (3) - Rechercher une sous-chaîne
wcschr (3) - Rechercher un caractère large dans une chaîne de caractères larges
wcscspn (3) - Rechercher une chaine de caractère large dans un ensemble de caractères larges
wcspbrk (3) - Rechercher un ensemble de caractères larges dans une chaîne
wcsrchr (3) - Rechercher un caractère large dans une chaîne
wcsstr (3) - Rechercher une sous-chaîne dans une chaîne de caractères larges
wmemchr (3) - Rechercher un caractère large dans une zone de mémoire
</code>

View File

@@ -0,0 +1,16 @@
[[.:]]
==== Les pages ====
<nav stacked="true" fade="true">
<nspages . -h1 -nbCol=1 -textNS=" " -textPages=" " -simpleList -exclude:cookie: -exclude:user: -exclude:playground: -exclude:[sidebar index start rightsidebar navbar topheader header help pageheader pagefooter legal-notices footer 404]>
</nav>
==== Les sous-catégories ====
<nav stacked="true" fade="true">
<nspages . -h1 -nbCol=1 -noPages -subns -textNS=" " -textPages=" " -simpleList -exclude:cookie: -exclude:user: -exclude:playground: -exclude:[sidebar index start rightsidebar navbar topheader header help pageheader pagefooter legal-notices footer 404]>
</nav>
~~NOTOC~~
~~NOCACHE~~

View File

@@ -0,0 +1,16 @@
====== Paramètre && - retour du PID ======
{{tag>"Linux commande"}}
{{ :informatique:langage:logo_bash.png?nolink&75x75|}}
Affiche le numéro de process de lexécution de la ligne de commande en cours. Synonyme de PID, Process IDentification en cours.
Dans un programme BASH, on peut récupérer le numéro du process de l'enfant avec la variable [[informatique:bash:liste-variables-bash|$BASHPID]]
<code>
~ $ echo $$
17601
~ $ ( echo $$; echo $BASHPID )
17601
17634
</code>