Chown rekursif dimulai dengan direktori di atas direktori saat ini

27

Saya tidak bisa masuk ke akun "admin" saya dan Alt+ Ctrl+ F1menunjukkan semua file saya dimiliki oleh pengguna "standar" saya. Aneh.

Jadi saya hati-hati berubah /home/admindan melakukan

sudo chown -R admin:admin *

(dan .*juga).

Besar.

Kemudian saya tidak bisa masuk sebagai pengguna "standar" saya dan ternyata semua file /home/standardsekarang dimiliki oleh "admin".

Cukup lucu. Mengapa ini terjadi?

sudo chown -R standard:standard /home/standard/*

melakukan hal yang sama, berubah /home/adminjuga /home/standard.

Saya lebih bingung daripada biasanya karena saya mencoba memutakhirkan ke 15,04 dan itu cukup merusak komputer saya jadi saya mengembalikan semuanya dengan 14,04, harap bersabar dengan saya.

DavidP
sumber
Mungkin satu adalah tautan simbolis ke yang lain? apa yang ls -l /homedikatakan?
steeldriver

Jawaban:

35

Masalah ini disebabkan karena Anda telah menjalankan:

sudo chown -R admin:admin .*

Kita tahu itu .menunjukkan direktori saat ini dan ..menunjukkan direktori induk. Ketika Anda menjalankan perintah .*, itu berarti cocok dengan file yang tersembunyi di direktori saat ini (menyatakan dengan .), direktori saat ini sendiri ( .), direktori induk ( ..). Sederhananya setelah apa saja .( *berarti 0 atau lebih karakter). Sebagai hasilnya, direktori induk beserta semua direktori chownturunannya dapat diakses admin:admin.

Lihatlah tes ini:

test$ ls -al
drwxrwxr-x 4 foo foo 4096 Jun  3 07:15 .
drwxrwxr-x 4 foo foo 4096 Jun  2 18:06 ..
drwxrwxr-x 2 foo foo 4096 Jun  3 07:15 egg
drwxrwxr-x 2 foo foo 4096 Jun  3 07:12 spam

$ sudo chown -R bar:bar spam/.*

test$ ls -al
drwxrwxr-x 4 bar  bar  4096 Jun  3 07:15 .
drwxrwxr-x 4 foo  foo  4096 Jun  2 18:06 ..
drwxrwxr-x 2 bar  bar  4096 Jun  3 07:15 egg
drwxrwxr-x 2 bar  bar  4096 Jun  3 07:12 spam

Untuk kembali, Anda perlu kembali ke chowndirektori yang terpengaruh.

Saya tidak begitu yakin apa rencana Anda, tetapi berikut adalah beberapa ide:

  • Ke chowndirektori mana pun secara rekursif (termasuk file tersembunyi):

    sudo chown -R foo:foo /spam/egg/
    
  • Untuk chownhanya file (termasuk file tersembunyi) di dalam direktori itu (bukan direktori itu sendiri):

    (shopt -s dotglob && sudo chown -R foo:foo egg/*)
    
  • Untuk chownhanya file yang tidak disembunyikan (tanpa direktori itu sendiri):

    sudo chown -R foo:foo egg/*
    
heemayl
sumber
Terima kasih, saya mengerti sekarang ... duh; P Masih tidak tahu mengapa pemilik berubah di tempat pertama kecuali itu entah bagaimana terkait dengan Grub memberi saya kesalahan dan menabrak program instalasi 14,04 pada saya. Pengguna standar saya adalah yang pertama saya buat dan saya kemudian menurunkannya dan membuat yang baru.
DavidP
@ DavidP Saya tidak jelas apa yang Anda maksud ..
heemayl
3

Saya pikir itu adalah parameter ". *" Untuk file; yang cocok dengan semua yang dimulai dengan ".", termasuk "." dan file "..". ".." adalah direktori induk, yang mencakup semua yang ada di bawahnya.

Cara terbaik adalah membuat cadangan satu folder, dan tentukan folder aktual yang ingin Anda ubah (/ home / admin).

Marty Fried
sumber