计算机的组成:
运算器,控制器(合起来就是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:忽视中断信号
练习:
统计/usr/bin/目录下的文件个数
取出当前系统上所有用户的shell,要求,各种shell只显示一次,并且按顺序进行显示
思考:如何显示/var/log目录下每个文件的内容类型?
取出/etc/inittab文件的第6行;
取出/etc/passwd 文件中倒数第9个用户的用户名和shell,显示到屏幕上并保存到/tmp/user文件中。
显示/etc目录下所有以pa开头的文件,并统计其个数;
不使用文本编辑器,将alias cls=clear 一行内容添加至当前用户的~/.bashrc文件中
答案:
ls /usr/bin/|wc -l
cat /etc/passwd|cut -d: -f7|sort -u
file /var/log/* 或者cd /var/log && file `ls /var/log` (先cd /var/log是因为如果使用file `ls /var/log/`它会在当前路径下查找ls出来的文件,而不是到/var/log,所以会提示错)
cat /etc/inittab |head -6 |tail -1
cat /etc/passwd|tail -9|head -1|cut -d: -f1,7|tee /tmp/user
ls -d /etc/pa* |wc -l(这里注意ls 要加-d参数)
echo `alias cls=clear` >> ~/.bashrc