GNU/Linux >> Linux の 問題 >  >> Linux

アクセス許可なしで開いたときにvimを使用してファイルを強制的に編集する

現在の問題に応じて、いくつかの異なるアプローチがあるようです:

<オール>
  • 読み取り専用 viによって。ファイルに :set readonly がある場合 できます
    • :w! を使用 強制書き込み、または
    • :set noreadonly を発行 次に、通常の :w を使用します
  • 許可 問題 (sudo ):書き込みはできませんが、sudo 権限があります。
    • 問題::w !sudo tee % .これにより、バッファが tee に書き込まれます pipe を受け取るコマンド ファイルに書き込むことができます。そして、tee は sudo 権限で実行されるため、tee はファイルを変更できます。
  • 許可 問題 (sudo なし ):ファイルを書き込む権限がなく、管理者権限もありません。
    • :w! ~/tempfile.ext を使用 変更を一時ファイルに書き込み、その一時ファイルをディレクトリに移動する手段を講じます (一時ファイルをディレクトリの所有者/管理者に送信します)。
  • 詳細については、こちらをご覧ください:

    <オール>
  • StackOverflow から
  • Geekyboy より
  • Data Agaric より
  • ショートカット

    よくあることですが、問題 #2 (許可 問題、sudo で )、あなたの /etc/vim/vimrc にできます (または ~/.vimrc ) 次のショートカット:

    • cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit!

    次に、 :w!! と入力するだけです sudo で保存する 力。ここでは説明しませんが、上記の参考文献には多くのショートカットが含まれています。


    これを行うには 2 つの方法が考えられます。

    最初の方法はファイルの所有者であることを前提としていますが、ファイルは読み取り専用です。

    vi の感嘆符サフィックスを書き込みコマンド (:w!) に使用するだけで、独自の READONLY ファイルを強制的に上書きできます。もちろん、これは、現在のフォルダーでの書き込みと実行のアクセス許可があることを前提としています。

    :w!
    

    vi は元の READONLY ファイルを上書きします。

    2 番目の方法は、他の誰かがファイルを所有していて、変更をそのファイルに保存したいと考えている場合です。

    これを実現する 1 つの方法は、元のファイルに加えられた変更を vi 内から ed スクリプトとして保存することです。この ed スクリプトは、後で vi の外部で ed ライン エディターを使用して元のファイル (または他の同様のファイル) に適用できます。

    現在の編集セッションを ed スクリプトとして保存する方法は、元のファイル名と編集済みの vi バッファーを標準入力として diff ユーティリティに --ed コマンド ライン スイッチを使用して渡すことです。つまり、違いを ed スクリプトとして表示します。

    したがって、編集された vi バッファーを想定して、次の手順を実行します

    :.,$!diff --ed [original_file] -
    

    これにより、現在のバッファ (.,$!) 内のすべての行が、元のファイルを現在のバッファの内容に変換するために必要な diff によって生成された ed スクリプト (diff --ed [original_file] -) に置き換えられます。次に、この ed スクリプトを安全な場所に保存し、書き込み可能な元のファイルのバージョンにスクリプトを適用します。そのため、スクリプトを書き込み可能な場所 (ログイン フォルダーなど) に保存します。

    :w ~/my_ed_script
    

    vi を終了し、この ed スクリプトを使用して、最初に保存できなかった編集済みファイルを取得します。これを bash コマンド ライン プロンプト「$」から実行する方法は次のとおりです。

    $ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file
    

    このコマンド シーケンスを言葉で表すと、生成したスクリプトを diff で連結し、ed 書き込みコマンド 'w' を ed の標準入力にエコーします。次に、Ed はこのスクリプトを元のファイルの書き込み可能なコピーに適用し、変更されたバッファの変更をファイルに書き戻します。

    これは、vi で実行された作業を、vi、diff、および ed を使用して他の誰かが所有していたファイルに保存する方法です。


    Linux
    1. Linux –宛先パスなしでRsyncするとどうなりますか?

    2. Apache アクセス ログは自動的にアクセス許可を設定します

    3. C で tmpfile() を使用する場合の一時ファイルの場所

    1. 複数のファイルを編集し、バッファを使用してVIM内のファイルを切り替える方法

    2. パイプを使用してvimでファイルを開く方法

    3. root でなくても、ホーム ディレクトリで root が所有するファイルを削除できたのはなぜですか?

    1. Sudoedit Vim Force Write(update)終了せずに?

    2. ファイル幅のSudoコマンドを編集するときにVimrcファイルを使用する方法は?

    3. ファイルを保存すると、メタデータはどこに移動しますか?