一、重定向
1、标准输入和输出
•程序:指令+数据
读入数据:Input 输出数据:Output
• 打开的文件都有一个fd: file descriptor (文件描述符)
• Linux给程序提供三种I/O设备
– 标准输入(STDIN)-0 默认接受来自键盘的输入
– 标准输出(STDOUT)-1 默认输出到终端窗口
– 标准错误(STDERR)-2 默认输出到终端窗口
• I/O重定向:改变默认位置
2、把输出和错误重新定向到文件
STDOUT和STDERR可以被重定向到文件
命令 操作符号 文件名
支持的操作符号包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
• > 文件内容会被覆盖
set –C 禁止将内容覆盖已有文件,但可追加
>| file 强制覆盖
set +C 允许覆盖
• >> 原有内容基础上,追加内容
• 2> 覆盖重定向错误输出数据流
• 2>> 追加重定向错误输出数据流
• 标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
• 合并标准输出和错误输出为同一个数据流进行重定向
– &> 覆盖重定向
– &>> 追加重定向
– COMMAND > /path/to/file.out 2>&1 (顺序很重要)
– COMMAND >> /path/to/file.out2>&1
– ():合并多个程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
二、tr命令
1、使用格式
• tr 转换和删除字符
• tr [OPTION]... SET1 [SET2]
• 选项:
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
————————————————
tr ‘\n’ ‘ ’ < num.txt
2、从文件中导入STDIN
• 使用<来重定向标准输入
• 某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue中的小写字符都转换成写写字符
• tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
• cat > file
abc
how
按ctrl+d离开,可以使用文件来代替键盘的输入
• Cat > filea < fileb
把文件fileb的内容覆盖到fiela中
3、把多行发送给STDIN
• 使用“<<终止词”命令从键盘把多行重导向给STDIN
– 直到 终止词 位置的所有文本都发送给STDIN
– 有时被称为就地文本(heretext)
mail -s "Please Call" admin@magedu.com <<END
> Hi Wang,
>
> Please give me a call when you get in. We may need
> to do some maintenance on server1.
>
> Details when you're on-site
> Zhang
> END
三、管道
1、管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
– 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
– STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
– 最后一个命令会在当前shell进程的子shell进程中执行用来
– 组合多种工具的功能
ls | tr 'a-z' 'A-Z'
• less :一页一页地查看输入
ls -l /etc | less
• mail: 通过电子邮件发送输入
echo "test email" | mail -s "test"user@example.com
• lpr:把输入发送给打印机
echo "test print" | lpr -P printer_name
2、管道中 - 符号
• 示例:
将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar-cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout,因此,就不需要使用临时file了
• tar -cvf - /home | tar-xvf -
3、重定向到多个目标(tee)
• 命令1| tee [-a ] 文件名| 命令2
把命令1的STDOUT保存在文件中,做为命令2的输入
-a 追加
• 使用:
– 保存不同阶段的输出
– 复杂管道的故障排除
– 同时查看和记录输出
四、文本处理工具
文件内容:less和 cat
• 文件截取:head和tail
• 按列抽取:cut
• 按关键字抽取:grep
1、 文件查看命令:cat,tac,rev
cat [OPTION]... [FILE]...
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
2、分页查看文件内容
• more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
• less:一页一页地查看文件或STDIN输出查看时有用的命令包括:
/文本 从光标处向下搜索文本
n/N 跳到下一个 或 上一个匹配
?文本 从光标处向上搜索文本
less 命令是man命令使用的分页器
4、显示文本前或后行内容
• head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#: 指定行数,同-n
• tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:
-f: 跟踪显示文件fd新追加的内容,常用日志监控相当于 --follow=descriptor
-F: 跟踪文件名,相当于—follow=name--retry
• tailf 类似tail –f,当文件不增长时并不访问文件
__________________________________________________________
tail -f 基于文件描述符追踪
tail -F 基于文件名追踪
tailf 基于文件描述符追踪,如果文件不增长,它不会访问磁盘文件,减少了IO访问。常用于日志监控
4、按列抽取文本cut和合并文件paste
• cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
5、cut和paste
• 显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
• paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
4、分析文本的工具
• 文本数据统计:wc
• 整理文本:sort
• 比较文件:diff和patch
1、收集文本统计数据wc
• 计数单词总数、行总数、字节总数和字符总数
• 可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数
• 常用选项
– -l 只计数行数
– -w 只计数单词总数
– -c 只计数字节总数
– -m 只计数字符总数
– -L 显示文件中最长行的长度
2、文本排序sort
• 把整理过的文本显示在STDOUT,不改变原始文件sort [options] file(s)
• 常用选项
– -r执行反方向(由上至下)整理
– -n执行按数字大小整理 如果为数字:先比第一个数字,再比第二个数字
– -f 选项忽略(fold)字符串中的字符大小写
– -u 选项(独特,unique)删除输出中的重复行
– -t c 选项使用c做为字段界定符
– -k X 选项按照使用c字符分隔的X列来整理能够使用多次
3、uniq
• uniq命令:从输入中删除前后相接的重复的行
• uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行,连续且完全相同方为重复
• 常和sort命令一起配合使用:
sort userlist.txt | uniq -c
4、比较文件
• 比较两个文件之间的区别
diff foo.conf foo2.conf
5c5
< use_widgets = no
---
> use_widgets = yes
注明第5行有区别(改变)
5、复制对文件改变patch
• diff 命令的输出被保存在一种叫做“补丁”的文件中
使用-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
• patch 复制在其它文件中进行的改变(要谨慎使用)
适用-b 选项来自动备份改变了的文件
$ diff -u foo.conf foo2.conf >foo.patch
$ patch -b foo.conf foo.patch
五、命令帮助
1、内部命令
help COMMAND
man bash
2、外部命令
1. 命令帮助
1 COMMAND --help
2 COMMAND -h
3 使用手册(manual)
4 man COMMAND
5 信息页
6 info COMMAND
7 程序自身的帮助文档 README
8 INSTALL
9 ChangeLog
10 程序官方文档
11 官方站点:Documentation
12 发行版的官方文档
13 Google
--help选项
• 显示用法总结和参数列表
• 使用的大多数,但并非所有的
示 例 : date --help
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
•[] 表示可选项
•CAPS或<> 表示变化的数据
• ... 表示一个列表
• x |y| z 的意思是“ x 或y 或z “
•-abc的意思是-a -b –c
•{ } 表示分组
man命令
•提供命令帮助的文件
•手册页存放在/usr/share/man
•几乎每个命令都有man的“页面”
•man页面分组为不同的“章节”
•统称为Linux手册
•man命令的配置文件:/etc/man.config(centos6.9) | man_db.config (centos7)
MANPATH /PATH/TO/SOMEWHERE: 指明man文件的搜索位置
• man -M /PATH/TO/SOMEWHERECOMMAND: 到指定位置下搜索COMMAND命令的手册 页并显示
• 中文man需安装包man-pages-zh-CN
man章节
1: 用户命令
2: 系统调用
3: C库调用
4: 设备文件及特殊文件
5: 配置文件格式
6: 游戏
7: 杂项
8: 管理类的命令
9:Linux 内核API
帮助手册中的段落说明:
–NAME 名称及简要说明
–SYNOPSIS 用法格式说明
[ ] 可选内容
<> 必选内容
a|b二选一
{ }分组
...同一内容可出现多次
–DESCRIPTION 详细说明
–OPTIONS 选项说明
–EXAMPLES 示例
–FILES 相关文件
–AUTHOR 作者
–COPYRIGHT版本信息
–REPORTING BUGSbug信息
–SEE ALSO 其它帮助参考
查看man手册页
² man [章节] keyword
² 列出所有帮助
man –a keyword
² 搜索man手册
man -k keyword 列出所有匹配的页面 使用whatis 数据库
² 相当于whatis
man –f keyword
² 打印man帮助文件的路径
man –w [章节] keyword
man命令的操作方法:使用less命令实现
space, ^v, ^f, ^F: 向文件尾翻屏
b, ^b: 向文件首部翻屏
d, ^d: 向文件尾部翻半屏
u, ^u: 向文件首部翻半屏
RETURN, ^N, e, ^E or j or ^J:向文件尾部翻一行
y or ^Y or ^P or k or ^K:向文件首部翻一行
q: 退出
#:跳转至第#行
1G: 回到文件首部
G:翻至文件尾部
man搜索
• /KEYWORD:
以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写;
n: 下一个
N:上一个
• ?KEYWORD:
以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写;
n: 跟搜索命令同方向,下一个
N:跟搜索命令反方向,上一个
Info
• man常用于命令参考,GNU工具info适合通用文档参考。
• 没有参数,列出所有的页面
• info 页面的结构就像一个网站
• 每一页分为“节点”
• 链接节点之前*
• info [命令]
1、导航info页
• Tab键移动到下一个链接方向键,PgUp,PgDn导航
• Tab键移动到下一个链接
• Tab键移动到下一个链接d 显示主题目录
• Home 显示主题首部
• Enter进入选定链接
• n/p/u/l进入下/前/上一层/最后一个链接
• s文字文本搜索
• q退出info
2、通过本地文档获取帮助
System->help(centos6)
Applications-> documentation->help(centos7)
提供的官方使用指南和发行注记
/usr/share/doc目录
• 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
• 常见文档:READMEINSTALL CHANGES
• 不适合其它地方的文档的位置
² 配置文件范例
² HTML/PDF/PS 格式的文档
² 授权书详情
3、通过在线文档获取帮助
• 第三方应用官方文档
– http://www.nginx.org
– http://tomcat.apache.org
– http://httpd.apache.org
– http://www.python.org
• 通过发行版官方的文档光盘或网站可以获得
– 安装指南、部署指南、虚拟化指南等
– 红帽知识库和官方在线文档
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
4、红帽全球技术支持服务
• rhn.redhat.com或者本地卫星服务器/代理服务器
基于网络管理的服务器
RHN代理服务器为RHN流量提供缓存
RHN卫星服务器提供自主的RHN
• RHN账户
为及其注册和基于网络管理的RHN用户
用于系统自动验证的系统ID
•sosreport
收集所有系统上的日志信息的工具,并自动打成压缩包,方便技术支持人员和红帽全球支持提供分析问题依据
5、网站和搜索
http://tldp.org
http://www.slideshare.net
http://www.google.com
Openstackfiletype:pdf
rhcasite:redhat.com/docs