菜鸟学Linux 第012篇笔记 Linux I/O重定向


计算机五大部件

运算器、控制器:cpu

存储器:RAM

输入/输出设备


程序=指令+数据


控制器:读取指令

运算器:做数据运算

存储器:做数据存储


相互运作原理(仅做理解)

控制器读取指令,并在指令控制下告诉运算器去哪里取数据并做运算,运算结果再由控制器

保存到存储器


地址总线:用于做内存寻址

数据总线:传输数据

控制总线:控制指令

物理上总线可以利用,一根总线可以实现以上三种功能


寄存器:Cpu内部的一个暂时存储器

I/O

input 设备

output设备

系统设定

默认输出设备:标准输出STDOUT 文件描述符:1

默认输入设备:标准输入STDIN 文件描述符:0

标准错误输出:STDERR 文件描述符:2

标准输入:键盘keyboard

标准输出和错误输出:显示器screen


I/O 重定向(输入输出重定向)

linux重定向符号

覆盖输出>

追加输出>>

输入<

结束标记<<EOF END

错误输出2>  和 2>>

标准和错误输出 &> 不支持覆盖输出

e.g.

ls /etc > /tmp/etc.out 将本应该显示在屏幕上的信息

重定向定入到/tmp/etc.out

ls /etc &> /tmp/etc.out

ls /etc > /tmp/etc.out 2> /tmp/etc

cat >> /tme/home.out <<EOF  将输入的字符输出到home.out文件


set -C 禁止对已经存在文件使用覆盖重定向

强制覆盖输出,由使用>|

set +C 关闭上述功能




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

命令1|命令2|命令3

e.g. cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'

tee (read from standard input and write to standard output and files)

同时输出到标准输出,同时也输出到文件

e.g. echo "hello, world." | tee /tmp/hello.out

wc (print the number of newlines, words, and bytes in files)

e.g. wc -l /etc/shadow | cut -d' ' -f1 显示一个文件的行数

小练习 

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

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

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

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

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

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

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




KEY

1、ls /usr/bin | wc -l

2、cut -d: -f7 | sort -u

3、file `ls /var/log` 需要先切换到/var/log目录下

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

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

6、ls -d /etc/pa* | wc -l

7、echo "alias cls=clear" >> /user1/.bashrc