Jestem rodzaju newbie na Linuksa, i zastanawiam się, czy nie >
i touch
mieć ten sam efekt. Mam na myśli, czy następujące dwa polecenia mają taki sam efekt ?:
$ > file.txt
$ touch file.txt
Jeśli tak, dobrze byłoby wiedzieć, że mogę po prostu wpisać `> file.txt ', aby utworzyć nowe pliki.
command-line
lmiguelvargasf
źródło
źródło
file.txt
już istnieje i nie jest pusty, na pewno nie.touch
plik zawiera dane, nic się nie wydarzy, ale jeśli>
plik zostanie usunięty.Odpowiedzi:
Zarówno
touch
i>
utworzy nowy plik, jeśli nie istnieje. Ponieważ poniższe polecenia terminala pokazują, kiedytouch
plik istnieje, czas dostępu / ostatniej modyfikacji jest aktualizowany. Ale jeśli masz>
istniejący plik, jest on obcinany, a czas ostatniej modyfikacji jest aktualizowany (czas dostępu nie jest). Pamiętaj, że>
nie usuwa / nie rozłącza pliku. Iwęzeł pozostaje taka sama - dlatego>
/ lubtruncate
są powszechnie stosowane, aby wyczyścić z plików dziennika nawet z otwartym uchwytu pliku.Jak wspomniano w komentarzach,
touch
jest to polecenie zewnętrzne i działa tylko na plikach.>
jest wbudowaną funkcją powłoki, która służy do wielu różnych celów. Zazwyczaj zobaczysz, że jest używanycat source.fil > target.fil
.Długi formularz do opróżnienia pliku to:
Używanie pozwala
> emptme.fil
osiągnąć to samo w kompaktowym formacie bez przekierowywania do pliku.źródło
> file.txt
jest dobry do czyszczenia plików dziennika.ln foo bar
, a następnie usuń i ponownie utworzyszfoo
,bar
nadal masz wcześniejszą zawartość).rm /var/log/nginx/access.log
gdy nginx miał otwarty plik, miałby 0 linków, ale i-węzeł nadal istniałby.lsof -c nginx | grep access.log
następnie z pidls -l /proc/<pid>/fd/ | grep access.log
i wreszcie cat / proc / <pid> / fd / <nazwa pliku z poprzedniego polecenia> `. Komentowanie, nawet jeśli jest stare. Mam nadzieję, że to miało sensMiędzy nimi jest zasadnicza różnica.
Touch
to polecenie używane do oznaczania pliku czasem.>
Symbol jest standardowym redirector wyjście.Zastosowanie dwóch wyjaśnionych
Wykorzystanie dotyku
Jeśli plik nie istnieje, utworzy go.
Dotyk jest powszechnie używany do tworzenia flag. Na przykład, jeśli chcesz znaleźć wszystkie pliki w systemie dwa razy, możesz użyć następującej sekwencji poleceń:
Spowoduje to utworzenie następujących plików (lub zmianę znacznika czasu, jeśli istnieją):
Teraz możesz użyć find do wyświetlenia lub przetworzenia wszystkich plików, które zostały zmodyfikowane w tej godzinie (czas między znacznikami czasu tych dwóch plików, tj. Między 22:00 a 23:00 29 września 2016 r.).
To jest częściowy wynik powyższego polecenia find:
Zastosowanie przekierowania danych wyjściowych
Symbol przekierowania przekieruje standardowe wyjście do określonego pliku. W zależności od ustawień clobber / noclobber, jeśli może się nie powieść. Noclobber utworzy plik tylko wtedy, gdy nie istnieje.
Istnieje wiele wersji danych wyjściowych przekierowania, które obejmują:
Możemy użyć
find
powyższego polecenia, aby przekierować zawartość wszystkich plików utworzonych w ciągu określonej godziny do pliku, który możemy zarejestrować i zbadać później:źródło
file.txt
istnieje i nie jest puste, to> file.txt
wyczyści jego zawartość, aletouch file.txt
nie zrobi tego. Ale nikt nie wspominał, że>> file.txt
jest to dobry zamienniktouch file.txt
- utworzy plik, jeśli nie istnieje (zakładając, że masz na to pozwolenie), ale nie skróci istniejącego pliku. Zobacz Jaka jest różnica między „>” a „>>”?Usage of Output redirection
. Zauważ, że mówi>>
=Redirect append>
.>> file.txt
jest to praktyczny substytuttouch file.txt
. (Fakt, że jesteś jedyną osobą, która>>
w ogóle wspomniała, dlatego zamieściłem mój komentarz pod twoją odpowiedzią, a nie pod pytaniem.)>
jest operatorem przekierowania wyjścia powłoki używanym do przekierowania STDOUT poprzednich poleceń do deskryptora pliku wymienionego później>
. Jeśli plik jest obecny, jego zawartość zostanie obcięta, jako plikopen(2)
zO_TRUNC
flagą -ed z flagą, a jeśli plik nie istnieje, zostanie utworzony.Należy zauważyć, że ten operator przekierowania będzie obsługiwany przez powłokę przed uruchomieniem poprzedniego polecenia, więc nie zależy to od żadnego polecenia i jest obsługiwany przez samą powłokę.
Zauważ, że niektóre powłoki (np
zsh
) będzie zachowywać się inaczej z pustym przekierowania jak:Typowym rozwiązaniem jest dodanie
:
(true
) polecenia no-op:Tradycyjnie głównym celem
touch
jest zmiana znacznika czasu pliku, a nie tworzenie pliku.touch
tworzy plik tylko wtedy, gdy plik (i) wymienione w argumencie nie istnieje, w przeciwnym razie zmienia czas modyfikacji pliku na bieżący znacznik czasu. Możesz także zmienić czas dostępu i czas tworzenia i-węzła za pomocątouch
.źródło
zsh
obsługuje puste przekierowanie - działa podobnie jak przekierowaniecat
bez argumentów do pliku. Zasadniczo wszystko, co wpiszesz, zostanie zapisane w pliku, aż do znaku EOF lub przerwania. Tozsh
zachowanie lustrzane z just<file
, który po prostu drukuje zawartość pliku, tak jakcat
by to zrobił. Mogą być konfigurowalne, widziałem, jak<file
otwieram plik w pager.EOF
(jak robieniecat >file.txt
tego, co powiedziałeś), gdziebash
wystarczy samo robienie>file.txt
.touch
aktualizuje zarówno czas modyfikacji, jak i czas dostępu do pliku. Istnieją opcje aktualizacji tylko jednego lub drugiego. (2) Unix / Linux / POSIX, ogólnie rzecz biorąc, nie obsługują „czasu tworzenia i-węzła”. Niektóre typy systemów plików obsługują go, ale nie ma uniwersalnego sposobu na obejrzenie go, a co dopiero na modyfikację. Czy możesz podać odniesienie, które mówi, że istnieje wcielenie,touch
które pozwala użytkownikowi zmienić czas tworzenia i-węzła?