Penggunaan sentuhan dan vi?


55

Apakah ada manfaat membuat file dengan sentuhan sebelum diedit .. seperti:

touch foo
vi foo

dibandingkan dengan langsung mengeditnya? Suka:

vi foo

Saya melihat beberapa tutorial menggunakan yang pertama ( touchlalu vi).

Jawaban:


111

touching 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.


6
Dan touchmemungkinkan Anda untuk melakukan chmod +xsesudahnya, sebelum mengedit, yang masuk akal jika Anda menulis #!/bin/bashskrip shell.
Aaron McDaid

11
Atau, Anda bisa melakukan :whal pertama setelah memulai visekalipun. (dan :chmod +x %jika Anda ingin membuatnya dapat dieksekusi)
Stéphane Chazelas

26
touchmungkin gagal di mana vi's :w!akan berhasil meskipun (misalnya jika fileada tetapi Anda tidak pemiliknya dan tidak memiliki akses tulis untuk itu, sementara Anda memiliki akses tulis ke direktori saat ini). Sebaliknya, touchmungkin berhasil tapi vi's :watau :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 viimplementasi seperti vimdapat melakukan secara otomatis setelah :w!)).
Stéphane Chazelas

masuk akal sekarang!
Fawix

4
Vim / vi sangat jelas negara jika Anda membuka file yang Anda tidak memiliki izin untuk menulis ke: "foo" [readonly]. Dan lagi ketika memasuki mode memasukkan:Warning: Changing a readonly file.
DevSolar

25

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.


Poin yang bagus, jadi pada dasarnya ini adalah cara yang baik untuk mengetahui apakah orang menggunakan / mengedit file yang sama dan memperingatkan mereka pada saat yang sama. Saya melihat manfaat yang jelas dari hal itu di lingkungan multi-penyewa!
Fawix

@ Fawix maka Anda harus memperbarui jawaban ini Aswell
Kiwy

19

Terlepas dari jawaban yang diterima:

Perlu dicatat bahwa touchdigunakan untuk memperbarui cap waktu file. Jika Anda menggunakan touchfile 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.txttidak akan ada.


Bagaimana dengan manfaat yang dijelaskan dalam jawaban yang diterima?
JBentley

8

Tanpa touch, file baru tidak akan ada sampai Anda meminta viuntuk 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 touchakan 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.


4

Tidak ada manfaatnya touchlebih dulu; viakan 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 touchsetiap waktu. Tidak dapat menulis di suatu tempat cukup luar biasa dibandingkan dengan seberapa sering itu hanya bekerja (selama Anda ingat sudountuk 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 catalih-alih mvatau cpkarena menggunakan izin tujuan dan atribut lainnya.

Selain itu, untuk beberapa penggunaan baris perintah yang lebih lanjut, Anda bisa melatar belakangi videngan Ctrl+ Zsaat Anda memperbaiki masalah (atau menggunakan :suspend, atau :sus), dan akhirnya fglagi untuk menjalankan perintah tulis.

Sunting: posting ditingkatkan dalam menanggapi komentar / u / G-Man . Terima kasih!


3
Ada beberapa masalah keamanan di sini: (1) Jika file /mnt/example.txttersebut 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.txtini 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)
G-Man Mengatakan 'Reinstate Monica'

3
(Lanjutan) ... (Mengatur bit sticky pada /tmpdapat mencegah hal ini.) (3) Perintah mv /tmp/asdf /mnt/example.txtakan benar-benar menghancurkan arus /mnt/example.txtdan menggantinya dengan /tmp/asdf. Anda ingin mengganti isi dari /mnt/example.txtdengan isi dari /tmp/asdf. Dengan menggunakan mv, Anda mengatur /mnt/example.txtuntuk memiliki atribut yang sama dengan /tmp/asdf- mungkin dimiliki oleh Anda dan dapat dibaca dunia. Mungkin lebih baik cp /tmp/asdf /mnt/example.txtatau bahkan lebih cat /tmp/asdf > /mnt/example.txt. ... PS (4) Anda dapat menangguhkan videngan mengetik :suspend(atau :sus, singkatnya).
G-Man Mengatakan 'Reinstate Monica'

@ G-Man Itulah beberapa poin bagus. Saya tidak terlalu takut seseorang mencuri file selama 5 menit /tmp, tetapi tidak ada alasan untuk tidak menulis ~/. Saya juga tidak berpikir bahwa itu akan menggantikan atribut. Saya akan mengedit posting saya, terima kasih :)
Luc

3

Tidak ada manfaatnya. viakan membuat file jika tidak ada.


1

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 touchperintah 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 :wqke vi, akan memiliki hasil yang sama dengan menyentuh file itu. Itulah satu-satunya cara kedua perintah itu sama sekali.


1

Khusus untuk digunakan bersama vi, tidak perlu membuat file sebelum Anda mengeditnya: vidapat 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.txtdi 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.pymungkin membukanya di IDLE, editor python; dll.) Atau saya dapat secara eksplisit meminta emacs:

open -a emacs foo.txt

Tetapi openmembutuhkan file yang sudah ada, jika tidak menimbulkan kesalahan. Jadi saya harus mendefinisikan emacssebagai fungsi shell berikut, yang memungkinkan saya menulis emacs foountuk meluncurkan emacsGUI bahkan jika footidak ada.

function emacs () 
{ 
    if [ -n "$1" -a ! -e "$1" ]; then
        /usr/bin/touch "$1";
    fi;
    open -a emacs "$@"
}

0

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

1
Ini tidak bisa diandalkan karena bukan (afaik) yang ditentukan dalam spesifikasi POSIX. Misalnya, Di zsh, identik dengan cat >newfile.txtdan perlu Anda tekan Ctrl + D.
Adam Katz

@AdamKatz poin bagus; Saya memperbarui jawabannya, terima kasih atas sarannya.
James Youngman

0

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.


0

touch perintah mengubah tanggal dan waktu file dengan cap waktu saat ini.
jika file tidak ada, itu membuat file baru dengan tanggal dan waktu.

vi Editor digunakan untuk mengedit file jika file tidak ada itu membuat file baru kecuali jika kita tidak menyimpan file.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.