chown -R root: root. * in / root / üzerinde chown gerçekleştirir


0

/ Root başlığındaki komutu çalıştırırken, bir şekilde / ve ALLfiles için sahipliğini değiştirir, sadece / proc için hata mesajları açıldığı için farkettim.

Belki yaşlanıyorum ama gitmeliyim. ve .. herhangi bir komut tarafından ihmal edilmemeli? AFAIK bunlar dosya sistemi nedeniyle var ve başka bir amaca hizmet etmiyor.

En son güncellemeleri uyguladıktan sonra Debian Wheezy çalıştırıyor.

Yanıtlar:


4

Belki yaşlanıyorum ama gitmeliyim. ve .. herhangi bir komut tarafından ihmal edilmemeli? AFAIK bunlar dosya sistemi nedeniyle var ve başka bir amaca hizmet etmiyor.

Bu hiçbir anlam ifade etmiyor, sadece isimleri özellikle beslediğin için . ve .. senin tarafından boğulmak chown <...> .*. Böyle bir durumda neden chown yapmak istediğini yapmadığını mı sanıyorsun?

İsimler, chown'a verildi, çünkü kabuk, verdiğiniz shell glob genişleme kriterlerine dayanarak genişledi; . ve .. geçerli dizindeki diğer tüm nokta dizinleriyle birlikte. Söylediğinden beri chown özyinelemeli çalışmak için, bu dizinlere ve altlarında bir şey içine indi. Bu "içine düşmüş" anlamına gelir .. ve sonra oradan çalışmaya devam etti.

Bunu yaparak kendiniz deneyebilirsiniz echo .* Chown'un komut satırına girilen isimleri görmek için. Bunu çıktısıyla karşılaştırın. echo * ile shopt dotglob sırasıyla açık ve kapalı shopt -s dotglob açmak için shopt -u dotglob kapatmak). kullanım ls ziyade echo özyinelemenin ilk seviyesini görmek için.

Mükemmel geçerli sebepler var. hatta çalıştırmak için chown -R ikisinde de . veya ... En açık olanı, dosyalar ve tek bir dizindeki tüm dosyalar hakkında yanlış mülkiyet bilgisine sahip bir arşivi çıkarmak gibi görünüyor; böyle bir durumda, chown -R abc:xyz . Sıkıştırılmamış dizinin içinden, mülkiyeti sisteminizde makul bir şeye sıfırlamak için yapılacak mükemmel bir şey.

Kabuğunuzun genişlememesini istiyorsanız .* içine . ve .. o zaman kendi kabuğunuz için doğru kurulduğundan emin olmanız gerekir. Örneğin, GNU bash 4.2.37 (1) 'den tekrar alıntı yapmak (bu yazı sırasında Debian Wheezy'de geçerli olan Debian, bash paket sürümü 4.2+dfsg-0.1+deb7u3 amd64 mimarisinde) man page:

GLOBIGNORE
Yol adı genişletme tarafından göz ardı edilecek dosya adları kümesini tanımlayan iki nokta üst üste ayrılmış bir kalıp listesi. Bir yol adı genişletme modeliyle eşleşen bir dosya adı da GLOBIGNORE'daki modellerden biriyle eşleşirse, eşleşme listesinden çıkarılır.

Unix felsefesinin bir kısmının "kullanıcının ne yaptığını bildiğine güvenmesi" olduğunu unutmayın.


1993 yılında Unix'te eğitim aldım.
J.Lambrecht

Herhangi bir manipülasyon. veya .. yasaktır. Bunun için ./ veya ../ kullandığımızdan beri chown .. chown komutunu istenmeyen şekilde yapabilir. TLDP bash yeni başlayanlardan dosya adının genişletilmesiyle ilgili kılavuz GLOBIGNORE kabuk değişkeni, bir modelle eşleşen dosya adları kümesini sınırlamak için kullanılabilir. GLOBIGNORE ayarlanırsa, GLOBIGNORE'daki modellerden biriyle eşleşen her eşleşen dosya adı eşleşme listesinden kaldırılır. Dosya isimleri. ve .. GLOBIGNORE ayarlanmış olsa bile daima göz ardı edilir.
J.Lambrecht

@ J.Lambrecht "1993'te Unix'te eğitim aldım." O zaman şunu bilmelisin ki Unix! = Linux! = GNU. Linux 1993'te yeni bir ivme kazanmaya başlamıştı ve GNU bugünden daha ilkeldi. Sistemimdeki bash man sayfasından bir alıntı yaptım, ki şu anki Debian Wheezy. Bu hiç bir şey ifade etmiyor . ve .. $ GLOBIGNORE ayarlanmamışsa dolaylı olarak listeye dahil edilmiştir.
a CVn

1
Kaçınmak .. genişleme listesine dahil olmak .[^.]*: Bu, ile başlayan tüm dosyalara genişleyecektir. . dışında . ve ... Karşılaştırarak kontrol echo .* ile echo .[^.]*. (Kayıt için 1985'te Unix'i öğrendim.)
AFH

1
@ J.Lambrecht Sorunuzda gördüğüm tek soru "gerekir. Yığın değişimi genel olarak cevaplar vererek çalışır. sorulan soru ; dolaşmıyoruz ve tahmin ne soruyorsun (ve hatta soruları bekletiriz, bu yüzden soru sorulanın ne olduğu hakkında net değilse, eğer soru OP ile çözülene kadar cevaplanamazlar). Bu davranıştan nasıl kaçınacağınızı bilmek istiyorsanız, bunu yapıp yapmamak yerine sormanız gerekirdi. . ve .. "Herhangi bir komut" tarafından göz ardı edilmelidir.
a CVn

1
  1. Geçerli dizin olduğu için nokta (.) Yoksayılmıyor
  2. Çift nokta (..) (üst dizin), joker karakteri işlediği için göz ardı edilmez

Ancak bu şekilde uygularsanız böyle bir etkisi olmaz

chown -R root:root *

Yalnızca gizli dosyaları değiştirmek istiyorsanız, dizinler şunu deneyin:

find . -regex '.*/\..*' -exec chown root:root {} \;

kullanma * ile aynı değildir *
J.Lambrecht

Kontrol tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html 'dosya adı genişletme' altındaki sayfa boyunca tümüyle açıkça görmezden gelmesi gerektiğini belirtir. ve ..
J.Lambrecht

Yani bunu sadece gizli dosyalar ve dizinler için yapmak istersiniz. Düzenlenmiş cevabımı gör
Romeo Ninov

buna inanamıyorum, . ve. / ve ../ olarak kullanılmadıkça, ihmal edilmemelidirler. Chown'un geniş bir komutla yerleştirmek zorunda kalması davranışını ihlal eder
J.Lambrecht

1
@ J.Lambrecht . ve .. sadece noktalı olmayan * fileglob verildiğinde yoksayılır. .* eşleşecek . ve .. ve .foo ve .bar. Temel olarak, * "gizli" dosyaları içermez; . fakat .* eklemek için bu davranışı geçersiz kılar her şey ile başlayan .ve evet, bu dizinleri içerir. PS. '89'da eğitildim. : /
Otheus
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.