《Linux命令行与shell脚本编程大全》 第二十四章 学习笔记

时间:2022-08-30 14:30:48

第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器

第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本

第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell

第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶


第二十四章:使用Web

 

Lynx程序

Lynx支持三种不同的查看Web页面真实HTML内容的格式:

1.在终端会话中采用curses图形库的文本图形显示

2.文本文件,从web页面中转储的原始数据

3.文本文件,从web页面中转储的原始HTML源码

Lynx命令 基本格式:

lynx options URL

lynx命令行参数

参数 描述
- 接受来自STDIN的选项和参数
-accept_all_cookies 使能Set-Cookie处理的会话,接受cookie但不提示。默认为off
-anonymous 对匿名账户实行限制
-assume_charset=name 未指定字符集的文档的默认字符集
-assume_local_charset=name 本地文件的默认字符集
-assume_unrec_charset=name 有不能识别的字符集时采用的默认字符集
-suth=id:pw 访问受保护文档的认证信息
-base 在-source的文本/html输出前加一条请求URL注释和BASE标签
-bibhost=URL 本地bibp服务器URL(默认为http://bibhost/)
-book 将标签页做为起始页,默认为off
-buried_news 开启对埋藏的引用扫描新闻文章。默认为on
-cache=n 内存中缓存的文档总数
-case 开启用户搜索的大小写区分。默认为off
-center 开启HTML<table>标签中内容的居中对齐。默认为on
-cfg=filename 指定一个配置文件而不用默认的lynx.cfg文件
-child 在开始文件中用向左方向键退出,并停止保存到硬盘上
-cmd_log=filename 将按键命令记录到指定文件中
-cmd_script=filename 从指定文件中读取按键命令
-connect_timeout=n 设置连接超时(以秒为单位)。默认为18000s
-cookie_file=filename 指定用来读取cookie的文件
-cookie_seva_file=filename 指定用来存储cookie的文件
-cookies 处理Set-Cookies头。默认为on
-core 出现严重错误时,强制内核转储(core dump)。默认为off
-crawl 与-traversal一起使用,将每个页面输出到一个文件中,和-dump一起使用时,跟-traversal一样格式化输出,不过输出到STDOUT
-curses_pads 使curses的pad功能来支持左右移动,默认为on
-debug_partial 以MessageSecs延迟来显示增量显示步骤,默认为off
-debug=n 设置状态行消息上的延迟(以秒为单位)。默认为0.000
-display=display 为X窗口程序设置显示变量 
-display_charset=name 终端输出的字符集
-dont_wrap_pre 当-dump和-crawl开启时,不要在<pre>部分自动换行。在交互式会话中标记自动换行。默认为on
-dump 将第一个URL转储到STDOUT并退出
-deitor=editor 用指定编辑器开启编辑模式
-emacskeys 开启类似emacs的按键移动。默认为off
-enable_scrollback 开启对回滚键的兼容。默认为off
-error_file=filename 将HTTP状态码写到指定文件中
-exec 开启执行本地命令
-force_empty_hrefless_a 强制不带href属性的<a>元素为空,默认为off
-force_html 强制将第一个文档解释为HTML。默认为off
-force_secure 对SSL cookie要求安全标记。默认为off
-forms_options 使用基于表单的选项菜单。默认为on
-from 使能Form头的传送。默认为on
-ftp 禁止FTP访问。默认为off
-get_data 为get表单从STDIN读取数据,以---结尾
-head 发送HEAD请求。默认为off
-help 打印用法信息
-hieednlinks=option 指定如何处理隐藏链接。option可以是merge、listonly或ignore
-historical 使用>而不是-->作为注释的结尾。默认为off
-homepage=URL 将主页和起始页分开设置
-image_links 为所有图片开启包含链接功能。默认为off
-index=URL 设置默认的索引文件名
-ismap 当支持客户端MAP时,包含ISMAP链接。默认为off
-link=n 为-crawl生成的lnk#.dat文件设置计数起点。默认为0
-localhost 禁止指向远程主机的URL。默认为off
-locexec  只使能本地文件中的本地程序执行。默认为off
-mime_header 包含MIME头并强制源码转储
-minimal 使用最小注释解析而不是验证注释解析。默认为off
-nested_tables 使用嵌套表逻辑,默认为off
-newschunksize=n 设置分块新闻列表中的文章数目
-newmaxchunk=n 设置分块之前列表中新闻文章数目的上限
-nobold 禁止加粗视频属性
-nobrowse 禁止目录浏览
-nocc 禁止Cc:在给自己发邮件时提示。默认为off
nocolor 禁止彩色输出
-noexec 禁止本地程序执行。默认为on
-nofilereferer 对于本地文件URL,禁止发送Referer头。默认为on
-nolist 在转储中禁止链接列表功能。默认为off
-nolog 禁止将错误消息发送给文档所有者。默认为on
-norestarting_sigwinch 让窗口大小调整处理程序不在重启。默认为off
-nopause 禁止强制暂停状态行消息 
-noprint 禁止一些打印功能,比如-restrictions=print。默认为off 
-noredir 禁止跟随Location:重定向。默认为off 
-noreferer 禁止发送Referer头。默认为off
-noreverse 禁止反转视频属性
-nostatus 禁止各种信息消息。默认为off
-nounderline 禁止给视频加下划线属性
-number_fields 强制对链接和表单输入区域进行标号。默认为off
-number_links 强制对链接标号。默认为off
-partial 在下载时,显示部分页面。默认为on
-partial_thres=n 设定在用部分显示逻辑重绘显示前渲染的行数。默认为-1。表示禁用这个功能
-pauth=id:pw 为受保护的代理服务器设置认证信息
-popup 在弹出窗口而不是单选框中处理单选SELECT选项。默认为off
-post_data 为post表单从STDIN读取数据,以---结尾
-preparsed 和-souce一起使用,显示解析后的文本/html MIME类型,并在源码视图中可视化显示Lynx遇到无效HTML时如何处理。默认为off
prettysrc 在源码视图中使用语法高亮和超链接处理。默认为off
-print 开启打印功能,跟-noprint襄樊。默认为on
-pseudo_inlines 对没有ALT字符串的内嵌图片使用伪ALT字符串。默认为on
-raw 为启动字符集使用默认8 bit字符转换设置或CJK模式。默认为off
-realm 在开始范围内限制对URL的访问,默认为off
reload 清空代理服务器的缓存(只有第一个文档会受影响)。默认为off
-restrictions=options 设置限制选项。使用不带参数的-restrictions来看参数列表
-resubmit_posts 当文档是使用PREV_DOC命令或历史列表返回时,强制用POST方法重新提交(非缓存)表单。默认为off
-rlogin 禁止rlogin功能。默认为off
-selective 请求www.browsable文件来浏览目录
-short_url 开启检查状态行中长URL的开头和结尾。默认为off
-show_cursor 为off时,将光标隐藏到右下角;否则显示光标。默认为on
-show_rate 显示传输速率。默认为on
-soft_dquotes 使用过去Netscape和Mosaic问题的模拟,它会把>当做双引号和标签的共同结束符。默认为off
-source 将第一个URL的源码转储到STDOUT中并退出
-stack_dump 禁止SIGINT清理程序。默认为off
-startfile_ok 和-validate一起允许非HTTP的起始页和主页。默认为off
-stdin 从STDIN读取起始文件。默认为off
-tagsoup 使用TagSoup而不是SortaSGML解析器。默认为off
-telnet 禁止telnet会话。默认为off
-term=term 指定要模拟的终端类型
-tlog 对当前会话使用Lynx追踪日志。默认为on
-tna 使用“文本字段需激活”(Textfields Need Activation)模式。默认为off
-trace 使用Lynx追踪模式。默认为off
-track_mask 定制Lynx追踪模式。默认为0
-traversal 遍历起始文件中的所有HTTP链接
-trim_input_fields 缩小表单中的文本输入段。默认为off
-underline_links 对链接使用加下划线和加粗属性。默认为off
-underscore 对转储使用下划线格式。默认为off
-use_mouse 开启鼠标支持。默认为off
-useragent=Name 设置备用Lynx User-Agent头
-validate 只接受http URL(意为验证)。暗中包含比-anonymous更多的限制,但允许http和https重定向。默认为off
-verbose 使用[LINK]、[IMAGE]和[INLINE]注释和这些图片的文件名。默认为on
-version 显示Lynx版本信息
-vikeys 使能类vi的按键移动。默认为off
-width=n 为格式化转储信息设置屏幕宽度。默认为80列
-with_backspaces 使用-dump或-crawl参数的话,排除输出中的退格。默认为off

Lynx配置文件

Lynx的配置文件名为:lynx.cfg。

可能出现的位置为:/etc/lynx.cfg或者/etc/lynx-cur/lynx.cfg(ubuntu10.10上是在后面的这个位置)

配置文件的格式为:

param:value

Lynx环境变量

变量 描述
LYNX_CFG 指定备用配置文件的位置
LYNX_LSS 指定默认Lynx字符集样式表单的位置
LYNX_SAVE_SPACE 指定用来将文件保存到硬盘的位置
NNTPSERVER 指定用来获取和发布USENET新闻的服务器
PROTOCOL_PROXY 覆盖指定协议的代理服务器
SSL_CERT_DIR 为访问受信任站点指定包含受信任证书的目录
SSL_CERT_FILE 指定含有受信任证书的文件
WWW_HOME 指定Lynx在启动时使用的默认URL

在使用Lynx之前设置这些环境变量。

要指定代理服务器,必须提供协议、服务器名称和端口。

从Lynx中抓取数据

以google为例:

$ lynx -dump http://www.google.com.hk/   jM [1]a [2]Play [3]YouTube [4]sD [5]Gmail [6]w [7]h »
| [8]]w | [9]nJ

