欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-06 10:05:56
...

 

第一部分: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/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地址

http://su1216.iteye.com/

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

相关标签: Lynx cURL ztcp