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$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻防比赛_2020年度泉州市大学生网络安全攻防比赛在黎明职业大学圆满落幕

10月16日下午,作为2020年国家网络安全宣传周泉州市系列活动之一,“泉州市大学生网络安全攻防比赛”在黎明职业大学智慧教学中心成功举办并圆满落幕。此次比赛由泉州市互联网信息办公室、泉州市教育局主办,黎明职业大学和泉州市网络与信息安全…

17-9--18:了解Linux的命令格式,今天复习的已知命令和新命令

熟悉的命令: cp -r 需要复制的文件夹 复制文件夹到指定文件夹 复制文件夹到文件夹、复制文件到文件夹 cat 需要复制的文件 > > 复制到指定文件 复…

gitlab 如何关闭force push

把不允许force push的分支设置成保护分支,Push的时候就会提示不能force psuh。

camera中文版软件 ip_ip camera网络摄像机

IP Camera Viewer是一个方便可靠能够通过IP地址监控多台摄像头的软件。 需要的朋友们赶紧下载试试吧!你可以在几分钟之内设置一个免费的IP摄像监控系统, 保持在家里,办公室,停车场或任何地方,你都可以监控。同时查看多…

Ubuntu16.04通过GPT挂载硬盘

一般而言,服务器上挂载的硬盘都是比较大的,传统的对硬盘进行分区需要在终端敲sudo fdisk进行操作,但是, 当挂载的硬盘的容量大于2T的时候,是无法通过sudo fdisk进行挂载的,这个时候必须要进行GPT进行挂载&a…

Mplayer后台播放没有声音

昨天的文章,我觉得虽然不是很复杂,但是我自认为很多人应该是不懂的,不过好像阅读量不是很好,今天转发我师弟的一篇文章,我觉得这个也是大家没有注意到的。Linux 下的0 1 2特殊文件描述符~一、平台Ubuntu16.04(64位)二、…

python输出程序运行时间_叨叨 Python 性能优化工具

虽然Python是一个”慢慢的“语言,但是不代表我们对性能没有任何的追求,在程序运行过程中,如果发现程序运行时间太长或者内存占用过大,免不了需要对程序的执行过程进行一些监测,找到有问题的地方,进行优化。…

链接学习之obj文件探索

Windows的gcc环境,往官网http://sourceforge.net/project/showfiles.php?group_id2435 下载MinGW,安装,安装完毕后按照包 配置环境变量 a.在PATH的值中加入"C:\Program Files\MinGWStudio\MinGW\bin"。这是寻找gcc编译器的路径。…

跳槽并不能解决问题

周末了,聊点和离职相关的事情,上周应该有不下5个人跟我谈到跳槽离职的事,每个人的情况都有点不同,每个人我都认真给了回复,总结一下,希望大家对自己的职场有比较明确的规划,跳槽肯定是为了涨薪水…

http 请求默认时间_JMeter接口测试之HTTP请求默认值

不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能力,是基本技能。这些公共数据就包含了测试地址,以及登录的账号密码…

【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP

【BZOJ1880】[Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间。Elaxia和w**每天都要奔波于宿舍和实验室之间,他…

有意思的select~

前言最近在写一个小程序,也就是简单的系统调用,但是神奇的是,我用的这个系统调用刚好就阻塞了。如果你也写过应用程序,肯定也会遇到过这样的问题。后来,发现了select这个好东西,可以用来监听文件描述。sele…

cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例

开发环境准备利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React、Vue、AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍。本次开发环境是基于Vue搭建的,需要安装(部署)的软件主要包括…

Android基础字符串String.md

问题抛出 String这个常量在我们代码中会经常被用到,那么我们了解 String stringbuffer StringBudilder三者之间的区别吗 问题解答 String 字符串常量,位于常量池stringbuffer 字符串变量 不同步适用于单线程 位于字符串缓冲区StringBudilder字符串变量 同步适用于多线程 位于字…

一个单片机ADC的挖坑填坑之旅

[导读] 本文来解析一个盆友在使用STM32采集电池电压踩过的坑。以STM32F4 的ADC属于逐次逼近SAR 型ADC为例进行分析,参考STM32F405xx Datasheet,对于如何编写ADC程序就不做描述了。先描述一下坑 采集电池电压,利用两个电阻将电池电压分压&…

centos mysql.tar.gz_centos7.2 mysql tar.gz 搭建 (亲测成功)

1、安装依赖:yum -y install libaioyum search libaio2、卸载系统自带的Mariadb数据库:rpm -qa | grep mariadbrpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64rpm -qa | grep mariadb3、创建mysql用户组和mysql用户groupadd mysqluseradd -g …

of_property_read_string 剖析~

前言今天在一个群里面看到的一个朋友提交,说of_property_read_string 这个函数有两个定义,到底是用了哪个呢?所以这篇文章就说下这个函数。函数引用的头文件引用的头文件位置在\kernel-4.4\include\linux\of.h其中一个是extern int of_proper…

欧几里得算法扩展欧几里得算法

欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 基本算法:设aqbr,其中a,b,q,r都是整数,则gcd(a,b)gcd(b,r),即gcd(a,b)gcd(b,a%b)。 第一种证…

mysql查询没有权限试图_MySQL迁移后提示查询view权限不足的处理

一.问题描述:开发人员反应xx物流系统mysql查询视图提示权限不足,请DBA介入处理.MariaDB [abc]> select * from c_time;ERROR 1045 (28000): Access denied for user lsa% (using password: YES)版本:mariadb 10.1.18 for centos 6.6二.问题分析&#…

CPU频率和核心

设置CPU的核心数在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心,如果是四核,就是cpu0,cpu1,cpu2,cpu3 4个文件夹。cpu0 常开。进一个其他文件夹,比如cpu1,里面有个online文件用cat命令查看该文…