Was ist der Unterschied zwischen Touch-Datei und Datei?

16

Ich bin ein Neuling in Linux und frage mich, ob > und touch den gleichen Effekt haben. Ich meine, haben die folgenden zwei Befehle die gleiche Wirkung?

$ > file.txt

$ touch file.txt

Wenn dies der Fall ist, wäre es schön zu wissen, dass ich einfach '> file.txt ', um neue Dateien zu erstellen.

    
lmiguelvargasf 30.09.2016, 04:22
quelle

3 Antworten

24

Sowohl touch als auch > erstellen eine neue Datei, falls diese nicht vorhanden ist. Wie die folgenden Terminalbefehle zeigen, wenn Sie touch einer vorhandenen Datei aktualisieren, wird der Zeitpunkt des Zugriffs / der letzten Änderung aktualisiert. Wenn Sie jedoch > einer vorhandenen Datei angeben, wird diese abgeschnitten und der letzte Änderungszeitpunkt wird aktualisiert (die Zugriffszeit ist nicht). Beachten Sie, dass > die Datei nicht löscht bzw. die Verknüpfung aufhebt. Der Inode bleibt derselbe. Aus diesem Grund werden > / oder truncate normalerweise verwendet, um Protokolldateien selbst mit einem offenen Dateihandle zu löschen.

rick@dell:~$ > EmptyFile

rick@dell:~$ touch EmptyFile2

rick@dell:~$ ls Empty*
EmptyFile  EmptyFile2

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ echo Hello > EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ > EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ echo Hello > EmptyFile

rick@dell:~$ touch EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

Wie in Kommentaren erwähnt, ist touch ein externer Befehl und kann nur für Dateien ausgeführt werden. > ist eine in die Shell integrierte Funktion, die vielen verschiedenen Zwecken dient. Normalerweise wird es wie cat source.fil > target.fil verwendet.

Ein langes Formular zum Leeren einer Datei wäre:

cat /dev/null > emptyme.fil

Die Verwendung von > emptme.fil bewirkt in einem kompakten Format dasselbe wie das Umleiten von Dateien in die Datei.

    
WinEunuuchs2Unix 30.09.2016, 04:53
quelle
14

Es gibt einen wesentlichen Unterschied zwischen den beiden. Touch ist ein Befehl zum Zeitstempel einer Datei. Das Symbol > ist ein Standard-Redirector für die Ausgabe.

Verwendung der beiden erläuterten

Verwendung von Touch

Wenn die Datei nicht existiert, wird sie erstellt.

Berühren wird häufig zum Erstellen von Flags verwendet. Wenn Sie beispielsweise nach zwei Dateien auf Ihrem System suchen möchten, können Sie diese Befehlsfolge verwenden:

$ touch -t 201609292200 starttime 
$ touch -t 201609292300 endtime

Dies erstellt die folgenden Dateien (oder ändert den Zeitstempel, falls vorhanden):

-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime

Jetzt können Sie mit find alle Dateien anzeigen oder bearbeiten, die zu dieser Stunde geändert wurden (Zeit zwischen den Zeitstempeln dieser Dateien, d. h. zwischen 22.00 Uhr und 23.00 Uhr des 29. September 2016).

$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"

Dies ist eine Teilausgabe des obigen Suchbefehls:

-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0

Verwendung der Ausgabeumleitung

Das Umleitungssymbol leitet die Standardausgabe in die angegebene Datei um. Abhängig von Ihren Einstellungen für Clobber / NoClobber, falls dies fehlschlagen könnte. Noclobber erstellt die Datei nur, wenn sie nicht existiert.

Es gibt eine Reihe von Versionen der Umleitungsausgabe, einschließlich:

>   - Redirect standard output. Create or overwrite the existing file.
>>  - Redirect append.  Create or append to existing file.
>&  - Redirect both standard output and standard error.
>>& - Redirect/Append both standard output and standard error

Wir könnten unseren Befehl find verwenden, um den Inhalt aller Dateien, die innerhalb der angegebenen Stunde erstellt wurden, in eine Datei umzuleiten, die wir später protokollieren und studieren können:

$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log
    
L. D. James 30.09.2016 06:24
quelle
9

> ist der Shell-Umleitungsoperator für die Shell, der verwendet wird, um STDOUT der vorhergehenden Befehle an den nach > genannten Dateideskriptor umzuleiten. Wenn die Datei vorhanden ist, wird ihr Inhalt abgeschnitten, da die Datei mit open(2) -ed mit dem Flag O_TRUNC gekennzeichnet ist. Wenn die Datei nicht vorhanden ist, wird sie erstellt.

Beachten Sie, dass dieser Umleitungsoperator von der Shell verarbeitet wird, bevor der vorherige Befehl ausgeführt wird. Dies hängt also nicht von jedem Befehl ab und wird von der Shell selbst behandelt.

Beachten Sie, dass sich einige Shells (z. B. zsh ) bei leerer Umleitung wie folgt verhalten:

 >file.txt

Eine typische Problemumgehung besteht darin, den No-Op-Befehl : ( true ) hinzuzufügen:

 : >file.txt

Traditionell besteht der Hauptzweck von touch darin, den Zeitstempel einer Datei zu ändern und keine Datei zu erstellen.

touch erstellt eine Datei nur, wenn die im Argument genannte Datei (en) nicht vorhanden ist. Andernfalls wird die Änderungszeit der Datei auf den aktuellen Zeitstempel geändert. Sie können die Zugriffszeit und die Inode-Erstellungszeit auch mit touch ändern.

    
heemayl 30.09.2016 12:06
quelle

Tags und Links