cat a.txt b.txt | grep string
netstat
ps -ef
vi 文件名 #编辑方式查看,可修改 cat 文件名 #显示全部文件内容 more 文件名 #分页显示文件内容 less 文件名 #与 more 相似,更好的是可以往前翻页 tail 文件名 #仅查看尾部,还可以指定行数 head 文件名 #仅查看头部,还可以指定行数
cp -r
rm -r
wc 命令 - c 统计字节数 - l 统计行数 - w 统计字数。
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
job -l
kill -9 pid
find、whereis、locate等等
history
df -hl Size(总空间) Used(已用) Avail(可用) Use%(使用百分比) Mounted on(挂载区)
cat a.txt | more
IO多路复用的目的就是为了设计一个高性能的网络服务器,可供多个客户端去连接。之所以我们不用多线程的方式去设计是因为多线程环境下的上下文切换带来的消耗也是很大的。
在Linux系统中,一切都是文件,每一个网络连接(socket)在内核中都是以文件描述符(fd)
的形式存放。
select实现IO多路复用的实现方式
#select函数实现
使用 fd_set 实现,里面装的是文件描述符,大小限制为 1024bit
select()函数会将 fd_set 数组从用户态一次性的拷入内核态,交由内核处理会大大提升效率
当有数据到达一个描述符时,select函数会返回(在此之前是阻塞的)
然后遍历 fd_set 找到那个有数据到达的文件描述符 O(n)的时间复杂度获取到相关描述符。
缺点:
1、fd_set 不可重用
2、用户态到内核态数据拷贝的开销
3、O(n)时间复杂度的轮询
epoll
实现IO多路复用的实现方式
// epoll函数实现
epoll_create() 创建一个白板(是一块用户态和内核态共享的一块内存空间)存放fd_events
epoll_ctl() 用于向内核注册新的描述符或者是改变某个文件描述符的状态。已注册的描述符在内核中会被维护在一棵红黑树上。
epoll_wait 通过回调函数内核会将 I/O 准备好的描述符加入到一个链表中管理,进程调用 epoll_wait() 便可以得到事件完成的描述符 O(1)的时间复杂度获取到相关描述符。
优点:
完全解决了select的所有问题。
epoll支持两种触发模式:
LT:水平触发
当 epoll_wait()
检测到描述符事件到达时,将此事件通知进程,进程可以不立即处理该事件,下次调用 epoll_wait()
会再次通知进程。是默认的一种模式,并且同时支持 Blocking 和 No-Blocking。
ET:边缘触发
和 LT 模式不同的是,通知之后进程必须立即处理事件。
下次再调用 epoll_wait() 时不会再得到事件到达的通知。很大程度上减少了 epoll 事件被重复触发的次数,
因此效率要比 LT 模式高。只支持 No-Blocking,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。
cat miaoshalog | wc -w failperson
netstat