首页 > 系统相关 >Linux 文件描述符

Linux 文件描述符

时间:2023-05-21 19:22:37浏览次数:37  
标签:文件 limits ulimit 描述符 conf Linux root

最近在复习tcp/ip知识,其中有关的一个问题 "一台服务器做多支持多少个TCP链接" 和Linux下的文件描述符有关,学习一下。

Linux中,一切设备都是文件,对文件的操作都是通过文件描述符来进行的。

文件描述符的定义:

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。

Linux中有7种文件类型:

文件类型 描述 符号
普通文件 最常使用的一类文件,其特点是不包含有文件系统信息的结构信息。这种类型的文件是按照其内部结构又可分为纯文本文件(ASCII)、二进制文件(binary)、数据格式的文件(data)、各种压缩文件。 REG (-)
目录文件 用于存放文件名以及其相关信息的文件,是内核组织文件系统的基本节点。 DIR (d)
块设备 块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。 BLK (b)
字符设备 字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。 CHR (c)
套接字 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。 SOCK(s)
管道 一种很特殊的文件,主要用于不同进程的信息传递。 FIFO (p)
链接 一种特殊文件,指向一个真实存在的文件链接,类似于Windows下的快捷方式,链接文件的不同,又可分为硬链接和软链接。 LNK (l)

最大文件描述符数量

用户级限制: ulimit -n 可以查看结果

[root@jay ~]# ulimit -n
65535

系统级限制: cat /proc/sys/fs/file-max

[root@jay ~]# cat /proc/sys/fs/file-max
363326

临时修改最大数量:

ulimit -n 20000 将最大值改为20000

  需要注意的是普通用户首次使用该命令修改最大数量后再次使用ulimit -n只能越改越小,否则报错。假设用户还没使用ulimit -n:

#第一次可以设不大于/etc/security/limits.conf的任意大小
#如果/etc/security/limits.conf没有限制该用户的大小那么第一次可以设置成任意数量
ulimit -n 2000
 
#报错 bash: ulimit: open files: cannot modify limit: Operation not permitted
ulimit -n 2000
 
#可以设为更小的
ulimit -n 1998
 
#设完更小的值之后也改不回2000了
ulimit -n 2000
#报错bash: ulimit: open files: cannot modify limit: Operation not permitted

root用户不受此限制,可以改大或改小。且root每次修改都可以比/etc/security/limits.conf里的内容大。后面内容会讲到修改/etc/security/limits.conf里的值

        此法修改大小仅对当前进程生效。重新登陆或另开进程就失效了。

永久修改文件描述符数量:

vi /etc/security/limits.conf,如果有下面两行就修改数值,没有就添加下面两行:

root hard nofile 65536
root soft nofile 65536

上述语句其实只加了root的,如果没有加用户的限制那么用户首次使用ulimit是可以打开任意数量的,可以比root的限制还要大。假定用户是user,向该文件加如下内容:

user hard nofile 2048
user soft nofile 2048

此时user首次使用ulimit修改大小就不能比2048大了。可以理解为系统自动执行一次ulimit -n 2048,因此不能比上次修改的大。 

/proc/sys/fs/file-max系统级限制:

  虽然名字叫系统级限制,但是它无法限制最大文件描述符设置的值。这个值只是系统根据内存等资源信息计算出的一个建议值。我们查看以下这个值,我这边是1603892,如果在 /etc/security/limits.conf里进行如下修改:

root hard nofile 2000000
root soft nofile 2000000

重新登陆会发现变成200万

常见误区:

综上常见误区有以下几点:

        1.虽然普通用户ulimit -n设置只能越来越小,但是root用户不受限。

        2.普通用户如果没有在limits.conf配置最大值,虽然默认是1024,但是首次使用ulimit -n可以设置任意值,即便比root配置值还大。

        3.设置完limits.conf不用重启,重新登陆该用户就行。不过重启也可以。

        4./proc/sys/fs/file-max只是一个建议值,限制不了文件描述符最大数量

标签:文件,limits,ulimit,描述符,conf,Linux,root
From: https://www.cnblogs.com/zed99/p/17419008.html

相关文章

  • Android数据储存之File文件储存数据
     一.存储在内部还是外部?AndroidManifest.xml中manifest标签下有一个属性android:installLocation,用于指定应用程序安装在什么地方,该属性有三个可选值:auto:程序可能被安装在外部存储器上,例如SD卡;但是默认会被安装到手机内存中。当手机内存为空时,程序将被安装到外部存储器上;当程序安......
  • mycat linux 搭建,分表分库,增长长插入
    下载Mycat-server-1.6.7.1-release-20200209222254-linux.tar下载地址:Mycat-server-1.6.7.1-release-20200209222254-linux.tar解压进入bin启动./mycatstart启动./mycatstop停止./mycatrestart重启mycat分库分表server.xml<?xmlversion="1.0"encoding="UTF-8&qu......
  • 转载文章:linux安装软件包
    一、安装.deb软件包sudodpkg--installXXX.deb二、rpm软件管理工具rpm-ivh软件包名-evh 软件名卸载软件-q软件名查询已安装软件-qa查询已安装的所有软件-ql软件名软件程序列表-qf文件绝对路径查询某一个文件是由哪一个包提供-uv......
  • 嵌入式linux—初级理解
    对于不使用操作系统或使用小型实时操作系统(如freeRTOS)的设备来说,与硬件相关的驱动程序与应用程序往往混合在一起,因此常常不会对驱动与应用进行严格的区分,这也导致更换硬件平台时,应用程序移植困难。1、使用了Linux系统的设备,硬件会由操作系统接管。Linux系统的一个重要设计哲学......
  • Linux:RID技术与LVM磁盘阵列技术
    RAIDRAID即独立磁盘冗余阵列,其工作原理是将多个磁盘合并成一个逻辑设备,在此基础上提供数据保护、容错和性能优化等功能。RAID0:将两个或多个磁盘组合在一起,并将数据划分为块。每个块都被分配到不同的磁盘上,从而实现并行访问,提高了读写性能。但是,RAID0没有容错机制,如果其中一个......
  • 文件上传下载
    文件上传/***文件上传*@return*/@PostMapping(value="/upload")publicStringfileUpload(@RequestParamMultipartFilefile)throwsIOException{//获取源文件名StringoriginalFilename=file.getOriginalFilename();//获取文件类型Strin......
  • 13-1 udp和internet层协议 13-2IP地址组成和分类13-4 网卡配置文件和命令 13-5 网络理
    一、查看当前机器广播的地址和mac[root@centos8~]#arp-n查看当前机器的广播地址[root@centos8~]#tcpdump-ieth0arp-nn抓包[root@centos8~]#ipaa10.0.0.100/24deveth0添加多网卡命令[root@centos8~]#arping10.0.0.100查看IP有没有被占用二、查看相关包有......
  • Linux目录下明明有可执行文件却提示找不到,“No such file or directory”
    明明一切正常,findls均可找到,权限也是777 检查文件的头部:readelf-hrepeat发现machine条目:Machine:    Intel80386问题出在了文件是32位的,但是虚拟机是64位的 如果想要运行文件,需要安装32位程序的运行架构:$sudoyuminstallxulrunner.i686$su......
  • docker 的overlayFS 文件系统
    referto:https://juejin.cn/post/7112352737051803684一、overlay相关介绍Docker 底层有三驾马车,Namespace、CGroup 和 UnionFS(联合文件系统),UnionFS 是 Docker 镜像的基础。UnionFS(联合文件系统) 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一......
  • 文件上传注入
      、 ......