Linux学习笔记6(输入/输出和管道 | 及相关的命令)

1.文件描述符与标准输入输出

shell创建的每一个进程都要与文件描述符打交道。其实文件描述符就是Linux系统内部使用的一个文件代号,文件描述符决定从哪里读入命令所需的输入和将命令产生的输入及错误显示送到什么地方。

以下是文件描述符的进一步解释,其中0,1,2为文件描述符的号码

0:标准的命令输入,文件描述符缩写为stdin

1:标准的命令输出,文件描述符缩写为stdout

2:标准的命令错误信息,文件描述符为stderr

利用cat命令操作输入输出

[zhuhaitao@localhost ~]$ cat
do you want a girl friend                        
do you want a girl friend
yes,i want
yes,i want
ctrl + D 退出

2.使用find命令搜索文件和目录

使用find命令在命令的层次结构中定位到文件和目录,find命令可以使用如文件名,文件大小,文件属主,修改时间和类型的条件进行搜索。find命令是在路径名列表中递归地向下遍历,把符合条件的每一个文件显示在屏幕上。

find pathnames expressions actions

find [命令选项] [路径] [表达式选项]

pathnames:搜索的起始绝对路径或者相对路径

expressions 由一个或多个选项定义的搜索条件。如果定义了多个选项,find命令将使用他们的逻辑与操作的结果,因此将列出所有瞒住全部条件的表达式

actions: 当文件被定位以后需要的操作。默认操作是将满足条件的文件输出到屏幕上。

-name文件名: 查找问指定文件名相匹配的文件,可以加通配符,但是要放在双引号中。

-size[+|-]n:查找大小,大于+n,小于-n,默认n代表512字节大小的数据块的个数


选项    用法
-empty    查找空白文件或目录
-group    按组查找
-name    按文档名称查找
-iname    按文档名称查找,且不区分大小写
-mtime    按修改时间查找
-size    按容量大小查找
-type    按文档类型查找,文件(f)、目录(d)、设备(b,c)、链接(l)等
-user    按用户查找
-exec    对找到的档案执行特定的命令
-a    并且
-o    或者

例:

find ~ -name dog.wolf.baby 从家目录开始按名称查找 dog.wolf.baby文件

find ~ -name “dog.wolf.baby“                         find ~ -name dog."*".baby从家目录开始按名称查找 dog.*.baby文件

利用find命令删除文件

find  ~ -name dog.wolf.boy -exec rm{} \; 无提示

find  ~ -name dog.wolf.boy -ok rm{} \; 提示是否删除

find . -mtime +3 查询修改时间大于三天的文件 ,当前目录下

find   -mtime -3查询修改时间小于三天的文件 ,当前目录下

find -atime +3 查询访问时间少于三天的文件

find ~ -size +20 查询文件大于20个数据块的文件

3.将输出定向到文件中

重定向的符号:

>:覆盖源文件的内容

>>: 在原本件之后追加内容

ls -l wolf/* >dog_wolf 获取的文件信息覆盖到dog_wolf文件当中

4.重定向标准输出和标准错误

find /etc -name passwd 1>output.std

1. 表示将输出信息覆盖到output.std文件中,无标准错误信息

find /etc -name passwd 2>output.std

2. 表示将表春错误信息覆盖到output.std文件中,无标准输出信息

5.输入重定向及tr命令

以上是输出重定向,输入重定向的符号是< 

tr 是translate的前两个字符。该命令的功能是转换,压缩和/或删除来自标准输入字符并将结果写到标准输出上。

tr命令不接受文件名形式的参数,该命令要求他的输入被重定向为某个地方。

例子:

tr  'A-Z' 'a-z' <winsql.sql 表示将winsql.sql 中的大写字母全部转换成小写字母

tr 'A-Z' 'a-z'< winsql.sql > new.sql 表示将winsql.sql中的大写字符全部转换成的小写字母并重定向到new.sql文件中

注意:小写wensql.sql 中的字母为进行改变

6.cut命令

cut是从一个文件中剪切掉某些正文字段,并将他们送到标准输出显示上,实际上是一个文件维护的命令

-f 说明字段(列)

-c 要剪切的字符

-d 说明字段的分隔符 默认为tab

cut -f2 emp.data 

表示截取第二列的文字,默认以tab 分隔不同的列

cut -f-2 -d, dept.data

表示截取以逗号分隔的第二列的文字

cut -c4-7 dept.data 

表示截取从第4个字符到第7个字符的文字

7.paste粘贴命令

paste 【选项】 文件名

paste命令的功能是将每一个文件的每一行用tab字符分隔开并顺序地写到标准输出上,如果命令中没有文件名,或文件名使用了

“-”,paste命令将从标准输入读入,可以使用paste命令将多个文件合并成一个文件

paste name.txt salary.txt>emplist.txt
表示将两个文件中内容合并在一个那文件中

paste  -d, name.txt salary.txt 

-d,表示以逗号分隔

8.使用col命令将tab转换成空格

col -x <emplist.txt >emp.spaces

将emplist.txt中的tab转换成空格到标准输出中,然后标准输入到emp.space文件当中。

9.使用sort命令进行排序

sort命令是对正文数据进行排序并将结果送到标准输出,但是原始文件中的数据不会发生改变。

sort 【选项】【文件名】

-r 进行反向排序

-f忽略字符的大小写

-n 以数字的顺序进行排序

-t :-t c:表示以字符c作为分隔符

-k: -kN :表示按第N个字段排序。

sort -rfu sort.txt    表示对sort.txt文件中的内容进行-r反向排序,-f并忽略大小写和-u去掉重复行

10.使用uniq命令去掉文件中相邻的重复行

-c: 在显示的行数前冠以改行出现的次数

-d:字显示重复行

-u:只显示唯一行

-i:忽略字符的大小写

11.管道操作 (|)

管道(|)操作符连接两个或多个Linux操作系统命令

命令1|命令2|。。。。系统会将命令1的标准输出重定向为命令2的标准输入。

注意:标准错误信息不通过管道传播

who | wc -l 该命令表示who查找所有用户然后通过wc查找行数得到总行数即为linux的用户个数

sort test.sort | uniq -cid   表示排序后的去重操作

xargs :作为参数列表

cat delete_test | xargs rm -f

删除cat列出的文件名

12.使用tee命令分流输出

tee命令的功能就是将标准输入复制给每一个指定的文件和标准输出,也有人成tee命令为T型管道。

cut -f1 -d: /etc/passwd | tee passwd.cut | sort -f | tee passwd.sort | more 

可以发现passwd.cut 中得到剪切的用户名,passwd.sort得到排序后的文件名

13.发送电子邮件

mail  -s "主题" fox      -s: 表示设定邮件的主题   fox用户  也可以是邮箱地址                                                                                      文件内容。。。         

.      小数点表示结束

Cc:     表示输入另外一个用户

14.阅读电子邮件

ls -l /var/spool/mail

列出所有用户的邮箱

cat /var/spool/mail/zhuhaitao 

查看该用户的所有邮件
 

猜你喜欢

转载自blog.csdn.net/qq_40770950/article/details/89412679