A voir également:
- Optimisation du script shell
- Optimisation pc - Accueil - Utilitaires
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Ghost script - Télécharger - Polices de caractères
2 réponses
Qu'entends-tu par optimiser un script shell ? C'est un langage interprété donc lent (par exemple par rapport à du C). À part avoir une structure algorithmique bien écrite (éviter d'imbriquer 3 boucles quand 1 suffit....) et utiliser autant que possible des | quand ça permet d'éviter une boucle, il n'y a pas grand chose à dire.
Et pour la sécurisation je ne vois pas trop non plus. Finalement les commandes shell que tu invoques sont soumises aux mêmes droits que les commandes que tu tapes dans un shell donc... Il faut juste faire gaffe si tu ton script a un bit suid a faire attention aux paramètres reçus par ton script shell et vérifier qu'ils ne vont pas avoir un effet de bord imprevu.
https://en.wikipedia.org/wiki/Code_injection#Shell_injection
Enfin si tu lances des transferts de fichiers entre deux machines, autant utiliser le plus possible ssh (scp) pour chiffrer les données qui circulent mais ce n'est pas réservé au shell.
Bonne chance
Et pour la sécurisation je ne vois pas trop non plus. Finalement les commandes shell que tu invoques sont soumises aux mêmes droits que les commandes que tu tapes dans un shell donc... Il faut juste faire gaffe si tu ton script a un bit suid a faire attention aux paramètres reçus par ton script shell et vérifier qu'ils ne vont pas avoir un effet de bord imprevu.
https://en.wikipedia.org/wiki/Code_injection#Shell_injection
Enfin si tu lances des transferts de fichiers entre deux machines, autant utiliser le plus possible ssh (scp) pour chiffrer les données qui circulent mais ce n'est pas réservé au shell.
Bonne chance
bonsoir mamiemando
merci pour le lien du "shell injection" je le trouve très intéressant
pour l'optimisation du script shell regardes par exple ce lien http://www.thelinuxblog.com/optimizing-shell-scripts/
mais en fait il est insuffisant pour ma recherche
merci pour le lien du "shell injection" je le trouve très intéressant
pour l'optimisation du script shell regardes par exple ce lien http://www.thelinuxblog.com/optimizing-shell-scripts/
mais en fait il est insuffisant pour ma recherche
Salut,
pour l'optimisation du script shell regardes par exple ce lien
Ce lien ne montre pas l'optimisation des scripts shell mais plutôt quelque chose de genre "la bonne manière d'utiliser le shell" avec les commandes adaptées pour la meilleure tâche, la syntaxe à utiliser, etc
mais en fait il est insuffisant pour ma recherche
Si tu veux optimiser alors tu n'as qu'à optimiser le shell lui même.
Tu prends le code source et tu commences à coder ;-)
Avant de te lancer dans tes recherches, il faut commencer par lire la documentation des shells, étudier les commandes, comprendre le système sur lequel les scripts sont exécutés, etc.
Ensuite, après tout ça, tu verras que les choses deviendront plus claires ou pas ;-)
pour l'optimisation du script shell regardes par exple ce lien
Ce lien ne montre pas l'optimisation des scripts shell mais plutôt quelque chose de genre "la bonne manière d'utiliser le shell" avec les commandes adaptées pour la meilleure tâche, la syntaxe à utiliser, etc
mais en fait il est insuffisant pour ma recherche
Si tu veux optimiser alors tu n'as qu'à optimiser le shell lui même.
Tu prends le code source et tu commences à coder ;-)
Avant de te lancer dans tes recherches, il faut commencer par lire la documentation des shells, étudier les commandes, comprendre le système sur lequel les scripts sont exécutés, etc.
Ensuite, après tout ça, tu verras que les choses deviendront plus claires ou pas ;-)
Je pense que pour "l'optimisation" lami20j a mis le doigt sur le coeur du problème.
Le shell est fondamentalement un langage lent car c'est un langage interprété. Et je doute que le "moteur" shell soit vraiment optimisable. De plus ça aurait peu d'intérêt.
Ce qui fait qu'un script shell est performant invoque des commandes écrites souvent en langage C qui lui est très performant. Des mécanismes comme les tubes (pipes) | permettent de réduire la présence de l'algorithmie shell (par exemple en faisant une boucle et / ou en passant par un fichier intermédiaire) qui dégraderait les performances.
Remarques indépendantes du langage :
Pour finir sur l'optimisation :
- les opérations en lecture/écriture sur un fichier dégradent les performances, donc quand on peut éviter c'est mieux ;
- la complexité d'un algorithme (ce qui revient à estimer le nombre d'itérations) doit être aussi faible que possible afin que le programme passe à l'échelle. Concrètement cela revient à essayer d'imbriquer trop de boucles les unes dans les autres.
Exemple : je veux dessiner un carré de n étoiles sur n étoiles
* Méthode 1 :
Complexité : n^2 car on fait n itérations dans un bloc répété n fois n * n = n^2.
* Méthode 2
Complexité : un bloc répété n fois suivi d'un autre, soit une complexité n + n = 2*n. Dans la théorie de la complexité on vire les facteurs car quand n est très grand, n^2 devient bien plus important que 2*n.
Conclusion : le second algorithme est plus performant. Mais il nécessite de garder en mémoire la chaîne s (qui contient n étoiles consécutives). Améliorer la complexité d'un algorithme "coûte" souvent de la mémoire (ou alors ça veut dire que la première version était mal codée !) et donc parfois il faut faire des choix.
Le shell est fondamentalement un langage lent car c'est un langage interprété. Et je doute que le "moteur" shell soit vraiment optimisable. De plus ça aurait peu d'intérêt.
Ce qui fait qu'un script shell est performant invoque des commandes écrites souvent en langage C qui lui est très performant. Des mécanismes comme les tubes (pipes) | permettent de réduire la présence de l'algorithmie shell (par exemple en faisant une boucle et / ou en passant par un fichier intermédiaire) qui dégraderait les performances.
Remarques indépendantes du langage :
Pour finir sur l'optimisation :
- les opérations en lecture/écriture sur un fichier dégradent les performances, donc quand on peut éviter c'est mieux ;
- la complexité d'un algorithme (ce qui revient à estimer le nombre d'itérations) doit être aussi faible que possible afin que le programme passe à l'échelle. Concrètement cela revient à essayer d'imbriquer trop de boucles les unes dans les autres.
Exemple : je veux dessiner un carré de n étoiles sur n étoiles
* Méthode 1 :
Pour ligne = 1 à n
Pour colonne = 1 à n
Ecrire *
Fin pour
Passer à la ligne
Fin pour
Complexité : n^2 car on fait n itérations dans un bloc répété n fois n * n = n^2.
* Méthode 2
chaine = '';
Pour colonne = 1 à n
chaine = chaine + *
Fin pour
Pour ligne = 1 à n
Ecrire chaine
Passer à la ligne
Fin pour
Complexité : un bloc répété n fois suivi d'un autre, soit une complexité n + n = 2*n. Dans la théorie de la complexité on vire les facteurs car quand n est très grand, n^2 devient bien plus important que 2*n.
Conclusion : le second algorithme est plus performant. Mais il nécessite de garder en mémoire la chaîne s (qui contient n étoiles consécutives). Améliorer la complexité d'un algorithme "coûte" souvent de la mémoire (ou alors ça veut dire que la première version était mal codée !) et donc parfois il faut faire des choix.