《Linux命令行与shell脚本编程大全》 第二十四章 学习笔记
第一部分: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 |
开启打印功能,跟-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/zsh zmodload zsh/net/tcp ztcp -l 8765 #打开新的监听套接字 fd=$REPLY echo "waiting for a client" ztcp -a $fd #接受一个新链接 clientfd=$REPLY echo "client connected" echo "Welcome!" >& $clientfd while [ 1 ]; do read line <& $clientfd if [[ $line = "exit" ]]; then break; else echo "received: $line" echo "feedback:" $line >& $clientfd fi done echo "disconnected" ztcp -c $fd #关闭一个已有链接 ztcp -c $clientfd #关闭一个已有链接
ztcp -a会阻塞线程,直到有连接请求进来
下面是客户端代码
#!/bin/zsh zmodload zsh/net/tcp ztcp localhost 8765 hostfd=$REPLY read line <& $hostfd echo "$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" done ztcp -c $hostfd
如果客户端已经连接,再强制终止服务端,那么重新开启服务端的时候会报错:
$ zsh_server ./zsh_server:ztcp:3: could not bind to port 8765: address already in use
我们只需要执行一下下面命令即可:
ztcp -t
然后再重新开启服务端
转贴请保留以下链接
本人blog地址
推荐阅读
-
《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
-
Linux命令行与shell脚本编程大全笔记(正则表达式)
-
《Linux命令行与shell脚本编程大全》 第十七章 学习笔记
-
Linux命令行与shell脚本编程大全.第3版 第17章
-
《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第十六章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第四章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第五章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第六章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第十一章