Linux----6----输入输出和管道及相关的命令
来源:互联网 发布:淘宝主图素材psd 编辑:程序博客网 时间:2024/06/07 07:45
Linux----6----输入输出和管道及相关的命令
----------------------------------------------------------------------------------------------------------------------
在系统默认的情况下、Shell从键盘读(接收)命令的输入,并将命令的输出显示到屏幕中。
当然也可以在命令行中或shell脚本中指示shell将命令的输入输出重定向到文件。输入重定向是强迫命令从文件中读输入;输出重定向将命令的输出送到一个文件而不是屏幕。当产生错误信息时,这些错误信息将被送到标准错误在屏幕上显示。
Shell创建的每一个进程都要与文件描述符打交道,其实文件描述符就是linux系统内部使用的一个文件代号。文件描述符决定了从哪里读入命令所需的输入和将命令的输出以及错误显示到什么地方。
1:使用find命令查找和搜索文件和目录
(1)find -name 文件名 :说明查找与指定文件名相匹配的文件,在文件中使用通配符,但必须在双引号之。
[dog@localhost app100]$ find -name "dog.*.*"
./dog.boy.white
./dog.boy.black
./dog.girl.white
./dog.girl.black
(2)find -name 文件名 -exec rm(linux命令) {} \;
作用:在每一个所定位的文件上运行指定的命令。大括号{}的含义是将指定的文件名传递给它前面的命令使用。空格和反斜杠\和分号;表示命令的结束。
[dog@localhost app100]$ ls
dog.boy dog.boy.black dog.boy.white dog.girl.black dog.girl.white dog.wolf
[dog@localhost app100]$ find -name "dog.boy.white" -exec rm {} \;
[dog@localhost app100]$ ls
dog.boy dog.boy.black dog.girl.black dog.girl.white dog.wolf
(3)find -name 文件名 -ok rm(linux命令) {} \;
作用:在每一个所定位的文件上运行指定的命令。大括号{}的含义是将指定的文件名传递给它前面的命令使用。空格和反斜杠\和分号;表示命令的结束。与(2)不同之处在于它只是交互式的。
[dog@localhost app100]$ ls
dog.boy dog.boy.black dog.boy.white dog.girl.black dog.girl.white dog.wolf
[dog@localhost app100]$ find -name "dog.boy.white" -ok rm {} \;
< rm ... ./dog.boy.white > ? y
[dog@localhost app100]$ ls
dog.boy dog.boy.black dog.girl.black dog.girl.white dog.wolf
(4)find 目录名 -mtime +3
作用:查找修改时间大于3天的文件,即过去三天没有修改过的文件;
find 目录名 -mtime -3
作用:查找修改时间小于3天的文件,即过去三天修改过的文件;
(5)Find 目录名 -size +3
作用:查找文件大小大于3个512字节数据块的文件
Find 目录名 -size -3
作用:查找文件大小小于3个512字节数据块的文件
2:将输出重定向到文件中
默认情况下,如果同时产生了标准输出和标准错误信息,会同时显示到屏幕中,当然也可以使用重定向。
方法:① > 文件名:覆盖原文件的内容
② >> 文件名:在原文键后面追加
[cat@localhost cat]$ date > result
[cat@localhost cat]$ cat result
Mon Dec 19 10:04:53 CST 2011
3:重定向标准输出和标准错误
(1)将标准输出信息和标准错误输出到不同的文件中:linux系统默认的标准输出,数字是1.可以同时将标准输出和标准错误输出输出到不同的文件中。
[cat@localhost cat]$ find /etc -name passwd 2>errors >output
[cat@localhost cat]$ ls
app app100 app101 app102 errors output result
[cat@localhost cat]$ find /etc -name passwd 2>errors 1>output
[cat@localhost cat]$ ls
app app100 app101 app102 errors output result
(2)将标准输出信息和标准错误输出到相同的文件中
[cat@localhost cat]$ find /etc -name passwd > output_errors 2>&1 ////////*****
[cat@localhost cat]$ cat output_errors
find: /etc/sysconfig/pgsql: Permission denied
/etc/passwd
find: /etc/default: Permission denied
/etc/pam.d/passwd
find: /etc/httpd/conf/ssl.crl: Permission denied
find: /etc/httpd/conf/ssl.crt: Permission denied
find: /etc/httpd/conf/ssl.csr: Permission denied
find: /etc/httpd/conf/ssl.key: Permission denied
find: /etc/httpd/conf/ssl.prm: Permission denied
find: /etc/cups/certs: Permission denied
/etc/uucp/passwd
find: /etc/zebra: Permission denied
说明:2&1表示将标准错误输出2导出到标准信息1所指向的文件中。其实&代表的所有的文件描述符号(0、1、2)。故可以使用下面的表示方法。使用&和>&1区别在于&可能输出一些不需要的多余信息。
[cat@localhost cat]$ find /etc -name passwd &> output_errors
[cat@localhost cat]$ head output_errors
find: /etc/sysconfig/pgsql: Permission denied
/etc/passwd
find: /etc/default: Permission denied
/etc/pam.d/passwd
find: /etc/httpd/conf/ssl.crl: Permission denied
find: /etc/httpd/conf/ssl.crt: Permission denied
find: /etc/httpd/conf/ssl.csr: Permission denied
find: /etc/httpd/conf/ssl.key: Permission denied
find: /etc/httpd/conf/ssl.prm: Permission denied
find: /etc/cups/certs: Permission denied
4 :cut(剪切)命令与paste命令
(1)
①按区域或者行进行剪切:cut -f [列数n] -d[列间的分隔符,默认为table] 文件名
②按字符进行剪切:cut -c[第n个字符]-[第m个字符] 文件名;严格按照列对齐进行剪切。
(2)paste命令的功能是将每一个文件中的每一行用Tab字符分隔开并顺序的写到标准输出上。可以使用paste将多个文件合并为一个文件。通过-d属性可以更改合并后的分隔符号默认为tab。
[cat@localhost cat]$ paste name.txt salsy.txt > r1.txt
[cat@localhost cat]$ cat r1.txt
hupeng 900
lilie 500
huahua 600
xiueyan 800
qm 888
lft 988
sb 144
可以看出paste命令将两个文件进行了合并为一个文件.
注意:paste的合并是横向添加,即横向合并。
如果纵向合并,则用>>. 以及cat指令进行重定向
5:使用col -x指令将Tab转换成空格
[cat@localhost cat]$ cat -A r1.txt
hupeng^M^I900^M$
lilie^M^I500^M$
huahua^M^I600^M$
xiueyan ^M^I800^M$
qm^M^I888^M$
lft^M^I988^M$
sb^M^I144^M$
可以看出^I就是Tab字符。
6:使用 sort命令进行排序
使用cat >创建文件,使用ctrl+D结束输入。
[cat@localhost cat]$ cat > test.sort
a
b
w
Q
A
B
L
l
o
s
[cat@localhost cat]$ sort test.sort
a
A
b
B
l
L
o
Q
s
w
可以看出使用sort命令将文件中字符进行排序,并且俺ASCii进行了排序。
参数说明:
① -r: 进行反向排序(降序),r是reverse的第一个字母。
② -f: 忽略字符的大小写,f是folds的第一个字母。
③ -n: 以数字的顺序进行排序,n是numeric的第一个字母
④ -t: -t c表示以字符C为分隔符
⑤ -k: -k N表示按第N个字段排序
⑥ -u: 去掉输出中的重复行,u是unipue的第一个字母。
sort -rfu:表示按反向、忽略大小写、去掉重复行。
7:使用uniq指令去掉文件中相邻的重复行,注意源文件的数据不变
原始数据如下:
cat@localhost cat]$ cat test.dat
a
A
A
b
c
b
c
w
k
l
(1)[cat@localhost cat]$ uniq test.dat
a
A
b
c
b
c
w
k
L
可以看出删除了相邻重复行的元素
(2)[cat@localhost cat]$ uniq -c test.dat
1 a
2 A
1 b
1 c
1 b
1 c
1 w
1 k
1 l
使用-c参数删除相邻重复行的元素后显示了重复的次数
(3)[cat@localhost cat]$ uniq -d test.dat
A
使用-d只显示重复行。
[cat@localhost cat]$ uniq -d -c test.dat
2 A
(4)[cat@localhost cat]$ uniq -ci test.dat
3 a
1 b
1 c
1 b
1 c
1 w
1 k
1 l
使用-i忽略大小写,此时a处多了3
(5)[cat@localhost cat]$ uniq -ciu test.dat
1 b
1 c
1 b
1 c
1 w
1 k
1 l
使用-u只显示唯一的行。
8:管道(|)操作
可以使用管道(|)操作符号链接两个(或多个)Linux操作系统命令。
语法:命令1(|)命令2
功能说明:
①系统会将命令1的标准输出重定向为命令2的标准输入
②可以在任何两个命令之间插入一个管道操作符,(|)之后的命令将前面命令的标准输出作为标准输入。
③标准错误信息不通过管道传递
例1:[dog@localhost dog]$ who
cat :0 Dec 19 16:55
cat pts/0 Dec 19 16:55 (:0.0)
dog pts/1 Dec 19 20:24 (172.20.71.236)
[dog@localhost dog]$ who|wc -l
3
说明:通过管道操作将who的标准输出作为了wc标准输入,这里计算行数,来获取当前工作的用户数
例2:[dog@localhost dog]$ ls -lF /bin |more
说明:使用管道将ls -lF的标准输出作为more标准输入
④如果管道后命令有参数,则使用xargs命令用于管道后的命令使用参数的情况,并且它是将管道前每一个输出的数据作为管道后的输入,并组成一个命令参数列表。
[cat@localhost app]$ ls
app103 app104
[cat@localhost app]$ ls .|rm -r
rm: too few arguments
Try `rm --help' for more information.
可以看出
[cat@localhost app]$ ls .|xargs rm -r
[cat@localhost app]$ ls
说明:xargs的作用就是将管道前得所有的每一个输出和后面的命令参数进行衔接,组成一个命令参数列表。
⑤说明:实际应用中要根据实际管道前输出的情况,来选择xargs;如果是要对管道前标准输出是整体操作,则不加xargs;如果是对管道的标准输出的每一项操作,则要加上xargs.
9:使用tee命令分流输出(T型管道)
功能:将前一个命令的输出结果直接输入给后一个命令,同时还要将前面命令的结果保存到一个文件。
[cat@localhost app]$ cat app102 |tee r1 |cut -c1
I
q
h
h
h
[cat@localhost app]$ cat r1
I LOVE CHINA!xqy
qm
hjj
hj
hjl
可以看出使用tee分流命令获取了分流的数据
10:发送电子邮件
方法1:
(1)命令格式mail -s "邮件主题" 接收用户名 ;输入回车
(2)输入正文
(3)在结束的地方输入" ."输入回车
(4)Cc是复写本的意思,表示可以发送给其他用户,回车后推出
[cat@localhost app]$ mail -s "News" dog
I LOVE YOU~.
.
Cc:
方法2:
(1)命令格式mail -s "邮件主题" 接收用户名 < 指定文件 ;回车发送
[cat@localhost app]$ mail -s "News" dog <r1
11:查看电子邮件
所有的电子邮件都存放在:/var/spool/mail/用户名中,linux为每一个用户准备了一个邮件箱(文件)以存放用户的电子邮件,其文件名(邮箱)就是用户名,它存放的目录为/val /spool/mai。
[dog@localhost dog]$ cd /var/spool/mail
[dog@localhost mail]$ ls
cat dog root
[dog@localhost mail]$ ls -l
total 16
-rw-rw---- 1 cat mail 0 Nov 30 10:06 cat
-rw-rw---- 1 dog mail 1300 Dec 20 09:24 dog
-rw------- 1 root root 11394 Dec 20 04:02 root
可以看出总共有三个邮箱,就本机的三个用户
说明:(1)普通用户不能使用cat浏览其他用户的邮件。超级用户可以。
(2)使用mail可用直接进入当前的用户的邮件箱
(3)使用q+Enter可把查看后的邮件删除
(4)使用 x+Enter 查看后不删除邮件
(5)输入数字+Enter则查看相对应的邮件。
[dog@localhost mail]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/dog": 4 messages 4 new
>N 1 cat@localhost.locald Tue Dec 20 09:23 16/641 "News"
N 2 cat@localhost.locald Tue Dec 20 09:24 20/659 "News"
N 3 cat@localhost.locald Tue Dec 20 10:00 20/660 "Study"
N 4 cat@localhost.locald Tue Dec 20 10:35 19/676 "Study"
12:利用管道发送邮件
[cat@localhost app]$ ls -l |mail -s "list of book" dog [dog@localhost mail]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/dog": 5 messages 5 new
>N 1 cat@localhost.locald Tue Dec 20 09:23 16/641 "News"
N 2 cat@localhost.locald Tue Dec 20 09:24 20/659 "News"
N 3 cat@localhost.locald Tue Dec 20 10:00 20/660 "Study"
N 4 cat@localhost.locald Tue Dec 20 10:35 19/676 "Study"
N 5 cat@localhost.locald Tue Dec 20 10:49 20/893 "list of book"
& 5
Message 5:
From cat@localhost.localdomain Tue Dec 20 10:49:39 2011
Date: Tue, 20 Dec 2011 10:49:39 +0800
From: cat@localhost.localdomain
To: dog@localhost.localdomain
Subject: list of book
total 16
drwxrwxr-x 2 cat cat 4096 Dec 20 08:06 app100
drwxrwxr-x 2 cat cat 4096 Dec 20 08:06 app101
-rw-rw-r-- 1 cat cat 31 Dec 20 08:55 app102
-rw-rw-r-- 1 cat cat 31 Dec 20 09:09 r1
可以看出:通过管道一样可以发送邮件。邮件内容就是管道前命令的标准输出。
- Linux----6----输入输出和管道及相关的命令
- 【linux 命令】输入输出重定向及管道
- Linux和管道操作相关的命令
- Blog4@linux管理输入输出、管道、Vim、gedit的相关用法
- 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道
- 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道
- linux命令温故知新:输入输出重定向/管道
- linux输入输出重定向及管道
- Linux输入输出重定向及管道
- Linux下Shell的管道及命令
- Linux系统下的管理输入输出、管道、vim、gedit的相关用法
- Linux的管道符和历史命令
- 标准输入输出及管道
- 【学习Linux】输入输出的重定向,管道
- linux和性能相关的命令及系统性能诊断
- linux和性能相关的命令及系统性能诊断
- linux和性能相关的命令及系统性能诊断
- linux和性能相关的命令及系统性能诊断
- Microsoft ADO constants include file for JavaScript
- Linux Shell常用技巧(一)
- ssh 出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type错误
- Android LockScreen
- 基于android手机的3G+GPS远程控制模型车工程-电路改装2-电源改造与模块的连接
- Linux----6----输入输出和管道及相关的命令
- 我对《第三届360软件大赛--第一阶段题目》的解答
- SVN版本库迁移
- 40套新鲜出炉的精美圣诞节矢量图片素材
- Android * HandleMessage的模型
- Rational Rose 2003激活
- CSDN!
- 锂电池相关
- apache加密访问