Y a-t-il un avantage à créer un fichier avec touch avant de le modifier .. comme:
touch foo
vi foo
par rapport à un éditeur tout de suite? Comme:
vi foo
Je vois pas mal de tutoriels utilisant l'ancien ( touch
alors vi
).
touch
Le fichier d’abord confirme que vous avez 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.
touch
vous permet de le fairechmod +x
ensuite, avant la modification, ce qui serait logique si vous écrivez un#!/bin/bash
script shell.:w
première chose après le débutvi
si. (et:chmod +x %
si vous voulez le rendre exécutable)touch
peut échouer là oùvi
est:w!
aurait réussi si (par exemple sifile
existe mais vous n'êtes pas son propriétaire et ne pas avoir accès en écriture à elle, alors que vous avez accès en écriture dans le répertoire courant). A l' inverse,touch
peut réussir , maisvi
l »:w
ou:w!
peut échouer si vous êtes propriétaire du fichier, mais n'ont pas accès en écriture à elle , ni dans le répertoire courant (vous seriez en mesure de travailler autour d' elle avec:!chmod +w %
(certainesvi
implémentations commevim
peut le faire que automatiquement sur:w!
))."foo" [readonly]
. Et encore en entrant en mode insertion:Warning: Changing a readonly file.
Outre les réponses données, l'un des avantages de la fonction tactile est que tout autre utilisateur / terminal modifiant le même fichier pendant que vous le touchiez reçoit un avertissement lorsqu'il tente de sauvegarder les modifications.
Cela les alerterait même si vous n'avez apporté aucune modification et que vous avez uniquement touché le fichier.
la source
En dehors de la réponse acceptée:
Il est à noter qu’il
touch
est utilisé pour mettre à jour les horodatages des fichiers. Si vous utiliseztouch
un fichier existant, l’horodatage des fichiers sera mis à jour à 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 un nouveau fichier à moins que vous n'y écriviez.Par exemple, si j'ai tapé
vi test.txt
, tapé quelques notes, puis tapé:q!
;test.txt
n'existerait pas.la source
Sans cela
touch
, un nouveau fichier n’existera pas tant que vous n’avez pas demandévi
à l’écrire.Considérons un système multi-utilisateur (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). Courir
touch
vous assurera que vous avez le fichier (et que vous pouvez y écrire) et met même à 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é modifié récemment et réfléchira peut-être à deux fois.la source
Il n'y a aucun avantage à se
touch
lancer d'abord;vi
créera le fichier s'il n'existe pas.La réponse acceptée dit qu'elle vérifie si vous pouvez écrire ici avant de perdre du temps dans un éditeur. C'est vrai, mais maintenant vous perdrez du temps à taper à
touch
chaque fois. Ne pas être capable d'écrire quelque part est assez exceptionnel par rapport à la fréquence à laquelle cela fonctionnera (tant que vous vous souvenezsudo
de fichiers en dehors de votre répertoire de base/tmp
ou que vous êtes connecté en tant que root).Ouvrez simplement l'éditeur et faites ce que vous voulez, puis essayez de sauvegarder le fichier. Si cela ne fonctionne pas, même avec
:w!
, sauvegardez-le ailleurs (:w ~/asdf
) et corrigez le problème. Une fois qu'il est fixé, vous pouvez copier le contenu du fichier à partir du fichier temporaire à l'original:cat ~/asdf > /mnt/example.txt && rm ~/asdf
. La raison pour laquelle nous utilisonscat
au lieu demv
oucp
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 utiliser l'arrière-plan
vi
avec Ctrl+ Zpendant que vous résolvez le problème (ou utiliser:suspend
, ou:sus
), et enfinfg
exécuter à nouveau la commande write.Edit: post amélioré en réponse aux commentaires de / u / G-Man . Merci!
la source
/mnt/example.txt
n'est pas censé être lisible par tout le monde, mais que votre umask est réglé sur quelque chose de permissif comme 22, alors/tmp/asdf
il sera lisible par tout le monde. S'il y a d'autres personnes sur le système, elles peuvent peut-être lire la copie temporaire du fichier. (2) Le fichier/mnt/example.txt
n'est probablement pas supposé être accessible en écriture, mais s'il y a des personnes mal intentionnées sur le système, elles peuvent peut-être lire la copie temporaire du fichier et la remplacer par une version modifiée avant de la déplacer / la copier. il retourne au bon endroit. … (Suite)/tmp
pourrait empêcher cela.) (3) La commandemv /tmp/asdf /mnt/example.txt
détruira totalement le courant/mnt/example.txt
et le remplacera/tmp/asdf
. Vous souhaitez remplacer le contenu de/mnt/example.txt
par le contenu de/tmp/asdf
. En utilisantmv
, vous configurez de manière/mnt/example.txt
à avoir les mêmes attributs que ceux que/tmp/asdf
vous possédez probablement et lisibles par tout le monde. Ce pourrait être mieuxcp /tmp/asdf /mnt/example.txt
ou mêmecat /tmp/asdf > /mnt/example.txt
. … PS (4) Vous pouvez suspendrevi
en tapant:suspend
(ou:sus
, pour faire court)./tmp
, mais il n'y a aucune excuse pour ne pas écrire à la~/
place. Je n'avais pas non plus pensé que cela remplacerait les attributs. Je vais éditer mon post, merci :)Il n'y a aucun avantage.
vi
créera un fichier s'il n'existe pas.la source
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
touch
commande met à jour l'horodatage sur un fichier existant ou crée un nouveau fichier si le fichier n'existait pas déjà. C'est bon pour tester des choses qui dépendent fortement de l'horodatage.Maintenant, si votre fichier est un fichier texte, ou n’existe pas encore, l’ouvrir avec vi, puis l’envoi de 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.la source
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 dans lesquels le fichier doit exister. Par exemple, sur mon système (OS X), je peux lancer un éditeur d’interface graphique approprié (déterminé par le type de fichier), comme ceci:Cela s'ouvrirait
foo.txt
dans TextEdit, ou dans emacs, ou tout ce que j'aurais spécifié comme éditeur de choix pour les fichiers texte, et détacherait le processus afin que je récupère mon invite immédiatement. (open bar.py
pourrait l'ouvrir dans IDLE, l'éditeur de python; etc.) Ou je peux demander explicitement à emacs:Mais
open
nécessite que le fichier existe déjà, sinon cela déclenche une erreur. Donc, je devais définiremacs
pour être la fonction shell suivante, ce qui me permet d’écrireemacs foo
pour lancer l’emacs
interface graphique même s’ilfoo
n’existe pas.la source
vi est utilisé pour éditer un fichier en tant qu'utilisateur, alors que touch peut définir l'horodatage et est principalement utilisé dans les scripts et autres.
Une autre façon de créer un fichier est:
la source
zsh
est identique àcat >newfile.txt
et nécessite que vous appuyiez sur Ctrl + D.Par page de contact, son travail principal consiste à modifier les horodatages des fichiers.
Ofc est également en train de créer le fichier avec l’horodatage actuel et vous pourrez ensuite éditer le fichier.
VI est éditeur de texte qui fait ce qu'il dit ouvert modifier texte, enregistrer, éditer le fichier , etc.
Tout est la saveur de l' utilisateur et d'Habitude: vi ou alors toucher vi file.txt même couleur différente.
la source
touch
La commande change 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
editor est utilisé pour éditer des fichiers si le fichier n'existe pas, il crée un nouveau fichier sauf si nous n'enregistrons pas le fichier.la source