web-dev-qa-db-ja.com

とにかくvimを使用してシンボリックリンクの.confを編集するにはどうすればよいですか?

../new-path/ dirにファイルがあります。

lrwxrwxrwx 1 root root   32 Sep  6 19:43 test1.conf -> ../new-path1/test1.conf

VimダイアログでSudo vim test1.conf onを使用してVimで編集すると、.

"test1.conf" [Permissions Denied]

とにかくVimを使用してsymlinkで編集する方法。私はシンボリックリンクについて本当に初心者です。

NOTE

この投稿 を試してみましたが、もちろんファイル/フォルダとシンボリックリンクを削除しますが、シンボリックリンクを削除せずに独立したファイルとして削除するか、リンクが解除されるだけでバックアップがありません何でも。

EDIT1

Lsattr $(readlink -f test1.conf)の出力

--------------e---- ./test2.conf
--------------e---- ./default-ssl.conf
lsattr: Operation not supported While reading flags on ./test1.conf

EDIT2

ls -l ../new-path1/test1.confの出力

lrwxrwxrwx 1 root root 32 Sep 10 14:13 ../new-path1/test1.conf -> ../new-path1/test1.conf

誰もがアドバイスをありがとう、誰もが私を助けることができると思います。

(ソフト)シンボリックリンク(短い名前のシンボリックリンク)とは何ですか?

シンボリックリンクは、ハードドライブのどこかにあるファイルへのポインターです。シンボリックリンクは、ファイルの操作を簡単にするために使用されます。 Windowsには、デスクトップに使用されるショートカットと呼ばれるsimilarポインターがあるため、プログラムを起動するためにフォルダーをクリックする必要はありません。代わりに、システム上の別の場所にあるフォルダー内のプログラムを指すショートカットをデスクトップに置きます。

SymlinkはLinuxでも同じことを行いますが、コンソール/システム用であり、Graphics自体には何も関係ありません。そのため、Linuxファイルシステム上のプログラムとユーザーは、これらのポインターを作成して、より効率的な方法でファイルを見つけることができます。

シンボリックリンクを作成する方法は?どのように機能しますか?

ホームフォルダーにいるので、テストフォルダーとテストファイルを作成します。

pwd
/home/simmel

フォルダーとファイルを作成する

mkdir testfolder
touch testfolder/testfile

リストに表示されます

ls -la testfolder 
total 40
drwxr-xr-x  2 simmel simmel  4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:22 ..
-rw-r--r--  1 simmel simmel     0 Sep 11 16:19 testfile

次に、ホームフォルダーにテストフォルダーへのシンボリックリンクを作成します。

pwd
/home/simmel

ln -s testfolder/testfile

ls -la testfile       
lrwxrwxrwx 1 simmel simmel 19 Sep 11 16:24 testfile -> testfolder/testfile

シンボリックリンクされているファイルへのアクセスに問題がある場合は、常にシンボリックリンクではなく、ファイルまたはフォルダー自体を確認してください。

シンボリックリンクのls -laは、すべてのユーザーに対してrwxを示していますが、それはまったく真実ではありません!フォルダー内のファイル(上記を参照)を確認する必要があります。

ls -la testfolder 
total 40
drwxr-xr-x  2 simmel simmel  4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:22 ..
-rw-r--r--  1 simmel simmel     0 Sep 11 16:19 testfile

つまり、ユーザーsimmelはフォルダーに完全にアクセス(読み取り、書き込み、実行)でき、グループsimmelは読み取りと実行のみが可能なため、システム上の他のユーザーもアクセスできます。ファイルまたはフォルダーの権利または所有権を変更すると、状況は異なります。だから、ファイルをルートに渡すようなことをするとしましょう。

Sudo chown root:root testfolder/testfile

ls -la
total 40
drwxr-xr-x  2 simmel simmel  4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:29 ..
-rw-r--r--  1 root   root       0 Sep 11 16:19 testfile

ご覧のとおり、ファイルは現在rootによって所有されており、rootのみが変更できますが、ユーザーsimmelはそれを読み取ることができます。シンボリックリンクの内容を見てみましょう。何らかの形で変更されましたか?

ls -la testfile 
lrwxrwxrwx 1 simmel simmel 19 Sep 11 16:24 testfile -> testfolder/testfile

いいえ、まだ同じです。そのため、シンボリックリンク自体を見るのではなく、ターゲットをよく見てください。

Ubuntuでは、シンボリックリンクの権利はまったく関係ありません(BSDなどでは異なります)。

シンボリックリンクは、フォルダーやファイルを指します。シンボリックリンクされたフォルダ/ファイルへのアクセス許可を取得するには、フォルダ/ファイル自体の権限を変更する必要があります。

言い換えると、シンボリックリンクの所有権またはモードを変更することにした場合、フォルダー/ファイル自体の所有権またはモードを変更します。

ファイルはどうなりますか?

正直に言うと、私は何が起こるかしか推測できません。 PerlDuckの提案は、あなたまたは他の誰かが誤ってこれをしたということでした

ln -s testfile testfile

これは、それ自体を指すシンボリックリンクになります。デッドリンク。ファイルシステム上の他の場所のファイルを指すのではなく、それ自体に戻るためです。色付きの端末を使用している場合、端末に赤色が表示され、このリンクが完全に壊れていることがわかります。

しかし、このようなデッドリンクを作成するために、同じディレクトリに同じ名前のファイルが存在することはありませんでした。これは動作しません。

だから私はまだあなたのファイルがなくなっていないことを望んでいる、それを見つけてみてください。

行う

Sudo find / -name test1.conf

たぶんあなたは幸運であり、それはまだそこにあります。

見つからない場合、ファイルは永久に失われる可能性があり、新しいファイルを作成する必要があります。

2
s1mmel

あなたのシンボリックリンク

test1.conf -> ../new-path1/test1.conf

デッドリンクです。存在しないディレクトリを指します。 ../new-path/の下にファイルがあると言いましたが、リンクは代わりに../new-path1を指します。リンクを修正します。

ln -fs ../new-path/test1.conf test1.conf

編集後、自己参照シンボリックリンクから../new-path1/test1.confから../new-path1/test1.confへ、つまりnew-path1ディレクトリ内に、それ自体を指すtest1.confという名前のシンボリックリンクが作成されたことが明らかになりました。 test1.conftest1.confへのシンボリックリンクであり、これはtest1.confへのシンボリックリンクです…

pduck@Host> ls -L ../new-path/test1.conf 
ls: cannot access '../new-path/test1.conf': Too many levels of symbolic links

そのシンボリックリンク(rm test1.conf)をドロップし、新しく作成して、既存のファイルを指すようにします。

2
PerlDuck