Antworten:
touch
Durch das erstmalige Überprüfen der Datei wird bestätigt, dass Sie tatsächlich in der Lage sind, die Datei zu erstellen, anstatt Zeit in einem Editor zu verschwenden, um festzustellen, ob das Dateisystem schreibgeschützt ist oder ein anderes Problem vorliegt.
:w
nach dem Start das erste tun vi
. (und :chmod +x %
wenn Sie es ausführbar machen möchten)
touch
kann jedoch fehlschlagen vi
, :w!
wenn dies erfolgreich gewesen wäre (z. B. wenn file
vorhanden, Sie jedoch nicht der Eigentümer sind und keinen Schreibzugriff darauf haben, während Sie Schreibzugriff auf das aktuelle Verzeichnis haben). Im Gegensatz dazu touch
kann erfolgreich sein , aber vi
‚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 %
(einige vi
wie Implementierungen vim
tun können das automatisch auf :w!
)).
"foo" [readonly]
. Und noch einmal beim Warning: 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.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Dies würde sie warnen, obwohl Sie keine Änderungen per se vorgenommen und nur die Datei berührt haben.
Abgesehen von der akzeptierten Antwort:
Es ist erwähnenswert, dass touch
zum Aktualisieren von Dateizeitstempeln verwendet wird. Wenn Sie touch
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.
Ohne touch
wird es keine neue Datei geben, bis Sie vi
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.
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 an sudo
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 wir cat
anstelle von mv
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ßlich fg
den Befehl write erneut ausführen.
Edit: Beitrag verbessert als Reaktion auf / u / G-Mans Kommentare. Vielen Dank!
/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 Befehl mv /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 festgelegt mv
, 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 sogar cat /tmp/asdf > /mnt/example.txt
. … PS (4) Sie können die vi
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 :)
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.
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:
open foo.txt
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 -a emacs foo.txt
open
Voraussetzung ist aber, dass die Datei bereits existiert, sonst wird ein Fehler ausgelöst. Also musste ich emacs
als folgende Shell-Funktion definieren , mit der ich schreiben kann emacs foo
, um die emacs
GUI zu starten, auch wenn foo
sie nicht vorhanden ist.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
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:
>newfile.txt
zsh
ist identisch mit cat >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.
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.
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 .