Jawaban:
touch
ing file pertama kali menegaskan bahwa Anda benar-benar memiliki kemampuan untuk membuat file, daripada membuang-buang waktu di editor hanya untuk mengetahui bahwa sistem file hanya-baca atau masalah lain.
:w
hal pertama setelah memulai vi
sekalipun. (dan :chmod +x %
jika Anda ingin membuatnya dapat dieksekusi)
touch
mungkin gagal di mana vi
's :w!
akan berhasil meskipun (misalnya jika file
ada tetapi Anda tidak pemiliknya dan tidak memiliki akses tulis untuk itu, sementara Anda memiliki akses tulis ke direktori saat ini). Sebaliknya, touch
mungkin berhasil tapi vi
's :w
atau :w!
mungkin gagal jika Anda pemilik sedang file, tetapi tidak memiliki akses tulis untuk itu atau ke direktori saat ini (Anda akan bisa bekerja di sekitarnya dengan :!chmod +w %
(beberapa vi
implementasi seperti vim
dapat melakukan secara otomatis setelah :w!
)).
"foo" [readonly]
. Dan lagi ketika memasuki mode memasukkan:Warning: Changing a readonly file.
Terlepas dari jawaban yang diberikan, satu keuntungan sentuhan adalah bahwa pengguna lain / terminal mengedit file yang sama saat Anda menyentuhnya, akan menerima peringatan ketika mereka mencoba menyimpan perubahan.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Ini akan mengingatkan mereka meskipun Anda belum melakukan perubahan apa pun dan hanya menyentuh file.
Terlepas dari jawaban yang diterima:
Perlu dicatat bahwa touch
digunakan untuk memperbarui cap waktu file. Jika Anda menggunakan touch
file yang ada, itu akan memperbarui timestamp file ke tanggal dan waktu saat ini. Jika file tidak ada, itu membuat file kosong dengan tanggal dan waktu saat ini sebagai timestamp.
vi
, di sisi lain, tidak membuat file baru kecuali Anda menulisnya.
Misalnya, jika saya mengetik vi test.txt
, mengetik beberapa catatan, lalu mengetik :q!
; test.txt
tidak akan ada.
Tanpa touch
, file baru tidak akan ada sampai Anda meminta vi
untuk menulisnya.
Pertimbangkan sistem multi-pengguna (mungkin Anda menggunakan sistem file yang dipasang di jaringan yang digunakan bersama oleh banyak sistem, masing-masing dengan banyak pengguna). Menjalankan touch
akan memastikan Anda memiliki file (dan Anda dapat menulisnya) dan bahkan memperbarui timestamp. Pengguna lain yang ingin membuat file seperti itu akan melihat bahwa Anda memilikinya. Jika sudah ada dan pengguna lain ingin menghapus atau menggantinya, mereka akan melihat bahwa itu baru saja dimodifikasi dan mungkin berpikir dua kali.
Tidak ada manfaatnya touch
lebih dulu; vi
akan membuat file jika tidak ada.
Jawaban yang diterima mengatakan itu memeriksa apakah Anda dapat menulis di sana sebelum membuang-buang waktu di editor. Benar, tapi sekarang Anda akan membuang waktu mengetik touch
setiap waktu. Tidak dapat menulis di suatu tempat cukup luar biasa dibandingkan dengan seberapa sering itu hanya bekerja (selama Anda ingat sudo
untuk file di luar direktori home atau /tmp
, atau login sebagai root).
Cukup buka editor dan lakukan apa yang Anda inginkan, kemudian cobalah untuk menyimpan file. Jika tidak berhasil, bahkan dengan :w!
, simpan di tempat lain ( :w ~/asdf
) dan perbaiki masalahnya. Setelah itu tetap, Anda dapat menyalin isi file dari file sementara dengan aslinya: cat ~/asdf > /mnt/example.txt && rm ~/asdf
. Alasan kami menggunakan cat
alih-alih mv
atau cp
karena menggunakan izin tujuan dan atribut lainnya.
Selain itu, untuk beberapa penggunaan baris perintah yang lebih lanjut, Anda bisa melatar belakangi vi
dengan Ctrl+ Zsaat Anda memperbaiki masalah (atau menggunakan :suspend
, atau :sus
), dan akhirnya fg
lagi untuk menjalankan perintah tulis.
Sunting: posting ditingkatkan dalam menanggapi komentar / u / G-Man . Terima kasih!
/mnt/example.txt
tersebut tidak seharusnya dapat dibaca dunia, tetapi umask Anda disetel ke sesuatu yang permisif seperti 22, maka file tersebut /tmp/asdf
akan dapat dibaca dunia. Jika ada orang lain di sistem, mereka mungkin dapat membaca salinan sementara file tersebut. (2) File /mnt/example.txt
ini mungkin tidak seharusnya bisa ditulis oleh dunia, tetapi, jika ada orang jahat dalam sistem, mereka mungkin dapat membaca salinan sementara dari file dan menggantinya dengan versi modifikasi sebelum Anda memindahkan / menyalin kembali ke lokasi yang tepat. ... (Lanjutkan)
/tmp
dapat mencegah hal ini.) (3) Perintah mv /tmp/asdf /mnt/example.txt
akan benar-benar menghancurkan arus /mnt/example.txt
dan menggantinya dengan /tmp/asdf
. Anda ingin mengganti isi dari /mnt/example.txt
dengan isi dari /tmp/asdf
. Dengan menggunakan mv
, Anda mengatur /mnt/example.txt
untuk memiliki atribut yang sama dengan /tmp/asdf
- mungkin dimiliki oleh Anda dan dapat dibaca dunia. Mungkin lebih baik cp /tmp/asdf /mnt/example.txt
atau bahkan lebih cat /tmp/asdf > /mnt/example.txt
. ... PS (4) Anda dapat menangguhkan vi
dengan mengetik :suspend
(atau :sus
, singkatnya).
/tmp
, tetapi tidak ada alasan untuk tidak menulis ~/
. Saya juga tidak berpikir bahwa itu akan menggantikan atribut. Saya akan mengedit posting saya, terima kasih :)
vi
adalah editor teks visual (vi = visual) Lagipula visual dibandingkan dengan "ed", yang memungkinkan Anda melihat dan mengubah satu baris teks pada satu waktu.
The touch
perintah update timestamp pada file yang ada, atau membuat file baru jika file tidak sudah ada. Ini bagus untuk menguji hal-hal yang sangat tergantung pada cap waktu.
Sekarang jika file Anda adalah file teks, atau belum ada, membukanya dengan vi, kemudian mengeluarkan perintah :wq
ke vi, akan memiliki hasil yang sama dengan menyentuh file itu. Itulah satu-satunya cara kedua perintah itu sama sekali.
Khusus untuk digunakan bersama vi
, tidak perlu membuat file sebelum Anda mengeditnya: vi
dapat digunakan untuk membuat dan menyimpan file baru. Namun, ada konteks panggilan di mana file perlu ada. Misalnya, pada sistem saya (OS X) saya dapat meluncurkan editor GUI yang sesuai (ditentukan berdasarkan jenis file) seperti ini:
open foo.txt
Ini akan terbuka foo.txt
di TextEdit, atau di emacs, atau apa pun yang saya tentukan sebagai editor pilihan saya untuk file teks, dan lepaskan proses sehingga saya mendapatkan prompt saya segera kembali. ( open bar.py
mungkin membukanya di IDLE, editor python; dll.) Atau saya dapat secara eksplisit meminta emacs:
open -a emacs foo.txt
Tetapi open
membutuhkan file yang sudah ada, jika tidak menimbulkan kesalahan. Jadi saya harus mendefinisikan emacs
sebagai fungsi shell berikut, yang memungkinkan saya menulis emacs foo
untuk meluncurkan emacs
GUI bahkan jika foo
tidak ada.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
vi digunakan untuk mengedit file sebagai pengguna, sementara sentuhan dapat mengatur cap waktu di atasnya dan sebagian besar digunakan dalam skrip dan semacamnya.
Cara lain untuk membuat file adalah:
>newfile.txt
zsh
, identik dengan cat >newfile.txt
dan perlu Anda tekan Ctrl + D.
Dengan sentuhan halaman manual tugas utamanya adalah mengubah cap waktu file.
Ofc juga membuat file dengan cap waktu saat ini dan kemudian Anda dapat mengedit file.
VI adalah editor teks yang melakukan apa yang dikatakannya mengedit teks membuka, menyimpan, mengedit file dll.
Semua adalah rasa pengguna dan habbit: sentuh lalu vi atau vi file.txt hal yang sama warna yang berbeda.
touch
memungkinkan Anda untuk melakukanchmod +x
sesudahnya, sebelum mengedit, yang masuk akal jika Anda menulis#!/bin/bash
skrip shell.