it-swarm-tr.com

Linux'ta dosya adı sınırları?

Linux'ta dosya adı veya yol uzunluğu sınırı var mı?

130
ro.

Ö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
134
WerkkreW

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.

90
sfp

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:

Bu özellikleri dinamik olarak almak için:

  • pathconf ve fpathconf işlevlerini Michael Aaron Safyan tarafından önerilen şekilde kullanın
  • dogbane ile açıklandığı gibi daha uzun ve daha uzun bir dosya adı (veya yol adı) oluşturun
  • Linux'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
    
24
olibre

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ı.

20
Ivan

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
6
jj33

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.

3
Björn Lindqvist

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.

1
andy

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 */
...
0
Bohdan Voloshyn