文件描述符

day34-2 多路复用之epoll

。_饼干妹妹 提交于 2020-01-19 07:54:28
epoll select存在的问题 select,需要遍历socket列表,频繁的对等待队列进行添加移除操作 数据到达后还需要遍历所有的socket才能获知哪些socket有数据 两个操作消耗的时间随着要监控的socket的数量增加而大大增加,所以最大只能监视1024个socket。 于是就推出了epoll,epoll对问题一方案是把等待队列的维护与阻塞进程这两个操作分开了 对问题2是自己维护了一个等待队列,避免了遍历所有的socket。需要注意:epoll仅能在linux中使用 epoll相关函数 import select # 导入select模块 epoll = select.epoll() # 创建一个epoll对象 epoll.register(文件句柄,事件类型) # 注册要监视的文件句柄和事件 # 事件类型: select.EPOLLIN # 可读事件 select.EPOLLOUT # 可写事件 select.EPOLLERR # 错误事件 select.EPOLLHUP # 客户端断开事件 epoll.unregister(文件句柄) # 销毁文件句柄 epoll.poll(timeout) # 当文件句柄发生变化,则会以列表的形式主动报告给用户进程,timeout为超时时间,默认为-1,即一直等待直到文件句柄发生变化,如果指定为1

Linux lsof命令详解

╄→гoц情女王★ 提交于 2020-01-16 04:09:45
lsof(List Open Files) 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。 在linux环境下,任何事物都以文件的形式存在, 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(lsof强大原因) 。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因 为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 选项 1 -a:列出打开文件存在的进程; 2 -c<进程名>:列出指定进程所打开的文件; 3 -g:列出GID号进程详情; 4 -d<文件号>:列出占用该文件号的进程; 5 +d<目录>:列出目录下被打开的文件; 6 +D<目录>:递归列出目录下被打开的文件; 7 -n<目录>:列出使用NFS的文件; 8 -i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip ) 9 -p<进程号>:列出指定进程号所打开的文件; 10 -u:列出UID号进程详情; 11 -h

Linux lsof详解

与世无争的帅哥 提交于 2020-01-16 04:09:16
简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 输出信息含义 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 直接输入lsof部分输出为: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEinit 1 root cwd DIR 8,1 4096 2 /init 1 root rtd DIR 8,1 4096 2 /init 1 root txt REG 8,1 150584 654127 /sbin/initudevd 415 root 0u CHR 1,3 0t0 6254 /dev/nulludevd 415 root 1u CHR 1,3 0t0

Linux-lsof命令

穿精又带淫゛_ 提交于 2020-01-16 04:08:26
lsof,List Open Files 列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在, 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(lsof强大原因) 。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因 为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 lsof输出信息含义 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 #lsof COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root cwd DIR 3,3 1024 2 / init 1 root rtd DIR 3,3 1024 2 / init 1 root txt REG 3,3 38432 1763452 /sbin/init init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so init 1 root

突破1024个文件描述符

余生颓废 提交于 2020-01-16 03:52:16
1)使用命令 ulimit -a 查看文件描述符上限,可以看到open files 上限1024,就是文件描述符 2)通过配置文件修改文件描述符上限 Sudo vim ect/security/limits.conf 在末尾添加下面两行代码, 注销账户重启 soft nofile 8000(这个可以通过ulimit -n修改) hard nofile 8000 3)使用ulimit -n可以修改open files 上限 来源: CSDN 作者: 啊健松 链接: https://blog.csdn.net/set_jmp/article/details/103983506

Docker安全管理(实战!!!)

