2019-05-29 16:02:32 zhangpeterx 阅读数 492
  • python全栈开发devops方向初到

    课程包含前端后端由浅入深,所有的课程全程以项目开发为主线进行讲解,作业题紧跟项目开发,让大家学完后,能够迅速巩固,大大降低了大学学习语法的时间。课程内容耗时一年精心准备,经过精编,单节课课时一般在15-30分钟。 包含项目:一共4个项目(用户系统 cmdb ansible任务管理系统 项目发布系统),并包含源码。

    3973 人正在学习 去看看 李哲

早上在使用htop查看系统情况时,发现了占用率最高的命令如下:

java -jar test.jar /dev/fd/63 2/dev/fd/62

但我运行时输入的命令是这样的:

java -jar test.jar >(tee -a stdout.log) 2>(tee -a stderr.log >&2)

可以参考我的这篇文章:Linux下使用tee既在屏幕上显示输出,又把输出写进文件

这就涉及到了/dev/fd/的内容了。


/dev/fd是Linux的一个特性,其中/dev/fd/0是指标准输入(STDIN),/dev/fd/1是指标准输出(STDOUT)/dev/fd/2是指错误输出(STDERR),每个进程都有自己的/dev/fd/

更多内容参考这个网站:ls - Something’s special about /dev/fd/3


在终端中对/dev/fd/进行ls:

-> # ls -l /dev/fd
lrwxrwxrwx 1 root root 13 Nov 22  2018 /dev/fd -> /proc/self/fd

根据我的观察,这里的时间是Linux系统开机的时间,我的这台机器已经188天没关机了。

然后继续进行查看:

-> # ls -l /proc/self/fd
total 0
lrwx------ 1 root root 64 May 29 15:37 0 -> /dev/pts/0
lrwx------ 1 root root 64 May 29 15:37 1 -> /dev/pts/0
lrwx------ 1 root root 64 May 29 15:37 2 -> /dev/pts/0
lr-x------ 1 root root 64 May 29 15:37 3 -> /proc/20125/fd

这里可以看出STDIN,STDOUT,STDERR都指向了终端。

2014-01-16 21:26:28 u013248470 阅读数 341
  • python全栈开发devops方向初到

    课程包含前端后端由浅入深,所有的课程全程以项目开发为主线进行讲解,作业题紧跟项目开发,让大家学完后,能够迅速巩固,大大降低了大学学习语法的时间。课程内容耗时一年精心准备,经过精编,单节课课时一般在15-30分钟。 包含项目:一共4个项目(用户系统 cmdb ansible任务管理系统 项目发布系统),并包含源码。

    3973 人正在学习 去看看 李哲

来自鸟哥的Linux私房菜 http://linux.vbird.org/linux_basic/0580backup.php


光碟機: /dev/cdrom (其實應該是 /dev/sdX 或 /dev/hdX)
磁帶機: /dev/st0 (SCSI 介面), /dev/ht0 (IDE 介面)
軟碟機: /dev/fd0, /dev/fd1
硬碟機: /dev/hd[a-d][1-63] (IDE), /dev/sd[a-p][1-16] (SCSI/SATA)
外接式 USB 硬碟機: /dev/sd[a-p][1-16] (與 SCSI 相同)
印表機: /dev/lp[0-2]

2018-06-11 16:56:03 wlli1985 阅读数 277
  • python全栈开发devops方向初到

    课程包含前端后端由浅入深,所有的课程全程以项目开发为主线进行讲解,作业题紧跟项目开发,让大家学完后,能够迅速巩固,大大降低了大学学习语法的时间。课程内容耗时一年精心准备,经过精编,单节课课时一般在15-30分钟。 包含项目:一共4个项目(用户系统 cmdb ansible任务管理系统 项目发布系统),并包含源码。

    3973 人正在学习 去看看 李哲

    我们一般通过dup()和dup2()函数来复制文件描述符,现在介绍另外一种方法:

    linux系统下提供了名为/dev/fd的目录,其下有0、1、2等文件,打开文件/dev/fd/n等效于复制描述符n。

    先观察一下/dev/fd这个目录:

    

    可以看到包含了标准输入(0),标准输出(1),标准错误(2)及当前可用文件描述符中的最小值(3)。

    以下代码测试了用打开/dev/fd/n来复制文件描述符n的功能:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>


int main()
{
int fd, fd2;
char path_name[64];
char string[] = "This is a test for fd copy\n";

/* 打开文件, 显示文件描述符的值 */
fd = open("testfile", O_RDWR);
if(fd == -1) {
printf("can not open test file\n");
exit(1);
}
printf("fd = %d\n", fd);

/* 打开/dev/fd/n,复制该文件描述符 */
sprintf(path_name, "/dev/fd/%d", fd);
fd2 = open(path_name, O_RDWR);
if(fd2 == -1) {
printf("can not open /dev/fd/%d\n", fd);
exit(1);
}
printf("fd2 = %d\n", fd2);

/* 使用复制的文件描述符向文件写数据 */

write(fd2, string, sizeof(string));

close(fd);
close(fd2);

exit(0);

}

    编译后执行,结果如图:


    先创建一个空文件testfile, 用cat指令观察,该文件没有任何内容,然后执行测试程序,测试程序先打开testfile,得到fd为3,然后再打开文件/dev/fd/3,复制该文件描述符,得到fd2=4,最后通过复制的fd2向testfile写入一串数据,程序结束。再用cat指令观察testfile,数据已经被写入该文件,说明复制文件描述符操作成功。

2017-10-27 14:38:17 peng314899581 阅读数 743
  • python全栈开发devops方向初到

    课程包含前端后端由浅入深,所有的课程全程以项目开发为主线进行讲解,作业题紧跟项目开发,让大家学完后,能够迅速巩固,大大降低了大学学习语法的时间。课程内容耗时一年精心准备,经过精编,单节课课时一般在15-30分钟。 包含项目:一共4个项目(用户系统 cmdb ansible任务管理系统 项目发布系统),并包含源码。

    3973 人正在学习 去看看 李哲


标准输入0    从键盘获得输入 /proc/self/fd/0
标准输出1    输出到屏幕(即控制台) /proc/self/fd/1
错误输出2    输出到屏幕(即控制台) /proc/self/fd/2
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
1. 2>/dev/null意思就是把错误输出到“黑洞”
2. >/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
3. 2>&1 >/dev/null意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕
关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。可以参考https://segmentfault.com/q/1010000002454596

2017-11-23 13:26:01 zhongqi2513 阅读数 77676
  • python全栈开发devops方向初到

    课程包含前端后端由浅入深,所有的课程全程以项目开发为主线进行讲解,作业题紧跟项目开发,让大家学完后,能够迅速巩固,大大降低了大学学习语法的时间。课程内容耗时一年精心准备,经过精编,单节课课时一般在15-30分钟。 包含项目:一共4个项目(用户系统 cmdb ansible任务管理系统 项目发布系统),并包含源码。

    3973 人正在学习 去看看 李哲

Linux中的标准输入输出

标准输入0    从键盘获得输入 /proc/self/fd/0 
标准输出1    输出到屏幕(即控制台) /proc/self/fd/1 
错误输出2    输出到屏幕(即控制台) /proc/self/fd/2 

/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞” 

1、2>/dev/null意思就是把错误输出到“黑洞” 

2、>/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” 

3、2>&1 >/dev/null意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕 
关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。


参考https://segmentfault.com/q/1010000002454596

/dev/sdtin 找不到

阅读数 27

没有更多推荐了,返回首页