jawabannya adalah: batas biasanya 255 karakter (bagi mereka yang terlalu malas untuk mengklik tautan ini)
doc_id
11
Jawaban Anda harus mengandung setidaknya ringkasan informasi yang relevan di tautan yang disediakan. Bukan sekadar tautan.
zrajm
2
@rahmanisback itu tepat untuk batas nama file, sedangkan batas jalur biasanya ditentukan oleh OS, bukan FS (kecuali untuk beberapa FS aneh seperti iso atau ntfs), dan, di linux, adalah 4K
nonchip
2
Sebenarnya itu tentang keduanya: D
nonchip
7
Hanya menunjukkan: byte! = Karakter, terutama jika Anda menggunakan UTF-8. Lihat di sini .
Kris
87
Saya telah membaca di sini bahwa batas panjang jalur ada di header sistem. Batas panjang nama file juga ada di sana. Di sistem saya ini adalah file:
Maaf, tapi saya baru di sini dan bahkan tidak bisa berkomentar, menyimpan suara. Jawaban sebelumnya (oleh sfp) harus dinaikkan, karena menjawab pertanyaan sepenuhnya, sementara yang lain sebagian tidak aktif. Sekali lagi, maaf karena melanggar aturan, tapi saya tidak bisa diam ketika jawaban terbaik ada di bagian bawah.
David Balažic
1
Hanya menunjukkan: byte! = Karakter, terutama jika Anda menggunakan UTF-8. Lihat di sini .
Kris
1
@ DavidBalažic: Walaupun benar, PATH_MAX di linux hanyalah sebuah pedoman, sebagian besar sistem file yang mendasarinya tidak memiliki batasan. Ini mempersulit referensi jalur yang lebih besar dari ukuran itu. Saya biasanya menggunakan "potongan" dari PATH_MAX sebagai ukuran.
Rahly
23
Saya merujuk pada jawaban lain, mohon utas mereka.
Apakah ada batasan nama file atau panjang jalur di Linux?
Ya, panjang nama file dan nama path dibatasi oleh:
Namun, sebagian besar program dibatasi dengan jalur absolut PATH_MAX = 4096. Itu dapat dikerjakan jika program Anda dapat menggunakan jalur relatif dan Anda mengubah direktori kerja Anda terlebih dahulu.
Mikko Rantalainen
Itu karena berbagai API POSIX seperti getcwddan realpath(yang dapat Anda implementasikan dalam kode userspace dengan membaca metadata untuk .dan kemudian mengubah ..dan mengulangi hingga Anda menekan root filesystem) bergantung PATH_MAX. ( Sumber )
ssokolow
6
Itu adalah panjang nama sistem file. "linux" sendiri juga memiliki beberapa. Misalnya, dari bits / stdio_lim.h:
Jadi karena filesystem extX memiliki batas nama file lebih rendah dari apa yang didefinisikan dalam kernel, Anda tidak akan pernah mencapai batas itu, kecuali jika itu juga mencakup nama path, kan?
Ivan
1
itu seperti apa bagiku. Ada juga PATH_MAX untuk jalur, yaitu 4096, jadi itu akan mengenai sebelum ukuran jalur "tidak terbatas" di exts ... Saya tidak yakin bagaimana OS menyelesaikan pembatasan internal sendiri dan orang-orang dari FS, tidak pernah memiliki tangan saya sedalam itu. pertanyaan yang menarik.
jj33
4096 karakter adalah nama jalur helluva. Saya yakin itu bisa dinaikkan dengan kompilasi ulang, tapi jujur, / mengapa Anda membutuhkan nama path selama itu? /
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 mengarahkan ulang situs web, bukan membuat arahan ...).
jj33
@ AveryPayne Untuk menambahkan tag ke file sehingga mereka dapat dicari menggunakan sederhana locate.
Hubert Kario
3
Tidak ada cara untuk menentukan panjang maksimum lintasan di Linux dengan cara portabel. Di sistem saya:
Tapi saya dapat dengan mudah membuat jalur lebih dari 4096 karakter. Alih-alih melihat PATH_MAXsebagai batas bawah. Anda dijamin bisa membuat jalur selama ini, tetapi Anda juga bisa membuat yang lebih panjang.
Cara portabel sederhana untuk menemukan panjang maksimum secara empiris adalah menulis program yang membuat rantai direktori lebih lama dan lebih lama, dan melihat di mana ia gagal. Anda tidak akan tahu persis mengapa itu gagal (meskipun Anda akan berharap untuk pesan kesalahan yang dapat dibaca manusia sugestif) tetapi Anda akan tahu seberapa jauh Anda bisa pergi dengan aman. Ingatlah untuk memeriksa panjang direktori individual, panjang nama path relatif, dan panjang nama path absolut.
tripleee
Juga, misalnya os.pathconf()modul Python akan memiliki beberapa jawaban; jika port Python bagus, mereka harus masuk akal.
tripleee
2
Anda tidak bisa karena beberapa sistem file tidak menerapkan batasan apa pun . Akan lebih cepat gagal dengan kesalahan kehabisan memori di mana program mana pun akan kesulitan pulih.
Björn Lindqvist
Ini adalah jawaban yang benar, kecuali ini karena komentar @ BjörnLindqvist. PATH_MAX hanyalah panduan, dan 99% file mungkin berada dalam batas itu.
Rahly
1
Anda harus selalu menggunakan pathconf atau beberapa fungsi seperti ini untuk mendapatkan nilai runtime tentang item yang ditentukan, karena halaman ini mengatakan bahwa:
Perlu dicatat, bahwa banyak batas yang tercantum tidak invarian, dan pada saat runtime, nilai batas mungkin berbeda dari yang diberikan dalam header ini, karena alasan berikut:
Batasnya adalah pathname-dependent.
Batasnya berbeda antara kompilasi dan mesin runtime.
Untuk alasan ini, aplikasi dapat menggunakan fungsi fpathconf (), pathconf (), dan sysconf () untuk menentukan nilai aktual dari batas saat runtime.
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 letak salinan file ini dan nilai yang ditentukan:
Jawaban:
Lihat halaman Wikipedia tentang perbandingan sistem file , terutama di kolom Panjang nama file maksimum .
Berikut adalah beberapa batasan panjang nama file dalam sistem file populer:
sumber
Saya telah membaca di sini bahwa batas panjang jalur ada di header sistem. Batas panjang nama file juga ada di sana. Di sistem saya ini adalah file:
dan C-lang mendefinisikan:
dan lainnya.
sumber
Saya merujuk pada jawaban lain, mohon utas mereka.
Ya, panjang nama file dan nama path dibatasi oleh:
linux/limits.h
seperti yang dinyatakan oleh sfp .Untuk mendapatkan properti ini secara dinamis:
pathconf
danfpathconf
seperti yang diusulkan oleh Michael Aaron SafyanGunakan perintah
getconf
seperti yang diusulkan oleh tim yang juga tersedia di Linux:sumber
Dan demi menghemat waktu (dan menambatkannya ke memori):
ext2, ext3, ext4, zfs: tidak ada batasan pathname; Batas nama file 255 byte.
sumber
PATH_MAX = 4096
. Itu dapat dikerjakan jika program Anda dapat menggunakan jalur relatif dan Anda mengubah direktori kerja Anda terlebih dahulu.getcwd
danrealpath
(yang dapat Anda implementasikan dalam kode userspace dengan membaca metadata untuk.
dan kemudian mengubah..
dan mengulangi hingga Anda menekan root filesystem) bergantungPATH_MAX
. ( Sumber )Itu adalah panjang nama sistem file. "linux" sendiri juga memiliki beberapa. Misalnya, dari bits / stdio_lim.h:
sumber
locate
.Tidak ada cara untuk menentukan panjang maksimum lintasan di Linux dengan cara portabel. Di sistem saya:
Tapi saya dapat dengan mudah membuat jalur lebih dari 4096 karakter. Alih-alih melihat
PATH_MAX
sebagai batas bawah. Anda dijamin bisa membuat jalur selama ini, tetapi Anda juga bisa membuat yang lebih panjang.sumber
os.pathconf()
modul Python akan memiliki beberapa jawaban; jika port Python bagus, mereka harus masuk akal.Anda harus selalu menggunakan pathconf atau beberapa fungsi seperti ini untuk mendapatkan nilai runtime tentang item yang ditentukan, karena halaman ini mengatakan bahwa:
sumber
Ini ditentukan dalam file header limit.h sistem .
Ini salah satu dari file-file ini:
Di sinilah letak salinan file ini dan nilai yang ditentukan:
Keluaran:
sumber