分类: linux

  • aliyundrive-webdav

    aliyundrive-webdav

     

    GitHub Actions
    PyPI
    Docker Image
    aliyundrive-webdav
    Crates.io

    1f680.svg_ Help me to become a full-time open-source developer by sponsoring me on GitHub

    阿里云盘 WebDAV 服务,主要使用场景为配合支持 WebDAV 协议的客户端 App 如 InfusenPlayer 等实现在电视上直接观看云盘视频内容, 支持客户端 App 直接从阿里云盘获取文件播放而不经过运行本应用的服务器中转, 支持上传文件,但受限于 WebDAV 协议不支持文件秒传。

    请注意:V2 版本基于阿里云盘开放平台接口实现,不再支持阿里云盘 Web 和 App 版本获取的 refresh token。 由于本项目作者不再使用梅林固件,V2 版本不再免费支持 Koolshare 梅林固件系统,如有需要请考虑付费支持

    如果项目对你有帮助,请考虑捐赠支持项目持续维护。 也可以考虑加入aliyundrive-webdav 知识星球获取咨询和技术支持服务。

    Note

    本项目作者没有上传需求, 故上传文件功能测试不全面且没有持续迭代计划.

    安装

     

    可以从 GitHub Releases 页面下载预先构建的二进制包, 也可以使用 pip 从 PyPI 下载:

    pip install aliyundrive-webdav

    如果系统支持 Snapcraft 比如 Ubuntu、Debian 等,也可以使用 snap 安装:

    sudo snap install aliyundrive-webdav

    OpenWrt 路由器

     

    GitHub Releases 中有预编译的 ipk 文件, 目前提供了 aarch64/arm/mipsel/x86_64/i686 等架构的版本,可以下载后使用 opkg 安装,以 nanopi r4s 为例:

    wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
    wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/luci-app-aliyundrive-webdav_2.3.3_all.ipk
    wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/luci-i18n-aliyundrive-webdav-zh-cn_2.3.3-1_all.ipk
    opkg install aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
    opkg install luci-app-aliyundrive-webdav_2.3.3_all.ipk
    opkg install luci-i18n-aliyundrive-webdav-zh-cn_2.3.3-1_all.ipk

    其它 CPU 架构的路由器可在 GitHub Releases 页面中查找对应的架构的主程序 ipk 文件下载安装, 常见 OpenWrt 路由器 CPU 架构如下表(欢迎补充):

    路由器 CPU 架构
    nanopi r4s aarch64_generic
    小米 AX3600 aarch64_cortex-a53
    斐讯 N1 盒子 aarch64_cortex-a53
    Newifi D2 mipsel_24kc
    Pogoplug arm_mpcore

    Tips: 不清楚 CPU 架构类型可通过运行 opkg print-architecture 命令查询。

    OpenWrt 配置界面

    Docker 运行

     

    docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \
      -v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \
      -e REFRESH_TOKEN='your refresh token' \
      -e WEBDAV_AUTH_USER=admin \
      -e WEBDAV_AUTH_PASSWORD=admin \
      messense/aliyundrive-webdav

    其中,REFRESH_TOKEN 环境变量为你的阿里云盘 refresh_tokenWEBDAV_AUTH_USER 和 WEBDAV_AUTH_PASSWORD 为连接 WebDAV 服务的用户名和密码。

    QNAP 威联通 NAS

     

    QNAP 插件

     

    qnap-aliyunpan-webdav by @iranee.

    ContainerStation (Docker)

     

    管理员登陆 NAS 后安装 ContainerStation 并启动服务,在 Management (管理) 标签中 Create Application (新建应用),配置如下

    version: '3.3'
    services:
      aliyundrive-webdav:
        container_name: aliyundrive-webdav
        restart: unless-stopped
        ports:
          - '8080:8080'
        environment:
          - 'REFRESH_TOKEN=mytoken...'
        image: messense/aliyundrive-webdav

    其中 REFRESH_TOKEN 文档最下面说明;:8080 网盘访问映射端口,可以按需改为其他的。

    点击 Create (创建)后启动,访问 http://nas地址:8080/ 即可看到你网盘的自动生成索引网页文件。

    参考文档

    rclone

     

    为了避免重复上传文件,使用 rclone 时推荐使用 Nextcloud WebDAV 模式,可以支持 sha1 checksums. 另外需要配合 --no-update-modtime 参数,否则 rclone 为了更新文件修改时间还是会强制重新上传。

    举个例子:

    rclone --no-update-modtime copy abc.pdf aliyundrive-nc://docs/

    获取 refresh token

     

    扫码获取 refresh token

    命令行用法

     

    $ aliyundrive-webdav --help
    WebDAV server for AliyunDrive
    
    Usage: aliyundrive-webdav [OPTIONS]
           aliyundrive-webdav <COMMAND>
    
    Commands:
      qr    Scan QRCode
      help  Print this message or the help of the given subcommand(s)
    
    Options:
          --host <HOST>
              Listen host
    
              

    [env: HOST=]

    [default: 0.0.0.0]

    -p, –port <PORT> Listen port

    [env: PORT=]

    [default: 8080]

    –client-id <CLIENT_ID> Aliyun drive client_id

    [env: CLIENT_ID=]

    –client-secret <CLIENT_SECRET> Aliyun drive client_secret

    [env: CLIENT_SECRET=]

    –drive-type <DRIVE_TYPE> Aliyun drive type

    [env: DRIVE_TYPE=]

    Possible values: – resource: Resource drive – backup: Backup drive – default: Default drive -r, –refresh-token <REFRESH_TOKEN> Aliyun drive refresh token

    [env: REFRESH_TOKEN=]

    -U, –auth-user <AUTH_USER> WebDAV authentication username

    [env: WEBDAV_AUTH_USER=]

    -W, –auth-password <AUTH_PASSWORD> WebDAV authentication password

    [env: WEBDAV_AUTH_PASSWORD=]

    -I, –auto-index Automatically generate index.html -S, –read-buffer-size <READ_BUFFER_SIZE> Read/download buffer size in bytes, defaults to 10MB

    [default: 10485760]

    –upload-buffer-size <UPLOAD_BUFFER_SIZE> Upload buffer size in bytes, defaults to 16MB

    [default: 16777216]

    –cache-size <CACHE_SIZE> Directory entries cache size

    [default: 1000]

    –cache-ttl <CACHE_TTL> Directory entries cache expiration time in seconds

    [default: 600]

    –root <ROOT> Root directory path

    [env: WEBDAV_ROOT=]

    [default: /]

    -w, –workdir <WORKDIR> Working directory, refresh_token will be stored in there if specified –no-trash Delete file permanently instead of trashing it –read-only Enable read only mode –tls-cert <TLS_CERT> TLS certificate file path

    [env: TLS_CERT=]

    –tls-key <TLS_KEY> TLS private key file path

    [env: TLS_KEY=]

    –strip-prefix <STRIP_PREFIX> Prefix to be stripped off when handling request

    [env: WEBDAV_STRIP_PREFIX=]

    –debug Enable debug log –no-self-upgrade Disable self auto upgrade –skip-upload-same-size Skip uploading same size file –prefer-http-download Prefer downloading using HTTP protocol –redirect Enable 302 redirect when possible -h, –help Print help (see a summary with ‘-h’) -V, –version Print version

    [env: HOST=]

    [default: 0.0.0.0]

    -p, –port Listen port

    [env: PORT=]

    [default: 8080]

    –client-id Aliyun drive client_id

    [env: CLIENT_ID=]

    –client-secret Aliyun drive client_secret

    [env: CLIENT_SECRET=]

    –drive-type Aliyun drive type

    [env: DRIVE_TYPE=]

    Possible values: – resource: Resource drive – backup: Backup drive – default: Default drive -r, –refresh-token Aliyun drive refresh token

    [env: REFRESH_TOKEN=]

    -U, –auth-user WebDAV authentication username

    [env: WEBDAV_AUTH_USER=]

    -W, –auth-password WebDAV authentication password

    [env: WEBDAV_AUTH_PASSWORD=]

    -I, –auto-index Automatically generate index.html -S, –read-buffer-size Read/download buffer size in bytes, defaults to 10MB

    [default: 10485760]

    –upload-buffer-size Upload buffer size in bytes, defaults to 16MB

    [default: 16777216]

    –cache-size Directory entries cache size

    [default: 1000]

    –cache-ttl Directory entries cache expiration time in seconds

    [default: 600]

    –root Root directory path

    [env: WEBDAV_ROOT=]

    [default: /]

    -w, –workdir Working directory, refresh_token will be stored in there if specified –no-trash Delete file permanently instead of trashing it –read-only Enable read only mode –tls-cert TLS certificate file path

    [env: TLS_CERT=]

    –tls-key TLS private key file path

    [env: TLS_KEY=]

    –strip-prefix Prefix to be stripped off when handling request

    [env: WEBDAV_STRIP_PREFIX=]

    –debug Enable debug log –no-self-upgrade Disable self auto upgrade –skip-upload-same-size Skip uploading same size file –prefer-http-download Prefer downloading using HTTP protocol –redirect Enable 302 redirect when possible -h, –help Print help (see a summary with ‘-h’) -V, –version Print version” tabindex=”0″ role=”button” style=”box-sizing: border-box; position: relative; display: flex !important; padding: 0px !important; font-size: 14px; font-weight: var(–base-text-weight-medium, 500); line-height: 20px; white-space: nowrap; vertical-align: middle; cursor: pointer; user-select: none; border: 0px; border-radius: 6px; appearance: none; color: var(–fgColor-accent, var(–color-accent-fg)); background-color: transparent; box-shadow: none; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1) 0s, background-color, box-shadow, border-color; justify-content: center !important; align-items: center !important; margin: var(–base-size-8, 8px) !important; width: var(–control-small-size, 28px); height: var(–control-small-size, 28px);”>

    Note

    注意:TLS/HTTPS 暂不支持 MIPS 架构。

    Note

    注意:启用 --skip-upload-same-size 选项虽然能加速上传但可能会导致修改过的同样大小的文件不会被上传

    License

     

    This work is released under the MIT license. A copy of the license is provided in the LICENSE file.

  • centos端口不通

    检测网络:iptables -S -t nat

     iptables -P  FORWARD  ACCEPT

    开机自启:

    vim   /etc/rc.local 
    iptables -P FORWARD   ACCEPT
  • tcpdump抓包工具命令–详解

    tcpdump是工作中必用的一道指令,如果熟悉掌握,将会很快的帮你解决问题!文章写的有点多,但是我认为都很有用!

     

    参数列表

      设置不解析域名提升速度  
    -n 不把ip转化成域名,直接显示 ip,避免执行 DNS lookups 的过程,速度会快很多  
    -nn 不把协议和端口号转化成名字,速度也会快很多。  
    -N 不打印出host 的域名部分.。比如,,如果设置了此选现,tcpdump 将会打印’nic’ 而不是 ‘nic.ddn.mil’.  
         
      过滤指定网卡的数据包  
    -i 指定要过滤的网卡接口,如果要查看所有网卡,可以 -i any  
         
      过滤特定流向的数据包  
    -Q 选择是入方向还是出方向的数据包,可选项有:in, out, inout,也可以使用 –direction=[direction] 这种写法  
         
      常用的一些参数  
    -A 以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据  
    -l 基于行的输出,便于你保存查看,或者交给其它工具分析
    tcpdump -nn -A -s1500 -l | egrep -i ‘User-Agent:|Host’
    通过 egrep 可以同时提取用户代理和主机名(或其他头文件):
     
    -q 简洁地打印输出。即打印很少的协议相关信息, 从而输出行都比较简短.  
    -c 捕获 count 个包 tcpdump 就退出  
    -s tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。  
    -S 使用绝对序列号,而不是相对序列号  
    -C file-size,tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创建一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)  
    -F 使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.  
         
      过滤结果输出到文件  
    -w 使用 -w 参数后接一个以 .pcap 后缀命令的文件名,就可以将 tcpdump 抓到的数据保存到文件中。使用 wireshark 打开此文件便可进行分析 tcpdump icmp -w icmp.pcap
    -r 从文件中读取数据,读取后,我们照样可以使用上述的过滤器语法进行过滤分析。 tcpdump icmp -r all.pcap
         
      对输出内容进行控制的参数  
    -D 显示所有可用网络接口的列表  
    -e 每行的打印输出中将包括数据包的数据链路层头部信息  
    -E 揭秘IPSEC数据  
    -L 列出指定网络接口所支持的数据链路层的类型后退出  
    -Z 后接用户名,在抓包时会受到权限的限制。如果以root用户启动tcpdump,tcpdump将会有超级用户权限。  
    -d 打印出易读的包匹配码  
    -dd 以C语言的形式打印出包匹配码.  
    -ddd 以十进制数的形式打印出包匹配码  
         
      控制详细内容的输出  
    -v 产生详细的输出. 比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。  
    -vv 产生比-v更详细的输出. 比如NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码。(摘自网络,目前我还未使用过)  
    -vvv 产生比-vv更详细的输出。比如 telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来(摘自网络,目前我还未使用过)  
         
      控制时间的显示  
    -t 在每行的输出中不输出时间  
    -tt 在每行的输出中会输出时间戳  
    -ttt 输出每两行打印的时间间隔(以毫秒为单位)  
    -tttt 在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)  
         
      显示数据包的头部  
    -x 以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部)  
    -xx 以16进制的形式打印每个包的头部数据(包括数据链路层的头部)  
    -X 以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部),这在分析一些新协议的数据包很方便。  
    -XX 以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部),这在分析一些新协议的数据包很方便。  

    过滤规则组合

    有编程基础的同学,对于下面三个逻辑运算符应该不陌生了吧

    • and:所有的条件都需要满足,也可以表示为 &&
    • or:只要有一个条件满足就可以,也可以表示为 ||
    • not:取反,也可以使用 !

    举个例子,我想需要抓一个来自10.5.2.3,发往任意主机的3389端口的包

    $ tcpdump src 10.5.2.3 and dst port 3389
    

    当你在使用多个过滤器进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,因为你需要使用引号将其包含。例子如下:

    $ tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

    而在单个过滤器里,常常会判断一条件是否成立,这时候,就要使用下面两个符号

    • =:判断二者相等
    • ==:判断二者相等
    • !=:判断二者不相等

    当你使用这两个符号时,tcpdump 还提供了一些关键字的接口来方便我们进行判断,比如

    • if:表示网卡接口名、
    • proc:表示进程名
    • pid:表示进程 id
    • svc:表示 service class
    • dir:表示方向,in 和 out
    • eproc:表示 effective process name
    • epid:表示 effective process ID

    内容输出结构

    21
    :
    26
    :
    49.013621 IP 172.20
    .20
    .1
    .15605 > 172.20
    .20
    .2
    .5920
    : Flags [
    P
    .
    ]
    , seq 49
    :
    97
    , ack 106048
    , win 4723
    , length 48

    从上面的输出来看,可以总结出:

    1. 第一列:时分秒毫秒 21:26:49.013621
    2. 第二列:网络协议 IP
    3. 第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号
    4. 第四列:箭头 >, 表示数据流向
    5. 第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号
    6. 第六列:冒号
    7. 第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面

    理解 Flag 标识符

    截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。

    21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (
    6
    ), length 64
    )
        192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 0
    
    21:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (
    6
    ), length 44
    )
        124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440
    ], length 0
    
    21:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (
    6
    ), length 40
    )
        192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0
    

     

    最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。 > 符号代表数据的方向。

    此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:

    • [S] : SYN(开始连接)
    • [.] : 没有 Flag
    • [P] : PSH(推送数据)
    • [F] : FIN (结束连接)
    • [R] : RST(重置连接)

    而第二条数据的 [S.] 表示 SYN-ACK,就是 SYN 报文的应答报文。

     

    先看看 tcpdump 的具体参数及意义:

    -i :指定 tcpdump 监听的网络接口

    -s :指定要监听数据包的长度

    -c :指定要监听的数据包数量,达到指定数量后自动停止抓包

    -w :指定将监听到的数据包写入文件中保存

    -A :指定将每个监听到的数据包以 ACSII 可见字符打印

    -n :指定将每个监听到数据包中的域名转换成 IP 地址后显示

    -nn :指定将每个监听到的数据包中的域名转换成 IP 、端口从应用名称转换成端口号后显示

    -e :指定将监听到的数据包链路层的信息打印出来,包括源 mac 和目的 mac ,以及网络层的协议

    -p :将网卡设置为非混杂模式,不能与 host broadcast 一起使用

    -r :指定从某个文件中读取数据包

    -S :指定打印每个监听到的数据包的 TCP 绝对序列号而非相对序列号

    OK ,参数介绍先到这里,下面看几个具体例子

    先来看一个比较基本的用法:

    #tcpdump -i eth0
    @eth0为参数值,表示需要抓包的网口,这是个必需参数哦。

    tcpdump 支持很多的关键字,下面先看几个例子:

    #tcpdump -i eth0 host 192.168.0.250 
    @在网口eth0上抓取主机地址为192.168.0.250的所有数据包。
    #tcpdump -i eth0 net 192.168.0.0/24 
    @在网口eth0上抓取网络地址为192.168.0.0/24的所有数据包
    #tcpdump -i eth0 port 80 
    @在网口eth0上抓取端口为80的所有数据包(注意,这里不区分是源端口还是目的端口)
    当然,我们也可以指定源端口或目的端口
    #tcpdump -i eth0 src port 80 and dst port 6100
    @在网口eth0上抓取源端口为80且目的端口为6100的数据包,这里用到了and逻辑运算符,后面再介绍
    #tcpdump -i eth0 icmp 
    @在网口eth0上抓取所有icmp协议的数据包
    以上几个例子,可以大致体现出tcpdump的基本用法。

    实际上, tcpdump 主要包括三种类型的关键字,第一种是关于类型的关键字,主要包括 host net port ,如上面的例( 1 )( 2 )( 3 ),第二种 是确定传输方向的关键字,主要包括 src dst src or dst src and dst ,这些关键字指明了传输的方向,如上面的例( 4 )。第三种是协议关键字,包括 fddi ip arp rarp tcp udp imcp 等,如上面的例( 5 )。

    除了这三种类型的关键字外,还有其他重要的关键字,如: gateway broadcast less greater ,还有三种逻辑运算,取非运算是 ‘not’ ‘!’ ,与运算符是 ‘and’ ‘&&’

    或运算符是 ‘or’ ‘||’ ,这些关键字可以组合起来构成强大的组合条件来满足我们的需求。

    #tcpdump -i eth0 -s 1400 -nn host 192.168.0.250 and ! 192.168.0.74 and icmp -e
    @抓取网口eth0上192.168.0.250与除192.168.0.74外的其他主机之间的icmp报文
    #tcpdump -i eth0 -s 1400 -nn tcp and \(host 192.168.0.250 and ! 192.168.0.74\)
    @抓取网口eth0上192.168.0.250与除192.168.0.74外的所有tcp数据包,
    这里用到了括号,注意,在tcpdump中使用括号时必须用转义
    #tcpdump -i eth0 ether src or dst 00:21:85:6C:D9:A3
    @抓取网口eth0上源mac地址或目的mac地址为00:21:85:6C:D9:A3的所有数据包,
    注意,这里的mac地址格式必须以':'分隔。
  • 如何解决Linux系统盘符飘移问题

    Q:

    什么是盘符漂移?盘符漂移导致的影响有哪些?有哪些方式可以解决盘符漂移引起的问题?

    A:

    1. 什么是盘符漂移? 在Linux系统中,若存在多块硬盘,通常内核分配盘符的顺序是/dev/sda、/dev/sdb、/dev/sdc……。在系统启动过程中,内核会安装扫描到硬盘的顺序分配盘符。在系统启动后,热插拔硬盘,系统会顺序分配盘符。在同一个硬盘槽位,每次插入硬盘后,在系统中的盘符都可能不一致。例如,第一次插入时,盘符可能为/dev/sdb,将硬盘拔出,再次插入硬盘,盘符可能变为/dev/sde,出现盘符漂移。若系统连接阵列,由于LUN上报的顺序,导致每次扫LUN的结果,也可能不一致,出现盘符漂移。若系统连接阵列,当系统启动时,也可能由于驱动加载顺序的原因,导致本地盘与阵列盘出现换位(例如,阵列没有LUN映射时,本地盘盘符是/dev/sda;当阵列有LUN映射时,本地盘符生成在了阵列LUN之后),出现盘符漂移。
    2. 盘符漂移导致的影响有哪些?
      1. 如果是系统盘,出现漂移,会导致系统无法启动;
      2. 业务盘如果是对盘符进行操作,盘符漂移,会引起业务问题。
    3. 有哪些方式可以解决盘符漂移引起的问题?
      1. 如果系统盘漂移,导致了系统无法启动;或者业务盘漂移,导致业务失败,可使用UUID绑定方式,规避盘符漂移带来的影响。例如: 在/boot/grub/menu.lst或/etc/fstab文件中添加配置条目,使用UUID实现分区文件系统的挂载。例如root=UUID=19e9dda3-5a38-484d-a9b0-fa6b067d0331或UUID=894d76a6-b175-4eb1-89e5-3fd8d146eab7 /archive ext3 defaults 0 0(ls –l /dev/disk/by-* ,可以查询系统设备绑定信息)
      2. 如果系统使用Device Mapper Multipath对物理盘进行管理,可使用Multipath的盘符绑定设置,避免盘符的漂移和多台主机间盘符一致性的问题。例如: 在/etc/multipath.conf 文件中,添加multipaths {multipath {wwid 360060e80058e980000008e9800000007alias mpath0}}使用阵列LUN的WWN号,与特定盘符进行绑定。
      3. 如果阵列相关驱动(FC或iSCSI)先于本地盘驱动加载,会导致本地盘漂移到阵列盘后边(若不可接受),可以调整系统驱动的加载顺序(系统启动镜像),解决阵列LUN与本地盘的漂移问题。例如: SuSE系统,在/etc/sysconfig/kernel文件中可观察模块加载顺序。Redhat 6之前版本,在/etc/modprobe.conf 文件中可观察模块启动顺序。Redhat 6系统,使用dracut加载驱动,在/usr/share/dracut/modules.d目录下可查看。可修改menu.lst文件,通过在启动项中添加类似“rdloaddriver=megaraid_sas , rdloaddriver=megaraid_sas”的参数可指定驱动优先被加载。
      4. 可以使用udev为设备别名,建立符号链接的方式,避免盘符漂移对应用产生影响。

    下面介绍几种方法来获得UUID.

      1.最简单的方法就是使用blkid命令,它主要用来对系统的块设备(包括交换分区)所使用的文件系统类型,LABEL,UUID等信息查询. 使用这个命令需要安装e2fsprogs包.

      复制代码

      代码如下:

      root@10.1.1.200:~# dpkg -l | grep e2fsprogs

      ii e2fsprogs 1.41.3-1 ext2/ext3/ext4 file system utilities

      ii libuuid-perl 0.02-4 Perl extension for using UUID interfaces as defined in e2fsprogs

      root@10.1.1.200:~# blkid

      /dev/sda1: UUID=”b20e80f1-c88d-4918-9d9b-75cd7906629e” TYPE=”ext3″

      /dev/sda5: TYPE=”swap” UUID=”1fb3d17b-b2fe-470d-b39c-f00c4a30efbf”

      /dev/sda6: UUID=”c7050200-7efb-468c-81d1-a3add309bee1″ TYPE=”ext3″ SEC_TYPE=”ext2″

      /dev/sda7: UUID=”934e4e22-3431-4707-8d47-dca47e76f448″ TYPE=”xfs”

      /dev/hioa: UUID=”de0af117-ad92-4867-aa21-3e7d423e8864″ TYPE=”xfs”

      root@10.1.1.200:~# blkid /dev/sda1

      /dev/sda1: UUID=”b20e80f1-c88d-4918-9d9b-75cd7906629e” TYPE=”ext3″

      root@10.1.1.200:~# cat /etc/blkid.tab

      /dev/sda1

      /dev/sda5

      /dev/sda6

      /dev/sda7

      /dev/hioa

      2.通过浏览/dev/disk/by-uuid/下的设备文件信息.

      复制代码

      代码如下:

      root@10.1.1.200:~# ls -l /dev/disk/by-uuid/

      total 0

      lrwxrwxrwx 1 root root 10 2013-03-19 11:01 1fb3d17b-b2fe-470d-b39c-f00c4a30efbf -> ../../sda5

      lrwxrwxrwx 1 root root 10 2013-03-19 11:01 934e4e22-3431-4707-8d47-dca47e76f448 -> ../../sda7

      lrwxrwxrwx 1 root root 10 2013-03-19 11:01 b20e80f1-c88d-4918-9d9b-75cd7906629e -> ../../sda1

      lrwxrwxrwx 1 root root 10 2013-03-19 11:01 c7050200-7efb-468c-81d1-a3add309bee1 -> ../../sda6

      lrwxrwxrwx 1 root root 10 2013-03-19 11:02 de0af117-ad92-4867-aa21-3e7d423e8864 -> ../../hioa

      root@10.1.1.200:~# ls -l /dev/disk/by-uuid/ | grep sda1 | awk ‘{print $8}’

      b20e80f1-c88d-4918-9d9b-75cd7906629e

  • yum设置代理服务器

    export http_proxy=http://192.168.224.1:10809
    export https_proxy=http://192.168.224.1:10809
    export ftp_proxy=http://192.168.224.1:10809

    export http_proxy=192.168.224.1:10809
    export https_proxy=192.168.224.1:10809
    export ftp_proxy=192.168.224.1:10809

    export http_proxy=20.10.0.10:808
    export https_proxy=20.10.0.10:808
    export ftp_proxy=20.10.0.10:808

    unset http_proxy
    unset https_proxy
    unset ftp_proxy

  • nginx生成ssl证书

    1、创建证书存放路径  

    [root@nginx ~]# mkdir /home/nginx/ssl
    [root@nginx ~]# cd /home/nginx/ssl

    2、  生成根证书的私钥

    [root@nginx ~]# openssl genrsa 1024 > /home/nginx/ssl/server.key
    genrsa:产生rsa密钥命令 1024: 密钥的长度位数,默认为512

    3、  生成证书签署请求,(创建服务器证书的申请文件server.csr)

    复制代码
    [root@nginx nginx]# openssl req -new -key /home/nginx/ssl/server.key > /home/nginx/ssl/server.csr
    
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN    #国家名称
    State or Province Name (full name) []:BJ  #州或省名称
    Locality Name (eg, city) [Default City]:BJ    #城市
    Organization Name (eg, company) [Default Company Ltd]:xiaoguaishou  #组织名称(例如,公司)
    Organizational Unit Name (eg, section) []:OP      #组织单位名称(例如,部门)
    Common Name (eg, your name or your server's hostname) []:127.0.0.1      #通用名称(例如,您的名称或服务器主机名)
    Email Address []:xiaoguaishou@qq.com    #电子邮件地址
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:test@123    #密码
    An optional company name []:xiaoguaishou    #可选公司名称
    复制代码

    4、  创建服务器证书(有效期十年)

    [root@nginx nginx]# openssl req -x509 -days 3650 -key /home/nginx/ssl/server.key -in /home/nginx/ssl/server.csr > /home/nginx/ssl/server.crt

    5、查看生成的证书

    [root@nginx ssl]# ls
    server.crt server.csr server.key      #共生成3个文件

    6、nginx配置证书

    复制代码
    [root@nginx ]# vim /home/nginx/conf/nginx.conf
    
    server {
    listen 443 ssl;
    server_name localhost;
    
    ssl_certificate /home/nginx/ssl/server.crt;    #证书路径
    ssl_certificate_key /home/nginx/ssl/server.key;  #证书路径
    
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    location / {
    root html;
    index index.html index.htm;
    }
    }
    复制代码

    7、重启nginx

    [root@nginx nginx]# systemctl restart nginx.service

    8、访问,测试 

    浏览器:https://192.168.61.142

  • tmux 终端分屏工具

    tmux 的安装

    Linux 系统中通常使用 yum 来安装 tmux :

    yum install tmux

    Mac OS 通常使用 brew 来安装 tmux :

    brew install tmux 

    你可以看到使用 tmux 的门槛就是这么低。

    tmux 中的几个名词

    在开始使用 tmux 之前我们需要先了解关于 tmux 的几个名词:

    session, window , pane 在这里我们就把他们分别叫做会话,窗口,窗格 。

    关于session 很多人都叫会话,个人感觉叫任务更贴切,更形象。

    通常我们在终端中操作一个任务的时候,一旦终端关闭,任务也就结束了,被强制关闭了,在 tmux 中 使用 session 就可以解决这个问题,我们可以把当前操作的任务隐藏起来,在视觉上让它消失,任务继续执行着,当我们想返回任务做一些操作的时候,它可以很方便的回来,我们通常把上面的操作就做 session 操作,我们可以把 session 给隐藏起来,我们也可以把 session 给真的关掉。

    在 tmux 中有一个窗口的概念,我们可以这样要去理解窗口:当前呈现在我们面前的这一个工作区域就是一个窗口(当前的终端界面),窗口可以被不断切割,切割成一个个小块,这一个个小块我们叫做窗格(pane),这就是窗口和窗格的概念,我们把它想象成一块大蛋糕可以切成很多小块蛋糕,窗口可以被分割成很多小的窗格。

    总结: 一个 session 通常指一个任务里面可以有很多窗口,一个窗口又可以有很多的窗格。

    可能很抽象,通过下面的实践操作,相信你会加深对 tmux 的理解。

    tmux 的前缀键

    tmux 中的很多操作都是通过快捷键来实现的,通过快捷键我们可以更加高效的完成任务,这也是很多人喜欢 tmux 的一个主要原因。

    如果想使用 tmux 中的快捷键,我们必须使用 tmux 的前缀按键 ctrl + b , 在 tmux

    中所有的快捷键都需要通过前缀按键去唤起的。

    在 tmux 当中默认的前缀按键是 ctrl + b , 这个前缀按键不是很友好,ctrl 和 b 的距离真的是太长了,操作起来不是很舒心,当然这个前缀按键是可以通过 tmux 的配置文件 .tmux.conf 进行修改的,文末会提到 .tmux.conf 的一点简单配置。

    tmux 的 session 常用操作

    session 是 tmux 中一个很重要的概念,它很好用,也很简单,下面我们来实践一下如何操作 session .

    新建 session

    新建一个 session ,在终端输入一个 tmux 命令即可:

    tmux

    上面的命令会创建一个 session ,默认是通过数字编号来命令的,有时候我们需要明确的知道我们的 session 的名字,方便我们快速进入该 session ,我们可以使用如下的命令:

    tmux new -s  <session-name> 

    例如新建一个名称是 zempty 的session : tmux new -s zempty

    离开 session

    有时候我们需要离开终端,操作其他的任务,需要离开该任务,但是又想该任务继续在后台执行,这时候我们需要在 tmux 的任何一个窗格中输入如下命令:

    tmux detach

    也可以使用快捷键 ctrl + b d ,这里解释一下该快捷键, tmux 离开 session 的快捷键是 d ,但是在 tmux 当中任何快捷键都需要搭配 tmux 的前缀按键 ctrl + b 来唤醒,所以改快捷键的操作是先按 ctrl +b ,紧接着按下按键 d ,这样我们便顺利的离开当前 session 了。

    查看 session 列表

    有时候我们可能同时操作了好几个 session, 我们可以通过如下的命令来查看我们目前操作了几个session:

    tmux  ls  

    也可以通过快捷键操作 ctrl + b s 列出所有的 session。

    进入 session

    离开 session 之后,有时候我们还需要对某个 session 进行操作,这时候可以通过如下的操作:

    tmux attach -t  <session-name>

    例如我的 session 名称是 zempty , 就可以通过 tmux attach -t zempty 顺利进入 session, 也可以通过 tmux a -t zempty ,该命令中的 a 是 attach 的简写形式

    关闭 session

    如果需要关闭 session, 可以通过执行如下的命令即可:

    tmux kill-session -t <session-name>

    例如关闭zempty 这个session : tmux kill-session -t zempty

    也可以使用快捷键 ctrl + d 来关闭当前的 session。

    切换 session

    执行命令,可以从当前的 session 快速切换到另一个 session:

    tmux switch -t <session-name>

    重命名 session

     tmux rename-session -t <old-session-name> <new-session-name>

    例如: tmux rename-session -t zempty handsome 该命令会把 zempty 这个 session 重新命名为 handsome.

    也可以通过快捷键 ctrl +b $ 来重命名当前的session 。

    session 总结

    session 在 tmux 操作当中非常重要,希望你可以熟练的使用以上操作:

    新建 session -> 离开 session -> 查看 session 列表 -> 进入 session -> 关闭 session -> 不同 session 之间的切换 -> 重命名 session 。

    tmux 的窗格常用操作

    我一直认为使用 tmux 中的窗格是一件很酷的事情,很多人喜欢 tmux 也是因为窗格功能的存在。

    什么是窗格(pane)呢?

    前文也提到过,这里在详细描述一下:当前我们的工作区域,一块工作屏幕我们叫做窗口,窗口是可以被分割的,当前的工作区域被分割的一块块区域就是窗格。

    每一个窗格我们可以用来干不同的事情,窗格同窗格之间是相互独立的,可以想象我们使用 vim 来搭配 tmux 的窗格功能是不是很酷呢?

    切割窗格

    切割窗格的命令是:

    tmux split-window 

    该命令会把当前工作区域分成上下两个小窗格

    tmux split-window -h

    该命令会把当前工作区域分成左右两个窗格

    切割窗格的快捷键 ctrl + b % 可以快速的左右切割,ctrl + b “ 可以快速的上下进行切割。

    不同窗格间移动光标

    tmux select-pane  -U

    把当前光标移动到上方的窗格

    tmux select-pane -D

    把当前的光标移动的下方的窗格

    tmux select-pane -L

    把当前的光标移动到左边的窗格

    tmux select-pane -R

    把当前的光标移动到右边的窗格

    移动窗格光标的快捷键:

    ctrl +b <arrow key>例如 ctrl +b ⬆ 会把光标移动到上方的窗格。

    ctrl +b ;光标切换到上一个窗格

    ctrl +b o 光标切换到下一个窗格

    交换窗格的位置

    tmux swap-pane -U

    当前窗格向上移动

    tmux swap-pane -D

    当前窗格向下移动

    关闭当前的窗格

    关闭窗格通常使用快捷键 ctrl + b x

    放大窗格

    快捷键 ctrl + b z ,将会放大当前操作的窗格,继续触发该快捷键将会还原当前的窗格。

    窗格显示时间

    快捷键 ctrl +b t 将会把在当前的窗格当中显示时钟,非常酷炫的一个功能,点击 enter (回车键将会复原)。

    窗格总结

    关于窗格的操作我们经常操作的就是分割,移动光标,放大窗格,关闭窗格,可以熟练以上提到的操作,关于移动光标的快捷键操作,下文在 .tmux.conf 中也会处理成快捷键进行操作。

    tmux 的窗口常用操作

    创建窗口

    有时候一个窗口不够用,这样我们就需要重新创建一个窗口:

    tmux new-window -n <window-name>

    例如: tmux new-window -n zempty 就是重新创建一个名字是 zempty 的window

    创建窗口的快捷键ctrl + b c, 可以通过快捷键快速的创建一个窗口出来。

    切换窗口

    tmux select-window -t <window-name>

    在已经有多个窗口的条件下,可以通过上名的命令快速进入指定的窗口当中,例如:tmux select-window -t zempty 会快速跳到 zempty 这个窗口当中。

    关于切换窗口的快捷键 :

    ctrl + b w 显示窗口列表可以通过 j ,k 上下进行选择窗口,然后回车进入指定的窗口。

    ctrl + b n 快速切换到下一个窗口。

    ctrl +b p 快速切换到上一个窗口。

    重命名窗口

    tmux rename-window <new-window-name>

    例如 tmux rename-window zempty 把当前窗口名为 zempty

    窗口命名快捷键:

    ctrl + b , 该快捷键可以重新命名窗口

    关闭窗口

    tmux kill-window -t <window-name>

    例如: tmux kill-window -t zempty 删除名称为zempty 的窗口。

    关闭窗口的快捷键:

    ctrl + b & 可以关闭当前的的窗口

    窗口的总结

    窗口的日常使用多是通过快捷键去操作,熟练掌握上面提到操作窗口的快捷键即可。

    tmux 的配置文件 .tmux.conf

    tmux 中的很多操作都是通过快捷键去实现的 ,在 tmux 中我们可以通过 ctrl + b ? 来查找 tmux 的帮助文档,可以查询一些功能键的快捷键信息 ,在帮助文档中按下键盘上的 ESC 或者 q 键就可以退出帮助文档。

    在 tmux中有一个配置文件 .tmux.conf ,在其中可以配置一些方便自己的 tmux 快捷键信息等,该文件 .tmux.conf 默认放在 ~(家目录) 目录下面,如果没有可以在 ~ 目录下面创建一个 .tmux.conf 文件即可。

    在tmux 中默认的前缀键是 ctrl + b ,这个前缀键对我是十分不友好的,我通常会通过配置文件改成 ctrl + x, 因为我的手很容易触到 x 按键。

    下面列出一份简单的 .tmux.conf 的配置文件,算是做为一个入门配置,如下所示

    #below reset tmux prefix command key
    set -g prefix C-x
    unbind C-b
    bind C-x send-prefix
    #set swap pane key
    bind-key k select-pane -U
    bind-key j select-pane -D
    bind-key h select-pane -L
    bind-key l select-pane -R

    该配置文件把 ctrl + b 改成了 ctrl + x , 还有多个窗格之间切换光标可以通过 ctrl + x k 切换到上一个窗格, ctrl + x j 切换到下一个窗格, ctrl +x h 切换到左边的窗格,ctrl + x l 切换到右边的窗格。

    配置文件总结

    关于 tmux 的配置文件的配置可以根据个人的习惯进行配置,配置的具体细节可以查询 google 或者 github。

  • nginx 开启文件浏览功能

    1、开启全站所有目录浏览功能

    vi  /usr/local/nginx/conf/nginx.conf  #编辑配置文件,在http {下面添加以下内容:

    autoindex on;   #开启nginx目录浏览功能

    autoindex_exact_size off;  #文件大小从KB开始显示

    autoindex_localtime on;  #显示文件修改时间为服务器本地时间

    charset utf-8,gbk; #防止中文乱码 
  • CURL 发送POST请求

    CURL 发送POST请求

    curl -H “Content-Type: application/json” -X POST -d ‘{“user_id”: “123”, “coin”:100, “success”:1, “msg”:”OK!” }’ “http://192.168.0.1:8001/test

    参数 内容
    -H 请求头
    -d POST内容
    -X 请求协议

    简介
    curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

    -A

    -A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]

    $ curl -A ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36’ https://google.com

    上面命令将User-Agent改成 Chrome 浏览器。

    $ curl -A ” https://google.com

    上面命令会移除User-Agent标头。

    也可以通过-H参数直接指定标头,更改User-Agent

    $ curl -H ‘User-Agent: php/1.0’ https://google.com

    -b

    -b参数用来向服务器发送 Cookie。

    $ curl -b ‘foo=bar’ https://google.com

    上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。

    $ curl -b ‘foo1=bar;foo2=bar2’ https://google.com

    上面命令发送两个 Cookie。

    $ curl -b cookies.txt https://www.google.com

    上面命令读取本地文件cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。

    -c

    -c参数将服务器设置的 Cookie 写入一个文件。

    $ curl -c cookies.txt https://www.google.com

    上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt

    -d

    -d参数用于发送 POST 请求的数据体。

    $ curl -d’login=emma&password=123′-X POST https://google.com/login # 或者 $ curl -d ‘login=emma’ -d ‘password=123’ -X POST https://google.com/login

    使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST

    -d参数可以读取本地文本文件的数据,向服务器发送。

    $ curl -d ‘@data.txt’ https://google.com/login

    上面命令读取data.txt文件的内容,作为数据体向服务器发送。

    –data-urlencode

    --data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。

    $ curl –data-urlencode ‘comment=hello world’ https://google.com/login

    上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。

    -e

    -e参数用来设置 HTTP 的标头Referer,表示请求的来源。

    curl -e ‘https://google.com?q=example’ https://www.example.com

    上面命令将Referer标头设为https://google.com?q=example

    -H参数可以通过直接添加标头Referer,达到同样效果。

    curl -H ‘Referer: https://google.com?q=example’ https://www.example.com

    -F

    -F参数用来向服务器上传二进制文件。

    $ curl -F ‘file=@photo.png’ https://google.com/profile

    上面命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。

    -F参数可以指定 MIME 类型。

    $ curl -F ‘file=@photo.png;type=image/png’ https://google.com/profile

    上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream

    -F参数也可以指定文件名。

    $ curl -F ‘file=@photo.png;filename=me.png’ https://google.com/profile

    上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png

    -G

    -G参数用来构造 URL 的查询字符串。

    $ curl -G -d ‘q=kitties’ -d ‘count=20’ https://google.com/search

    上面命令会发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求。

    如果数据需要 URL 编码,可以结合--data--urlencode参数。

    $ curl -G –data-urlencode ‘comment=hello world’ https://www.example.com

    -H

    -H参数添加 HTTP 请求的标头。

    $ curl -H ‘Accept-Language: en-US’ https://google.com

    上面命令添加 HTTP 标头Accept-Language: en-US

    $ curl -H ‘Accept-Language: en-US’ -H ‘Secret-Message: xyzzy’ https://google.com

    上面命令添加两个 HTTP 标头。

    $ curl -d ‘{“login”: “emma”, “pass”: “123”}’ -H ‘Content-Type: application/json’ https://google.com/login

    上面命令添加 HTTP 请求的标头是Content-Type: application/json,然后用-d参数发送 JSON 数据。

    -i

    -i参数打印出服务器回应的 HTTP 标头。

    $ curl -i https://www.example.com

    上面命令收到服务器回应后,先输出服务器回应的标头,然后空一行,再输出网页的源码。

    -I

    -I参数向服务器发出 HEAD 请求,然会将服务器返回的 HTTP 标头打印出来。

    $ curl -I https://www.example.com

    上面命令输出服务器对 HEAD 请求的回应。

    --head参数等同于-I

    $ curl –head https://www.example.com

    -k

    -k参数指定跳过 SSL 检测。

    $ curl -k https://www.example.com

    上面命令不会检查服务器的 SSL 证书是否正确。

    -L

    -L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。

    $ curl -L -d ‘tweet=hi’ https://api.twitter.com/tweet

    –limit-rate

    --limit-rate用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。

    $ curl –limit-rate 200k https://google.com

    上面命令将带宽限制在每秒 200K 字节。

    -o

    -o参数将服务器的回应保存成文件,等同于wget命令。

    $ curl -o example.html https://www.example.com

    上面命令将www.example.com保存成example.html

    -O

    -O参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。

    $ curl -O https://www.example.com/foo/bar.html

    上面命令将服务器回应保存成文件,文件名为bar.html

    -s

    -s参数将不输出错误和进度信息。

    $ curl -s https://www.example.com

    上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。

    如果想让 curl 不产生任何输出,可以使用下面的命令。

    $ curl -s -o /dev/null https://google.com

    -S

    -S参数指定只输出错误信息,通常与-s一起使用。

    $ curl -s -o /dev/null https://google.com

    上面命令没有任何输出,除非发生错误。

    -u

    -u参数用来设置服务器认证的用户名和密码。

    $ curl -u ‘bob:12345’ https://google.com/login

    上面命令设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1

    curl 能够识别 URL 里面的用户名和密码。

    $ curl https://bob:12345@google.com/login

    上面命令能够识别 URL 里面的用户名和密码,将其转为上个例子里面的 HTTP 标头。

    $ curl -u ‘bob’ https://google.com/login

    上面命令只设置了用户名,执行后,curl 会提示用户输入密码。

    -v

    -v参数输出通信的整个过程,用于调试。

    $ curl -v https://www.example.com

    --trace参数也可以用于调试,还会输出原始的二进制数据。

    $ curl –trace – https://www.example.com

    -x

    -x参数指定 HTTP 请求的代理。

    $ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com

    上面命令指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。

    如果没有指定代理协议,默认为 HTTP。

    $ curl -x james:cats@myproxy.com:8080 https://www.example.com

    上面命令中,请求的代理使用 HTTP 协议。

    -X

    -X参数指定 HTTP 请求的方法。

    $ curl -X POST https://www.example.com

    上面命令对https://www.example.com发出 POST 请求。

  • pve修改ip地址

    一、在局域网的电脑浏览器输入PVE的IP地址登录后台,从左边的菜单找到“PVE”—“_Shell”菜单,进入网页版的ssh界面下;或者在主机的控制台下输入root密码后登录到ssh下;

    二、输入以下命令回车:

    vi /etc/network/interfaces

    通过键盘上下左右移动到address这行的IP地址,按一次i进入修改状态,修改为新的IP地址,如果需要网关则修改gateway这行,修改完成确认无误后按一次ESC键输入:wq!回车保存退出。

    三、输入以下命令回车:

    vi /etc/issue

    通过键盘上下左右移动到 https:// 这行的IP地址,按一次i进入修改状态,修改为新的IP地址,端口8006不要改,修改完成确认无误后按一次ESC键输入:wq!回车保存退出。

    四、输入以下命令回车:

    vi /etc/hosts

    通过键盘上下左右移动到第2行的IP地址,按一次i进入修改状态,修改为新的IP地址,修改完成确认无误后按一次ESC键输入:wq!回车保存退出。

    img

    五、重启PVE,完美解决!