Linux'ta dosya adı veya yol uzunluğu sınırı var mı?
Özellikle Maksimum dosya adı uzunluğu sütununda Dosya sistemleri karşılaştırmasıyla ilgili Wikipedia sayfasına bakın.
Popüler dosya sistemlerinde bazı dosya adı uzunluk sınırları:
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
burada yol uzunluğu sınırının sistem başlıklarında olduğunu okudum. Dosya adı uzunluk sınırı da var. Sistemimde dosya:
/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.
Diğer cevaplara atıfta bulunuyorum, lütfen onları oylayın.
Linux'ta dosya adı veya yol uzunluğu sınırı var mı?
Evet, dosya adı ve yol adı uzunlukları aşağıdakilerle sınırlıdır:
linux/limits.h
sfp ile belirtildiği gibi.Bu özellikleri dinamik olarak almak için:
pathconf
ve fpathconf
işlevlerini Michael Aaron Safyan tarafından önerilen şekilde kullanınLinux'ta da bulunan tim tarafından önerildiği gibi getconf
komutunu kullanın:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
Ve zaman kazanmak için (ve onu belleğe sabitlemek için):
ext2, ext3, ext4, zfs: yol adı sınırı yok; 255 bayt dosya adı sınırı.
Bunlar dosya sistemi adı uzunluklarıdır. "linux" 'un kendisi de vardır. Örneğin, bit/stdio_lim.h dosyasından:
# define FILENAME_MAX 4096
Taşınabilir bir şekilde Linux'ta maksimum yol uzunluğunu belirlemek için yol yok vardır. Sistemimde:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Ama kolayca 4096 karakterden daha uzun yollar oluşturabilirim. Bunun yerine PATH_MAX
alt sınır olarak. Bu kadar uzun yol oluşturabileceğiniz garanti edilir, ancak çok daha uzun yollar da oluşturabilirsiniz.
Belirtilen öğelerle ilgili çalışma zamanı değerini almak için her zaman pathconf veya bunun gibi bir işlev kullanmalısınız, çünkü bu sayfa :
Bununla birlikte, listelenen sınırların çoğunun değişmez olmadığına ve çalışma zamanında, sınırın değerinin, aşağıdaki nedenlerle bu başlıkta verilenlerden farklı olabileceğine dikkat edilmelidir:
Sınır yol adına bağlıdır.
Sınır, derleme ve çalışma zamanı makineleri arasında farklılık gösterir.
Bu nedenlerle, 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.
Sistemde sınırları.h başlık dosyasında belirtilir.
İş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 */
...
Bu dosyanın kopyalarının bulunduğu yerler ve tanımladıkları değerler:
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 */
...