Yanlışlıkla diskimin izin yapısını sildim - neden?


23

Deniyordum chowniçinde /optve nedense chownebeveyn ve chowned her şeyi ayağa fırladı.

Birisi bunun neden / nasıl olabileceğini ve gelecekte bunu yapmaktan nasıl kaçınabileceğini önerebilir mi? Belirli bir direkte bir komut çalıştırmanın etkili bir şekilde yukarı atlayıp root dir'de çalıştırmasıyla ilgili bir parça.

ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >

2
Böyle yapardım: sudo chown -R root:wwwdata /opt--help iletişim kutusuna göre ... belki de bu boruyu kullanmak bazı sorunlara neden oldu mu ???
Joshua Besneatte


7
@steeldriver gibi sesler bir cevap olarak gönderilmelidir;)
Joshua Besneatte

2
Peki gizli dosyalara izin vermenin doğru yolu nedir, ne yapmaya çalışıyordum?
Duke Dougal

4
@JoshuaBesneatte Çoğu klavyenin Enter tuşuna basılması / oldukça yakın olması ve / ile başlayan argümanlarda özyinelemeli komutları çalıştırmamaya çalışıyorum ve komutun kalanını yazmadan önce yanlışlıkla Enter tuşuna basmak çok kolay. Bu riski hafifletmek için, biri cdkök dizine girebilir ve / işaretini atlayabilir ya da komutu başlatabilir (, bu, eşleşme yazılana kadar komutun yürütülmeyeceği anlamına gelir; )bu, Ctrl-C'ye çarpma ve geri çekilme fırsatı verir. Kötü bir hata (örneğin rm -rf /tmp/foo-installT yerine Enter ve isabet).
Monty Harder,

Yanıtlar:


25

Bu oldu çünkü sen kullandın:

sudo chown -R root:www-data .*

bunun yerine ne zaman kullanmalıydın:

