Soru Linux dosya adı uzunluğu sınırları?


Linux'ta herhangi bir dosya adı veya yol uzunluğu limiti var mı?


110
2018-05-18 17:27


Menşei




Cevaplar:


Bakın Dosya sistemi karşılaştırması hakkında Wikipedia sayfasıözellikle sütunda Maksimum dosya adı uzunluğu.

İşte bazı dosya adı uzunluk sınırları popüler dosya sistemlerinde:

BTRFS   255 bytes
exFAT   255 UTF-16 characters
ext2    255 bytes
ext3    255 bytes
ext3cow 255 bytes
ext4    255 bytes
FAT32   8.3 (255 UCS-2 code units with VFAT LFNs)
NTFS    255 characters
XFS     255 bytes

117
2018-05-18 17:29



Cevap: limit genellikle 255 karakterdir (bu bağlantıyı tıklamak için çok tembel olanlar için) - rahmanisback
Cevabınız sağlanan bağlantıdaki ilgili bilgilerin en az bir özetini içermelidir. Sadece bir bağlantı değil. - zrajm
@rahmanisback dosya adı limitleri için doğru, yol sınırları genellikle işletim sistemi tarafından değil, FS (iso veya ntfs gibi bazı garip FS'ler hariç) tarafından tanımlanır ve linux üzerinde 4K - nonchip
Aslında ikisi hakkındaydı: D - nonchip
Sadece işaret: bayt! = Chars, özellikle UTF-8 kullanıyorsanız. Görmek İşte. - Kris


okudum İşte Bu yol uzunluğu sınırı sistem başlıklarındadır. Dosya adı uzunluk limiti de var. Sistemimde dosya var:

  /usr/src/linux-headers-2.6.38-10/include/linux/limits.h

ve C-lang şunları tanımlar:

  #define NAME_MAX         255    /* # chars in a file name */
  #define PATH_MAX        4096    /* # chars in a path name including nul */

ve biraz daha.


81
2017-08-31 08:58



Üzgünüm, ama ben burada yeniyim, bir oy bile edemem, oy tasarrufu. Önceki cevap (sfp ile), soruya tamamen cevap verirken, diğerleri kısmen kapalıyken uyandırılmalıdır. Yine, kuralların yanısıra gittiğim için üzgünüm, ama en iyi cevap en altta olduğu zaman sessiz olamıyorum. - David Balažic
Sadece işaret: bayt! = Chars, özellikle UTF-8 kullanıyorsanız. Görmek İşte. - Kris
@ DavidBalažic: true olsa da, linux altında PATH_MAX sadece bir kılavuzdur, temel dosya sistemlerinin çoğunun bir sınırlaması yoktur. Bu, bu boyuttan daha büyük olan yollara başvurmayı zorlaştırır. Genellikle PATH_MAX'in "parçalarını" bir beden olarak kullanırım. - Rahly


Diğer cevaplara başvuruyorum, lütfen onları onayla.

Linux'ta herhangi bir dosya adı veya yol uzunluğu limiti var mı?

Evet, dosya adı ve yol adı uzunlukları şu şekilde sınırlandırılmıştır:

Bu özellikleri dinamik olarak almak için:

  • Fonksiyonları kullanın pathconf ve fpathconf tarafından önerildiği gibi Michael Aaron Safyan
  • Açıklandığı şekilde daha uzun ve daha uzun bir dosya adı (veya yol adı) oluşturun. dogbane
  • Komutu kullan getconf tarafından önerildiği gibi tim Linux'ta da mevcut:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    

20
2018-05-24 07:35





Ve zaman tasarrufu için (ve belleğe bağlayarak):

ext2, ext3, ext4, zfs: yol adı sınırları yok; 255 bayt dosya adı sınırı.


17
2018-05-18 18:15



Çoğu program mutlak yollarla sınırlıdır PATH_MAX = 4096olsa da. Programınız göreceli yolları kullanabiliyorsa ve ilk önce çalışma dizini değiştirirseniz, bu etrafta kullanılabilir. - Mikko Rantalainen


Bunlar dosya sistemi adı uzunlukları. "Linux" un kendisi de var. Örneğin, bits / stdio_lim.h:

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Yani extX dosya sistemleri, çekirdekte tanımlanandan daha düşük bir dosya adı sınırına sahip olduğu için, herhangi bir yol ismini de kapsamazsa, bu sınırı asla vurmazsınız, değil mi? - Ivan
Bana öyle görünüyor. 4096 olan yol için PATH_MAX da var, bu yüzden çıkışlarda "sınırsız" yolun büyüklüğünden önce vurulacaktı ... OS'nin kendi iç kısıtlamalarını ve FS'dekileri nasıl çözdüğünü bilmiyorum kollarım o kadar derin. ilginç bir soru olsa da. - jj33
4096 karakter bir helluva yol adıdır. Bir derleme ile yükseltilebileceğine eminim, ama dürüstçe, neden bu kadar uzun yol tarifine ihtiyacın var? - Avery Payne
Ona ihtiyacın olduğundan emin değilsin. Kötü niyetli ya da ihmalkar programlara karşı bir koruma olarak daha fazla görüyorum (kötü davranan ve aynı direyi tekrarlayan bir betiği yaratan bir betiği kolayca görebiliyordum. Aslında bu senaryoyu yaptım, ancak bir web sitesini yönlendiriyordum. ...). - jj33
@AveryPayne Dosyalara etiket eklemek için basit bir şekilde arandıklarını locate. - Hubert Kario


Var olmaz Linux'taki maksimum yol uzunluğunu portatif olarak belirlemek. Benim sistemimde:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Ama kolayca 4096 karakterden daha uzun yollar oluşturabilirim. Yerine görmek PATH_MAX alt sınır olarak. Yolları bu kadar uzun süre yaratabileceğinizi garanti ediyorsunuz, ancak daha uzun olanları da yaratabilirsiniz.


3
2018-01-16 02:17



Ampirik olarak maksimum uzunluğu bulmak için basit bir taşınabilir yolu, daha uzun ve daha uzun dizin zincirleri oluşturan bir program yazmak ve nerede başarısız olduğunu görmektir. Tam olarak neden başarısız olduğunu bilemezsiniz (insan tarafından okunabilir bir hata mesajı almayı umut edersiniz de) ancak ne kadar ileri gidebileceğinizi bilebilirsiniz. Her iki dizin uzunluğunu, göreceli yol adı uzunluğunu ve mutlak yol adı uzunluğunu kontrol etmeyi unutmayın. - tripleee
Ayrıca, örn. Python os.pathconf() modülün bazı cevapları olacak; Python portu iyi ise, makul olmalıdır. - tripleee
Yapamazsın çünkü bazı dosya sistemleri herhangi bir sınır. Herhangi bir programın kurtarılması zor bir zaman geçireceği bir bellek hatası hatasıyla daha erken başarısız olur. - Björn Lindqvist
Bu doğru cevap, bu BjörnLindqvist yorum nedeniyle olduğu dışında. PATH_MAX sadece bir kılavuzdur ve dosyaların% 99'u muhtemelen bu sınırın içinde olacaktır. - Rahly


Her zaman kullanmalısın pathconf veya bunun gibi belirli işlevler için çalışma zamanı değerini almak gibi bazı işlevler sayfa dedi ki:

Bununla birlikte, listelenen sınırların çoğunun değişmez olmadığını ve çalışma zamanında sınırın değeri, aşağıdaki nedenlerden dolayı, bu başlıkta verilen değerlerden farklı olabileceğine dikkat edilmelidir:

  • Sınır, yola bağımlıdır.

  • Limit, derleme ve çalışma süresi makineleri arasında farklılık gösterir.

Bu nedenlerden dolayı, bir uygulama çalışma zamanında bir sınırın gerçek değerini belirlemek için fpathconf (), pathconf () ve sysconf () işlevlerini kullanabilir.


1
2017-12-05 01:49





Sistemde belirtildi limits.h başlık dosyası.

İşte bu dosyalardan biri:

cat /usr/include/linux/limits.h

...
#define NAME_MAX         255    /* # chars in a file name */
#define PATH_MAX        4096    /* # chars in a path name including nul */
...

İşte bu dosyanın kopyalarının bulunduğu ve tanımladıkları değerler şunlardır:

find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}

Çıktı:

...
/usr/include/linux/limits.h:#define NAME_MAX         255        /* # chars in a file name */
...

0