Yanıtlar:
touchönce dosyalama, yalnızca dosya sisteminin salt okunur veya başka bir sorun olduğunu bulmak için bir düzenleyicide zaman kaybetmekten ziyade, dosyayı oluşturma yeteneğiniz olduğunu doğrular.
:wbaşladıktan sonra ilk şeyi yapabilirsiniz vi. (ve :chmod +x %çalıştırılabilir yapmak istiyorsanız)
touchnerede başarısız olabilir vi'ın :w!olsa başarılı olurdu (eğer örneğin filemevcutsa ancak onun sahibi değilseniz ve geçerli dizine yazma erişimine sahip olmamakla birlikte, bu yazma erişimi yok). Tersine, touchbaşarılı olabilir ama vi'lar :wya :w!Dosyanın sahibi iseniz başarısız olabilir, ama bunun yazma erişimi yok ne de geçerli dizine (Birlikte etrafında çalışmak mümkün olurdu :!chmod +w %bazı ( vigibi uygulamalarda vimyapabilirsiniz Bu otomatik olarak üzerine :w!)).
"foo" [readonly]. Warning: Changing a readonly file.
Verilen cevapların yanı sıra, dokunmanın bir avantajı, dokunduğunuzda aynı dosyayı düzenleyen herhangi bir kullanıcı / terminalin, herhangi bir değişikliği kaydetmeye çalıştıklarında bir uyarı alacağıdır.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Bu, kendi başınıza herhangi bir değişiklik yapmamış olmanıza ve yalnızca dosyaya dokunmanıza rağmen onları uyaracaktır.
Kabul edilen cevap dışında:
touchDosya zaman damgalarını güncelleştirmek için kullanılan dikkat çekicidir . Varolan touchbir dosyayı kullanıyorsanız , dosya zaman damgasını geçerli tarih ve saate günceller. Dosya yoksa, geçerli tarih ve saatte zaman damgası olarak boş bir dosya oluşturur.
viÖte yandan, yazmadığınız sürece yeni bir dosya oluşturmaz.
Örneğin, ben yazdıysam vi test.txt, bazı notlar yazdım , sonra yazdım :q!; test.txtolmazdı.
Bu olmadan touch, siz viyazmayı söyleyene kadar yeni bir dosya bulunmaz .
Çok kullanıcılı bir sistem düşünün (belki de her biri birçok kullanıcıyla paylaşılan ağa bağlı bir dosya sistemindesiniz). Çalıştırılması touch, dosyaya sahip olduğunuzdan (ve ona yazabildiğinizden) emin olmanızı sağlar ve zaman damgasını bile günceller. Böyle bir dosya oluşturmak isteyen başka bir kullanıcı, size ait olduğunu görecektir. Zaten mevcutsa ve başka bir kullanıcı onu silmek veya değiştirmek istiyorsa, son zamanlarda değiştirildiğini görecek ve belki de iki kez düşüneceklerdir.
touchİlk olmanın bir faydası yok ; viyoksa, dosyayı oluşturacaktır.
Kabul edilen cevap, bir editörde zaman kaybetmeden önce buraya yazıp yazamayacağınızı kontrol ettiğini söylüyor. Doğru, ama şimdi touchher seferinde yazmaya zaman harcıyor olacaksın . Bir yere yazamamak, ne kadar sık işe yarayacağına kıyasla oldukça istisnai bir durumdur ( sudoana dizininizin dışındaki dosyaları hatırladığınız veya /tmpkök olarak giriş yapmış olduğunuz sürece).
Sadece düzenleyiciyi açın ve istediğiniz şeyi yapın, ardından dosyayı kaydetmeyi deneyin. İşe yaramazsa bile :w!, başka bir yerde ( :w ~/asdf) kaydedin ve sorunu düzeltin. Sorun çözüldü sonra, orijinal geçici dosyadan dosya içeriğini kopyalayabilirsiniz: cat ~/asdf > /mnt/example.txt && rm ~/asdf. Kullandığımız nedeni catyerine mvveya cpyerlerine ait izinler ve diğer özelliklerini kullanmaktır.
Dahası, bazı daha gelişmiş komut satırı kullanımları için, sorunu giderirken (ya da ya da ya da ) sorununuzu çözerken + viile arka plan ve son olarak write komutunu çalıştırmak için tekrar kullanabilirsiniz.CtrlZ:suspend:susfg
Düzenleme: / u / G-Man'ın yorumlarına yanıt olarak yayın iyileştirildi . Teşekkürler!
/mnt/example.txtdünyaca okunabilir olması gerekiyordu değildir, ancak sizin umask'ı 22 gibi keyfi bir şeye ayarlandığında, daha sonra /tmp/asdf olacak dünya okunabilir. Sistemde başka insanlar varsa, dosyanın geçici kopyasını okuyabilirler. (2) Dosya /mnt/example.txtmuhtemelen dünyaya yazılabilir olmamalı, ancak sistemde kötü niyetli insanlar varsa, dosyanın geçici kopyasını okuyabilir ve taşımadan / kopyalamadan önce değiştirilmiş bir sürümle değiştirebilirler. doğru yere geri dönün. … (Devamı)
/tmpbunu önleyebilir.) (3) Komut mv /tmp/asdf /mnt/example.txtakımı tamamen yok edecek /mnt/example.txtve onunla değiştirecektir /tmp/asdf. Değiştirmek istediğiniz içeriği arasında /mnt/example.txtolan içeriğin ait /tmp/asdf. Kullanarak mv, kurmak /mnt/example.txtaynı olması özelliklerini olarak /tmp/asdfmuhtemelen sizin ve dünya okunabilir aittir -. Daha iyi, cp /tmp/asdf /mnt/example.txthatta daha iyi olabilir cat /tmp/asdf > /mnt/example.txt. … PS (4) viYazarak askıya alabilirsiniz :suspend(veya :suskısaca).
/tmp, ama ~/bunun yerine yazmamak için hiçbir sebep yok . Ayrıca bunun niteliklerin yerini alacağını düşünmemiştim. Mesajımı düzenleyeceğim, teşekkürler :)
vi görsel bir metin editörüdür (vi = visual) Yine de "ed" e kıyasla görseldir; bu, bir kerede yalnızca bir satır metin görmenizi ve değiştirmenizi sağlar.
touchKomutu, varolan dosya üzerinde damgası günceller veya dosya zaten olmasaydı yeni bir dosya oluşturur. Zaman damgalarına büyük ölçüde bağımlı olan şeyleri test etmek için iyidir.
Şimdi, eğer dosyanız bir metin dosyasıysa veya henüz mevcut değilse, vi ile açıp vi komutunu :wqvermek, o dosyaya dokunmakla aynı sonucu verecektir. İki komutun benzer olmasının tek yolu bu.
Özellikle birlikte kullanılmak üzere vi, orada düzenlemeden önce dosya oluşturmak gerek yoktur: viyeni bir dosya oluşturmak ve kaydetmek için kullanılabilir. Ancak, dosyanın bulunması gereken arama bağlamları vardır. Örneğin, sistemimde (OS X) şöyle bir uygun bir GUI editörü (dosya türüne göre) başlatabilirim:
open foo.txt
Bu foo.txt, TextEdit'te veya emacs'de veya metin dosyaları için tercih editörüm olarak belirttiğim her ne olursa olsun açılacak ve derhal geri dönmem için işlemi keseceğim. ( open bar.pyIDLE, python editöründe açabilir; vb.) Veya açıkça emacs isteyebilirim:
open -a emacs foo.txt
Ancak open, dosyanın zaten var olmasını gerektirir, aksi halde hata oluşturur. Bu yüzden , olmasa bile GUI'yi başlatmak emacsiçin yazmama izin veren aşağıdaki kabuk işlevi olarak tanımlamam gerekiyordu .emacs fooemacsfoo
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
vi bir dosyayı kullanıcı olarak düzenlemek için kullanılırken, dokunma üzerindeki zaman damgasını ayarlayabilir ve çoğunlukla komut dosyalarında kullanılır.
Dosya oluşturmanın başka bir yolu:
>newfile.txt
zshIn'de aynıdır cat >newfile.txtve Ctrl + D tuşlarına basmanız gerekir.
Man sayfa dokunarak birincil işi dosya zaman damgalarını değiştirmek.
Ofc ayrıca geçerli zaman damgası ile dosya oluşturuyor ve sonra dosyayı düzenleyebilirsiniz.
VI, metin düzenleme açık, kaydetme, dosyayı düzenleme vb. Söylediklerini yapan bir metin editörüdür.
Hepsi kullanıcının ve alışkanlığın tadıdır: sonra dokunma vi ya da vi file.txt aynı şey farklı renkte.
touchyapmanıza izin verir .chmod +x#!/bin/bash