web-dev-qa-db-fra.com

Utilisation du toucher et du vi?

Y a-t-il un avantage à créer un fichier tactile avant de le modifier .. comme:

touch foo
vi foo

par rapport à la mise en ligne immédiate de l'éditeur? Comme:

vi foo

Je vois pas mal de tutoriels utilisant le premier (touch puis vi).

55
Fawix

touchen premier le fichier confirme que vous avez réellement la possibilité de créer le fichier, plutôt que de perdre du temps dans un éditeur uniquement pour découvrir que le système de fichiers est en lecture seule ou un autre problème.

111
DopeGhoti

Outre les réponses données, un avantage du toucher est que tout autre utilisateur/terminal modifiant le même fichier pendant que vous le touchez, recevra un avertissement lorsqu'il essaiera d'enregistrer les modifications.

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

Cela les alerterait même si vous n'avez apporté aucune modification en soi et n'avez touché que le fichier.

25
amisax

Outre la réponse acceptée:

Il convient de noter que touch est utilisé pour mettre à jour les horodatages des fichiers. Si vous utilisez touch sur un fichier existant, il mettra à jour l'horodatage des fichiers à la date et à l'heure actuelles. Si le fichier n'existe pas, il crée un fichier vide avec la date et l'heure actuelles comme horodatage.

vi, d'autre part, ne crée pas de nouveau fichier sauf si vous y écrivez.

Par exemple, si j'ai tapé vi test.txt, tapé quelques notes, puis tapé :q!; test.txt n'existerait pas.

19
Peschke

Sans touch, un nouveau fichier n'existera pas tant que vous n'aurez pas demandé à vi de l'écrire.

Considérez un système multi-utilisateurs (vous êtes peut-être sur un système de fichiers monté en réseau partagé par de nombreux systèmes, chacun avec de nombreux utilisateurs). L'exécution de touch vous assurera que vous avez le fichier (et que vous pouvez y écrire) et même met à jour l'horodatage. Un autre utilisateur souhaitant créer un tel fichier verra que vous en êtes le propriétaire. S'il existe déjà et qu'un autre utilisateur souhaite le supprimer ou le remplacer, il verra qu'il a été récemment modifié et réfléchira peut-être à deux fois.

8
Adam Katz

Il n'y a aucun avantage à touching en premier; vi créera le fichier s'il n'existe pas.

La réponse acceptée indique qu'elle vérifie si vous pouvez y écrire avant de perdre du temps dans un éditeur. C'est vrai, mais maintenant vous perdrez du temps à taper touch à chaque fois. Ne pas pouvoir écrire quelque part est assez exceptionnel par rapport à la fréquence à laquelle cela fonctionnera (tant que vous vous souvenez de Sudo pour les fichiers en dehors de votre répertoire personnel ou /tmp, ou sont connectés en tant que root).

Ouvrez simplement l'éditeur et faites ce que vous voulez, puis essayez d'enregistrer le fichier. Si cela ne fonctionne pas, même avec :w!, enregistrez-le ailleurs (:w ~/asdf) et corrigez le problème. Une fois corrigé, vous pouvez copier le contenu du fichier du fichier temporaire vers l'original: cat ~/asdf > /mnt/example.txt && rm ~/asdf. La raison pour laquelle nous utilisons cat au lieu de mv ou cp est d'utiliser les autorisations de la destination et d'autres attributs.

De plus, pour une utilisation plus avancée de la ligne de commande, vous pouvez mettre en arrière-plan vi avec Ctrl+Z pendant que vous résolvez le problème (ou utilisez :suspend, ou :sus), et enfin fg à nouveau pour exécuter la commande d'écriture.

Edit: post amélioré en réponse aux commentaires de / u/G-Man . Merci!

4
Luc

Il n'y a aucun avantage. vi créera un fichier s'il n'existe pas.

3
ronakg

Spécifiquement pour une utilisation avec vi, il n'est pas nécessaire de créer le fichier avant de le modifier: vi peut être utilisé pour créer et enregistrer un nouveau fichier. Cependant, il existe des contextes d'appel où le fichier doit exister. Par exemple, sur mon système (OS X), je peux lancer un éditeur GUI approprié (déterminé par le type de fichier) comme ceci:

open foo.txt

Cela ouvrirait foo.txt dans TextEdit, ou dans emacs, ou tout ce que j'ai spécifié comme éditeur de choix pour les fichiers texte, et détachez le processus pour que je récupère immédiatement mon invite. (open bar.py pourrait l'ouvrir dans IDLE, l'éditeur python; etc.) Ou je peux explicitement demander emacs:

open -a emacs foo.txt

Mais open requiert que le fichier existe déjà, sinon il déclenche une erreur. J'ai donc dû définir emacs pour être la fonction Shell suivante, ce qui me permet d'écrire emacs foo pour lancer l'interface graphique emacs même si foo n'existe pas.

function emacs () 
{ 
    if [ -n "$1" -a ! -e "$1" ]; then
        /usr/bin/touch "$1";
    fi;
    open -a emacs "$@"
}
1
alexis

vi est un éditeur de texte visuel (vi = visuel) Il est visuel par rapport à "ed" de toute façon, ce qui vous permet de voir et de modifier une ligne de texte à la fois.

La commande touch met à jour l'horodatage d'un fichier existant ou crée un nouveau fichier s'il n'existait pas déjà. C'est bon pour tester des choses qui dépendent fortement des horodatages.

Maintenant, si votre fichier est un fichier texte, ou n'existe pas encore, ouvrez-le avec vi, puis lancez la commande :wq à vi, aurait le même résultat que de toucher ce fichier. C'est la seule façon dont les deux commandes sont similaires.

1
malyy

touchcommande modifie la date et l'heure d'un fichier avec l'horodatage actuel.
si le fichier n'existe pas, il crée un nouveau fichier avec la date et l'heure.

viéditeur est utilisé pour éditer les fichiers si le fichier n'existe pas, il crée un nouveau fichier sauf si nous ne l'enregistrons pas.

0
Premraj

À la page de manuel de Touch, son travail principal consiste à modifier les horodatages des fichiers.
Ofc crée également le fichier avec l'horodatage actuel et vous pouvez ensuite modifier le fichier.

VI est un éditeur de texte qui fait ce qu'il dit: éditer le texte ouvert, enregistrer, éditer le fichier, etc.

Tout est saveur de l'utilisateur et habbit: touchez puis vi ou vi file.txt même chose couleur différente.

0
igiannak

vi est utilisé pour modifier un fichier en tant qu'utilisateur, tandis que le toucher peut définir l'horodatage dessus et est principalement utilisé dans les scripts et autres.

Une autre façon de créer un fichier est:

>newfile.txt
0
licklake