Відповіді:
touch
Перший файл підтверджує, що у вас є можливість створити файл, а не витрачати час на редактор, щоб дізнатися, що файлова система лише для читання або якась інша проблема.
:w
перше, після чого почати vi
. (і :chmod +x %
якщо ви хочете зробити його виконуваним)
touch
може провалитися там, де vi
він :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
знову запустити команду write.
Редагувати: публікація покращена у відповідь на коментарі / 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 = візуально) Це візуально порівняно з "редактором" у будь-якому випадку, що дозволяє лише переглядати та змінювати один рядок тексту за один раз.
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
графічний інтерфейс, навіть якщо foo
його не існує.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
vi використовується для редагування файлу як користувача, тоді як дотик може встановити на ньому часову позначку і в основному використовується в сценаріях тощо.
Ще один спосіб створити файл:
>newfile.txt
zsh
, він ідентичний, cat >newfile.txt
і вам потрібно натиснути Ctrl + D.
Дотикова сторінка людини його головне завдання - змінити часові позначки файлів.
Ofc також створює файл із поточною міткою часу, а потім ви можете редагувати файл.
VI - це текстовий редактор, який виконує редагування тексту: відкрийте, збережіть, редагуйте файл і т. Д.
Все - це смак користувача та хабіта: торкніться тоді vi або vi file.txt те саме, іншого кольору.
touch
дозволяє робити цеchmod +x
після цього, перед редагуванням, що мало б сенс, якщо ви пишете#!/bin/bash
сценарій оболонки.