管道及IO重定向
运算器、控制器:CPU
存储器:RAM
输入设备/输出设备
程序:指令和数据
控制器:指令
运算器:
存储器:
地址总线:内存寻址
数据总线:传输数据
控制总线:控制指令
寄存器:CPU暂时存储器
I/O:硬盘
系统设定
默认输出设备:标准输出,STDOUT,1
默认输入设备:标准输入,STDIN,0
标准错误输出:STDERR,2
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向:
改变数据的输入/输出来源
- 输出重定向: > 覆盖输出
>> 追加输出
重定向错误输出:2>
追加方式: 2>>
重定向标准输出或错误输出至同一个文件: &>
ls /var > /tmp/var.out
#set -C:禁止对已经存在文件使用覆盖重定向
shell内置命令:set -C 开启功能 +C 关闭功能
#不关闭禁止覆盖输出的功能,同时覆盖输出
ls /var >| /tmp/var.out
既定向正确输出,也定向错误输出:
ls /varr > /tmp/var3.out 2> /tmp/err.out
ls /var6 &> /tmp/var5.out
- 输入重定向:<
#tr本不支持文件,通过输入重定向将文件中小写变大写
tr 'a-z' 'A-Z' < /etc/fstab
Here Document:<< 在此处生成文档
[root@localhost ~]# cat << END
> The first line.
> The second line.
> END
The first line.
The second line.
cat << EOF
#用户从键盘输入数据并保存在文件中,用于在脚本中生成文件
cat >> /tmp/myfile.txt <<EOF
管道:
前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 |命令3 |…
[root@localhost ~]# echo "hello,world." | tr 'a-z' 'A-Z'
HELLO,WORLD.
#取出所有用户名并排序
[root@localhost ~]# cut -d: -f1 /etc/passwd|sort
#既输出到屏幕,也保存到文件
[root@localhost ~]# echo "Hello World." | tee /tmp/hello.out
Hello World.
[root@localhost ~]# cat /tmp/hello.out
Hello World.
#显示文件行数,且不能显示其他信息
wc -l /etc/passwd 显示文件的行数
[root@localhost ~]# wc -l /etc/passwd | cut -d' ' -f1
50
[root@localhost ~]# ls /usr/bin|wc -l
1922
[root@localhost ~]# ls -l /usr/bin |head -1
总用量 242488
练习:
1.统计/usr/bin/目录下的文件个数
[root@localhost ~]# ls /usr/bin|wc -l
1922
2.取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示。
[root@localhost ~]# cut -d: -f7 /etc/passwd | sort -u
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
3.思考:如何显示/var/log目录下每个文件的内容类型?
4.取出/etc/inittab文件的第6行
[root@localhost ~]# head -6 /etc/inittab | tail -1
#
5.取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中
[root@localhost ~]# tail -9 /etc/passwd | head -1 |cut -d: -f1,7 |tee /tmp/users
6.显示/etc目录下所有以pa开头的文件,并统计其个数
[root@localhost ~]# ls -d /etc/pa* | wc -l
3
7.不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中。
#printf "alias cls=clear" >> ~/.bashrc
grep以及正则表达式
文本查找的需要:
grep,egrep,fgrep
grep:根据模式,搜索文本,并将符合模式的文本行显示出来。
Pattern:文本字符和正则表达式的元字符组合而成的匹配条件
grep [OPTIONS] PATTERN [FILE…]
-i 忽略大小写
--color 以颜色显示
-v反向查找:显示没有被模式匹配到的行
-o只显示被模式匹配到的字符串
#匹配到的字符串用颜色显示出来
[root@localhost ~]# grep --color 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -o 'root' /etc/passwd
root
root
root
root
正则表达式:
元字符:
.:匹配任意单个字符
匹配次数(贪婪模式):
*****:匹配其前面的字符任意次
.*:任意长度的任意字符
?:匹配其前面的字符1次或0次
grep 中有部分匹配就可以
\{m,n\}:匹配其前面的字符至少m次,至多n次
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集:[:digit:],[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:]
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
#表示root出现在词尾
grep "\broot" test2.txt
分组:
\(\)
\(ab\)* 后向引用
\1:第一个左括号以及与之对应的右括号所包括的所有内容
grep '\(1..e\).*\' test3.txt
test3.txt
1 He love his lover.
2 She like her lover.
3 He like his liker.
4 She love her liker.
[root@localhost ~]# grep '\(l..e\).*\1' test3.txt
He love his lover.
He like his liker.
正则表达式:
Basic REGEXP:基本
Extended REGEXP:扩展
grep:使用基本正则表达式定义的模式来过滤文本的命令
-E : 使用扩展正则表达式
-A #:显示模式匹配到的那一行以及后面的#行
-B 前面行
-C 上下若干行
[root@localhost ~]# grep -A 2 '^core id' /proc/cpuinfo
core id : 0
cpu cores : 1
apicid : 0
扩展正则表达式:
字符匹配:
.
[]
[^]
次数匹配:
*:
?:其前字符一次或0次
+:匹配其前字符至少一次
{m,n}
位置锚定与正则表达式相同
分组:
():分组
\1,\2,\3,…
或者
|:or
(C|c)at:cat/Cat
grep -E =egrep
找ifconfig命令显示结果中1-255的数字:
ifconfig|egrep --color '\<([1-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
找出ifconfig命令执行结果中的IP地址:
\.让元字符表示它本身含义
ifconfig|egrep --color '\<([0-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.)(3)\<([0-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
IPV4
5类:A B C D E
A:1-127
B:128-191
C:192-223