Ответы:
touch
сначала файл подтверждает, что у вас действительно есть возможность создать файл, вместо того, чтобы тратить время в редакторе только для того, чтобы узнать, что файловая система доступна только для чтения, или какая-то другая проблема.
: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.
Помимо данных ответов, одно из преимуществ касания состоит в том, что любой другой пользователь / терминал, редактирующий тот же файл, пока вы его касались, получит предупреждение, когда попытается сохранить любые изменения.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Это предупредит их, даже если вы не внесли никаких изменений сами по себе и только коснулись файла.
Помимо принятого ответа:
Стоит отметить, что 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 = visual). В любом случае, он визуальный по сравнению с «ed», который позволяет вам видеть и изменять только одну строку текста за раз.
Команда touch
обновляет метку времени в существующем файле или создает новый файл, если файл еще не существует. Это хорошо для тестирования вещей, которые сильно зависят от меток времени.
Теперь, если ваш файл представляет собой текстовый файл или еще не существует, открытие его с помощью vi, а затем выполнение команды :wq
для vi будет иметь тот же результат, что и касание этого файла. Только так две команды похожи.
Специально для использования с vi
, нет необходимости создавать файл перед его редактированием: vi
может использоваться для создания и сохранения нового файла. Однако существуют контексты вызова, где файл должен существовать. Например, в моей системе (OS X) я могу запустить соответствующий графический редактор (определяется типом файла), например:
open foo.txt
Это откроет foo.txt
в TextEdit, или в Emacs, или что-то еще, что я указал в качестве редактора для текстовых файлов, и отключу процесс, чтобы я немедленно получил свое приглашение. ( open bar.py
может открыть его в IDLE, редакторе python; и т. д.) Или я могу явно запросить emacs:
open -a emacs foo.txt
Но open
требует, чтобы файл уже существовал, иначе это вызывает ошибку. Поэтому я должен был определить emacs
следующую функцию оболочки, которая позволяет мне писать emacs foo
для запуска emacs
GUI, даже если foo
он не существует.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
vi используется для редактирования файла как пользователь, в то время как touch может установить для него временную метку и в основном используется в сценариях и т.п.
Другой способ создать файл:
>newfile.txt
zsh
, он идентичен cat >newfile.txt
и требует, чтобы вы нажали Ctrl + D.
С помощью сенсорной страницы его основная задача - изменить временные метки файлов.
Ofc также создает файл с текущей меткой времени, а затем вы можете редактировать файл.
VI - это текстовый редактор, который делает то, что говорит: редактировать текст, открывать, сохранять, редактировать файл и т. Д.
Все это как вкус пользователя и привычки: коснитесь, затем vi или vi file.txt, то же самое, другого цвета.
touch
позволяет делать этоchmod +x
потом, перед редактированием, что будет иметь смысл, если вы пишете#!/bin/bash
сценарий оболочки.