Ich bin ein bisschen Neuling auf Linux, und ich frage mich , ob oder nicht >
und touch
haben die gleiche Wirkung. Ich meine, haben die folgenden zwei Befehle die gleiche Wirkung ?:
$ > file.txt
$ touch file.txt
Wenn ja, wäre es toll zu wissen, dass ich einfach `> file.txt 'eingeben kann, um neue Dateien zu erstellen.
command-line
lmiguelvargasf
quelle
quelle
file.txt
schon gibt und sie nicht leer sind, tun sie es bestimmt nicht.touch
eine Datei haben, die Daten enthält, passiert nichts, aber wenn Sie>
die Datei haben, werden diese gelöscht.Antworten:
Beide
touch
und>
erstellen eine neue Datei, wenn sie nicht existiert. Wie die folgenden Terminalbefehle zeigen, werden beitouch
der Aktualisierung einer vorhandenen Datei die Zugriffszeiten / zuletzt geänderten Zeiten aktualisiert. Wenn Sie>
jedoch eine vorhandene Datei bearbeiten, wird diese abgeschnitten und die zuletzt geänderte Zeit aktualisiert (Zugriffszeit nicht). Beachten Sie, dass>
die Datei nicht gelöscht oder die Verknüpfung aufgehoben wird. Der Inode bleibt derselbe - weshalb>
/ odertruncate
häufig verwendet werden, um Protokolldateien auch bei geöffnetem Datei-Handle zu löschen.Wie in den Kommentaren erwähnt,
touch
handelt es sich um einen externen Befehl, der nur für Dateien ausgeführt wird.>
ist eine in die Shell integrierte Funktion, die vielen verschiedenen Zwecken dient. Normalerweise würden Sie sehen, wie es verwendet wirdcat source.fil > target.fil
.Ein langes Formular zum Leeren einer Datei wäre:
Die Verwendung von
> emptme.fil
bewirkt dasselbe in einem kompakten Format, bei dem nichts in die Datei umgeleitet wird.quelle
> file.txt
eignet sich zum Löschen von Protokolldateien.ln foo bar
und dann löschen und neu erstellenfoo
,bar
bleibt der vorherige Inhalt erhalten).rm /var/log/nginx/access.log
Nehmen wir zum Beispiel an, Sie hätten 0 Links, obwohl Nginx diese Datei geöffnet hatte, aber der Inode wäre noch vorhanden.lsof -c nginx | grep access.log
dann mit der pidls -l /proc/<pid>/fd/ | grep access.log
und schließlich cat / proc / <pid> / fd / <dateiname vom vorigen befehl> `. Kommentieren, obwohl das alt ist. Hoffe, es hat Sinn gemachtEs gibt einen wesentlichen Unterschied zwischen den beiden.
Touch
ist ein Befehl, mit dem eine Datei mit einem Zeitstempel versehen wird. Das>
Symbol ist ein Standard-Ausgabe-Redirector.Verwendung der beiden erklärt
Nutzung von Touch
Wenn die Datei nicht existiert, wird sie erstellt.
Touch wird häufig zum Erstellen von Flags verwendet. Wenn Sie beispielsweise alle Dateien auf Ihrem System zweimal suchen möchten, können Sie die folgende Befehlsfolge verwenden:
Dadurch werden die folgenden Dateien erstellt (oder der Zeitstempel geändert, falls vorhanden):
Jetzt können Sie mit find alle Dateien anzeigen oder verarbeiten, die zu dieser Stunde geändert wurden (Zeit zwischen diesen beiden Dateizeitstempeln, dh zwischen 22 und 23 Uhr vom 29. September 2016).
Dies ist eine Teilausgabe des obigen Befehls find:
Verwendung der Ausgabeumleitung
Das Umleitungssymbol leitet die Standardausgabe in die angegebene Datei um. Abhängig von Ihren Einstellungen für Clobber / Noclobber, wenn dies fehlschlagen könnte. Noclobber erstellt die Datei nur, wenn sie nicht existiert.
Es gibt eine Reihe von Versionen der Umleitungsausgabe, darunter:
Mit dem
find
obigen Befehl können wir den Inhalt aller Dateien, die innerhalb der angegebenen Stunde erstellt wurden, in eine Datei umleiten, die wir später protokollieren und untersuchen können:quelle
file.txt
existiert und nicht leer ist> file.txt
, der Inhalt gelöschttouch file.txt
wird, aber nicht. Aber niemand hat erwähnt, dass dies>> file.txt
ein guter Ersatz für isttouch file.txt
- es wird die Datei erstellen, wenn sie nicht existiert (vorausgesetzt, Sie haben die Berechtigung dazu), aber es wird keine vorhandene Datei abgeschnitten. Siehe Was ist der Unterschied zwischen ">" und ">>"?Usage of Output redirection
. Hinweis heißt>>
=Redirect append>
.>> file.txt
die ein praktikabler Ersatz für ist, nichts verstehentouch file.txt
. (Die Tatsache , dass Sie die einzige Person sind , die erwähnten>>
überhaupt ist , warum ich meinen Kommentar unter Ihrer Antwort geschrieben, anstatt unter der Frage.)>
ist der Shell-Ausgabeumleitungsoperator, mit dem STDOUT der vorhergehenden Befehle an den nachstehenden Dateideskriptor umgeleitet wird>
. Wenn die Datei vorhanden ist, wird der Inhalt abgeschnitten, da die Datei mit dem Flag "open(2)
-ed" versehenO_TRUNC
ist. Wenn die Datei nicht vorhanden ist, wird sie erstellt.Wichtig zu beachten ist, dass dieser Umleitungsoperator von der Shell verarbeitet wird, bevor der vorhergehende Befehl ausgeführt wird. Dies hängt also nicht von einem Befehl ab und wird von der Shell selbst verarbeitet.
Beachten Sie, dass sich einige Shells (z. B.
zsh
) bei leerer Umleitung anders verhalten als:Eine typische Problemumgehung besteht darin, den Befehl
:
(true
) no-op hinzuzufügen :Traditionell besteht der Hauptzweck darin
touch
, den Zeitstempel einer Datei zu ändern und keine Datei zu erstellen.touch
Erstellt eine Datei nur, wenn die im Argument genannten Dateien nicht vorhanden sind. Andernfalls wird die Änderungszeit der Datei in den aktuellen Zeitstempel geändert. Sie können auch die Zugriffszeit und die Inode-Erstellungszeit mit änderntouch
.quelle
zsh
unterstützt die leere Umleitung - sie verhält sich ähnlich wie die Umleitungcat
ohne Argumente in eine Datei. Grundsätzlich wird alles, was Sie eingeben, bis zu einem EOF-Zeichen oder einem Interrupt in die Datei geschrieben. Dies spiegeltzsh
das Verhalten mit just wider<file
, das einfach den Dateiinhalt druckt, wiecat
es tun würde. Diese können konfigurierbar sein, ich habe<file
die Datei in einem Pager geöffnet gesehen .EOF
machencat >file.txt
musst (wie du gesagt hast), wo es ausreichen würde, wenn dubash
nur machst>file.txt
.touch
Aktualisiert standardmäßig sowohl die Änderungszeit als auch die Zugriffszeit der Datei. Es gibt Optionen, um nur das eine oder das andere zu aktualisieren. (2) Unix / Linux / POSIX unterstützen im Allgemeinen keine Inode-Erstellungszeit. Einige Dateisystemtypen unterstützen es, aber es gibt keine universelle Möglichkeit, es zu betrachten, geschweige denn zu ändern. Können Sie eine Referenz angeben, die besagt, dass es eine Inkarnation gibttouch
, mit der der Benutzer die Erstellungszeit des Inodes ändern kann?