Google

_______________________________________________________
Google jM n [10]ijM
[11]yu

Google.com.hk G [12](简^) [13]English

[14]siA [15]Google U [16]Google.com

© 2013 - [17]pvP

References

Visible links
1. http://maps.google.com.hk/maps?hl=zh-TW&tab=wl
2. https://play.google.com/?hl=zh-TW&tab=w8
3. http://www.youtube.com/?gl=HK&tab=w1
4. http://news.google.com.hk/nwshp?hl=zh-TW&tab=wn
5. https://mail.google.com/mail/?tab=wm
6. https://drive.google.com/?tab=wo
7. http://www.google.com.hk/intl/zh-TW/options/
8. http://www.google.com.hk/preferences?hl=zh-TW
9. https://accounts.google.com/ServiceLogin?hl=zh-TW&continue=http://www.google.com.hk/
10. http://www.google.com.hk/advanced_search?hl=zh-HK&authuser=0
11. http://www.google.com.hk/language_tools?hl=zh-HK&authuser=0
12. http://www.google.com.hk/setprefs?sig=0_cVuJopwZwn3goB0OvKduA-xlv7c%3D&hl=zh-CN&source=homepage
13. http://www.google.com.hk/setprefs?sig=0_cVuJopwZwn3goB0OvKduA-xlv7c%3D&hl=en&source=homepage
14. http://www.google.com.hk/intl/zh-TW/ads/
15. http://www.google.com.hk/intl/zh-TW/about.html
16. http://www.google.com.hk/setprefdomain?prefdom=US&sig=0_5sgxO9sXV89IxNH_HcORGCG193g%3D
17. http://www.google.com.hk/intl/zh-TW/policies/

