Linux重定向笔记

简介: Linux重定向笔记

前言

这部分知识几度学习几度忘却,还是需要总结梳理才能真正领会。

后台运行的脚本

重定向使用比较多的还是在我们去后台运行一个程序说起,比如这下面的操作

apps@PC-zhuxuemin:~/xuemin$ nohup ./callsystem >/dev/null  2>& 1 &
[1] 3923

后台执行的地方我都记得住,主要是很多次2>& 1学会又忘记,这次围绕这个知识点进行总

箭头指向

linux一大哲学便是一切皆文件,数据输入输出则被定义为流,我们的程序就像自来水工厂一样对数据进行加工,处理好的水则对外输出。< 则是代表读取的数据源,> 则是输出目的地。linux中每个程序都有标准的输入和输出流,标准输入则是我们的键盘,标准输出就是我们的控制台。

ls输出到控制台

cat可以从文件读取,输出到控制台

默认状态下我们也没有去深究,但是这个状态其实是可以被我们去改变的

比如:

ll >ls.log
read  < ls.log  a
echo $a

read 则从一个文件中读取数据,然后结果给变量a

文件描述符

linux文件中描述符file description其实是一个结构体,是对文件的引用,说白了其实就是定义一个变量,然后我们访问变量可以读到内容。

使用exec可以绑定一个文件到 文件描述符中,比如还是刚才的文件:

echo "lslog里面内容" >ls.log
exec  5< ls.log
cat <& 5

我们这样就绑定了5变量,箭头<还是读取的意思,所以原来我们需要读取ls.log的写法就可以变成使用变量去读取了

看到效果其实是一样的,这里有个相当于使用变量的语法 <& 代表引用文件描述符,后面便是编号,其实反过来理解,如果直接去的&则会把5当成普通文件去读取,不就产生歧义了嘛!

lsof查看文件描述符

lsof是列出打开文件(lists openfiles)的意思,后面接进程号即可,另外$$在linux可以拿到当前bash的进程号,我们可以组合使用去查看我们定义的文件描述符:

lsof -p $$

我们可以看到红色部分有个5,其实那个就是我们变量名字啦,另外顺带看到下面有我们的0 1 2其实就是默认给我们带的,这也是为啥我们可以去使用 >& 2 类似这种操作的原因了,具体是表示啥呢,其实都有直接规定的,我们通过/dev下面可以看到绑定的情况:

ls -l /dev

还是一切皆文件,proc下面是linux进程信息的映射,我们切可以看到2 0 1指向的变量,分别就是标准错误输出,标准输入和标准输出,就是我们的控制台和键盘。

不仅如此,其实我们要建立外部链接也是可以的

exec 7<> /dev/tcp/www.baidu.com/80

系统会显示TCP的连接类型了

重定向的变量覆盖问题

回到最开始的脚本

nohup ./callsystem >/dev/null  2>& 1 &

其实这里还有个坑,如果我们写成

nohup ./callsystem  2>& 1 1>/dev/null &

这样子是有问题的,这个从程序理解可以比较方便,2>&1 其实是会把2赋值给1指向的实际内容,已经是控制台了,那么后面的覆盖1>/dev/null不会再对2起作用了

目录
相关文章
|
1月前
|
Linux API 调度
技术笔记:Linux内核跟踪和性能分析
技术笔记:Linux内核跟踪和性能分析
|
1月前
|
算法 Linux 编译器
技术笔记:LINUX2.6.32下的进程分析
技术笔记:LINUX2.6.32下的进程分析
12 0
|
14天前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
31 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
21天前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
34 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
|
15天前
|
Linux 数据处理 C语言
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
28 0
|
1月前
|
编解码 Linux
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
XviD是开源的MPEG-4视频编解码器,曾与DivX一起用于早期MP4视频编码,但现在已被H.264取代。要集成XviD到Linux上的FFmpeg,首先下载源码,解压后配置并编译安装libxvid。接着,在FFmpeg源码目录中,重新配置FFmpeg以启用libxvid,然后编译并安装。成功后,通过`ffmpeg -version`检查是否启用libxvid。详细步骤包括下载、解压libxvid,使用`configure`和`make`命令安装,以及更新FFmpeg配置并安装。
44 2
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
|
29天前
|
Unix Shell Linux
技术笔记:linux中SIGHUP与nohup的关系
技术笔记:linux中SIGHUP与nohup的关系
17 1
|
1月前
|
存储 编解码 Ubuntu
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
|
15天前
|
Linux C语言 C++
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(上)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(上)
23 0
|
1月前
|
SQL Linux 数据库
Linux上sqlite的安装和使用方法以及在QT中如何使用sqlite&笔记总结
Linux上sqlite的安装和使用方法以及在QT中如何使用sqlite&笔记总结