僤鯓⒐⒋嵵緔 提交于 2020-01-15 02:22:41
Docker安全 Docker与虚拟机的区别 隔离与共享 虚拟机通过添加 Hypervisor 层,虚拟出网卡、内存、CPU 等虚拟硬件,再在其上建立 虚拟机,每个虚拟机都有自己的系统内核 Docker 容器则是通过隔离的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU 资源等进行控制,最终让容器之间互不影响, 容器无法影响宿主机。容器与宿主机共享内核、文件系统、硬件等资源。 性能和损耗 与虚拟机相比,容器资源损耗要少。 同样的宿主机下,能够建立容器的数量要比虚拟 机多。 但是,虚拟机的安全性要比容器稍好,要从虚拟机攻破到宿主机或其他虚拟机,需要 先攻破 Hypervisor 层,这是极其困难的 而 docker 容器与宿主机共享内核、文件系统等资源, 更有可能对其他容器、宿主机产生影响。 Docker存在的安全问题 Docker自身漏洞 作为一款应用 Docker 本身实现上会有代码缺陷。CVE官方记录Docker历史版本共有超过20项漏洞。 -骇客常用的GJ手段主要有代码执行、权限提升、 信息泄露、权限绕过等。目前 Docker 版本更迭非常快,Docker 用户最好将 Docker 升级为 最新版本。 Docker源码问题 1)骇客上传恶意镜像 如果有骇客在制作的镜像中植入病毒、后门等恶意软件,那么环境从一开始就已经不安全了,后续更没有什么安全可言。 2

【Python3之常用模块】

无人久伴 提交于 2020-01-14 03:09:45
一、time 1.三种表达方式 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。命令如下: import time print(time.time())   输出 1496667277.8989 格式化的时间字符串(Format String) import time print(time.strftime("%Y-%m-%d %X")) 输出 2017-06-05 20:55:48 补充: python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X

UNIX环境高级编程 第三章 文件I/O

回眸只為那壹抹淺笑 提交于 2020-01-14 02:48:55
UNIX环境高级编程——文件I/O 3.1 文件描述符 3.2 函数open和openat 参数 path: oflag: fd: 文件名和路径名截断 3.3 函数creat 3.4 函数close 3.5 函数lseek 3.6 函数read 3.7 函数write 3.8 I/O的效率 3.9 文件共享 3.10 原子操作 函数pread和pwrite 3.11 函数dup和dup2 3.12 函数sync、fsync和fdatasync 3.13 函数fcntl 3.14 函数ioctl 3.15 /dev/fd 3.1 文件描述符 作用:唯一表示一个文件(unix中设备也被看作文件) 当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。 文件描述符的范围:0~OPEN_MAX-1 标准shell建立的文件描述符关联: STDIN_FILENO (文件描述符:0):标准输入 STDOUT_FILENO (文件描述符:1):标准输出 STDERR_FILENO (文件描述符:2):标准错误 3.2 函数open和openat 利用open或openat函数可以打开或创建一个文件 # include <fcntl.h> int open ( const char * path , int oflag , . . . . ) ; int openat ( int

socket常用函数

谁说胖子不能爱 提交于 2020-01-13 09:37:57
======== TCP ======== TCP_Server socket() bind() listen() accept() write() read() close() 和shutdown() TCP_Client socket() connect() send() 和recv() close() 和shutdown() ======== UDP ======== UDP_Server socket() bind() sendto() 和recvfrom() close() 和shutdown() UDP_Client socket() sendto() 和recvfrom() close() 和shutdown() getpeername() gethostname() -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- socket() 我们使用系统调用socket()来获得文件描述符: #include<sys/types.h> #include<sys/socket.h> int socket

linux socket 常用函数

萝らか妹 提交于 2020-01-13 02:51:39
socket() bind() connect() listen() accept() send() 和recv() sendto() 和recvfrom() close() 和shutdown() getpeername() gethostname() socket() 我们使用系统调用socket()来获得文件描述符: #include<sys/types.h> #include<sys/socket.h> int socket(int domain,int type,int protocol); 第一个参数domain设置为“AF_INET”。 第二个参数是套接口的类型:SOCK_STREAM或 SOCK_DGRAM。第三个参数设置为0。 系统调用socket()只返回一个套接口描述符,如果出错,则返回-1。 [目录] bind() 一旦你有了一个套接口以后,下一步就是把套接口绑定到本地计算机的某一个端口上。但如果你只想使用connect()则无此必要。 下面是系统调用bind()的使用方法: #include<sys/types.h> #include<sys/socket.h> intbind(int sockfd,struct sockaddr*my_addr,int addrlen); 第一个参数sockfd是由socket()调用返回的套接口文件描述符。