回答:
touchファイルを最初に確認することで、ファイルシステムが読み取り専用またはその他の問題であることを確認するためだけにエディターで時間を浪費するのではなく、実際にファイルを作成できることを確認します。
:w開始後に最初に行うこともできviます。(そして:chmod +x %あなたはそれを実行したい場合)
touchどこ失敗する可能性viのが:w!(例えば場合かかわらず、成功しただろうfileが存在していますが、その所有者以外の方は、現在のディレクトリへの書き込みアクセス権を持っていながら、それへの書き込みアクセス権を持っていません)。逆に、touch成功するかもしれませんが、vi年代:wや:w!(あなたがそれを回避することができると思いますが、ファイルの所有者であれば失敗することがありますが、それへの書き込みアクセス権を持っていたり、現在のディレクトリにありません:!chmod +w %(一部viのような実装vimを行うことができます自動的に:w!)))。
"foo" [readonly]。そして再び挿入モードに入ったとき:Warning: Changing a readonly file.
与えられた答えとは別に、タッチの利点の1つは、タッチ中に同じファイルを編集している他のユーザー/端末が、変更を保存しようとすると警告を受け取ることです。
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
これ自体は変更を加えておらず、ファイルに触れただけでも警告を発します。
touch最初に登録してもメリットはありません。viファイルが存在しない場合は作成されます。
受け入れられた答えは、エディターで時間を浪費する前にそこに書くことができるかどうかをチェックするということです。確かに、今度はtouch毎回入力する時間を無駄にします。どこかに書き込めないことは、それがちょうど動作する頻度と比較してかなり例外的です(sudoホームディレクトリまたは/tmp、またはroot 以外のファイルを覚えているか、rootとしてログインしている限り)。
エディターを開いて必要な操作を行い、ファイルを保存してみてください。でも動作しない場合は:w!、で保存し(:w ~/asdf)、問題を修正します。修正したら、ファイルの内容を一時ファイルから元のファイルにコピーできますcat ~/asdf > /mnt/example.txt && rm ~/asdf。我々が使用する理由catの代わりに、mvまたはcp目的地の権限およびその他の属性を使用することです。
さらに、いくつかのより高度なコマンドラインの使用法では、問題を修正する(または、またはを使用)ときにバックグラウンドviでCtrl+ Zを使用し:suspend、:sus最後fgに再度書き込みコマンドを実行します。
編集:/ 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新しいファイルを作成し、保存するために使用することができます。ただし、ファイルが存在する必要がある呼び出しコンテキストがあります。たとえば、私のシステム(OS X)では、次のような適切なGUIエディター(ファイルの種類によって決定)を起動できます。
open foo.txt
これはfoo.txt、TextEdit、emacs、またはテキストファイル用に選択したエディターとして指定したもので開き、プロンプトをすぐに戻すようにプロセスをデタッチします。(open bar.pyIDLE、Pythonエディターなどで開く場合があります。)または、明示的にemacsを要求できます。
open -a emacs foo.txt
ただしopen、ファイルが既に存在している必要があります。存在しない場合、エラーが発生します。そのemacsため、次のシェル関数を定義する必要がありました。これによりemacs foo、emacsGUI fooが存在しない場合でもGUI を起動するように記述できます。
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
viはユーザーとしてファイルを編集するために使用されますが、touchはファイルにタイムスタンプを設定でき、主にスクリプトなどで使用されます。
ファイルを作成する別の方法は次のとおりです。
>newfile.txt
zshでは、cat >newfile.txtCtrl + Dを押す必要があります。
touch、chmod +x後で編集する前に行うことができます。これは、#!/bin/bashシェルスクリプトを記述する場合に意味があります。