1.Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别
同步:
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步:
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
例如 ajax请求(异步): 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
阻塞:
阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。
有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回,它还会抢占cpu去执行其他逻辑,也会主动检测io是否准备好。
非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
再简单点理解就是:
1. 同步,就是我调用一个功能,该功能没有结束前,我死等结果。
2. 异步,就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)
3. 阻塞,就是调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。
4. 非阻塞,就是调用我(函数),我(函数)立即返回,通过select通知调用者
同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞
阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回
综上可知,同步和异步,阻塞和非阻塞,有些混用,其实它们完全不是一回事,而且它们修饰的对象也不相同。
2.Linux的常见命令(kill,find,cp等)
kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序 kill+进程号
kill 3268
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find /home -name "*.txt"
cp命令(copy)用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
cp file /usr/men/tmp/file1
3.shell脚本用法
- ls -l命令查看一个目录下的文件和子目录的详悉信息时,会得到一个详细的文件和目录名列表。这个列表包含了文件的属性,所属用户,所属组,创建时间,文件大小等等信息。例如:
-
chown:(charge owner)更改文件属主,也可以同时更改文件属组语法:
chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名
进入 /root 目录(~)将install.log的拥有者改为bin这个账号:
[root@www ~] cd ~ [root@www ~]# chown bin install.log [root@www ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
- ls:(list) 列出目录及文件名
- cd(change directory):切换目录
- pwd(Print working directory):显示目前的目录
- mkdir(make directory):创建一个新的目录
- rmdir(remove directory):删除一个空的目录
- cp(copy): 复制文件或目录
- rm(remove): 移除文件或目录
- mv(move): 移动文件与目录,或修改文件与目录的名称
4.文件权限查看
在终端输入:
ls -l xxx.xxx (xxx.xxx是文件名)查看的是xxx文件之中的文件权限
那么就会出现相类似的信息,主要都是这些:-rw-rw-r--
![]() |
一共有十位数,其中:最前面那个 - 代表的是类型
中间那三个 rw- 代表的是所有者(user)拥有的权限
然后那三个 r-- 代表的是组群(group)拥有的权限
最后那三个 r-- 代表的是其他人(other)拥有的权限
需要注意的是:查看文件权限的目录问题: 如果有文件夹 /a/b/c
那么执行 ls -l /a/b 查看权限的文件并不是b,而是查看的c的权限。
ls -l /a 查看的是b文件的权限
ls -l /a/b 查看的是c文件的权限
ls -l /a/b/c 查看的是c文件的权限
5.文件处理相关命令(grep,awk,sed等)
一、 grep文本过滤命令
-
全面搜索研究正则表达式并显示出来grep命令是一种强大的文本搜索工具,根据用户指定的”模式“对目标文本进行匹配检查,打印匹配到的行
-
由正则表达式或者字符及基本文字字符所编写的过滤条件
grep 匹配条件 处理条件
grep root passwd 搜索全文中的
root grep ^root passwd 搜索全文中以root开头的
grep root$ passwd 搜索全文中以root结尾的
grep -i root passwd 忽略大小写
grep -E "root|ROOT" passwd 同时匹配多个条件
grep -s 不显示错误信息
grep -v 反转查找
- grep root passwd 搜索全文中的 root
- grep ^root passwd 搜索全文中以root开头的
- grep root$ passwd 搜索全文中以root结尾的
- grep -i root passwd 忽略大小写
- grep -E "root|ROOT" passwd 同时匹配多个条件
- grep -s 不显示错误信息 grep -v 反转查找
^ 匹配字符串开始
$ 匹配字符串结尾
转自https://blog.csdn.net/weixin_42566251/article/details/91061436
ed 行编辑器
用来操作纯ASCII码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”可以指定仅仅处理那些行。sed符合模式条件的处理,不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕接着处理下一行,这样不断重复,直到文件末尾。
调用 sed 命令有两种形式:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
awk报告生成器
awk 处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,在命令格式上分别体现如下:
BEGIN{}:读如第一行文本之前执行,一般用来初始化操作
{}:逐行处理,主行读入文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本之后执行,一般用来输出
6.Linux监控网络带宽的命令,查看特定进程占用网络资源情况的命令
-
监控总体带宽使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload
-
监控总体带宽使用(批量式输出)――vnstat、ifstat、dstat和collectl
-
每个套接字连接的带宽使用――iftop、iptraf、tcptrack、pktstat、netwatch和trafshow
-
每个进程的带宽使用――nethogs
7.查询进程占用cpu的命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
可以直接使用top命令查看整体情况,如图:
但是这样虽然看的东西多,但是闲的比较乱,并且从如此多的内容中找到我们所需要的也较为困难,故此可以增加一些参数来优化显示结果,使之更清晰。
例如,通过ps命令我们找到所要跟踪的进程的名字和ID
在确认进程信息之后我们就可以使用top命令来进程跟踪了。这里我们要学习下top命令的参数(此处为简述,有兴趣的同学可以找专门的材料进行学习)
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
以上就是可选参数,可以根据自己的需求进行组合。我们本次要使用的参数为d和p,使用d设置一个刷新时间,使用p来确定要看那些进程。