Czy istnieje korzyść z utworzenia pliku dotykowego przed edycją ... np .:
touch foo
vi foo
w porównaniu z natychmiastowym przekazaniem go do edytora? Lubić:
vi foo
Widzę sporo tutoriali wykorzystujących poprzednie ( touch
wtedy vi
).
touch
Najpierw sprawdzenie pliku potwierdza, że faktycznie możesz go utworzyć, zamiast marnować czas w edytorze, aby dowiedzieć się, że system plików jest tylko do odczytu lub jakiś inny problem.
touch
pozwala to zrobićchmod +x
później, przed edycją, co miałoby sens, jeśli piszesz#!/bin/bash
skrypt powłoki.:w
pierwszą rzecz po uruchomieniuvi
. (i:chmod +x %
jeśli chcesz, aby był wykonywalny)touch
może się nie powieść tamvi
, gdzie:w!
by się to udało (na przykład jeślifile
istnieje, ale nie jesteś jego właścicielem i nie masz do niego dostępu do zapisu, podczas gdy masz dostęp do zapisu do bieżącego katalogu). Z drugiej strony,touch
może się uda, alevi
jest:w
lub:w!
może się nie udać, jeśli jesteś właścicielem pliku, ale nie mają dostępu do zapisu do niego ani do bieżącego katalogu (byłbyś w stanie obejść z:!chmod +w %
(niektórychvi
implementacjach jakvim
można zrobić to automatycznie po:w!
))."foo" [readonly]
. I ponownie, kiedyWarning: Changing a readonly file.
Oprócz podanych odpowiedzi jedną z zalet dotyku jest to, że każdy inny użytkownik / terminal edytujący ten sam plik podczas jego dotykania otrzyma ostrzeżenie, gdy spróbuje zapisać zmiany.
Zaalarmuje ich to, mimo że nie dokonałeś żadnych zmian, a jedynie dotknąłeś pliku.
źródło
Oprócz zaakceptowanej odpowiedzi:
Warto zauważyć, że
touch
służy do aktualizacji sygnatur czasowych plików. Jeśli użyjesztouch
pliku, który istnieje, zaktualizuje on sygnaturę czasową plików do bieżącej daty i godziny. Jeśli plik nie istnieje, tworzy pusty plik z bieżącą datą i godziną jako znacznikiem czasu.vi
, z drugiej strony, nie tworzy nowego pliku, chyba że napiszesz do niego.Na przykład, jeśli wpisałem
vi test.txt
, napisałem kilka notatek, a następnie napisałem:q!
;test.txt
nie istniałbyźródło
Bez
touch
tego nowy plik nie będzie istniał, dopóki nie poprosiszvi
o jego napisanie.Rozważ system z wieloma użytkownikami (być może korzystasz z zamontowanego w sieci systemu plików współdzielonego przez wiele systemów, z których każdy ma wielu użytkowników). Uruchomienie
touch
zapewni, że masz plik (i że możesz do niego pisać), a nawet zaktualizuje znacznik czasu. Inny użytkownik, który chce utworzyć taki plik, zobaczy, że jesteś jego właścicielem. Jeśli już istnieje, a inny użytkownik chce go usunąć lub zastąpić, zobaczy, że został niedawno zmodyfikowany i być może pomyśli dwa razy.źródło
touch
Pierwsze nie ma korzyści ;vi
utworzy plik, jeśli nie istnieje.Przyjęta odpowiedź mówi, że sprawdza, czy możesz tam pisać, zanim zmarnujesz czas w edytorze. To prawda, ale teraz za
touch
każdym razem marnujesz czas na pisanie . Brak możliwości zapisu gdzieś jest dość wyjątkowy w porównaniu do tego, jak często będzie on po prostu działał (o ile pamiętaszsudo
dla plików spoza katalogu domowego lub/tmp
, lub jesteś zalogowany jako root).Po prostu otwórz edytor i rób, co chcesz, a następnie spróbuj zapisać plik. Jeśli nie działa, nawet z
:w!
, zapisz go w innym miejscu (:w ~/asdf
) i napraw problem. Raz jest to stałe, można skopiować zawartość pliku z pliku tymczasowego do oryginału:cat ~/asdf > /mnt/example.txt && rm ~/asdf
. Powodem, dla którego używamycat
zamiastmv
lubcp
jest użycie uprawnień miejsca docelowego i innych atrybutów.Co więcej, dla niektórych bardziej zaawansowanego wykorzystania wiersza poleceń, można tła
vi
z Ctrl+ Zpodczas rozwiązać problem (lub użycie:suspend
lub:sus
), aż w końcufg
go ponownie, aby uruchomić polecenie zapisu.Edycja: poprawiono post w odpowiedzi na komentarze / u / G-Man . Dzięki!
źródło
/mnt/example.txt
nie powinien być czytelny dla całego świata, ale twoja umask jest ustawiona na coś zezwalającego, np. 22, to/tmp/asdf
będzie dostępna dla wszystkich. Jeśli w systemie są inne osoby, mogą one być w stanie odczytać tymczasową kopię pliku. (2) Plik/mnt/example.txt
prawdopodobnie nie jest przeznaczony do zapisu w świecie, ale jeśli w systemie znajdują się złośliwe osoby, mogą one przeczytać tymczasową kopię pliku i zastąpić ją zmodyfikowaną wersją przed przeniesieniem / skopiowaniem z powrotem do właściwej lokalizacji. … (Ciąg dalszy)/tmp
może temu zapobiec.) (3) Poleceniemv /tmp/asdf /mnt/example.txt
całkowicie zniszczy prąd/mnt/example.txt
i zastąpi go/tmp/asdf
. Chcesz zastąpić zawartość z/mnt/example.txt
z treścią z/tmp/asdf
. Korzystając z niegomv
, skonfigurujesz/mnt/example.txt
te same atrybuty co/tmp/asdf
- prawdopodobnie należące do ciebie i czytelne na całym świecie. Może być lepiej,cp /tmp/asdf /mnt/example.txt
a nawetcat /tmp/asdf > /mnt/example.txt
. … PS (4) Możesz zawiesićvi
, pisząc:suspend
(lub:sus
w skrócie)./tmp
, ale nie ma usprawiedliwienia dla tego, że nie pisze do~/
niego. Nie myślałem też, że to zastąpi atrybuty. Zmienię swój post, dzięki :)Nie ma korzyści.
vi
utworzy plik, jeśli nie istnieje.źródło
vi
to wizualny edytor tekstu (vi = wizualny) W każdym razie jest wizualny w porównaniu do „ed”, co pozwala tylko zobaczyć i zmienić jeden wiersz tekstu na raz.touch
Komenda aktualizuje datownik na istniejącym pliku lub utworzenie nowego pliku, jeśli plik nie istnieje. Jest dobry do testowania rzeczy, które są wysoce zależne od znaczników czasu.Teraz, jeśli twój plik jest plikiem tekstowym lub jeszcze nie istnieje, otwarcie go za pomocą vi, a następnie wydanie polecenia
:wq
vi, miałoby taki sam skutek jak dotknięcie tego pliku. To jedyny sposób, w jaki oba polecenia są w ogóle podobne.źródło
W szczególności do użytku z
vi
, nie ma potrzeby tworzenia pliku przed jego edycją:vi
można go użyć do utworzenia i zapisania nowego pliku. Istnieją jednak konteksty wywoływania, w których plik musi istnieć. Na przykład w moim systemie (OS X) mogę uruchomić odpowiedni edytor GUI (określony przez typ pliku) w następujący sposób:Otworzy się to
foo.txt
w TextEdit, emacs lub cokolwiek, co określiłem jako mojego wybranego edytora plików tekstowych, i odłączę proces, aby natychmiast otrzymać monit. (open bar.py
może otworzyć go w IDLE, edytorze Pythona itp.) Lub mogę jawnie zażądać emacs:Ale
open
wymaga, aby plik już istniał, w przeciwnym razie pojawi się błąd. Musiałem więc zdefiniowaćemacs
następującą funkcję powłoki, która pozwala mi pisać,emacs foo
aby uruchomićemacs
GUI, nawet jeślifoo
nie istnieje.źródło
vi służy do edycji pliku jako użytkownik, natomiast touch może ustawić na nim znacznik czasu i jest najczęściej używany w skryptach i tym podobnych.
Innym sposobem utworzenia pliku jest:
źródło
zsh
jest identycznycat >newfile.txt
i wymaga naciśnięcia klawiszy Ctrl + D.Przez dotyk strony man jego głównym zadaniem jest zmiana znaczników czasu pliku.
Ofc tworzy również plik z bieżącym znacznikiem czasu, a następnie możesz edytować plik.
VI to edytor tekstu, który robi to, co mówi edytuj tekst otwieraj, zapisuj, edytuj plik itp.
Wszystko to smak użytkownika i nawyku: dotknij, a następnie plik vi lub vi. Txt ta sama rzecz inny kolor.
źródło
touch
polecenie zmienia datę i godzinę pliku z bieżącym znacznikiem czasu.jeśli plik nie istnieje, tworzy nowy plik z datą i godziną.
vi
edytor służy do edycji plików, jeśli plik nie istnieje, tworzy nowy plik, chyba że plik nie zostanie zapisany.źródło