Gibt es einen Vorteil beim Erstellen einer Datei mit Touch vor dem Bearbeiten .. wie:
touch foo
vi foo
im Gegensatz dazu, es sofort zum Editor zu bringen? Mögen:
vi foo
Ich sehe ziemlich viele Tutorials, die das erstere ( touch
damals vi
) verwenden.
touch
ermöglicht es Ihnen, dieschmod +x
vor dem Bearbeiten nachträglich zu tun. Dies ist sinnvoll, wenn Sie ein#!/bin/bash
Shell-Skript schreiben .:w
nach dem Start das erste tunvi
. (und:chmod +x %
wenn Sie es ausführbar machen möchten)touch
kann jedoch fehlschlagenvi
,:w!
wenn dies erfolgreich gewesen wäre (z. B. wennfile
vorhanden, Sie jedoch nicht der Eigentümer sind und keinen Schreibzugriff darauf haben, während Sie Schreibzugriff auf das aktuelle Verzeichnis haben). Im Gegensatz dazutouch
kann erfolgreich sein , abervi
‚s:w
oder:w!
kann fehlschlagen , wenn Sie Eigentümer der Datei sind, aber keinen Schreibzugriff darauf haben , noch in das aktuelle Verzeichnis (würden Sie in der Lage sein , um es mit zu arbeiten:!chmod +w %
(einigevi
wie Implementierungenvim
tun können das automatisch auf:w!
))."foo" [readonly]
. Und noch einmal beimWarning: Changing a readonly file.
Abgesehen von den angegebenen Antworten besteht ein Vorteil von touch darin, dass alle anderen Benutzer / Terminals, die dieselbe Datei bearbeiten, während Sie sie berühren, eine Warnung erhalten, wenn sie versuchen, Änderungen zu speichern.
Dies würde sie warnen, obwohl Sie keine Änderungen per se vorgenommen und nur die Datei berührt haben.
quelle
Abgesehen von der akzeptierten Antwort:
Es ist erwähnenswert, dass
touch
zum Aktualisieren von Dateizeitstempeln verwendet wird. Wenn Sietouch
eine vorhandene Datei verwenden, wird der Zeitstempel der Datei auf das aktuelle Datum und die aktuelle Uhrzeit aktualisiert. Wenn die Datei nicht vorhanden ist, wird eine leere Datei mit dem aktuellen Datum und der Uhrzeit als Zeitstempel erstellt.vi
Dagegen wird keine neue Datei erstellt, es sei denn, Sie schreiben darauf.Wenn ich zum Beispiel tippte
vi test.txt
, einige Notizen tippte und dann tippte:q!
;test.txt
würde nicht existieren.quelle
Ohne
touch
wird es keine neue Datei geben, bis Sievi
zum Schreiben auffordern.Stellen Sie sich ein Mehrbenutzersystem vor (möglicherweise befinden Sie sich in einem im Netzwerk eingebauten Dateisystem, das von vielen Systemen mit jeweils vielen Benutzern gemeinsam genutzt wird). Das Ausführen stellt
touch
sicher, dass Sie die Datei haben (und dass Sie darauf schreiben können) und aktualisiert sogar den Zeitstempel. Ein anderer Benutzer, der eine solche Datei erstellen möchte, erkennt, dass Sie Eigentümer dieser Datei sind. Wenn es bereits vorhanden ist und ein anderer Benutzer es löschen oder ersetzen möchte, stellt er fest, dass es kürzlich geändert wurde, und überlegt es sich möglicherweise zweimal.quelle
Es hat keinen Vorteil,
touch
zuerst zu sein.vi
erstellt die Datei, wenn sie nicht existiert.Die akzeptierte Antwort besagt, dass geprüft wird, ob Sie dort schreiben können, bevor Sie Zeit in einem Editor verschwenden. Stimmt, aber jetzt verschwenden Sie
touch
jedes Mal Zeit beim Tippen . Nicht in der Lage zu sein, irgendwo zu schreiben, ist ziemlich außergewöhnlich im Vergleich zu der Häufigkeit, mit der es funktioniert (solange Sie sich ansudo
Dateien außerhalb Ihres Home-Verzeichnisses erinnern/tmp
oder als root angemeldet sind).Öffnen Sie einfach den Editor und machen Sie, was Sie wollen, und versuchen Sie dann, die Datei zu speichern. Wenn es auch mit nicht funktioniert,
:w!
speichern Sie es an einer anderen Stelle (:w ~/asdf
) und beheben Sie das Problem. Sobald es behoben ist, können Sie die Dateiinhalte aus der temporären Datei zum Original kopieren:cat ~/asdf > /mnt/example.txt && rm ~/asdf
. Der Grund, den wircat
anstelle vonmv
oder verwenden,cp
besteht darin, die Berechtigungen und andere Attribute des Ziels zu verwenden.Darüber hinaus können Sie für eine erweiterte Befehlszeilenverwendung den Hintergrund
vi
mit Ctrl+ verwenden, Zwährend Sie das Problem beheben (oder:suspend
oder verwenden:sus
), und schließlichfg
den Befehl write erneut ausführen.Edit: Beitrag verbessert als Reaktion auf / u / G-Mans Kommentare. Vielen Dank!
quelle
/mnt/example.txt
nicht für die Welt lesbar sein soll, Ihre umask jedoch auf einen zulässigen Wert wie 22 festgelegt ist, ist/tmp/asdf
sie für die Welt lesbar. Befinden sich andere Personen im System, können diese möglicherweise die temporäre Kopie der Datei lesen. (2) Die Datei/mnt/example.txt
ist wahrscheinlich nicht für die Welt beschreibbar. Wenn sich jedoch böswillige Personen auf dem System befinden, können diese möglicherweise die temporäre Kopie der Datei lesen und durch eine geänderte Version ersetzen, bevor Sie sie verschieben / kopieren es wieder an den richtigen Ort. … (Fortsetzung)/tmp
kann dies verhindern.) (3) Der Befehlmv /tmp/asdf /mnt/example.txt
zerstört den Strom vollständig/mnt/example.txt
und ersetzt ihn durch/tmp/asdf
. Sie möchten den Inhalt von/mnt/example.txt
durch den Inhalt von ersetzen/tmp/asdf
. Durch die Verwendung von wird festgelegtmv
, dass Sie/mnt/example.txt
dieselben Attribute haben wie/tmp/asdf
- wahrscheinlich im Besitz von Ihnen und für die Welt lesbar. Es könnte besser sein,cp /tmp/asdf /mnt/example.txt
oder sogarcat /tmp/asdf > /mnt/example.txt
. … PS (4) Sie können dievi
Eingabe unterbrechen:suspend
(oder:sus
kurz)./tmp
denen es ist , eine Datei stiehlt , aber es gibt keine Entschuldigung dafür, nicht zu schreiben~/
. Ich hatte auch nicht daran gedacht, dass es die Attribute ersetzen würde. Ich werde meinen Beitrag bearbeiten, danke :)Es gibt keinen Vorteil.
vi
erstellt eine Datei, wenn sie nicht existiert.quelle
vi
ist ein visueller Texteditor (vi = visual). Er ist visuell im Vergleich zu "ed", mit dem Sie jeweils nur eine Textzeile sehen und ändern können.Der
touch
Befehl aktualisiert den Zeitstempel einer vorhandenen Datei oder erstellt eine neue Datei, wenn die Datei noch nicht vorhanden ist. Es ist gut, um Dinge zu testen, die stark von Zeitstempeln abhängen.Wenn Ihre Datei eine Textdatei ist oder noch nicht vorhanden ist, hat das Öffnen mit vi und das Ausgeben des Befehls
:wq
an vi dasselbe Ergebnis wie das Berühren dieser Datei. Nur so sind sich die beiden Befehle überhaupt ähnlich.quelle
Speziell für den Einsatz mit
vi
, gibt es keine Notwendigkeit , die Datei zu erstellen , bevor Sie sie bearbeiten:vi
kann verwendet werden , um eine neue Datei zu erstellen und zu speichern. Es gibt jedoch aufrufende Kontexte, in denen die Datei vorhanden sein muss. Auf meinem System (OS X) kann ich beispielsweise einen geeigneten GUI-Editor (abhängig vom Dateityp) wie folgt starten:Dies würde
foo.txt
in TextEdit, in Emacs oder in einem anderen Editor geöffnet , den ich als bevorzugten Editor für Textdateien festgelegt habe, und den Prozess abbrechen, sodass ich meine Eingabeaufforderung sofort zurückerhalte. (open bar.py
Möglicherweise wird es in IDLE, dem Python-Editor usw. geöffnet.) Oder ich kann ausdrücklich Emacs anfordern:open
Voraussetzung ist aber, dass die Datei bereits existiert, sonst wird ein Fehler ausgelöst. Also musste ichemacs
als folgende Shell-Funktion definieren , mit der ich schreiben kannemacs foo
, um dieemacs
GUI zu starten, auch wennfoo
sie nicht vorhanden ist.quelle
vi wird verwendet, um eine Datei als Benutzer zu bearbeiten, während touch den Zeitstempel darauf setzen kann und hauptsächlich in Skripten und dergleichen verwendet wird.
Eine andere Möglichkeit zum Erstellen einer Datei ist:
quelle
zsh
ist identisch mitcat >newfile.txt
und Sie müssen Strg + D drücken.Laut Manpage of Touch besteht seine Hauptaufgabe darin, Datei-Zeitstempel zu ändern.
Ofc erstellt auch die Datei mit dem aktuellen Zeitstempel und dann können Sie die Datei bearbeiten.
VI ist ein Texteditor, der das tut, was er sagt. Text bearbeiten, öffnen, speichern, Datei bearbeiten usw.
Alles ist ein Geschmack von Benutzer und Habbit: Berühren Sie dann vi oder vi file.txt.
quelle
touch
Befehl ändert das Datum und die Uhrzeit einer Datei mit dem aktuellen Zeitstempel.Wenn die Datei nicht vorhanden ist, wird eine neue Datei mit Datum und Uhrzeit erstellt.
vi
Der Editor wird zum Bearbeiten von Dateien verwendet, wenn keine Datei vorhanden ist. Er erstellt eine neue Datei, es sei denn, wir speichern die Datei nicht.quelle