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
).
touch
en 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.
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.
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.
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.
Il n'y a aucun avantage à touch
ing 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!
Il n'y a aucun avantage. vi
créera un fichier s'il n'existe pas.
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 "$@"
}
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.
touch
commande 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.
À 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.
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