ma系列之-5-IO重定向和管道

1 计算机系统设定关于输入输出:
 默认输出设备:标准输出,STDOUT, 用1表示
 默认输入设备:标准输入, STDIN, 用0表示
 标准错误输出:STDERR, 用2表示

 
标准输入:键盘
标准输出和错误输出:显示器

I/O重定向概念:改变系统默认输入/出的地方 

2 linux set 命令:

防止出现对重要文件覆盖

[root@h2sliver114 ~]# help set
 -C  If set, disallow existing regular files to be overwritten
            by redirection of output.


set -C: 禁止对已经存在文件使用覆盖重定向; 这样能防止在你 >的时候 将重要文件覆盖掉。 
 强制覆盖输出,则使用 >|
比如如下:  
[root@h2sliver114 ~]# ls > b.txt
-bash: b.txt: cannot overwrite existing file

set +C: 关闭上述功能

3 重定向使用到的符号:

>: 覆盖输出
>>:追加输出
2>: 重定向错误输出 (联想记忆于凡是错误的东西都是挺2的事)   
2>>: 追加方式实现错误输出
&>: 重定向标准输出(正确输出)或错误输出至同一个文件(覆盖输入)
&>>: 重定向标准输出(正确输出)或错误输出至同一个文件(追加输入)

>: 覆盖输出目标文件内的内容
>>:追加输出


[root@sliver114 ~]# type set
set is a shell builtin
[root@sliver114 ~]# help set
....
 -C  If set, disallow existing regular files to be overwritten
            by redirection of output.
....
Using + rather than - causes these flags to be turned off.

set -C: 禁止对已经存在文件使用覆盖重定向;
	强制覆盖输出,则使用 >|
set +C: 关闭上述功能
[root@sliver114 ~]# set -C
[root@sliver114 ~]# ls /usr/ > /tmp/var.out
-bash: /tmp/var.out: cannot overwrite existing file
[root@sliver114 ~]# ls /usr/ >| /tmp/var.out   实现强制输入
[root@sliver114 ~]# cat /tmp/var.out  
bin
etc
games
include
....


2>: 只能重定向错误输出 对于正常输出则无能为力
2>>: 追加方式
eg:
[root@sliver114 ~]# set +C
[root@sliver114 ~]# ls /varr > /tmp/var3.out 2> /tmp/err.out
[root@sliver114 ~]# cat /tmp/err.out
ls: /varr: No such file or directory



&>: 重定向标准输出或错误输出至同一个文件
[root@sliver114 tmp]# ls /var1 &> var1.out
[root@sliver114 tmp]# cat var1.out
ls: /var1: No such file or directory
[root@sliver114 tmp]# ls /var &> var1.out
[root@sliver114 tmp]# cat var1.out
account
cache
cvs
db

关于输入重定向:

<:输入重定向
<<:Here Document(在此处生成文档)

eg:
[root@sliver114 tmp]# cat < /etc/fstab    将/etc/fstab的内容作为输入来取代键盘
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
....

eg:
[root@sliver114 tmp]# cat << END     // 此时你用什么单词 那么下面你输入内容后 文件内容就以什么单词来结束,但是文档内容不包含这个单词,单词长以EOF或者END  (EOF= end of file) 
> this is hello
> this is world
> END
this is hello
this is world

关于输入输出重定向组合使用的例子:

看这个输入输出重定向综合的例子,实现像文件中输入内容(觉得通过在win下创建文件然后通过ssh工具远程提交岂不是更方便。或者通过vim来创建文件并添加内容也能达到如下命令的目的)
[root@sliver114 tmp]# cat >> /tmp/myfile.txt << EOF
> this is my ioredirect
> this is sep 
> EOF
[root@sliver114 tmp]# cat /tmp/myfile.txt 
this is my ioredirect
this is sep 

4 关于管道:

管道:前一个命令的输出,作为后一个命令的输入

命令1 | 命令2 | 命令3 | ...

上面表示:  将命令1的输出结果作为输入流,输入到命令2中做处理,然后命令2处理的结果作为输入流输入到命令3中做处理...

案例如下:

0 字母大写
[root@sliver114 tmp]# echo 'hello world' | tr 'a-z' 'A-Z'
HELLO WORLD

0.1 
仅展示文件行数据
[root@sliver114 tmp]# wc -l /etc/passwd
35 /etc/passwd
[root@sliver114 tmp]# wc -l /etc/passwd | cut -d' ' -f1
35



[root@sliver114 tmp]# ls -l /usr/bin | head -2    显示前两行结果
total 110584
-rwxr-xr-x 1 root root      31208 Jul 21  2011 [




1、统计/usr/bin/目录下的文件个数;
# ls /usr/bin | wc -l
2、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;
# cut -d: -f7 /etc/passwd | sort -u
3、思考:如何显示/var/log目录下每个文件的内容类型?

4、取出/etc/inittab文件的第6行;    先获取前六行  然后在获取倒数第一行
[root@sliver114 tmp]# head -6 /etc/inittab | tail -1
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes

5、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;
[root@sliver114 tmp]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/test.txt
apache:/sbin/nologin
[root@sliver114 tmp]# cat test.txt 
apache:/sbin/nologin

6、显示/etc目录下所有以pa开头的文件,并统计其个数;    ls -l 表示仅仅展示自身属性  并不展示自身下的孩子 这里要求仅展示以pa开头的文件 因此需要用到 -d
[root@sliver114 tmp]# ls -d /etc/pa*
/etc/pam.d       /etc/pam_smb.conf  /etc/passwd   /etc/passwd.OLD
/etc/pam_pkcs11  /etc/pango         /etc/passwd-
[root@sliver114 tmp]# ls -d /etc/pa* | wc -l


7、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中;
# echo "alias cls=clear" >> ~/.bashrc

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2112157