后面也会持续更新,学到新东西会在其中补充。
建议按顺序食用,欢迎批评或者交流!
缺什么东西欢迎评论!我都会及时修改的!
在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频
标准输入和输出
程序(应用程序):指令+数据
读入数据:Input
输出数据:Output
Linux中一切皆文件,操作输入输出都是所谓的文件,文件表现为每打开一个文件,系统会分配一个数字,这个数字代表一个文件,这个数字叫做文件描述符(file descriptor)
每一个程序由于通常都是需要处理数据的,输入,输出,错误三种信息
一切皆文件,所以输入输出错误对应的都有一个文件描述符。
在Linux中是固定的一个数字 标准输入 0 标准输出 1 标准错误 2
应用程序1-4都有输入,输出,错误
当每打开文件,系统就会分配打开这个文件唯一的文件描述符。
只有三个(0 1 2)打开的文件的文件描述符是固定的分配给当前程序对应的输入0输出1错误2
至于其他文件打开,描述符就是随机的。
通过proc 目录可以观察到这个程序所对应的内存信息
这里是windows中的
定位程序真正位置
ps aux
第二列为pid
1983文件夹里面存放着关于正在运行的tail命令详细命令
程序打开了哪些文件
[root@study fd]# ll
total 0
lrwx------. 1 root root 64 Nov 6 06:57 0 -> /dev/pts/1 标准输入
lrwx------. 1 root root 64 Nov 6 06:57 1 -> /dev/pts/1 标准输出
lrwx------. 1 root root 64 Nov 6 06:56 2 -> /dev/pts/1 标准错误
lr-x------. 1 root root 64 Nov 6 06:57 3 -> /root/anaconda-ks.cfg
0 1 2是用来实现标准输入 标准输出 标准错误三个固定的文件描述符
3 就是正在打开的文件 程序一打开文件 系统自动分配文件描述符 除了0 1 2是固定的
0 1 2是文件描述符本质就是软链接指向的是当前终端窗口
shell的pid
当前窗口也是在一个进程(程序)里面 也就是shell 登录的时候就会在内存中开启一个shell
因为开了三个窗口所以有三个shell
把0 1 2都映射成当前的终端设备终端窗口
输入输出错误 都是通过当前终端窗口来实现输入输出错误,每个窗口有自己的输入输出错误。
ll /proc/$$/fd 就是显示当前shell的文件描述符
tty是显示当前终端窗口
输入输出错误都靠当前终端窗口
stdin 标准输入 stderr 标准错误 stdout 标准输出 self对应当前的进程编号
ll /proc/self -d 显示当前的进程编号
会发现进程编号2172 没有 因为ll程序已经结束了 ll命令执行的时候 瞬间系统分配一个进程编号,ll命令不是持续运行的,运行完就退出了在proc下面就看不见2172。
每个程序运行系统都会分配一个所谓的进程编号,并且对应的有一个固定的三个文件描述符。
输入:默认接受来自终端窗口的输入 输出:默认输出到终端窗口 错误:默认输出到终端窗口
I/O重定向redirect
1> == > | 把STDOUT重定向到文件 1> 1代表标准输出 |
2> | 2 代表标准错误 把标准错误重定向到文件 |
&> | 把所有输出重定向到文件 |
stdout(标准输出)和stderr(标准错误)可以重定向到指定文件,而非默认的当前终端。
将标准输出输出到别的地方
标准输出就是ll等等命令 输出本来是输出到当前终端窗口 但是重定向到其他终端