欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 04_03 _管理及IO重定向 有大用

计算机五大部件

运算器 控制器 : cpu

存储器: RAM

输入设备/输出设备


程序: 指令和数据


控制器: 指令

运算器:

存储器:


事实上是总线复用 一根总线,三种功能

地址总线: 内存寻址

数据总线: 传输数据

控制总线: 控制指令


寄存器: CPU暂时存储器

I/O:硬盘,键盘,鼠标


INPUT设备

OUTPUT设备


系统设定

    默认输入设备:标准输入,STDIN 0

    默认输出设备:标准输出,STDOUT 1

    标准错误输出: STDERR,2


标准输入: 键盘

标准输出和错误输出:显示器  (廉价)


passwd --stdin



# ls /ect (错误输出与正常的标准输出是不同的数据流)

image.png

#  ls /etc

image.png



I/O 重定向:

    

Linux:

> 大于号(右尖括号) 输出重定向 覆盖输出

>> 两个大于号(右尖括号)  输出重定向 追加输出


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

            强制覆盖输出,则使用 >| (大于号竖线)

set +C :关闭上述功能


2>: 2大于号重定向错误输出

2>>: 追加方式 


&>: 与符号大于号 重定向标准输出或错误输出至同一个文件  与符号 大于尖括号

&>>: 追加方式(这个是错误的 不能使用它)       与符号 两个大于尖括号不能使用


< 小于号(左尖括号) 输入重定向

<< (两个小于号)(左尖括号) 没有追加的说法  Here Document 此处文档(在此处生成文档)


管道: 命令 一端输入东西,另一端出来

        前一个命令的输出,当作后一个命令的输入

命令1 | 命令2 | 命令3 | ......  可以使用n重管道




# ls /var   事实上表面为一行的,只是为了显示的效果,不是一行

image.png

# ls /var > /tmp/var.out

image.png

# cat /tmp/var.out

image.png


# cat /etc/fstab

image.png

# cat /etc/fstab > /tmp/var.out

# cat /tmp/var.out    (/tmp/var.out 原来的内容就没有了,此时覆盖)

image.png


# ls /var

# ls /var >> /tmp/var.out  (此时追加)

# cat /tmp/var.out

image.png


# type set

image.png

# help set

image.png


[root@ebs-22618 ~]# set -C

[root@ebs-22618 ~]# set +C

image.png

[root@ebs-22618 ~]# set -C

image.png

# ls /usr > /tmp/var.out

image.png


[root@ebs-22618 ~]# set +C

# ls /usr > /tmp/var.out  (此时没有问题了可以覆盖了)

image.png

[root@ebs-22618 ~]#  set -C

[root@ebs-22618 ~]# ls /usr > /tmp/var.out

image.png

[root@ebs-22618 ~]# ls /usr >| /tmp/var.out  (此时也可以覆盖)

image.png


# set +C

# ls /varr > /tmp/var2.out  (写错了,不会输出到 这个文件,因为错误输出与标准输出是不同的数据流

大于号仅仅重定向了标准输出,与错误输出没有关系)

image.png

[root@ebs-22618 ~]# ls /varr 2> /tmp/var2.out

[root@ebs-22618 ~]# cat /tmp/var2.out

image.png

[root@ebs-22618 ~]# ls /var 2> /tmp/var2.out

image.png


