标准I/O和管道
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准I/O和管道相关的知识,希望对你有一定的参考价值。
标准I/O和管道- 三种I/O设备
- 把I/O重定向至文件
- 使用管道
重定向 redirect
标准输入和输出
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
/dev/std*
/proc/self/fd 终端
linux给程序提供三种I/O管道
标准输入(STDIN) -0 默认接受来自键盘的输入
例如:bc(计算器)
标准输出(STDOUT) -1 默认输出到终端窗口
标准错误(STDERR) -2 默认输出到终端窗口
I/O重定向:改变默认位置
STDOUT和STDERR可以被重定向到文件
命令 操作符号 文件名
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> = > file 2&>1 把所有输出重定向到文件
< 输入重定向
清空大文件:> /boot/bigfile 立即释放空间
>> 追加 >> /data/ls.log 更加安全的创建文件
依赖于当前shell ,更换其他shell将无法创建
(command;command)>file
set -C 禁止重定向覆盖
set +C 允许重定向覆盖
>| file 强制覆盖
tr命令(外部命令)
tr 转换和删除字符
选项 :
-c -C --complement:取代所有不属于第一字符集的字符
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一字符集对应字符转化第二字符对应的字符
[:alnum:]: 字母和数字
[:alpha:]: 字母
[:cntrl:]: 控制(非打印)字符
[:digit:]: 数字
[:graph:]: 图形字符
[:lower:]: 小写字母
[:print:]: 可打印字符
[:punct:]: 标点符号
[:space:]: 空白字符
[:upper:]: 大写字母
[:xdigit:]:十六进制字符
Windows和linux的文本格式不同(不可见字符)
man ascii 查看ascii
在linux ascii中 ‘\n‘表示回车 ‘\r‘表示换行
在Windows中 回车和换行意思基本相同
hexdump -C 命令 可以查看文件16进制
tr -d ‘\r‘ < win.txt
tr -d ‘\r‘ < win.txt > win2.txt (生成新文件)
用这样的方式将Windows格式转化为linux格式
或者 可以使用 dos2unix 命令 将Windows格式转化为unix格式
unix2dos 命令 可以将unix格式 转化为Windows格式
-
mail -s 标题 hi wang
- 正文
- .
多行重定向
cat > f1.log <<EOF(终止词) > 123 >fff >dsf >EOF (结束)
- 慎用
cat <f1.txt > f1.txt cat <f2.txt >>f2.txt
passwd root &> /dev/null 隐藏信息
管道 ( | )
- 将命令1的标准输出作为命令2的标准输入
将标准错误输出
ls /data /err 2<&1 | tr ‘[:lower:]‘ ‘[upper]‘
或 ls /data /err |& tr ‘[:lower:]‘ ‘[upper]‘
重定向到多个目标
tee
-a 追加 (append)
command 1 | tee [-a] file | command 2
把命令1的STDOUT保存在文件中,作为命令2的输入
使用:
保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
seq 生成序列
面试题:
计算1+2+...+100的总和
seq -s + 1 2 100 | bc
- /dev/urandom 这个设备专门用来生成随机数
- cat /dev/urandom | tr -dc ‘[0-9a-zA-Z]‘|head -c12 生成随机安全码
- openssl rand-base64 9 生成9位随机数
管道中 - 符号
示例:
将/home里面的文件打包,但打包的数据不是记录到文件呢,而是传送到stdout,
经过管道后,将tar -cvf - /home 传送给后面的tar -xvf -,后面的这个 - 则是取前一个命令的stdout,因此,就不需要使用临时file了
tar -cvf - /home | tar -xvf
以上是关于标准I/O和管道的主要内容,如果未能解决你的问题,请参考以下文章