私はよくvimでファイルを開き、いくつかの変更を行い、ファイルを保存するときは読み取り専用です(別のユーザーが所有)。ルートとしてファイルを再度開き、最初に一時ファイルに保存せずに変更を保持して、コピーまたはルートとして再編集するためのヒントを探しています。
これから stackoverflow answer 、by skinp
:w !Sudo tee %
書き込み権限のないファイルを編集する前にSudoを忘れることがよくあります。そのファイルを保存してアクセス許可エラーが発生した場合、一時ファイルに保存して再度コピーする必要なしにファイルを保存するために、そのvimコマンドを発行するだけです。
私にこれに投票しないでください。この回答を実装することはお勧めしませんが、それはrkthkrが求めている回答です。
rkthkrさんのコメント:
しかし、vimを再起動してrootとして実行するのは良いことです
これを行う方法は、:!Sudo vim %
ipozgajについて述べたように、引数としての%(サブ引数も含む)は、現在のバッファーへのパスに置き換えられます。 (パスワードの入力を求められる場合があります。)最終的に、元のvimプロセスの子プロセスである、rootが所有する新しいvimプロセスが作成されます。間抜けに聞こえますよね?これはpsでそれがどのように見えるかです:
~# ps afo pid,ppid,user,stat,comm
PID PPID USER STAT COMMAND
16187 30478 rbronosky Ss bash
16510 16187 rbronosky R+ \_ ps
30482 30478 rbronosky Ss bash
16244 30482 rbronosky S+ \_ vim
16318 16244 root S+ \_ vim
ファイルを含むディレクトリへの書き込み権限があり、それを編集した場合、スワップファイルが存在するという警告が表示されることがあります。 [R] ecoverを選択すると、親vimプロセスによって行われた変更のmost *が反映されます。 (*スワップの更新には時間があるか、デルタしきい値があると思います。これにはあまりにも多くの時間を費やしているので、調査する必要はありません。) vimを終了するときは、ドンあなたがまだvimにいるときに心配しないでください...あなたは2番目のvimプロセスを開きました。覚えてる?
さて、これらすべてのことを言って...私はほとんどこれをすることはなかったでしょう。たぶん、コーヒーが足りない、または多すぎる場合、ルートとしてさらにいくつかのファイルを編集する必要があることに気づきました...これを試してみるかもしれません。システム管理の14年間で、私は持っていません。しかし、あなたが私の好む解決策(dbrが提供するものとまったく同じ)に不満を表明するまで、私はこれについて考えたことはありませんでした。
私は通常、それを$ HOME/tmp/Apache.conf(たとえば)の一時ファイルに保存します。
Sudo vimdiff $HOME/tmp/Apache.conf /etc/Apache2/Apache.conf
これは、変更をマージするための追加の作業ですが、効果がありました。利便性と不要な変更に対する測定との間の良い方法であると思います
その前は、ACLを考えていたり、対応するグループをファイルに割り当てていたりしていましたが、うまくいかなかったため、所有権を変更するのを忘れるか、ファイルを変更するつもりがありませんでした。
これは、今まで管理されていないファイルにのみ当てはまります。私たちが使用する全体的なソリューションは、ユーザーがローカルでファイルを編集して適切なサーバーで変更をテストするgitリポジトリを備えたパペットです。設定が希望どおりに機能する場合、変更は中央リポジトリにプッシュバックされ、設定エンジンが定期的に変更をプルします。
私が通常行うこと-必ずしも最速ではありませんが、確かに安全です-は(nsswitch.confを例として使用して)このようなことをすることです:
:w! ~/%
Vimを終了して、次のようにします。
Sudo vim nsswitch.conf
1GdG
:r ~/%
これにより、すべての行が削除され、代わりに編集および変更されたバージョンが読み込まれます。ホームディレクトリを使用すると、アクセス権があるかどうかを考える必要がなくなり、/ tmpよりもプライベートになります。これはファイル全体の置き換えであることに注意してください。すべての変更を追加したくない場合は、選択する必要があります。
これらの答えのいずれかに頭痛が伴うにもかかわらず、変更を失う理由はありません。