欢迎各位兄弟 发布技术文章
这里的技术是共享的
计算机五大部件
运算器 控制器 : cpu
存储器: RAM
输入设备/输出设备
程序: 指令和数据
控制器: 指令
运算器:
存储器:
事实上是总线复用 一根总线,三种功能
地址总线: 内存寻址
数据总线: 传输数据
控制总线: 控制指令
寄存器: CPU暂时存储器
I/O:硬盘,键盘,鼠标
INPUT设备
OUTPUT设备
系统设定
默认输入设备:标准输入,STDIN 0
默认输出设备:标准输出,STDOUT 1
标准错误输出: STDERR,2
标准输入: 键盘
标准输出和错误输出:显示器 (廉价)
passwd --stdin
# ls /ect (错误输出与正常的标准输出是不同的数据流)
# ls /etc
I/O 重定向:
Linux:
> 大于号(右尖括号) 输出重定向 覆盖输出
>> 两个大于号(右尖括号) 输出重定向 追加输出
set -C :禁止对已经存在的文件使用覆盖重定向
强制覆盖输出,则使用 >| (大于号竖线)
set +C :关闭上述功能
2>: 2大于号重定向错误输出
2>>: 追加方式
&>: 与符号大于号 重定向标准输出或错误输出至同一个文件 与符号 大于尖括号
&>>: 追加方式(这个是错误的 不能使用它) 与符号 两个大于尖括号不能使用
< 小于号(左尖括号) 输入重定向
<< (两个小于号)(左尖括号) 没有追加的说法 Here Document 此处文档(在此处生成文档)
管道: 命令 一端输入东西,另一端出来
前一个命令的输出,当作后一个命令的输入
命令1 | 命令2 | 命令3 | ...... 可以使用n重管道
# ls /var 事实上表面为一行的,只是为了显示的效果,不是一行
# ls /var > /tmp/var.out
# cat /tmp/var.out
# cat /etc/fstab
# cat /etc/fstab > /tmp/var.out
# cat /tmp/var.out (/tmp/var.out 原来的内容就没有了,此时覆盖)
# ls /var
# ls /var >> /tmp/var.out (此时追加)
# cat /tmp/var.out
# type set
# help set
[root@ebs-22618 ~]# set -C
[root@ebs-22618 ~]# set +C
[root@ebs-22618 ~]# set -C
# ls /usr > /tmp/var.out
[root@ebs-22618 ~]# set +C
# ls /usr > /tmp/var.out (此时没有问题了可以覆盖了)
[root@ebs-22618 ~]# set -C
[root@ebs-22618 ~]# ls /usr > /tmp/var.out
[root@ebs-22618 ~]# ls /usr >| /tmp/var.out (此时也可以覆盖)
# set +C
# ls /varr > /tmp/var2.out (写错了,不会输出到 这个文件,因为错误输出与标准输出是不同的数据流
大于号仅仅重定向了标准输出,与错误输出没有关系)
[root@ebs-22618 ~]# ls /varr 2> /tmp/var2.out
[root@ebs-22618 ~]# cat /tmp/var2.out
[root@ebs-22618 ~]# ls /var 2> /tmp/var2.out
[root@ebs-22618 ~]# ls /varr > /tmp/var3.out 2> /tmp/err.out
(此时无论正确或错误都会保存到文件里
/tmp/var3.out 与 /tmp/err.out 可以是同一个文件名
)
[root@ebs-22618 ~]# ls /varr > /tmp/var4.out 2> /tmp/var4.out
[root@ebs-22618 ~]# cat /tmp/var4.out
[root@ebs-22618 ~]# ls /var > /tmp/var4.out 2> /tmp/var4.out
[root@ebs-22618 ~]# cat /tmp/var4.out
[root@ebs-22618 ~]# ls /var6 &> /tmp/var5.out
[root@ebs-22618 ~]# cat /tmp/var5.out
[root@ebs-22618 ~]# ls /var &> /tmp/var5.out
[root@ebs-22618 ~]# cat /tmp/var5.out
[root@ebs-22618 ~]# cat cat 是等待用户输入的 大多部命令接受文件作为输入重定向 (不需要 < )
abc
abc
^C
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# cat < /etc/fstab 大多部命令接受文件作为输入重定向
[root@ebs-22618 ~]# tr 实现字符集转换或者删除字符
tr 命令是不接受文件作为参数的(它不接受 所以要用 < (小于号)输入重定向)
[root@ebs-22618 ~]# man tr
[root@ebs-22618 ~]# tr 'a-z' 'A-Z'
[root@ebs-22618 ~]# tr 'a-z' 'A-Z' /etc/fstab
[root@ebs-22618 ~]# tr 'a-z' 'A-Z' < /etc/fstab
[root@ebs-22618 ~]# cat /etc/issue /etc/fstab cat 命令连接并显示
[root@ebs-22618 ~]# tr 'a-z' 'A-Z' < /etc/fstab /etc/issue
[root@ebs-22618 ~]# tr 'a-z' 'A-Z' << /etc/fstab /etc/issue
[root@ebs-22618 ~]# cat << END 这里END是文档结束标记(在某处一行只写了END表示到此处结束) (这里符号通常用 EOF 或 END )
> The first line.
> The second line
> END
The first line.
The second line
[root@ebs-22618 ~]# cat >> /tmp/myfile.txt << EOF
[root@ebs-22618 ~]# cat /tmp/myfile.txt
[root@ebs-22618 ~]# echo "hello,world"
[root@ebs-22618 ~]# echo "hello,world" | tr 'a-z' 'A-Z'
[root@ebs-22618 ~]# echo "redhat" | passwd --stdin hive 前一个命令的输出当作后一个命令的输入
[root@ebs-22618 ~]# cat /etc/passwd | sort
[root@ebs-22618 ~]# sort /etc/passwd (也是排序同样效果)
[root@ebs-22618 ~]# cut -d: -f1 /etc/passwd (取用户名 冒号作为分隔符,取第一个段) (cut 截取)
[root@ebs-22618 ~]# cut -d: -f1 /etc/passwd | sort (取用户名,排序)
[root@ebs-22618 ~]# cut -d: -f3 /etc/passwd | sort (取用户id,排序)
[root@ebs-22618 ~]# cut -d: -f3 /etc/passwd | sort -n (-n表示以数值排序) (取用户id,数值排序)
[root@ebs-22618 ~]# cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z' (取用户名,排序,变成大写)
[root@ebs-22618 ~]# ls /var
[root@ebs-22618 ~]# ls /var | tr 'a-z' 'A-Z' (把一个目录下的文件名全部变成大写显示)
tee 一个输入 两个输出 三叉口
[root@ebs-22618 ~]# man tee
[root@ebs-22618 ~]# echo "Hello,world" | tee /tmp/hello.out
[root@ebs-22618 ~]# cat /tmp/hello.out
[root@ebs-22618 ~]# wc -l /etc/passwd ( wc -l 显示行数)
[root@ebs-22618 ~]# wc -l /etc/passwd | cut -d' ' -f1 (只显示文件的行数 分隔符是空格)
[root@ebs-22618 ~]# ls /usr/bin
[root@ebs-22618 ~]# ls /usr/bin | wc -l
[root@ebs-22618 ~]# ls -l /usr/bin
[root@ebs-22618 ~]# ls -l /usr/bin | head -1
[root@ebs-22618 ~]# ls -l /usr/bin | wc -l
[root@ebs-22618 ~]# ls /usr/bin | wc -l (它是正确的)
[root@ebs-22618 ~]# ls -l /usr/bin | head -2 (由此可见 ls -l 多出一行,所以它不正确)
练习:
1,统计 /usr/bin 目录下的文件个数:
[root@ebs-22618 ~]# ls /usr/bin | wc -l (它是正确的)
2,取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示
(另一题:统计每种shell出现的次数 不忙做)
[root@ebs-22618 ~]# cut -d: -f7 /etc/passwd
[root@ebs-22618 ~]# cut -d: -f7 /etc/passwd | sort -u (-u 只显示一次)
3)思考:如何显示 /var/log目录下每个文件的内容类型
[root@ebs-22618 ~]# ls /var/log
[root@ebs-22618 ~]# file /var/log/secure
[root@ebs-22618 ~]# file /var/log/*
[root@ebs-22618 ~]# ls /var/log | file
[root@ebs-22618 ~]# file /var/log`ls /var/log`
[root@ebs-22618 ~]# cd /var/log
[root@ebs-22618 log]# file `ls /var/log` (现在可以)
4)取出 /etc/inittab文件的第6行
[root@ebs-22618 log]# head -6 /etc/inittab | tail -1 (先取前6,再取最后一行)
5)取出/etc/passwd 文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存到 /tmp/users文件中:
[root@ebs-22618 log]# tail -9 /etc/passwd
[root@ebs-22618 log]# tail -9 /etc/passwd | head -1
[root@ebs-22618 log]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7
[root@ebs-22618 log]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
[root@ebs-22618 log]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 > /tmp/users (此时仅输出重定向到文件,而不显示在屏幕上)
[root@ebs-22618 log]# cat /tmp/users
6)显示/etc目录下所有以pa开头的文件,并统计其个数
[root@ebs-22618 log]# ls /etc/pa* (连pa开头的目录下面的所有的文件都显示出来了)
[root@ebs-22618 log]# ls -d /etc/pa*
[root@ebs-22618 log]# ls -d /etc/pa* | wc -l
7)不使用文本编辑器,将 alias cla=clear 一行内容添加至当前用户的.bashrc文件中
[root@ebs-22618 log]# printf "alias cls=clear" >> ~/.bashrc
[root@ebs-22618 log]# echo "alias cls=clear" >> ~/.bashrc (最好用 echo 吧,防止可能出现格式的事)