sudo chown -R root:www-data ./*

İlk olarak, -Rhedef dizin altındaki tüm dizinler için özyinelemelidir.

Ek olarak, *geçerli dizin altındaki tüm dosya ve dizinlerle eşleşecektir. Ardından, .*tüm dosya ve dizinleri geçerli dizinin üstündeki bir seviye ile eşleştirecektir .

Gelecekte bundan kaçınmak için, aşağıdaki örneklerde olduğu gibi komutu lsçalıştırmadan önce yolu doğrulamak için komutu kullanabilirsiniz chown:

ls -a ./*
ls -a *
ls -a .*
ls -a ../*

Bundan kaçınmanın başka bir yolu da, bir komutu çalıştırmak istediğiniz dizine giden tam yolu her zaman kullanmaktır.

İşte bir örnek:

sudo chown -R root:www-data /opt/*

Düzenle:

Aşağıdaki komutu chmodtüm gizli dosyalara veya dizinlere doğrudan altında kullanabilirsiniz /opt(bunları gizleyen ilk karakteri varsayarak, .çoğu dosya için doğru olması gereken bir harf, sayı, kısa çizgi veya alt çizgi olduğunu varsayarsak ).

for i in /opt/.[A-Za-z0-9-_]*; do sudo chmod root:www-data "/opt/$i"; done

Hangi chmodkomutu çalıştıracağını aşağıdaki komutu çalıştırarak doğrulayabilirsiniz :

ls /opt/.[A-Za-z0-9-_]*

Komutun ilk kısmı : globünfor i in /opt/.[A-Za-z0-9-_]* tüm sonuçları için her sonucu "i" değişkenine atadığını söylüyor . /opt/.[A-Za-z0-9-_]*

Buradaki küre, ilk karakterin olması gerektiğini .ve bir sonraki karakterin [A-Za-z0-9-_] AZ veya az olan herhangi bir karakter veya 0-9 veya a -veya a olan herhangi bir karakter olması gerektiğini söyler _.

Bu, sonuçları dışlar .ve ..geçerli dizini ve geçerli dizinin üzerindeki dizini temsil eder ve yalnızca gizli dosyaları ve dizinleri içerir.

Komutun ikinci kısmı : do sudo chmod root:www-data "/opt/$i"komutu, şu anki değeriyle eşleşen tüm değişkenler için çalıştırmayı söylüyor $i.

Komutun üçüncü kısmı : doneBitirdiğimi söylüyor.


Ayrıca, kullanılan -Rile seçeneği chmodve -Ropsiyon özyinelemeli ve tüm dizinleri için geçerli olur ve dosyalar.

chmodKomutu yalnızca seçeneksiz kullandığınızda, komut yalnızca verdiğiniz belirli dosya veya dizine uygulanır ve yinelemeli olarak dizinlere uygulanmaz.


5
Niyetim gizli dosyaları hedeflemekti. Yanlışlıkla burada gizli dosyaları grepleme için kullanılan sözdiziminin stackoverflow.com/questions/10375689/… ' in genellikle gizli dosyalar için geçerli sözdizimi olduğunu varsaydım . Öyle gözükmüyor.
Duke Dougal

2
@DukeDougal Hemen gelen ilk cevabı kabul etmemelisiniz. Kabul etmeden 24 saat önce beklemek genellikle daha iyidir. O zamanlar kabullenmeyi hak edecek daha faydalı ya da daha iyi yazılı cevaplar ortaya çıkabilir. Yararlı olduğunu düşündüğünüz tüm cevapları artırabilirsiniz. StackExchange, "ilk önce cevap verenler" değil, "en iyi yanıtı verenler" (hem içerik hem de açıklık açısından) ile ilgili değildir (veya olmamalıdır).
Giacomo Alzetta

11
Düzenleme korkunç. lsÇıktıyı ayrıştırmayı önerir ve cevap kullanılırken çok yavaştır find.
val diyor Reinstate Monica

9
(1) Hiçbir joker karakter (glob / pattern) bash dışında özyinelemelidir **ve hatta açıkça etkinleştirilmesi gerekir. IMHO, rolü konusunda daha net olmalısın  -R. (2) İnsanlara düz kullanmaktan kaçınmaları tavsiye edilir *çünkü -daha sonra seçenekler olarak yorumlanacak olan dosya isimleri ile eşleşebilir .  Buna karşı korunmalı, ancak tüm emirlerin bu sözleşmeyi onurlandırdığından emin değilim. … (Devamı)command -- *
Scott

6
(Devamı) ... (3)  *,  ./* ve hatta  /opt/* bulmak için başarısız ( “nokta dosyalara” .*sürece) dotglobseçeneği ayarlıdır. As  Joshua Besneatte ve  ilkkachu demek, chown -R /optve chown -R .daha iyidir. … (Devamı)
Scott

45

Kabuk glob (ana dizin) bu durumda ne yazık ki .*eşleşir :../

steeldriver@t400s:/opt$ ls .*
.:

..:
bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64
libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  swapfile  sys
tmp  usr  var  vmlinuz  vmlinuz.old

Ek tartışma için bakınız:


6
Bu doğru ve çok daha basit, cevap
yukarıda 17

5

Belaların geldi çünkü bir noktayla başlayan her şeyle.* eşleşiyor . Bağlam, geçerli dizindir, çünkü bu ifade bir yol içermez. Dolayısıyla, geçerli dizindeki gibi herhangi bir gizli dosya veya klasör varsa, bunları eşleştireceksiniz. Ama (eğer çalıştırarak göreceğimiz gibi bu klasörde), ayrıca maç olacak ve.gitls -a...

Ve ..elbette, ana dizindir, bu nedenle ana dizindeki chmod -Rher şeyi tekrar tekrar hedefledi.


/opt/.*Yardım etmeyecek gibi mutlak bir yol , CWD = ile /opt/..aynıdır . ../opt
Peter Cordes

@Peter: Evet, bu doğru: İfade bir yol içeriyorsa, bu geçerli dizin yerine içeriğe (başlangıç ​​noktası) verilecektir. OP .bağlam olarak kullanmak istemişti , ancak eksik eğik çizgi nedeniyle bu şekilde işe yaramadı ...
alexis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.