win7x64位环境:
260个长度是作为总的文件名长度限制。
例如: 所在文件夹的长度为50
则文件名的长度被限制在210之下,超出的话会被进行截断。
如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。
例子:
1. 我手动在C:\建立一个文件,使用280个长度进行重命名,实际生成的却是文件名是256个长度
1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklm.txt
实际生成文件名:
共计256个长度,加上”C:\”三个长度,共计259个长度,再加一个字符串结束符’\0’,正好260位长度
1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz123
2. 把这个文件往”C:\temp”目录copy的时候
报错: 文件名对目标文件夹可能过长,您可以缩短文件名并重试,或者尝试路径较短的位置。
意味着,
#!/usr/bin/python
# encoding: utf-8
import os
'''
代码仅适用于Python2版本,3版本需要改为range
'''
def file_name_max_len():
max_len = 0
try:
for i in xrange(1, 10**10):
name = "w" * i
with open(name, 'w') as ofs:
ofs.write("test" * 10)
max_len = i
os.remove(name)
except IOError as ioe:
print("Maximum length of file name is: {}".format(max_len))
def dir_name_max_len():
max_len = 0
try:
name = "w"
for i in xrange(1, 10**10):
name = "w" * i
os.mkdir(name)
os.rmdir(name)
max_len = i
except OSError as ioe:
print("Maximum length of directory name is: {}".format(max_len))
if __name__ == '__main__':
file_name_max_len()
dir_name_max_len()
以下测试都是在没有优化或修改内核的前提下测试的结果
1. 测试目的:ext3文件系统下filename最大字符长度
测试平台:RHEL5U3_x64
测试过程:
LENTH=`for i in {1..255};do for x in a;do echo -n $x;done;done`
touch $LENTH
当增加到256时,touch报错,File name too long
linux系统下ext3文件系统内给文件/目录命名,最长只能支持127个中文字符,英文则可以支持255个字符
2. 测试目的:ext3文件系统下一级子目录的个数限制
测试平台:RHEL5U3_x64
测试过程:
[root@fileserver maxdir]# for i in {1..32000};do mkdir $i;done
mkdir: cannot create directory `31999': Too many links
mkdir: cannot create directory `32000': Too many links
ext3文件系统一级子目录的个数为31998(个)。
Linux为了cpu的搜索效率而规定的,要想改变数目大概要重新编译内核.
3. 测试目的:ext3文件系统下单个目录里的最大文件数
测试平台: RHEL5U3_x64
测试过程:
单个目录下的最大文件数似乎没什么特别限制,也是受限于所在文件系统的inode数限制:
df -i或者使用tune2fs -l /dev/sdaX或者dumpe2fs -h /dev/sdaX查看可用inode数,后两个命令
输出结果是一样的,但是跟df所得出的可用inode数会有些误差,至今不明白什么原因。
网上常用两种解决办法:
1) 重新mkfs,ext3默认block大小4096 Bytes,block设置小一些inode数设置大一些
2) 使用loopback文件系统临时解决:
在/usr中(也可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个
文件系统中,并将它mount到/usr下合适的位置。这样可以大大减少你/usr中的文件数目。但是系统
性能会有点损失。
4. 测试目的: 打开文件数限制(文件句柄、文件描述符)
测试平台: RHEL5U3_x64
ulimit -n 65535设置,或者/etc/security/limit.conf里设置用户打开文件数、进程数、CPU等
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