chown -R pengguna: pengguna. * mengubah izin ke belakang: apakah ini perilaku yang benar?

8

Saya mendapat banyak masalah ketika mengubah izin folder yang myfolderberada di /. Saya mengeluarkan perintah

sudo chown -R luca:luca /myfolder/.*

Tujuan saya adalah mengubah kepemilikan semua file tersembunyi di /myfolder.

Sayangnya saya menyadari bahwa kepemilikan /juga berubah, yang tentu saja membuat saya sistem yang rusak. Saya pikir ini terjadi karena ..pertandingan .*, tetapi masih terasa aneh bagi saya.

Apakah mengubah direktori induk adalah perilaku yang benar atau haruskah saya mengajukan laporan bug?

Jika itu adalah kesalahan saya dalam menggunakan chown, apa praktik terbaik yang digunakan untuk mencegah mengubah kepemilikan folder dan file sistem?

lucacerone
sumber
4
Ini dimaksudkan perilaku sebagai ..pertandingan.*
Uwe Plonus
.*berarti file apa pun yang diakhiri dengan . *.berarti file apa pun yang dimulai dengan.
NickTux
4
@Nik, Ini sebaliknya!
Uwe Plonus
Yah satu praktik terbaik mungkin tidak memodifikasi /secara langsung (membuat folder, menghapus, dll) kecuali benar-benar diperlukan (buka pertanyaan untuk apa yang ingin Anda capai). Juga berbahaya menggunakan wildcard + hak istimewa root karena, lebih sering daripada tidak, Anda tidak 100% yakin apa yang terpengaruh oleh wildcard.
edwin
1
@ LucaCerone Ini terkait, chmoddan chownmerupakan perintah yang serupa, keduanya dimulai dengan ch, berisi odan memiliki dua huruf serupa lainnya ( ndan m). </ literal> Serius, mereka berdua dalam bentuk: [cmd] -R [mode or user] [one or more files]. Beberapa solusi yang ditawarkan pada pertanyaan itu juga berfungsi untuk kasus Anda, misalnya yang ini dari Sean Reifschneider (di tengah). Jawaban ini juga berlaku untuk file tersembunyi hanya dengan menghapus pola glob untuk file yang tidak tersembunyi.
Lekensteyn

Jawaban:

5

Ingat bahwa baris perintah diperluas (ditafsirkan) oleh shell sebelum dieksekusi

sudo chown -R luca:luca /myfolder/.*

ditafsirkan pertama sebagai:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

catat /myfolder/..di baris perintah Anda

chown -R luca:luca /myfolder/..setara dengan chown -R luca:luca /
yang membuat chown berjalan "mundur"

Gunakan echo /myfolder/.*ketika Anda menggunakan "*" untuk memverifikasi.

Emmanuel
sumber
@ Emmanuel: mengapa Anda menggunakan xargs dan mencari ketika opsi -R sudah cukup?
Januari
@ Emmanuel: terima kasih! dapatkah Anda mengembangkan sedikit tentang find dan xargs?
lucacerone
@ LucaCerone Saya tidak yakin mengapa Anda menerima yang ini, itu secara rekursif mengubah semua file di /myfolder. The findperintah berlebihan dan istirahat dengan nama file yang mengandung spasi. (jika Anda ingin mengubah file secara rekursif, find /myfolder | xargs chown luca:lucamirip dengan chown -R luca:luca /myfolder).
Lekensteyn
Lekensteyn benar saya lupa grep ^.
Emmanuel
@Lekensteyn Saya mengubah temuan agar tidak cocok dengan ruang
Emmanuel
4

Baik. Baris perintah sebagai root sangat kuat. Baca beberapa buku klasik ini . Dan ya, .*cocok dengan ..apa yang dimaksudkan. Dot bukan karakter khusus. Itu adalah konvensi. Secara konvensi, file yang dimulai dengan titik disembunyikan dari tampilan default saat mendaftar direktori - tidak kurang, dan tidak lebih. Secara konvensi, inode yang mengarah ke direktori saat ini mendapatkan .nama dan inode yang mengarah ke direktori induk mendapatkan ..namanya.

Apa yang seharusnya Anda lakukan adalah

chown -R luca:luca /myfolder

Apakah saya menyebutkan bahwa tidak ada yang istimewa tentang nama file yang dimulai dengan titik? Rekursif chowntidak berpikir begitu.

Saat ini, Anda mungkin dapat menyelamatkan beberapa fungsionalitas dengan mengubah kepemilikan kembali ke root. Dalam jangka panjang, Anda mungkin harus menginstal ulang sistem.

Sebagai aturan umum:

  1. Hindari bekerja sebagai root.
  2. Jika Anda bekerja sebagai root, baca setiap perintah dua kali sebelum menekan Enter.
  3. Jika Anda tidak yakin tentang ekspansi, coba dulu dengan perintah "aman" (seperti echo .*).
  4. Jangan bekerja sebagai root.
  5. Ada banyak tugas yang dapat dilakukan dengan aman menggunakan antarmuka grafis (masalah Anda adalah contoh dari tugas semacam itu).
  6. Apakah saya menyebutkan bahwa Anda harus menghindari menggunakan akun root?
Januari
sumber
Saya tidak ingin mengubah kepemilikan semua file dalam folder ... hanya file yang tersembunyi ..
lucacerone
2
OK, salah saya kemudian. Dalam hal ini, chown -R luca:luca /myfolder/.[^.]*saya pikir
Januari
2
echo .*adalah cara yang baik untuk mencoba ekspansi. Ini akan menunjukkan dengan tepat apa yang dilihat shell. ls .*bisa menjadi sedikit lebih membingungkan, karena akan turun direktori ( ls -d .*mungkin lebih baik, tetapi mungkin juga hanya menggunakan echo .*)
Robie Basak
@RobieBasak poin bagus!
Januari