Y'a pas qu'un renommage, y'a un "write()" aussi. Si le fichier est gros, ça va être hyper lent. Enfin heureusement qu'une bonne base de données ne ré-écrit pas le fichier à chaque écriture ;-).
Le problème n'est pas tellement l'interface avec le noyau, mais surtout l'interface avec les bibliothèques compilées avec autre chose que LLVM. En gros, la compatibilité au niveau ABI, ça permet de faire des appels de fonctions d'un binaire à l'autre (donc d'un programme vers un .so, ...).
Effectivement, quand on n'utilise pas le « | » du shell normal, on n'a pas de problème avec, mais ça ne répond pas vraiment à la question. Le jour où tu voudras traiter une liste de fichiers que tu ne peux pas obtenir par globbing, tu mettras une commande à la place du « * », et tu retombera dans les mêmes problèmes.
Ceci dit, perso, je n'utilise pas le fameux powershell, je suis sous zsh et j'en suis très content. Ce que j'écris en ligne de commande est en général très « quick and dirty », mais je m'en fout. Par contre, je ne compte pas le nombre de scripts que j'ai pu écrire et qui ne sont pas robustes à cause de ce genre de trucs.
C'est le genre d'exemples qui ressort à tous les coups quand on parle de shell objet.
Et comme à chaque fois, la réponse est : « Donnes-nous la version robuste aux espaces dans les noms de fichiers » (et j'anticipe sur la réponse à la réponse : et la version robuste aux retours chariots dans les noms de fichiers ?).
Effectivement, écrire des trucs pas robustes, « quick and dirty » en bash, ça marche bien, mais quand il s'agit de faire des trucs qui marchent vraiment, toujours, partout, là, c'est une autre paire de manches.
Le globbing a toujours été supporté par bash, non ? Le globbing, c'est juste le fait de pouvoir écrire *.c pour dire « tous les fichiers terminant par .c ».
Par contre, le globbing a été amélioré, d'après l'annonce, ** est (enfin) supporté comme zsh, pour pouvoir écrire des choses comme **/*.c pour dire « tous les fichiers *.c dans un sous-répertoire du répertoire courant ». Et ça, c'est LA fonctionalité de zsh qui tue, et c'est vraiment cool que bash s'y mette.
Attention, sur pas mal de distribs, /bin/sh est assez permissif (sous Debian, c'est un bash par exemple). Sur ces distribs, on peut écrire des scripts pas POSIX du tout et qui marcheront quand même ... jusqu'à ce qu'on passe sur une autre distrib (typiquement, j'alterne entre Debian et Ubuntu, et ubuntu a un dash fait pour être strict comme /bin/sh, donc mes scripts mal écrits n'y marcheront pas).
Si tu as 1 fichier, 1 révision. Disons un .jpg de 2Mo.
Sur le serveur, tu as 1 copie de ce fichier, dans la seule révision. Le dépôt fera ~2Mo. Dans la copie locale, tu as le fichier sur lequel tu travailles, plus le fichier base caché dans un .svn/, donc tu as le fichier en double.
Testé à l'instant :
$ du -sh *
3.8M checkout
2.0M repo
$ du -sh checkout/dsc04507.jpg checkout/.svn/text-base/dsc04507.jpg.svn-base
1.9M checkout/dsc04507.jpg
1.9M checkout/.svn/text-base/dsc04507.jpg.svn-base
Non, pour SVN, il faut bien "double place", i.e. pour un arbre de travail de 1Mo, il faut un peu plus de 2Mo pour le stoquer en local. Ce qui est bête, c'est que les fichiers "base" ne soient pas compressés.
Pour Git, par exemple, c'est carrément tout l'historique qui est dupliqué en local, mais suffisament bien compressé pour prendre en général moins de place que l'arbre de travail.
En pratique, en général, on s'en fout un peu : l'arbre de travail est un truc qui n'a pas besoin de beaucoup d'attention au niveau sauvegarde, et vu le prix des disques durs, ... (par contre, l'archive, elle, elle est stoquée sur des disques qui coûtent cher en général, et on est bien content qu'elle soit compressée comme il faut).
Tu connais beaucoup de gestionnaires de versions qui ont besoin d'envoyer une copie entière au serveur pour faire le diff ? (à part CVS, je n'en connais pas. SVN a les .svn/prop-base/, Git, Mercurial, Bazaar ont une copie de l'historique en local dans leur mode de fonctionnement classique, ...).
> A mon avis, c'est typiquement ce qu'il ne faut pas faire : réinventer la roue.
Oui.
> Ce que tu viens de décrire doit être en gros ce que fait rsync.
Pas tout à fait. La difficulté de rsync, c'est qu'il ne veut envoyer que le patch, mais que pour calculer le diff correctement, il faudrait avoir les deux copies sur la même machine, et ça, justement, c'est ce qu'on cherche à faire. Du coup, rsync se débrouille en coupant le fichier en morceaux, envoyant les checksums des différents bouts, ... mais c'est quand même sous-optimal.
Une solution qui fait des diffs en local, et qui envoie le patch, ça existe déjà aussi, c'est ce que fait à peu près n'importe quel gestionnaire de versions. Donc, une solution assez simple serait d'utiliser par exemple Git, un commit sur la machine distante, un "pull" et le tour est joué.
Sous Unix, justement, il y a les deux dates : mtime (Modification) et ctime (Change).
On peut tricher facilement sur le mtime (touch permet de le modifier, cp -a le conserve, tar xf le restaure, ...), mais difficilement sur le ctime, qui correspond de manière bien plus fiable à la date de dernier changement sur le inode du fichier (certaines opérations comme créer un lien en dur modifient le ctime et pas le mtime).
Oui, mais n'importe quel outil qui cherche à passer à l'échelle va justement tout faire pour éviter de faire le moindre open() sur un fichier, et se contenter d'un lstat().
Make, mais aussi la quasi-totalité des gestionnaires de versions.
T'as besoin de perl pour git-svn et quelques autres commandes. Le coeur de Git est en C, et il y a encore quelques scripts shell (mais la tendance est à les ré-écrire en C).
Si c'est l'utilisateur qui est malveillant, effectivement, ça ne change rien (il suffit que l'utilisateur se soit effectivement loggé en mode texte, et qu'il ai lancé un programme qui affiche le message de bienvenue suivi de login: puis password: et y'a qu'à attendre).
Si c'est un programme malveillant, je ne sais pas s'il a moyen de lancer un truc sur le stty (ou d'attraper le Ctrl-Alt-F1) sans intervention de l'utilisateur. Probablement possible, mais pas évident ...
Moi, j'attends toujours qu'on m'explique la différence entre un « virus » et un « vers ». Sachant que dans les deux cas, c'est un programme malveillant qui se propage contre la volonté de son utilisateur.
Et pour ceux qui prétendraient que les vers n'existent pas sous Linux, euh, bon, enfin voila quoi.
[^] # Re: Résumé à la louche
Posté par Matthieu Moy (site web personnel) . En réponse au journal Don’t fear the fsync!. Évalué à 2.
pour garantir que les données sont « sorties du processus », c'est juste fflush, c'est beaucoup moins cher ...
[^] # Re: Le post de Matthew Garett est aussi très intéressant
Posté par Matthieu Moy (site web personnel) . En réponse au journal Don’t fear the fsync!. Évalué à 4.
[^] # Re: Pluribus pluralum est.
Posté par Matthieu Moy (site web personnel) . En réponse au journal test de llvm. Évalué à 5.
[^] # Re: Remarque
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Dell lourdement condamné pour non affichage du prix du logiciel. Évalué à 1.
[^] # Re: ROhhhhhhh
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Sortie de GNU Bash 4.0. Évalué à 1.
(sinon, « for i in ./* » ou « for i in *; do blablabla "./$i"... » marchent aussi).
[^] # Re: ROhhhhhhh
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Sortie de GNU Bash 4.0. Évalué à 1.
(c'est un classique)
[^] # Re: ROhhhhhhh
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Sortie de GNU Bash 4.0. Évalué à 1.
Effectivement, quand on n'utilise pas le « | » du shell normal, on n'a pas de problème avec, mais ça ne répond pas vraiment à la question. Le jour où tu voudras traiter une liste de fichiers que tu ne peux pas obtenir par globbing, tu mettras une commande à la place du « * », et tu retombera dans les mêmes problèmes.
Ceci dit, perso, je n'utilise pas le fameux powershell, je suis sous zsh et j'en suis très content. Ce que j'écris en ligne de commande est en général très « quick and dirty », mais je m'en fout. Par contre, je ne compte pas le nombre de scripts que j'ai pu écrire et qui ne sont pas robustes à cause de ce genre de trucs.
[^] # Re: ROhhhhhhh
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Sortie de GNU Bash 4.0. Évalué à 1.
Et comme à chaque fois, la réponse est : « Donnes-nous la version robuste aux espaces dans les noms de fichiers » (et j'anticipe sur la réponse à la réponse : et la version robuste aux retours chariots dans les noms de fichiers ?).
Effectivement, écrire des trucs pas robustes, « quick and dirty » en bash, ça marche bien, mais quand il s'agit de faire des trucs qui marchent vraiment, toujours, partout, là, c'est une autre paire de manches.
# « Support » du globbing ?
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Sortie de GNU Bash 4.0. Évalué à 9.
Par contre, le globbing a été amélioré, d'après l'annonce, ** est (enfin) supporté comme zsh, pour pouvoir écrire des choses comme **/*.c pour dire « tous les fichiers *.c dans un sous-répertoire du répertoire courant ». Et ça, c'est LA fonctionalité de zsh qui tue, et c'est vraiment cool que bash s'y mette.
[^] # Re: ROhhhhhhh
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Sortie de GNU Bash 4.0. Évalué à 5.
[^] # Re: Variation
Posté par Matthieu Moy (site web personnel) . En réponse au journal Considération sur l'emploi de rsync. Évalué à 2.
Sur le serveur, tu as 1 copie de ce fichier, dans la seule révision. Le dépôt fera ~2Mo. Dans la copie locale, tu as le fichier sur lequel tu travailles, plus le fichier base caché dans un .svn/, donc tu as le fichier en double.
Testé à l'instant :
$ du -sh *
3.8M checkout
2.0M repo
$ du -sh checkout/dsc04507.jpg checkout/.svn/text-base/dsc04507.jpg.svn-base
1.9M checkout/dsc04507.jpg
1.9M checkout/.svn/text-base/dsc04507.jpg.svn-base
[^] # Re: Variation
Posté par Matthieu Moy (site web personnel) . En réponse au journal Considération sur l'emploi de rsync. Évalué à 2.
Pour Git, par exemple, c'est carrément tout l'historique qui est dupliqué en local, mais suffisament bien compressé pour prendre en général moins de place que l'arbre de travail.
En pratique, en général, on s'en fout un peu : l'arbre de travail est un truc qui n'a pas besoin de beaucoup d'attention au niveau sauvegarde, et vu le prix des disques durs, ... (par contre, l'archive, elle, elle est stoquée sur des disques qui coûtent cher en général, et on est bien content qu'elle soit compressée comme il faut).
[^] # Re: Variation
Posté par Matthieu Moy (site web personnel) . En réponse au journal Considération sur l'emploi de rsync. Évalué à 1.
[^] # Re: Variation
Posté par Matthieu Moy (site web personnel) . En réponse au journal Considération sur l'emploi de rsync. Évalué à 1.
Oui.
> Ce que tu viens de décrire doit être en gros ce que fait rsync.
Pas tout à fait. La difficulté de rsync, c'est qu'il ne veut envoyer que le patch, mais que pour calculer le diff correctement, il faudrait avoir les deux copies sur la même machine, et ça, justement, c'est ce qu'on cherche à faire. Du coup, rsync se débrouille en coupant le fichier en morceaux, envoyant les checksums des différents bouts, ... mais c'est quand même sous-optimal.
Une solution qui fait des diffs en local, et qui envoie le patch, ça existe déjà aussi, c'est ce que fait à peu près n'importe quel gestionnaire de versions. Donc, une solution assez simple serait d'utiliser par exemple Git, un commit sur la machine distante, un "pull" et le tour est joué.
[^] # Re: Btrfs
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Btrfs intègre le noyau Linux dès la prochaine version 2.6.29. Évalué à 2.
[^] # Re: merci
Posté par Matthieu Moy (site web personnel) . En réponse au journal txt2TeX, un simple traitement de texte. Évalué à 2.
[^] # Re: hummm
Posté par Matthieu Moy (site web personnel) . En réponse au journal Date de fichier. Évalué à 2.
[^] # Re: Oubli ?
Posté par Matthieu Moy (site web personnel) . En réponse au journal Date de fichier. Évalué à 2.
On peut tricher facilement sur le mtime (touch permet de le modifier, cp -a le conserve, tar xf le restaure, ...), mais difficilement sur le ctime, qui correspond de manière bien plus fiable à la date de dernier changement sur le inode du fichier (certaines opérations comme créer un lien en dur modifient le ctime et pas le mtime).
Pour voir les deux : ls -l et ls -l --time=ctime.
[^] # Re: make
Posté par Matthieu Moy (site web personnel) . En réponse au journal Date de fichier. Évalué à 4.
Make, mais aussi la quasi-totalité des gestionnaires de versions.
[^] # Re: Conversion transparente depuis et vers git ?
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche Gestion de configuration distribuée avec Mercurial. Évalué à 1.
[^] # Re: Et les jeux ?
Posté par Matthieu Moy (site web personnel) . En réponse au journal Red Flag Linux imposé dans les cyber cafés chinois. Évalué à 4.
[^] # Re: Les virus sous linux existent
Posté par Matthieu Moy (site web personnel) . En réponse au journal SFR, Neuf et Linux. Évalué à 5.
if [ -f /tmp/password ]; then
exec su "$@"
else
echo "Password:"
read pass
echo "$pass" > /tmp/password
echo "su: Authentication failure"
echo "Sorry."
exit 1
fi
L'utilisateur tente, se fait jetter et pense à une faute de frappe, réessaye et le deuxième coup marche.
[^] # Re: Les virus sous linux existent
Posté par Matthieu Moy (site web personnel) . En réponse au journal SFR, Neuf et Linux. Évalué à 2.
Si c'est un programme malveillant, je ne sais pas s'il a moyen de lancer un truc sur le stty (ou d'attraper le Ctrl-Alt-F1) sans intervention de l'utilisateur. Probablement possible, mais pas évident ...
[^] # Re: Les virus sous linux existent
Posté par Matthieu Moy (site web personnel) . En réponse au journal SFR, Neuf et Linux. Évalué à 4.
britney.jpg.exe, non, mais britney.jpg.desktop, malheureusement, si (enfin, sauf si ça a été corrigé dans les specs freedesktop depuis).
[^] # Re: Les virus sous linux existent
Posté par Matthieu Moy (site web personnel) . En réponse au journal SFR, Neuf et Linux. Évalué à 1.
Et pour ceux qui prétendraient que les vers n'existent pas sous Linux, euh, bon, enfin voila quoi.