且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

管理以及io重定向

更新时间:2022-09-28 08:18:10

计算机的组成:

    运算器,控制器(合起来就是cpu)

    存储器,输入输出设备,总线


程序的组成:指令和数据


总线:

    地址总线:寻址

    数据总线:传输数据

    控制总线:控制指令

(为了精简线路这三类总线往往是同一条,通过附加额外几根线加以区别数据流)


寄存器:cpu暂时存储器

 问题:为什么会有寄存器,有什么作用?

    假设我们要cpu进行一次加法运算,当第一个加数被传到cpu的时候,它必须等待另一个被加数的传输,此时如果没有额外的存储器,当被加数传输过来的时候就会覆盖加数,所以这个临时存放加数的地方就是寄存器。


系统设定

    默认输出设备:标准输出,stdout,1(最常见的是显示器)

    默认输出设备:标准输入,stdin,0(键盘)

    标准错误输出,stderr,2            (显示器)


i/o重定向:

>:覆盖输出重定向

>>:附加输出重定向(不修改原来的内容)

    set  -c:禁止对已经存在的文件使用覆盖重定向;

            强制使用覆盖重定向则使用>|

         +c:关闭上述功能

示例:

[root@logstach tmp]# set -C

[root@logstach tmp]# cat  /etc/passwd >a

-bash: a: cannot overwrite existing file

[root@logstach tmp]# set +C

[root@logstach tmp]# !cat

cat  /etc/passwd >a

   

2>:重定向错误输出

2>>:追加方式

&>:相当于>和2>一起用,重定向标准输出或错误输出到同一个文件(没有&>>,要附加用>>和2>>)

示例:

[root@logstach tmp]# cat  /etc/passwd >a.txt 2>a.txt

[root@logstach tmp]# cat a.txt

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@logstach tmp]# cat  /etc/passwd11 >a.txt 2>a.txt

[root@logstach tmp]# cat a.txt

cat: /etc/passwd11: No such file or directory

[root@logstach tmp]# cat  a.txt &>b.txt

[root@logstach tmp]# cat b.txt

cat: /etc/passwd11: No such file or directory

[root@logstach tmp]# cat a123.txt &> b.txt

[root@logstach tmp]# cat b.txt

cat: a123.txt: No such file or directory


<:输入重定向

<<:here  document

示例:

[root@logstach tmp]# cat  > c <<EOF

> hello world

> i miss you

> EOF

[root@logstach tmp]# cat c

hello world

i miss you


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

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


tee:从标准输入读取数据显示在屏幕上并且保存在某个文件中

    -a:附加方式

    -i:忽视中断信号

练习:    

  1. 统计/usr/bin/目录下的文件个数

  2. 取出当前系统上所有用户的shell,要求,各种shell只显示一次,并且按顺序进行显示

  3. 思考:如何显示/var/log目录下每个文件的内容类型?

  4. 取出/etc/inittab文件的第6行;

  5. 取出/etc/passwd 文件中倒数第9个用户的用户名和shell,显示到屏幕上并保存到/tmp/user文件中。

  6. 显示/etc目录下所有以pa开头的文件,并统计其个数;

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


答案:

  1. ls  /usr/bin/|wc -l

  2.  cat  /etc/passwd|cut  -d:  -f7|sort -u

  3. file  /var/log/*  或者cd /var/log && file `ls /var/log` (先cd /var/log是因为如果使用file `ls /var/log/`它会在当前路径下查找ls出来的文件,而不是到/var/log,所以会提示错)

  4. cat  /etc/inittab |head  -6 |tail -1

  5. cat  /etc/passwd|tail -9|head -1|cut -d: -f1,7|tee /tmp/user

  6.  ls  -d  /etc/pa* |wc -l(这里注意ls 要加-d参数)

  7. echo  `alias  cls=clear` >> ~/.bashrc















本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1729550 ,如需转载请自行联系原作者