/ Proc ve / proc / (sondaki eğik çizgi ile) arasındaki fark nedir?


2

Kullanmaya çalışıyorum tar dosyalarımı yedeklemek için. İle --exclude=/proc/, arşiv / proc altındaki dosyaları içerir ve --exclude=/proc değil. Farklılığa ne sebep olur?

Not; Kullandığım kabuk Bash.

Yanıtlar:


2

Genelde bir dizin için eğik çizgi kullanımı veya genel olarak kullanılmaması arasında, sembolik bağlantıların ele alınması dışında, gerçekten önemli bir fark yoktur. Görmek Açık Grup Bazlı Özellikler, 4.11 Pathname Resolution (ayrıca bakınız bu cevap Unix SE'de).

GNU katran söz konusu olduğunda: sondaki eğik çizgi basitçe ele alınmaz --exclude fark ettiğiniz gibi Aradaki fark, kaynak kodundan kaynaklanır, eğer biri bir şeye işaret ederse :-) Görmek bu soru Server Fault SE'de (fazla ayrıntı vermese de - sadece gerçeği belirtir). Görmek bu posta dizisi bazı ilgili bilgiler için. Bu pasajda bir ipucu bulunabilir (ne yapacağımdan tam olarak emin olmasam da):

Otto Moerbeek şunu yazdı:

Bu kodun parçası olduğu ilgili:

            /*
             * Some programs that create ustar archives append a '/'
             * to the pathname for directories. This clearly violates
             * ustar specs, but we will silently strip it off anyway. 
             */
            if (arcn-> name[arcn-> nlen - 1] == '/')
                    arcn-> name[--arcn-> nlen] = '\0';

Gtar tarafından oluşturulan arşivlerin hexdump -C ile görebileceğiniz gibi, gtar   böyle bir program. Katran değiştirmek için katran değiştirmek istemiyorum   uygun olmayan programlar.


3

Genellikle programın sözleşmesine bağlıdır. (GNU) ile tar bu biraz tutarsız çünkü takip eden / değişmeyen dahil dizinleri. Davranış kısmen açıklanmıştır İşte " desen ve adlar olduğu gibi kullanılır ". Hariç tutmalar ismin herhangi bir bölümünü eşleyebilir (siz --anchor ).

Dokümantasyonda bir fark olduğu ya da neden olduğu açık değildir.

Dahili olarak, izlemenin / hariç tutmamanın eşleşmemesinin nedeni tar kullanımları opendir(3), readdir(3) ve fnmatch(3) - opendir() izini kabul eder / bir dizinde readdir() dizin adlarına eğik çizgi koymaz ve fnmatch() sadece mevcut dosyalara veya kurallara uygun hale getirilmeden kalıpları eşleştirir. özellikle, fnmatch("proc/","proc",0) 1 döndürür (eşleşme yok) ..

Karşılaştırmak rsync Sonunda / dizin adları için çok farklı (ve iyi belgelenmiş) farklılıklar vardır.

İlgili bir sorun, bazen bir dizini yedeklemek istediğinizdir çünkü bağlantı noktası , içeriğini istemiyorum rağmen. Yedeklemenizin amacı tüm gerekli montaj noktalarını içerebilir ( /dev proc /sys ) bu yüzden genellikle yapmak istersiniz:

tar --exclude=/proc/* --exclude=/sys/* --exclude=/dev/* [...]
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.