0
点赞
收藏
分享

微信扫一扫

标准输出和标准错误重定向

最后的执着 2022-04-01 阅读 181
linux

程序:指令+数据

读入数据:Input

输出数据:Output

在linux中一条指令或者程序,可以分为三种形式:

标准输入:-0 默认接受来自键盘的输入

标准输出:-1 默认输出到终端窗口

标准错误: -  2 默认输出到终端窗口

I/O重定向:改变默认位置

把输出和错误重新定向到文件

支持的操作符号包括:

> 把STDOUT重定向到文件,这里默认的是1,省略

2> 把STDERR重定向到文件

&> 把所有输出重定向到文件

需要注意的是,多次>  会覆盖,而并非追加到文件里面的内容

 /dev/null是一个类似于回收站的东西,且不能删除此文件,经常利用这个文件来配合使用重定向

例如;给 ttyang用户修改密码123456

echo 123456 | passwd --stdin ttyang > /dev/null

> 文件内容会被覆盖

 set -C 禁止将内容覆盖已有文件,但可追加

 >| file 强制覆盖

 set +C 允许覆盖

>> 原有内容基础上,追加内容

例如;此用法了解即可

[root@centos7 data]#echo time out > /data/stdout.log

[root@centos7 data]#set -C

[root@centos7 data]#echo time out > /data/stdout.log

-bash: /data/stdout.log: cannot overwrite existing file

2> 覆盖重定向错误输出数据流

2>> 追加重定向错误输出数据流

标准输出和错误输出各自定向至不同位置

  COMMAND > /path/to/file.out 2> /path/to/error.out

 >默认就是1,标准输出   2>标准错误

合并标准输出和错误输出为同一个数据流进行重定向

 &>  覆盖重定向

 &>> 追加重定向

两种写法;

 COMMAND > /path/to/file.out 2>&1 (顺序很重要)

 COMMAND >> /path/to/file.out 2>&1

之前其实一直不懂第一种写法, 是这样理解的,将标准输出追加到/path/to/file.out,2放到1里面,而1前面已经定义。所以是将所有信息打印到/path/to/file.out

tr  转换和删除字符

Usage: tr [OPTION]... SET1 [SET2]

Translate, squeeze, and/or delete characters from standard input,

writing to standard output.

-c –C --complement:取字符集的补集

-d --delete:删除所有属于第一字符集的字符

-s --squeeze-repeats:把连续重复的字符以单独一个字符表示

-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符

[:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符

[:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母

[:xdigit:]:十六进制字符

例如:

1.[root@centos7 ~]#tr abc 123

asfjhvbb

1sfjhv22

其他参数上面所解释搭配使用

从文件中导入标准输入

使用 < 来重定向标准输入

某些命令能够接受从文件中导入的STDIN

tr ‘a-z’ ‘A-Z’< /etc/issue

该命令会把/etc/issue中的小写字符都转换成大写字符

tr –d abc < /etc/fstab

 删除fstab文件中的所有abc中任意字符

cat > file

mage

wangxiaochun

按ctrl+d离开,可以使用文件来代替键盘的输入

cat < file1 > file2

cat < file1 >> file1

把多行发送给STDIN

使用“<<终止词”命令从键盘把多行重导向给STDIN

直到 终止词 位置的所有文本都发送给STDIN

有时被称为就地文本(here documents)

例如:

1.[root@centos7 ~]#cat <<$

> sdfnv

> adwhdweuyfg

> 123

> $

sdfnv

adwhdweuyfg

123

2.还有另外一种多行重定向的方式EOF,end of file;它是C语言中生成用于表示文件结束的表示方法。

[root@centos7 ~]#cat <<EOF > test.txt   EOF 后面有空格

> lindahd

> sadjwfw

> deiu23

> EOF

[root@centos7 ~]#

[root@centos7 ~]#

[root@centos7 ~]#cat test.txt

lindahd

sadjwfw

deiu23

pidof bash查看某个进程的进程编号

 | 只能传输标准输出,而不能传输标准错误

通过 2>&1、|&  将标准输出和标准错误均通过管道传输

mail: 通过电子邮件发送输入

echo "test email" | mail -s "test" wang@example.com

其中 test为邮件标题,用双引号连起来

例如:mail -s help root <<EOF

> Hello,i am $USER,The system version is here,please help me to check

> it ,thanks!

> EOF

bc:算术运算

echo "2^3" |bc

tee命令,配合管道使用,既要打印在屏幕,又可以重定向到文件里

[root@centos7 ~]#hostname  |tee /data/f2.log

centos7.localdomain

tee -a  <append> 不覆盖,只是追加的效果

计算1+2+3+...+99+100的总和

echo {1..100}| tr ' ' '+' |bc

或者seq -s+ 100|bc

windows中查看用户账号 net user

查看组账号 net localgroup

查看口令期限: net  account

举报

相关推荐

0 条评论