Hidden links:
18. http://www.google.com.hk/imghp?hl=zh-TW&tab=wi
19. http://www.google.com.hk/history/optout?hl=zh-TW

每一个链接都有一个编号,在最后,显示了这些编号的链接地址。

 

cURL程序

curl默认把web页面完整的HTML代码返回到STDOUT中

curl http://www.google.com.hk/

-s:安静模式

-o:指定输出到文件

 

使用zsh处理网络

TCP模块

加载TC模块之后即可使用ztcp命令

zmodload zsh/net/tcp

ztcp命令格式:

ztcp [-acflLtv] [-d fd] [args]

-a:接受一个新链接

-c:关闭一个已有链接

-d:对链接使用指定的文件描述符

-f:强制关闭链接

-l:打开新的监听套接字

-L:列出当前已连接的套接字

-t:如果没有连接在等待,退出

-v:显示连接的详细信息

ztcp命令使用文件描述符来和一个打开的TCP连接交互。默认情况下,zsh使用环境变量REPLY来引用该文件描述符

客户端/服务器模式

使用zsh进行C/S编程

下面给出一个最基本的客户端服务端交互的例子:

先看服务端代码

#!/bin/zshzmodload zsh/net/tcpztcp -l 8765 #打开新的监听套接字fd=$REPLYecho "waiting for a client"ztcp -a $fd #接受一个新链接clientfd=$REPLYecho "client connected"echo "Welcome!" >& $clientfdwhile [ 1 ]; do    read line <& $clientfd    if [[ $line = "exit" ]]; then        break;    else        echo "received: $line"        echo "feedback:" $line >& $clientfd    fidoneecho "disconnected"ztcp -c $fd #关闭一个已有链接ztcp -c $clientfd #关闭一个已有链接

ztcp -a会阻塞线程,直到有连接请求进来

下面是客户端代码

#!/bin/zshzmodload zsh/net/tcpztcp localhost 8765hostfd=$REPLYread line <& $hostfdecho "$line"while [ 1 ]; do    echo -n "enter text:"    read phrase    echo "send $phrase to remote host"    echo $phrase >& $hostfd    if [[ $phrase = "exit" ]]; then        break    fi    read line <& $hostfd    echo "received: $line"doneztcp -c $hostfd

如果客户端已经连接,再强制终止服务端,那么重新开启服务端的时候会报错:

$ zsh_server./zsh_server:ztcp:3: could not bind to port 8765: address already in use

我们只需要执行一下下面命令即可:

ztcp -t

然后再重新开启服务端

 

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/