[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

image.png

[root@ebs-22618 ~]# cat /tmp/var4.out

image.png

[root@ebs-22618 ~]# ls /var > /tmp/var4.out 2> /tmp/var4.out

[root@ebs-22618 ~]# cat /tmp/var4.out

image.png


[root@ebs-22618 ~]# ls /var6 &> /tmp/var5.out

[root@ebs-22618 ~]# cat /tmp/var5.out

image.png


[root@ebs-22618 ~]# ls /var &> /tmp/var5.out

[root@ebs-22618 ~]# cat /tmp/var5.out

image.png


[root@ebs-22618 ~]# cat    cat 是等待用户输入的 大多部命令接受文件作为输入重定向 (不需要 < )

abc

abc

^C

[root@ebs-22618 ~]#

[root@ebs-22618 ~]# cat < /etc/fstab  大多部命令接受文件作为输入重定向

image.png


[root@ebs-22618 ~]# tr  实现字符集转换或者删除字符


tr 命令是不接受文件作为参数的(它不接受 所以要用  < (小于号)输入重定向)


[root@ebs-22618 ~]# man tr   

image.png


[root@ebs-22618 ~]# tr 'a-z' 'A-Z'

image.png


[root@ebs-22618 ~]# tr 'a-z' 'A-Z' /etc/fstab

image.png

[root@ebs-22618 ~]# tr 'a-z' 'A-Z' < /etc/fstab

image.png

[root@ebs-22618 ~]# cat /etc/issue /etc/fstab   cat 命令连接并显示


image.png

[root@ebs-22618 ~]# tr 'a-z' 'A-Z' < /etc/fstab /etc/issue

image.png

[root@ebs-22618 ~]# tr 'a-z' 'A-Z' << /etc/fstab /etc/issue

image.png

[root@ebs-22618 ~]# cat << END   这里END是文档结束标记(在某处一行只写了END表示到此处结束)   (这里符号通常用 EOF 或 END )

> The first line.

> The second line

> END

The first line.

The second line                                   

image.png


[root@ebs-22618 ~]# cat >> /tmp/myfile.txt << EOF

image.png


[root@ebs-22618 ~]# cat /tmp/myfile.txt

image.png


[root@ebs-22618 ~]# echo "hello,world"

image.png


[root@ebs-22618 ~]# echo "hello,world" | tr 'a-z' 'A-Z'

image.png


[root@ebs-22618 ~]# echo "redhat" | passwd --stdin hive 前一个命令的输出当作后一个命令的输入

image.png


[root@ebs-22618 ~]# cat /etc/passwd | sort

image.png


[root@ebs-22618 ~]# sort /etc/passwd   (也是排序同样效果)

image.png


[root@ebs-22618 ~]# cut -d: -f1 /etc/passwd  (取用户名 冒号作为分隔符,取第一个段) (cut 截取)

image.png

[root@ebs-22618 ~]# cut -d: -f1 /etc/passwd | sort  (取用户名,排序)

image.png


[root@ebs-22618 ~]# cut -d: -f3 /etc/passwd | sort  (取用户id,排序)

image.png

[root@ebs-22618 ~]# cut -d: -f3 /etc/passwd | sort -n  (-n表示以数值排序)  (取用户id,数值排序)

image.png


[root@ebs-22618 ~]# cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z' (取用户名,排序,变成大写)

image.png


[root@ebs-22618 ~]# ls /var

image.png

[root@ebs-22618 ~]# ls /var | tr 'a-z' 'A-Z' (把一个目录下的文件名全部变成大写显示)

image.png



tee 一个输入 两个输出 三叉口

[root@ebs-22618 ~]# man tee

image.png

[root@ebs-22618 ~]# echo "Hello,world" | tee /tmp/hello.out

image.png

[root@ebs-22618 ~]# cat /tmp/hello.out

image.png


[root@ebs-22618 ~]# wc -l /etc/passwd   ( wc -l 显示行数)

image.png



[root@ebs-22618 ~]# wc -l /etc/passwd | cut -d' ' -f1  (只显示文件的行数 分隔符是空格)


image.png



[root@ebs-22618 ~]# ls /usr/bin

image.png


[root@ebs-22618 ~]# ls /usr/bin | wc -l

image.png


[root@ebs-22618 ~]# ls -l /usr/bin

image.png


[root@ebs-22618 ~]# ls -l /usr/bin | head -1

image.png


[root@ebs-22618 ~]# ls -l /usr/bin | wc -l

image.png


[root@ebs-22618 ~]# ls  /usr/bin | wc -l   (它是正确的)

image.png


[root@ebs-22618 ~]# ls -l /usr/bin | head -2   (由此可见 ls -l 多出一行,所以它不正确)

image.png


练习:

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

[root@ebs-22618 ~]# ls  /usr/bin | wc -l   (它是正确的)

image.png

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

(另一题:统计每种shell出现的次数 不忙做)

[root@ebs-22618 ~]# cut -d: -f7 /etc/passwd

image.png

[root@ebs-22618 ~]# cut -d: -f7 /etc/passwd | sort -u  (-u 只显示一次)

image.png


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

[root@ebs-22618 ~]# ls /var/log

image.png

[root@ebs-22618 ~]# file /var/log/secure

image.png

[root@ebs-22618 ~]# file /var/log/*

image.png

[root@ebs-22618 ~]# ls /var/log | file

image.png

[root@ebs-22618 ~]# file /var/log`ls /var/log`

image.png

[root@ebs-22618 ~]# cd /var/log

[root@ebs-22618 log]# file `ls /var/log`  (现在可以)

image.png


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

image.png

[root@ebs-22618 log]# tail -9 /etc/passwd | head -1

image.png

[root@ebs-22618 log]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7

image.png


[root@ebs-22618 log]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users

image.png

[root@ebs-22618 log]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 > /tmp/users (此时仅输出重定向到文件,而不显示在屏幕上)

[root@ebs-22618 log]# cat /tmp/users

image.png


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

[root@ebs-22618 log]# ls /etc/pa*  (连pa开头的目录下面的所有的文件都显示出来了)

image.png

[root@ebs-22618 log]# ls -d /etc/pa*

image.png


[root@ebs-22618 log]# ls  -d /etc/pa* | wc -l

image.png




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

[root@ebs-22618 log]# printf "alias cls=clear" >> ~/.bashrc

[root@ebs-22618 log]# echo "alias cls=clear" >> ~/.bashrc (最好用 echo 吧,防止可能出现格式的事)





普通分类: