Есть ли преимущество создания файла с сенсорным до редактирования .. как:
touch foo
vi foo
вместо того, чтобы сразу получить его в редакторе? Подобно:
vi foo
Я вижу довольно много уроков, использующих первый ( touch
тогда vi
).
touch
сначала файл подтверждает, что у вас действительно есть возможность создать файл, вместо того, чтобы тратить время в редакторе только для того, чтобы узнать, что файловая система доступна только для чтения, или какая-то другая проблема.
touch
позволяет делать этоchmod +x
потом, перед редактированием, что будет иметь смысл, если вы пишете#!/bin/bash
сценарий оболочки.:w
первое после запуска,vi
хотя. (и:chmod +x %
если вы хотите сделать его исполняемым)touch
может потерпеть неудачу , когдаvi
«s:w!
удалось бы хотя (например , еслиfile
существует , но вы не являетесь его владельцем и не имеют доступа на запись к нему, в то время как у вас есть доступ к текущему каталогу). С другой стороны ,touch
может быть успешным , ноvi
«s:w
или ,:w!
если вы владелец файла может потерпеть неудачу, но не имеют доступа на запись к нему , ни к текущей директории (вы были бы в состоянии работать вокруг него с:!chmod +w %
(некоторыеvi
реализации , какvim
можно сделать что автоматически по факту:w!
))."foo" [readonly]
. И снова при входе в режим вставки:Warning: Changing a readonly file.
Помимо данных ответов, одно из преимуществ касания состоит в том, что любой другой пользователь / терминал, редактирующий тот же файл, пока вы его касались, получит предупреждение, когда попытается сохранить любые изменения.
Это предупредит их, даже если вы не внесли никаких изменений сами по себе и только коснулись файла.
источник
Помимо принятого ответа:
Стоит отметить, что
touch
используется для обновления файловых меток времени. Если вы используетеtouch
существующий файл, он обновит временную метку файлов до текущей даты и времени. Если файл не существует, он создает пустой файл с текущей датой и временем в качестве метки времени.vi
с другой стороны, не создает новый файл, если вы не пишете в него.Например, если я напечатал
vi test.txt
, набрал несколько заметок, а затем набрал:q!
;test.txt
не будет существоватьисточник
Без
touch
этого новый файл не будет существовать, пока вы не попроситеvi
его написать.Рассмотрим многопользовательскую систему (возможно, вы подключены к сетевой файловой системе, которую используют многие системы, в каждой из которых много пользователей). Запуск
touch
обеспечит вам файл (и что вы можете написать к ней) и даже обновляет метку времени. Другой пользователь, желающий создать такой файл, увидит, что он принадлежит вам. Если он уже существует и другой пользователь захочет удалить или заменить его, он увидит, что он был недавно изменен, и, возможно, подумает дважды.источник
В
touch
первую очередь нет никакой пользы ;vi
создаст файл, если он не существует.Принятый ответ говорит, что он проверяет, можете ли вы писать там, прежде чем тратить время в редакторе. Правда, но теперь вы будете тратить время на печатание
touch
каждый раз. Отсутствие возможности писать куда-либо довольно исключительно по сравнению с тем, как часто это будет работать (если вы помните,sudo
что файлы находятся за пределами вашего домашнего каталога/tmp
или вы вошли в систему как пользователь root).Просто откройте редактор и делайте что хотите, затем попытайтесь сохранить файл. Если это не работает, даже с
:w!
, сохраните его в другом месте (:w ~/asdf
) и устраните проблему. После того, как она решена, вы можете скопировать содержимое файла из временного файла в оригинале:cat ~/asdf > /mnt/example.txt && rm ~/asdf
. Причина, по которой мы используемcat
вместоmv
илиcp
состоит в том, чтобы использовать разрешения назначения и другие атрибуты.Кроме того, для некоторых более продвинутого использования командной строки, вы можете фон
vi
с Ctrl+ , Zпока вы решить эту проблему (или использовать:suspend
, или:sus
), и , наконец ,fg
снова запустить команду записи.Редактировать: пост улучшен в ответ на комментарии / u / G-Man . Спасибо!
источник
/mnt/example.txt
не должен быть доступен для чтения всему миру, но ваш umask настроен на что-то разрешающее, например 22, тогда/tmp/asdf
он будет доступен для чтения всем. Если в системе есть другие люди, они могут прочитать временную копию файла. (2)/mnt/example.txt
Вероятно, файл не предназначен для всеобщей записи, но, если в системе есть злоумышленники, они могут прочитать временную копию файла и заменить ее модифицированной версией перед перемещением / копированием. это обратно в нужное место. … (Продолжение)/tmp
может предотвратить это.) (3) Командаmv /tmp/asdf /mnt/example.txt
полностью уничтожит ток/mnt/example.txt
и заменит его на/tmp/asdf
. Вы хотите заменить содержание в/mnt/example.txt
с содержанием в/tmp/asdf
. Используяmv
, вы устанавливаете/mnt/example.txt
те же атрибуты, что и,/tmp/asdf
вероятно, принадлежат вам и доступны для чтения всем пользователям. Это может быть лучшеcp /tmp/asdf /mnt/example.txt
или дажеcat /tmp/asdf > /mnt/example.txt
. … PS (4) Вы можете приостановитьvi
, набрав:suspend
(или:sus
, для краткости)./tmp
, но нет оправдания тому, что я не пишу~/
. Я также не думал о том, что это заменит атрибуты. Я отредактирую свой пост, спасибо :)Там нет никакой выгоды.
vi
создаст файл, если не существует.источник
vi
визуальный текстовый редактор (vi = visual). В любом случае, он визуальный по сравнению с «ed», который позволяет вам видеть и изменять только одну строку текста за раз.Команда
touch
обновляет метку времени в существующем файле или создает новый файл, если файл еще не существует. Это хорошо для тестирования вещей, которые сильно зависят от меток времени.Теперь, если ваш файл представляет собой текстовый файл или еще не существует, открытие его с помощью vi, а затем выполнение команды
:wq
для vi будет иметь тот же результат, что и касание этого файла. Только так две команды похожи.источник
Специально для использования с
vi
, нет необходимости создавать файл перед его редактированием:vi
может использоваться для создания и сохранения нового файла. Однако существуют контексты вызова, где файл должен существовать. Например, в моей системе (OS X) я могу запустить соответствующий графический редактор (определяется типом файла), например:Это откроет
foo.txt
в TextEdit, или в Emacs, или что-то еще, что я указал в качестве редактора для текстовых файлов, и отключу процесс, чтобы я немедленно получил свое приглашение. (open bar.py
может открыть его в IDLE, редакторе python; и т. д.) Или я могу явно запросить emacs:Но
open
требует, чтобы файл уже существовал, иначе это вызывает ошибку. Поэтому я должен был определитьemacs
следующую функцию оболочки, которая позволяет мне писатьemacs foo
для запускаemacs
GUI, даже еслиfoo
он не существует.источник
vi используется для редактирования файла как пользователь, в то время как touch может установить для него временную метку и в основном используется в сценариях и т.п.
Другой способ создать файл:
источник
zsh
, он идентиченcat >newfile.txt
и требует, чтобы вы нажали Ctrl + D.С помощью сенсорной страницы его основная задача - изменить временные метки файлов.
Ofc также создает файл с текущей меткой времени, а затем вы можете редактировать файл.
VI - это текстовый редактор, который делает то, что говорит: редактировать текст, открывать, сохранять, редактировать файл и т. Д.
Все это как вкус пользователя и привычки: коснитесь, затем vi или vi file.txt, то же самое, другого цвета.
источник
touch
Команда изменяет дату и время файла с текущей отметкой времени.если файл не существует, он создает новый файл с датой и временем.
vi
редактор используется для редактирования файлов, если файл не существует, он создает новый файл, если только мы не сохраним файл.источник