Linux 下的0 1 2特殊文件描述符~
最近在做项目的时候遇到的几个知识点,我觉得非常有意思,以前学Linux的时候也有接触到管道方面的,但是在应用中却基本没有遇到过。
还有Linux下的几个特殊的文件描述符,用这几个文件描述符可以做很多事情,能做什么事情决定你自己的本事了。
#Linux下的 0 1 2文件描述符
1 是标准输出(stdout)
2 是标准错误输出(stderr)
0 是标准输入(stdin)
第一个
但是我们使用的时候,我们会把这样使用 1> 两个符号连着一起,而且呢,1和>符号之间不能有空格,有空格和没有空格就是两回事了。
如下,把标准输出结果重定向到 list.txt文件里面。
linux@ubuntu:~$ ls 1>list.txt
linux@ubuntu:~$ cat list.txt
Desktop
Documents
Downloads
examples.desktop
Music
Pictures
Public
Templates
Videos
linux@ubuntu:~$
第二个
把标准错误输出重定向到list文件里面,但是我们就简单执行ls,所以没有错误,当我们执行cat的时候,自然就是没有任何输出了。
linux@ubuntu:~$ ls 2>list.txt
Documents examples.desktop linux-device-driver Pictures Videos
Desktop Downloads Music Public Templates vmwaretools
linux@ubuntu:~$ cat list.txt
linux@ubuntu:~$
第三个
&是不是很像取地址符号,我们往标准输入 echo 一个字符串,然后屏幕就打印了这个字符串出来。就是这么简单,就是这么讲道理。
linux@ubuntu:~$ echo "1212" >&0
1212
linux@ubuntu:~$
#简单的应用
我们在Linux下,经常用到find 这个指令,如果find的时候,如果find某些文件夹没有权限的话,就会提示一些错误。让你看到输出很恶心。比如
linux@ubuntu:~$ find /etc -iname "*.service"
find: `/etc/ssl/private': Permission denied
find: `/etc/vmware-tools/GuestProxyData/trusted': Permission denied
/etc/systemd/system/multi-user.target.wants/rsyslog.service
find: `/etc/cups/ssl': Permission denied
/etc/avahi/services/udisks.service
linux@ubuntu:~$
我们要是只想看到正确的输出,把错误的输出都扔进垃圾桶,应该怎么做呢?
linux@ubuntu:~$ find /etc -iname "*.service" 2>/dev/null
/etc/systemd/system/multi-user.target.wants/rsyslog.service
/etc/avahi/services/udisks.service
linux@ubuntu:~$
这样看起来是不是很舒服了?
免费再赠送一个例子,我们在Android设备里面经常需要find一些东西。
RK3399:/ # find / -iname "*.rc"
find: /proc/2/task/2/exe: No such file or directory
find: /proc/2/exe: No such file or directory
find: /proc/3/task/3/exe: No such file or directory
find: /proc/3/exe: No such file or directory
我们换个写法,就会发现不一样的世界
RK3399:/ # find / -iname "*.rc" 2> /dev/null
/init.recovery.mt8167.rc
/init.usb.rc
/init.environ.rc
/vendor/etc/init/muxreport.rc
/vendor/etc/init/android.hardware.audio@4.0-service-mediatek.rc
这样的输出是不是让你觉得非常爽,是的,这样的输出让我也觉得非常爽。
#/dev/null
我们在上面已经用了 /dev/null ,现在来剖析一下。
这个东东有意思,如果我们有一些输出不想看到,就重定向到这里,这个就好像一个能吸纳所有东西的无底洞一样。非常有意思。
如果我们当前没有一个文件
linux@ubuntu:~$ ls 1212.txt
ls: cannot access 1212.txt: No such file or directory
linux@ubuntu:~$
这时候就会提示没有这个文件,如果我们不想看到这个恶心的输出,可以这样做
linux@ubuntu:~$ ls 1212.txt 2>/dev/null
linux@ubuntu:~$
作用就是把 stderr 输出到 /dev/null 这个垃圾桶里面。
#2>&1
对于2>&1的理解,2就是标准错误,1是标准输出,那么这条命令不就是相当于把标准错误重定向到标准输出么?
是的。为什么是&1而不是1,这里& 符号是什么?& 符号可以理解为引用(reference)。&1 就是对标准输出的引用。「我觉得可以理解为我们C语言里面的取地址符号,拿到标准输出的地址,往地址里面灌什么,标准输出就会给你输出什么」
#后台运行指令
##nohup
nohup 指的是把命令放后台运行,并且不挂断的运行,他会把输出默认定向到文件nohup.out中。
##&
这个指令指的是在后台运行。
## 实例
我们两个指令一起使用试试
weiqifa@bsp-ubuntu1804:~/sdk$ nohup make -j128&
[1] 22928
weiqifa@bsp-ubuntu1804:~/sdk$ nohup: ignoring input and appending output to 'nohup.out'
weiqifa@bsp-ubuntu1804:~/sdk$
然后过了一下看看
weiqifa@bsp-ubuntu1804:~/em_mt8167s-9.0-sdk$ cat nohup.out
wildcard(out/target/product/em_t6230_p4mme/*-verified.*) was changed, regenerating...
[1/953] including out/soong/Android-full_em_t6230_p4mme.mk ...
[2/953] including art/Android.mk ...
[3/953] including bionic/Android.mk ...
[4/953] including bootable/recovery/Android.mk ...
[5/953] including build/make/Android.mk ...
[6/953] including ccu_tool/Android.mk ...
[7/953] including cts/Android.mk ...
weiqifa@bsp-ubuntu1804:~/em_mt8167s-9.0-sdk$
看看后台进程
weiqifa@bsp-ubuntu1804:~/sdk$ ps -ef |grep make
weiqifa 22928 22616 0 04:50 pts/6 00:00:00 make -j128
weiqifa 22930 22928 0 04:50 pts/6 00:00:00 prebuilts/build-tools/linux-x86/bin/makeparallel --ninja build/soong/soong_ui.bash --make-mode
weiqifa 22931 22930 6 04:50 pts/6 00:00:05 /home/weiqifa/em_mt8167s-9.0-sdk/out/soong_ui -j128 --make-mode
weiqifa 29017 22616 0 04:52 pts/6 00:00:00 grep --color=auto make
weiqifa@bsp-ubuntu1804:~/sdk$
##tail -f
weiqifa@bsp-ubuntu1804:~/em_mt8167s-9.0-sdk$ tail -f nohup.out
out/target/product/em_t6230_p4mme/obj/PACKAGING/systemimage_intermediates/system.img
[100% 39/39] Install system fs image: out/target/product/em_t6230_p4mme/system.img
^C
weiqifa@bsp-ubuntu1804:~/em_mt8167s-9.0-sdk$
Linux 下的0 1 2特殊文件描述符~相关推荐
- 嵌入式Linux系统编程学习之九基于文件描述符的文件操作
文章目录 前言 一.文件描述符 二.打开.创建和关闭文件 三.读写文件 四.改变文件大小 五.文件定位 六.原子操作 七.进一步理解文件描述符 八.文件描述符的复制 九.文件的锁定 十.获取文件信息 ...
- Linux中的进程、线程和文件描述符
说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案: 在 Linux 系统中,进程和线程几乎没有区别 . Linux 中的进程就是一个数据结构,看明白就可以理解文件描述符.重定向 ...
- Linux操作系统~系统文件IO,什么是文件描述符fd?什么是vfs虚拟文件系统
目录 1.open() (1).第二个参数flags-通过比特位传多组标记 2.文件描述符fd(open函数的返回值) (1).fd的本质 (2).vfs-虚拟文件系统(一切皆文件) (3).调用re ...
- 文件描述符与文件句柄
在我们日常编程中经常会遇到文件描述符(file descriptor)和文件句柄(file handler)这两个概念,特别是需要开发跨平台(跨windows和linux)项目的时候会被这两个概念搞得 ...
- Linux下的文件描述符
引文 在 Linux 的世界里,一切设备皆文件.对文件的操作都是通过文件描述符(fd)来进行的. Linux 中有7种文件类型: 文件类型 文件类型描述 符号 普通文件 最常使用的一类文件,其特点是不 ...
- Linux系统学习笔记:文件描述符标志
文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec ...
- [转帖]linux文件描述符文件/etc/security/limits.conf
linux文件描述符文件/etc/security/limits.conf https://blog.csdn.net/fanren224/article/details/79971359 需要多学习 ...
- Linux 进程间传递文件描述符
文章目录 文件描述符 文件数据结构 共享文件 UNIX域socket实现传递文件描述符 进程间传递打开的文件描述符,并不是传递文件描述符的值.先说一下文件描述符. 文件描述符 对内核来说,所有打开的文 ...
- Linux网络编程(六)-高并发服务器03-I/O多路复用03:epoll【红黑树;根节点为监听节点】【无宏FD_SETSIZE限制;不需每次都将要监听的文件描述符从应用层拷贝到内核;不需遍历树】
一.epoll概述 epoll的本质是一个[红黑树].监听结点为根节点. 大量并发,少量活跃效率高. epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并 ...
最新文章
- ubuntu下修改文件权限
- Windows上创建文件夹链接
- Gym 100431E	Word Cover 题解:KMP上跑dp
- Python多线程详解
- XML Schema 基本结构
- 自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。
- 快手基于 Apache Flink 的优化实践
- dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存
- springboot使用JSR303对数据进行校验
- Griffon 1.1 发布,Groovy 开发框架
- 二、Linux常用命令——文件处理命令
- ChartDirector画2D,3D图,MFC画图
- Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
- JavaScript基础视频教程总结(011-020章)
- LCD1602的四线驱动
- java分布式特点_java分布式架构是什么?分布式架构的优缺点有哪些?
- 钉钉小程序内嵌web网页
- 多种汉语方言语音落地应用,微软智能语音解锁更多交互场景
- 知名学者,全职加盟C9高校!
- 微信小程序app.json全局配置项
热门文章
- 教程-Delphi第三方控件安装卸载指南
- Javascript中call函数和apply函数的使用
- 流媒体服务器搭建实例——可实现录音,录像功能
- 两招让陌生网络访问者现出原形
- 抢占式和非抢占式的进程调度
- Python面试题总结(9)--高级特性
- Diango博客--15.通过 Django Pagination 实现简单分页(一)
- Flask爱家租房--发布新房源(总结)
- esrgan_ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks【阅读笔记】
- python剑指offer替换空格_迷人的算法-剑指offer面试题5:替换空格