linux文件名长度限制6,linux和windows文件名长度限制问题

文件名和目录名在操作系统中都有最大长度的限制,而且不同系统中的最大长度不同。

这些限制在Linux系统下可以通过修改系统内核修改这个限制。

Linux文件名的长度限制是255个字符

windows下完全限定文件名必须少于260个字符,目录名必须小于248个字符。

win7x64位环境:

260个长度是作为总的文件名长度限制。

例如:所在文件夹的长度为50

则文件名的长度被限制在210之下,超出的话会被进行截断。

如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。

例子:

1.       我手动在C:\建立一个文件,使用280个长度进行重命名,实际生成的却是文件名是256个长度

1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklm.txt

实际生成文件名:

共计256个长度,加上”C:\”三个长度,共计259个长度,再加一个字符串结束符’\0’,正好260位长度

1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz123

2.       把这个文件往”C:\temp”目录copy的时候

报错:文件名对目标文件夹可能过长,您可以缩短文件名并重试,或者尝试路径较短的位置。

意味着,

要么我们把文件名改短一些,

要么copy的目录长度短一些,例如向”D:\”复制就没会有问题。

结论:

Linux文件名的长度限制是255个字符(Byte)。

windows下完全限定文件名必须少于260个字符,目录名必须小于248个字符。

执行代码如下:

#!/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()

Linux下执行结果为:

$ python name_len_test.py

Maximum length of file name is: 255

Maximum length of directory name is: 255

以下测试都是在没有优化或修改内核的前提下测试的结果

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等

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值