Pertanyaan Batas panjang nama file di linux?


Apakah ada batasan nama file atau panjang jalur di Linux?


110
2018-05-18 17:27






Jawaban:


Lihat Halaman Wikipedia tentang perbandingan sistem file, terutama di kolom Panjang nama file maksimum.

Ini beberapa batas panjang nama file dalam sistem file yang populer:

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



Jawabannya adalah: batas biasanya 255 karakter (bagi mereka yang terlalu malas untuk mengklik tautan ini) - rahmanisback
Jawaban Anda harus mengandung setidaknya ringkasan dari informasi yang relevan di tautan yang disediakan. Bukan hanya tautan. - zrajm
@rahmanisback yang tepat untuk batas nama file, sementara batas jalur biasanya ditentukan oleh OS, bukan FS (kecuali untuk beberapa FSes aneh seperti iso atau ntfs), dan, di linux, adalah 4K - nonchip
Sebenarnya itu tentang keduanya: D - nonchip
Hanya menunjukkan: byte! = Chars, terutama jika Anda menggunakan UTF-8. Lihat sini. - Kris


Saya telah membaca sini bahwa batas panjang jalur berada di header sistem. Batas panjang nama file juga ada. Di sistem saya itu file:

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

dan C-lang mendefinisikan:

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

dan lagi.


81
2017-08-31 08:58



Maaf, tapi saya baru di sini tidak bisa berkomentar, kecuali memilih. Jawaban sebelumnya (oleh sfp) harus ditingkatkan, karena menjawab pertanyaan sepenuhnya, sementara yang lain sebagian tidak aktif. Sekali lagi, maaf untuk pergi selain aturan, tetapi saya tidak bisa diam ketika jawaban terbaik ada di bawah. - David Balažic
Hanya menunjukkan: byte! = Chars, terutama jika Anda menggunakan UTF-8. Lihat sini. - Kris
@ DavidBalažic: Meskipun benar, PATH_MAX di bawah linux hanyalah sebuah panduan, sebagian besar sistem file yang mendasarinya tidak memiliki batasan. Ini menyulitkan referensi jalur yang lebih besar dari ukuran itu. Saya biasanya menggunakan "potongan" PATH_MAX sebagai ukuran. - Rahly


Saya mengacu pada jawaban lain, silakan pilih suara mereka.

Apakah ada batasan nama file atau panjang jalur di Linux?

Ya, nama file dan panjang pathname dibatasi oleh:

Untuk secara dinamis mendapatkan properti ini:

  • Gunakan fungsi pathconf dan fpathconf seperti yang diusulkan oleh Michael Aaron Safyan
  • Buat nama file (atau nama jalan) lebih lama dan lebih lama seperti yang dijelaskan oleh dogbane
  • Gunakan perintah getconf seperti yang diusulkan oleh tim yang juga tersedia di Linux:

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

20
2018-05-24 07:35





Dan demi menghemat waktu (dan menambatkannya ke memori):

ext2, ext3, ext4, zfs: tidak ada batas pathname; Batas nama file 255 byte.


17
2018-05-18 18:15



Sebagian besar program terbatas dengan jalur absolut ke PATH_MAX = 4096, meskipun. Itu bisa dikerjakan jika program Anda dapat menggunakan jalur relatif dan Anda mengubah direktori kerja Anda terlebih dahulu. - Mikko Rantalainen


Itu adalah panjang nama sistem file. "linux" sendiri memiliki beberapa juga. Misalnya, dari bit / stdio_lim.h:

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Jadi karena filesystem extX memiliki batas filename yang lebih rendah dari apa yang didefinisikan di kernel, Anda tidak akan pernah mencapai batas itu, kecuali itu juga mencakup nama path, bukan? - Ivan
itulah yang terlihat bagiku. Ada juga PATH_MAX untuk jalur, yaitu 4096, sehingga akan dipukul sebelum ukuran jalur "tidak terbatas" di exts ... Saya tidak yakin bagaimana OS menyelesaikan pembatasan internal sendiri dan mereka dari FS, tidak pernah memiliki lenganku begitu dalam. pertanyaan yang menarik sekalipun. - jj33
4096 karakter adalah nama jalur helluva. Saya yakin itu bisa dinaikkan dengan mengkompilasi ulang, tapi jujur, / mengapa Anda perlu nama jalan yang panjang? - Avery Payne
Saya tidak yakin Anda akan membutuhkannya atau tidak. Saya melihatnya lebih sebagai perlindungan terhadap program jahat atau lalai (saya dapat dengan mudah melihat skrip yang berperilaku buruk dan mulai membuat dir yang sama secara rekursif. Sebenarnya, saya telah membuat skrip itu, tetapi itu mengalihkan situs web, tidak membuat dirs ...). - jj33
@AveryPayne Untuk menambahkan tag ke file sehingga mereka dapat dicari menggunakan yang sederhana locate. - Hubert Kario


Ada tidak mungkin untuk menentukan panjang jalur maksimum di Linux dengan cara portabel. Di sistem saya:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Tapi saya dapat dengan mudah membuat jalur lebih panjang dari 4096 karakter. Sebagai gantinya, lihat PATH_MAX sebagai batas bawah. Anda dijamin dapat membuat jalur selama ini, tetapi Anda mungkin juga dapat membuat jalur yang lebih panjang.


3
2018-01-16 02:17



Cara mudah yang sederhana untuk menemukan panjang maksimum secara empiris adalah dengan menulis program yang membuat rantai direktori lebih panjang dan lebih panjang, dan melihat di mana ia gagal. Anda tidak akan tahu persis mengapa itu gagal (meskipun Anda berharap untuk pesan kesalahan yang bisa dibaca manusia yang sugestif) tetapi Anda akan tahu seberapa jauh Anda dapat pergi dengan aman. Ingat untuk memeriksa baik panjang direktori individual, panjang pathname relatif, dan panjang pathname absolut. - tripleee
Juga, mis. Python os.pathconf() modul akan memiliki beberapa jawaban; jika port Python bagus, mereka harus masuk akal. - tripleee
Anda tidak bisa karena beberapa filesystem tidak memaksakan batas apapun. Akan lebih cepat gagal dengan kesalahan memori yang mana program mana pun akan mengalami masa pemulihan yang sulit. - Björn Lindqvist
Ini adalah jawaban yang benar, kecuali ini karena komentar @ BjörnLindqvist. PATH_MAX hanyalah pedoman, dan 99% file mungkin akan berada dalam batas itu. - Rahly


Anda harus selalu menggunakannya pathconf atau beberapa fungsi seperti ini untuk mendapatkan nilai runtime tentang item yang ditentukan, karena ini halaman mengatakan bahwa:

Perlu dicatat, bagaimanapun, bahwa banyak dari batas yang terdaftar tidak invarian, dan pada saat runtime, nilai batas dapat berbeda dari yang diberikan di header ini, karena alasan berikut:

  • Batasnya bergantung pada pathname.

  • Batasnya berbeda antara mesin kompilasi dan runtime.

Untuk alasan ini, aplikasi dapat menggunakan fungsi fpathconf (), pathconf (), dan sysconf () untuk menentukan nilai sebenarnya dari batas saat runtime.


1
2017-12-05 01:49





Ini ditentukan dalam sistem limits.h file header.

Berikut ini salah satu dari file-file ini:

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 */
...

Di sinilah salinan file ini berada dan nilai yang mereka definisikan:

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

Keluaran:

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

0