【知识积累】大数据旅程-Linux 文本流&重定向

重定向:不是命令
程序自身独有I/O

  • 0:标准输入
  • 1:标准输出
  • 2:错误输出

控制程序I/O位置
一切皆文件

  • /proc/$$/fd

程序是否处理I/O
绑定顺序:从左到右


cd /proc/$$/fd

【知识积累】大数据旅程-Linux 文本流&重定向
ps -fe | grep nginx
nginx:有master和worker(工作进程)两个进程
cd /proc/nginxPID/fd

【知识积累】大数据旅程-Linux 文本流&重定向
1、重定向操作符前面是命令的文件描述符
2、重定向操作符和文件描述符不能有空格


ls -l / 1> ls.txt:将ls -l /输出的根目录输出到ls.txt文件中
1:标准输出
>:重定向操作符(覆盖原内容)

【知识积累】大数据旅程-Linux 文本流&重定向
ls -l /etc 1>> ls.txt
>>:重定向操作符(追加在原内容后面)

【知识积累】大数据旅程-Linux 文本流&重定向
ls -l /god 1> ls2.txt:根目录下不存在god目录,所以会有错误输出,1是正确输出,2才是错误输出。
ls -l /god 2> ls2.txt

【知识积累】大数据旅程-Linux 文本流&重定向
ls -l / /god 1>ls3.txt 2>ls4.txt:将正确输出和错误输出写到不同文件
ls -l / /god 1>>ls5.txt 2>>ls5.txt:将正确输出和错误输出写到同一文件

【知识积累】大数据旅程-Linux 文本流&重定向
一个程序的文件描述符可以互相指向(从左到右绑定)
ls -l / /god 2>& 1 1>ls6.txt:1无法绑定ls6.txt文件
ls -l / /god 1>ls6.txt 2>& 1

【知识积累】大数据旅程-Linux 文本流&重定向
ls -l / /god >& ls08.txt(ls -l / /god &> ls08.txt):合并标准和错误输出到一个文件(特殊写法)

【知识积累】大数据旅程-Linux 文本流&重定向

history:以前输入的命令


将123456赋值给a(换行符结束读取流)
read a
123456
echo $a

【知识积累】大数据旅程-Linux 文本流&重定向
将一个字符串放入一个程序的输入流
read b 0<<<"hello"
echo $b

【知识积累】大数据旅程-Linux 文本流&重定向
当内容输入OOXX时,结束输入,当输入完abc后,输入了换行符,所以结束读取流,只能读取第一行
read c 0<<OOXX
abc
bac
cab
OOXX
echo $c

【知识积累】大数据旅程-Linux 文本流&重定向
vi a.txt
echo "hello"
echo "nihao"
echo "byebye"
ls
cat 0<<OOXX
hello
nihao
byebye
OOXX
source a.txt

【知识积累】大数据旅程-Linux 文本流&重定向
一个小于号后面接文件
cat 0< a.txt

【知识积累】大数据旅程-Linux 文本流&重定向
type exec
help exec …… replace the shell with the given command:使用命令来替换一个shell

【知识积累】大数据旅程-Linux 文本流&重定向
exec ls -l
bash是一个软件,软件是一个进程,进程在内存中会有堆栈、二进制代码段等。
栈,cpu进行压栈出栈,exec是当前bash的内部命令,执行exec ls -l时,其实是从磁盘当中把ls的二进制代码段覆盖原来的二进制代码段区域,对ls进行压栈,最后退出,进行出栈,cpu执行,销毁了程序。

【知识积累】大数据旅程-Linux 文本流&重定向
exec 8<> /dev/tcp/www.baidu.com/80
触发内核对百度打开一个socket连接
cd /proc/$$/fd
ll

【知识积累】大数据旅程-Linux 文本流&重定向
echo -e "GET / HTTP/1.0\n"
echo -e "GET / HTTP/1.0\n" 1>&8:向百度发起请求(参数e支持换行符)
cat 0<&8:读取百度的响应

【知识积累】大数据旅程-Linux 文本流&重定向