回答:
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.py
IDLE、Pythonエディターなどで開く場合があります。)または、明示的にemacsを要求できます。
open -a emacs foo.txt
ただしopen
、ファイルが既に存在している必要があります。存在しない場合、エラーが発生します。そのemacs
ため、次のシェル関数を定義する必要がありました。これによりemacs foo
、emacs
GUI 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.txt
Ctrl + Dを押す必要があります。
touch
、chmod +x
後で編集する前に行うことができます。これは、#!/bin/bash
シェルスクリプトを記述する場合に意味があります。