Linux:文件描述符
在Linux系统中,有一个万物皆文件的概念,在/dev文件下,都是对接的一些设备信息
命令:ls /dev/std*
stdin是标准输入接收设备,stdout是标准输出显示设备,stderr是错误输出显示设备,根据这些输出内容进行重定向
1、正常输出重定向命令:ls > 1.txt 或者 ls 1> 1.txt
解析1:此时ls命令的输出不会打印到屏幕上,重定向到1.txt文件中,可以通过cat 1.txt文件查看输出的内容
解析2:使用>符号重定向到同一文件时,后面的重定向命令会直接覆盖文件,可以使用追加重定向>>,只会在文件后面追加内容,不会覆盖以前的
命令:ls -zt
2、错误输出重定向命令:ls -zt 2> 2.txt
解析1:这个命令运行时报错,异常输出的重定向需要使用命令:ls -zt 2> 2.txt,在>前面加个2,不能直接使用>,>这个只能重定向正常输出
解析2:同理,使用2>>追加错误输出的信息,而不覆盖以前的
3、正常输出和错误输出分别重定向命令:ls -l /etc xxx > 1.txt 2> 2.txt
解析:当一个命令执行既有正常和异常输出时,可以同时使用>和2>将正常输出和异常输出重定向到不同文件中
4、正常输出和错误输出重定向到同一文件命令:ls -l /etc xxx &> 3.txt
解析:使用&>符号将所有输出都重定向到一个文件中
错误输出重定向到标准输出命令:ls -l /etc xxx >3.txt 2>&1
同理,标准输出重定向到错误输出的命令:ls -l /etc xxx 2>3.txt 1>&2
解析:这个命令是先将标准输出重定向到3.txt,然后使用2>&1命令将错误输出追加重定向到标准输出,有点绕哈
5、从文件读入数据命令:read x < 1.txt
解析:把1.txt的内容读入后赋值给x变量,可以使用echo $x查看x变量的值,实际操作后发现如果1.txt文件包含多行数据时,x变量值为1.txt文件的第一行数据,其他数据没有读入
Linux特殊设备:
/dev/null:所有传给他的东西都被丢弃
/dev/zero:产生无限的空字符
可以使用命令:cat /dev/zero >> 4.txt,读取zero的空字符写入到文件,模拟写大量的数据,对硬盘速度和I/O设备写速度进行测试
在管道中使用变量:
管道是独立进程,执行完即销毁,可以使用{}或者while组合编写复杂的控制逻辑
可以使用以下两个方式获得变量x:
echo "hello world" | { read x;echo $x; } 这个shell脚本真不好用,少个空格都会报错
ls | while read y;do echo $y;done 如果输出有多条记录,需要循环读入,否则只取第一行数据