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.
:w
başladıktan sonra ilk şeyi yapabilirsiniz vi
. (ve :chmod +x %
çalıştırılabilir yapmak istiyorsanız)
touch
nerede başarısız olabilir vi
'ın :w!
olsa başarılı olurdu (eğer örneğin file
mevcutsa ancak onun sahibi değilseniz ve geçerli dizine yazma erişimine sahip olmamakla birlikte, bu yazma erişimi yok). Tersine, touch
başarılı olabilir ama vi
'lar :w
ya :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ı ( vi
gibi uygulamalarda vim
yapabilirsiniz 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:
touch
Dosya zaman damgalarını güncelleştirmek için kullanılan dikkat çekicidir . Varolan touch
bir 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.txt
olmazdı.
Bu olmadan touch
, siz vi
yazmayı 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 ; vi
yoksa, 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 touch
her 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 ( sudo
ana dizininizin dışındaki dosyaları hatırladığınız veya /tmp
kö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 cat
yerine mv
veya cp
yerlerine 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 + vi
ile arka plan ve son olarak write komutunu çalıştırmak için tekrar kullanabilirsiniz.CtrlZ:suspend
:sus
fg
Düzenleme: / u / G-Man'ın yorumlarına yanıt olarak yayın iyileştirildi . Teşekkürler!
/mnt/example.txt
dü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.txt
muhtemelen 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ı)
/tmp
bunu önleyebilir.) (3) Komut mv /tmp/asdf /mnt/example.txt
akımı tamamen yok edecek /mnt/example.txt
ve onunla değiştirecektir /tmp/asdf
. Değiştirmek istediğiniz içeriği arasında /mnt/example.txt
olan içeriğin ait /tmp/asdf
. Kullanarak mv
, kurmak /mnt/example.txt
aynı olması özelliklerini olarak /tmp/asdf
muhtemelen sizin ve dünya okunabilir aittir -. Daha iyi, cp /tmp/asdf /mnt/example.txt
hatta daha iyi olabilir cat /tmp/asdf > /mnt/example.txt
. … PS (4) vi
Yazarak askıya alabilirsiniz :suspend
(veya :sus
kı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.
touch
Komutu, 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 :wq
vermek, 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: vi
yeni 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.py
IDLE, 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 emacs
için yazmama izin veren aşağıdaki kabuk işlevi olarak tanımlamam gerekiyordu .emacs foo
emacs
foo
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
zsh
In'de aynıdır cat >newfile.txt
ve 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.
touch
yapmanıza izin verir .chmod +x
#!/bin/bash