分类: 经验

  • sshfs远程挂载

    12345 #常用命令 sshfs  - o nonempty,reconnect,allow_other, exec - p22 zjy@ 172.21 . 0.10 : / data / zjy  / data / zjy cat  / etc / fstab sshfs #zjy@172.21.0.10:/data/zjy /data/zjy fuse nonempty,reconnect,allow_other,exec 0 0

    一、什么是 SSHFS
    SSHFS(Secure SHell FileSystem)是一个客户端,可以让我们通过 SSH 文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录和文件进行交互。

    12345 centos: yum install sshfs ubuntu: sudo apt - get install sshfs

    二、准备两台任意操作系统

    12345 一台 mkdir    / test / zjy / 另一台 mkdir    / test / zjy /

    三、挂载

    12 sudo sshfs  - o nonempty,allow_other, exec root@xx.xx.xx.xx: / test / zjy / / test / zjy /                         参数                用户@地址:挂载到               挂载到

    nonempty 允许安装在非空文件/DIR上
    allow_other 允许访问其他用户


    mount -a       重新加载挂载信息

    四、查看

    12345678910111213 查看当前系统挂载: [root@xiaoyuer ~] # cat /etc/mtab / dev / vda1  / ext3 rw,noatime,acl,user_xattr  0 0 proc  / proc proc rw  0 0 sysfs  / sys sysfs rw  0 0 devpts  / dev / pts devpts rw,mode = 0620 ,gid = 5 0 0 none  / proc / sys / fs / binfmt_misc binfmt_misc rw  0 0 root@ 192.168 . 1.121 : / test / / test / zjy fuse.sshfs rw,nosuid,nodev,allow_other  0 0 添加到自动挂载: root@ 192.168 . 1.121 : / test / / test / zjy fuse.sshfs rw,nosuid,nodev,allow_other  0 0

    五、卸载命令

    1 umount  - / test / zjy /  

    六、如果想免秘钥(可以做ssh免秘钥)

    1234567891011121314151617181920212223242526272829303132333435363738394041424344 1.ssh 免秘钥登录 / 挂载: ssh - keygen  - t rsa            [root@xiaoyuer ~] # ssh-keygen -t rsa Generating public / private rsa key pair. Enter  file in which to save the key ( / root / .ssh / id_rsa): Enter passphrase (empty  for no passphrase): Enter same passphrase again: Your identification has been saved  in / root / .ssh / id_rsa. Your public key has been saved  in / root / .ssh / id_rsa.pub. The key fingerprint  is : b0: 9d : 41 : 56 :b5:c4:b2: 0e : 0d : 47 : 07 : 4d :fa: 4c : 47 : 03 root@xiaoyuer The key's randomart image  is : + - - [ RSA  2048 ] - - - - + |        oo + * E.o  | |       o. o + oo . | |      . . + .oo .  | |        + .oo + .   | |      . So  o    | |          .      | |                 | |                 | |                 | + - - - - - - - - - - - - - - - - - + 2. 把公钥复制到服务器上 ssh - copy - id - i ~ / .ssh / id_rsa.pub root@xx.xx.xx.xx [root@xiaoyuer ~] # ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.121 root@ 192.168 . 1.121 's password: Now  try logging into the machine, with  "ssh 'root@192.168.1.121'" and check  in :    .ssh / authorized_keys to make sure we haven 't added extra keys that you weren' t expecting. 3. 测试 [root@xiaoyuer ~] # ssh root@xx.xx.xx.xx 测试成功在挂载就不需要数据密码<em  id = "__mceDel" style = "background-color: rgba(255, 255, 255, 1); font-family: "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px" > < / em>
  • SSH免密登录配置

    免密登录命令:

    1.进入.ssh目录:  cd ~/.ssh

    2.生成一对密钥: ssh-keygen -t rsa

    3.发送公钥:        ssh-copy-id root@192.168.xx.xxx -p22

    4.免密登录测试: ssh 192.168.xx.xxx

  • SSH端口转发

    端口转发

    ssh 会自动加密和解密所有的ssh客户端与服务端之间的网络数据。但是ssh 还提供了一个端口转发的功能。转发是一种与其他网络应用程序交互的方式,它能将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密以及解密服务。这一过程有时也被叫做隧道

    应用场景

    A: 本地服务器(IP: 10.0.0.1)

    B: 中间服务器(IP: 10.10.10.1)

    C: 目标服务器(C可以看到都是中间服务器B 在访问自己)

    本地转发

    第一种场景

    A: 10.0.0.1

    B: 10.0.0.2 (安装Mysql service,监听端口3306)

    B 上数据库 限制了 只有本机上的应用才可以直接连接Mysql 服务,如果我们由于调试需要用A上直接连接这个LDAP服务器,就需要使用本地转发实现

    ssh -L <本地端口>:<远程主机>:<远程端口>  <ssh hostaname>

    复制

    本例中应该如下:

    ssh -L 30000:10.0.0.2:80 root@10.0.0.2

    复制

    * -L 表示 使用 本地转发 建立ssh隧道

    * 选用 -f 后台建立隧道

    * -N 建议隧道后不执行命令

    * -fNR

    * 本地转发: 本地转发是 表示本地的端口上的数据通讯都会被转发到目标主机的对应端口上,这里可以抽象成是一种映射,执行命令的主机 为 本地主机。

    * 访问本地主机的30000 端口A,就相当于访问目标主机的端口B,当方粉本地的端口时,通讯数据会转发到目标主机的端口B,这就是本地转发

    * 访问A的30000 端口 就转发到了10.0.0.2 上的 80 端口上了

    * 30000 表示本地端口的监听地址

    * 10.0.0.2 表示远程主机以及端口

    * root@10.0.0.2 创建的ssh隧道是连接到10.0.0.2 上的root用户的

    * 综上

    * 从本机10.0.0.1 建议到10.0.0.2的隧道,使用本地转发模式,监听本机的30000端口,当访问本机的30000端口时,数据会被转发到10.0.0.2的80 端口上

    第二种场景

    A. 本地服务器 10.0.0.1

    B: 中间服务器 10.0.0.2

    C: 目标服务器 192.168.0.2

    A——能访问——>B——能访问——>C

    A——不能访问————> C

    A 通过该本地端口 以B的名义去访问——>C

    ssh -Nf -L <本地IP>:<本地端口>:<目标主机>:<目标端口>  <中间服务器地址>

    复制

    ssh -Nf -L 30001:192.168.0.2:80 root@10.0.0.2

    复制

    远程端口转发

    应用场景:

    A: 客户端PC 10.0.0.1

    B: 服务器端 10.0.0.2

    B 可以ssh连接A,但是A无法连接B

    服务器端操作,这时 服务器端就是操作端
    
    ssh -R AIP:<A端口>:<B服务器端IP>:<服务器端端口>  <Aip>

    复制

    在10.0.0.2 上操作
    
    ssh -R 30001:localhost:80 root@10.0.0.1

    复制

    * 在 10.0.0.1 建立隧道连接 并在10.0.0.1上建立端口 30001 端口监听

    * 在10.0.0.1 访问30001 的端口 会通过转发 到 服务端10.0.0.2 的 80 端口

    动态转发

    A: 10.0.0.1

    B: 10.0.0.2

    本地转发、远程转发都是需要一个我们已知的一个应用服务的端口的,但是如果没有端口的话,这里就需要用动态转发。

    A 上操作
    
    ssh -D <local port> <B SSH server>

    复制

    例如:

    ssh -D 30002 root@10.0.0.2

    复制

    * -D bind_address:port D参数说明我们开启了一个本地的端口转发。通过在本地分配了一个socket去监听端口。只要连接请求到这个port上来时,这个连接就会被安全通过该转发出去,应用程序的协议将有远程机器来决定连接到哪里。

    A 把B 作为了自己的全权代理,不限定目标服务器以及端口

    场景说明:

    浏览器访问google.com,此时浏览器开启了一个端口15435,但是发现在访问某个节点时,此网络包被丢弃了或者返回了错误的信息,导致我们无法访问google.com. 但是我们可以访问proxy.remotehost.com,而且该代理机器可以访问google.com,因此我们用 proxy.remotehost.com 做一个跳转。

    复制

    因此我们利用的ssh动态端口转发技术来达到这个目的,在本地开启30002端口,并且将端口关联到proxy.remote.com的22端口上,通过浏览器的设置,将所有的请求都转发到 127.0.0.1:30002上,通过ssh隧道,会将数据包传递到proxy.remotehost.com:22 上。proxy 服务器会随机开启一个端口访问google.com.然后将数据返回给proxy,然后再返回给浏览器,这就是代理的转发。

    问题

    账号已登录成功就被退出了

    ssh -D 30002 -l username proxy.remotehost.com -N

    复制

    * 增加-N 选项 参数是 不请求shell界面,不执行远程命令。这个只是在端口转发的时候使用,其他不会请求

    让该进程在后台运行

    ssh -D 30002 -l username proxy.remotehost.com -Nf

    复制

    给ssh 增加http代理

    在某些场景下,PC 无法直接访问到ssh服务器,但是只有http代理可以访问,那么我们要建立这个socket5的端口转发只能为他增加一个代理

    ssh -D 30002 -l username proxy.remotehost.com -Nf -o ProxyCommand="connect -H web-proxy.oa.com:8282 %h %p "

    复制

    其中 ProxyCommand 执行了使用connect 程序来进行代理,通常还可以使用 corkscrew 来达到相同的效果。

    * 安装 ubuntu 下

    复制

    apt-get install connect-proxy

    复制

    * mac下安装corkscrew

    复制

    brew install corkscrew

    复制

    连接一段时间后 自耦东断开了

    ssh -D 30002 -l username proxy.remotehost.com -Nf -o ProxyCommand="connect -H web-proxy.oa.com:8080 %h %p " -o ServerAliveInterval=60

    复制

    -X 转发

    a

    真实场景

    A—— 10.0.0.11

    B: 10.0.0.2 可以访问内网A 也可以联网到B

    B: 115.xx.x 公有云机器

    C: 笔记本

    A——可以联网–可以访问——B

    C——可以联网 可以访问—-B

    B 无法访问A

    B 无法访问C

    目标:C想访问A

    1. 在A上建立动态连接
     ssh -D 0.0.0.0:1080 root@127.0.0.1
    
     在A 上建立自身的动态连接

    复制

    1. 在B上建立远程连接到公有云C

    复制

    ssh -R 0.0.0.0:30000:10.0.0.1:1080 root@115.X.X.X

    在B上建立远程转发,在115.X.X.X上启用建立端口 30000 目标主机为 10.0.0.1

    复制

    1. 在公有云上确认是否30000 端口建立成功

    复制

    ss -luntp |grep 30000

    复制

    1. 在笔记本上 建立本地连接到公有云30000端口

    复制

    ssh -L 11080:127.0.0.1:30000 root@115.x.x.x

    在本机笔记本上开启端口11080 将所有访问11080的流量转发到 115.XX.X.X 30000 端口上

    复制

    1. 在笔记本上连接到 A机器

    复制

    ssh -o ProxyCommand=’/usr/bin/nc -X 5 -x 127.0.0.1:11080 %h %p’ root@10.0.0.1

    复制

    参考

    ssh权威指南

    https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

    http://www.zsythink.net/archives/2450

    https://www.chenyudong.com/archives/linux-ssh-port-dynamic-forward.html
  • 告别无法访问的github(附解决方案)

    大家好,我是一行

    最近一行在使用github的时候又登不上去了,挂着NPV都没用

    据说是某些不可描述的有关组织机构对该网站的DNS污染或者随机丢包造成的

    什么是DNS污染呢?

    本来很多域名对应的IP地址都是由上游可信赖的服务器提供的,这样可以降低网络上的流量压力

    但是对于有些攻击来说,他就去污染可信赖服务器里数据包,这样我一请求github,都给我登上了错误的服务器或服务器的网址

    这样的DNS攻击让我打不开还算好的,一旦让我打开些不可描述的网站,那在公共场合不得社死

    github解决办法

    但是自己很多项目都存在github,登不上去那不得损失很大

    所以一行必须整点儿特殊手段来访问,顺便分享一下

    1.加速器

    网上很多解决方案都是在分享各种加速器来登陆、像下面这个Pigcha加速器可以登陆github

    但大部分都是一些软件商的软文,先体验再收费,但是对于网络登录看完下面的分享就没必要再去付费了

    2.修改本地host

    既然上游服务器的域名地址被修改了,那我们直接在本地hosts文件了指定好域名对应的IP地址不就好了嘛

    hosts 文件在每个系统的位置不一,详情如下:

    • Windows 系统:C:\Windows\System32\drivers\etc\hosts
    • Linux 系统:/etc/hosts
    • Mac(苹果电脑)系统:/etc/hosts
    • Android(安卓)系统:/system/etc/hosts
    • iPhone(iOS)系统:/etc/hosts

    然后将下面这些数据拷贝到自己电脑的hosts文件,再激活生效就可以了

    140.82.114.25                 alive.github.com
    140.82.112.25                 live.github.com
    185.199.108.154               github.githubassets.com
    140.82.112.22                 central.github.com
    185.199.108.133               desktop.githubusercontent.com
    185.199.108.153               assets-cdn.github.com
    185.199.108.133               camo.githubusercontent.com
    185.199.108.133               github.map.fastly.net
    199.232.69.194                github.global.ssl.fastly.net
    140.82.112.4                  gist.github.com
    185.199.108.153               github.io
    140.82.114.4                  github.com
    192.0.66.2                    github.blog
    140.82.112.6                  api.github.com
    185.199.108.133               raw.githubusercontent.com
    185.199.108.133               user-images.githubusercontent.com
    185.199.108.133               favicons.githubusercontent.com
    185.199.108.133               avatars5.githubusercontent.com
    185.199.108.133               avatars4.githubusercontent.com
    185.199.108.133               avatars3.githubusercontent.com
    185.199.108.133               avatars2.githubusercontent.com
    185.199.108.133               avatars1.githubusercontent.com
    185.199.108.133               avatars0.githubusercontent.com
    185.199.108.133               avatars.githubusercontent.com
    140.82.112.10                 codeload.github.com
    52.217.223.17                 github-cloud.s3.amazonaws.com
    52.217.199.41                 github-com.s3.amazonaws.com
    52.217.93.164                 github-production-release-asset-2e65be.s3.amazonaws.com
    52.217.174.129                github-production-user-asset-6210df.s3.amazonaws.com
    52.217.129.153                github-production-repository-file-5c1aeb.s3.amazonaws.com
    185.199.108.153               githubstatus.com
    64.71.144.202                 github.community
    23.100.27.125                 github.dev
    185.199.108.133               media.githubusercontent.com
    
    

    复制

    大部分情况下是直接生效,如未生效可尝试下面的办法,刷新 DNS:

    • Windows:在 CMD 窗口输入:ipconfig /flushdns
    • Linux 命令:sudo nscd restart,如报错则须安装:sudo apt install nscd 或 sudo /etc/init.d/nscd restart
    • Mac 命令:sudo killall -HUP mDNSResponder

    如果还没有生效的话,可以尝试重启一下电脑,毕竟这步操作可以解决 95 % 的电脑bug

    当然还有一些自动修改hosts文件的软件,但是有一定的风险性,所以如果手动修改hosts也没用的话,建议再参考一下镜像通道

    3.镜像通道

    如果手动修改hosts还不行的话,可以尝试使用镜像通道

    例如原始用法是:

    git clone https://github.com/PaddlePaddle/PaddleDetection
    

    复制

    那加速通道就是:

    git clone https://hub.fastgit.org/PaddlePaddle/PaddleDetection.git
    

    复制

    也就是github clone加速的时候,前面的域名用https://hub.fastgit.org/ 来替换掉https://github.com就行啦!

    当然,对于镜像通道也可以使用fastgit的开源软件:https://github.com/xljiulang/FastGithub

    最后

    其实,如果你发现最近网络不太好(不仅仅是指github),那可能是最近日子比较特殊

    如果实在受不了时不时的断网,也可以把项目托管在国内的gitee,那网速体验将会提升一个数量级

    好了,这就是今天的分享,技术永不眠,我们下期见~

  • docker虚拟磁盘文件迁移ext4.vhdx

    ext4.vhdx默认在C盘用户下, 会很大, 现在要迁移到其他盘.

    (1)打开Windows PowerShell

    查看docker状态和版本

    docker-desktop-data

    需要迁移到其他盘

    (2) wsl –shutdown

    (3) 导出 docker-desktop-data

    wsl –export docker-desktop-data E:\install\docker_data\docker-desktop-data.tar

    (4)注销 docker-desktop-data

    wsl –unregister docker-desktop-data

    (5)重新导入docker-desktop-data

    wsl –import docker-desktop-data E:\install\docker_data\data\ E:\install\docker_data\docker-desktop-data.tar –version 2

    就转移到E盘下面了

  • TMS、WMS、OMS和FMS,分别指什么呢?

    海外仓系统主要有TMS、WMS、OMS、FMS等功能模块,那么这几个功能分别指的是什么意思呢?跟着易境通的小编一起来了解一下吧!

    TMS:是指运输管理系统,能够通过多种方法和其他相关的操作一起提高物流的管理能力,主要管理物流轨迹、车辆管理,司机管理等,通过接口的方式与WMS系统链接实现数据互传。

    WMS:是指仓库管理系统,一款标准化、智能化过程导向管理的仓库管理软件,它结合了众多知名企业的实际情况和管理经验,能够准确、高效地管理跟踪客户订单、采购订单、以及仓库的综合管理。

    OMS:是指订单管理系统,主要管理物流轨迹、车辆管理,司机管理等,通过接口的方式与WMS系统链接实现数据互传。

    FMS:是指财务管理系统,在海外仓中主要用于费用结算管理。

    对于海外仓企业来说,OMS、WMS、TMS、FMS功能模块都是海外仓运营管理的信息化手段,可以单独使用,也可以协同一起使用。

    易境通海外仓系统包含国内头程发货至海外尾程及退货换标的处理,由WMS操作管理、TMS头程管理、OMS订单管理、FMS财务管理、CRM客户管理、DMS数据管理等各大功能模块融会贯通,以敏锐的信息技术赋能海外仓业务。易境通海外仓系统可以更智能化、流程化的进行仓储管理。能够在短时间内记录商品从运输到入库再到出库的所有信息,助力海外仓企业降本增效。

  • PhpStorm折叠展开所有函数或者方法以及函数跳转

    windows下按下快捷`Ctrl`+`Shift`+`-`,这样就能折叠所有代码了。

    windows下按下快捷`Ctrl`+`Shift`+`+`,这样就能恢复打开所有代码了。

    在点击跳转函数后返回原位置

    Ctrl  Alt   ⬅左箭头

  • Composer 的安装

    Wondows 平台

    Wondows 平台上,我们只需要下载 Composer-Setup.exe 后,一步步安装即可。

    需要注意的是你需要开启 openssl 配置,我们打开 php 目录下的 php.ini,将 extension=php_openssl.dll 前面的分号去掉就可以了。

    安装成功后,我们可以通过命令窗口(cmd) 输入 composer –version 命令来查看是否安装成功:

    接下来我们可以更改阿里云 Composer 全量镜像:

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

    取消配置:

    composer config -g --unset repos.packagist

    项目配置

    仅修改当前工程配置,仅当前工程可使用该镜像地址:

    composer config repo.packagist composer https://mirrors.aliyun.com/composer/

    取消配置:

    composer config --unset repos.packagist

    调试

    composer 命令增加 -vvv 可输出详细的信息,命令如下:

    composer -vvv require alibabacloud/sdk

    遇到问题?

    1. 建议先将Composer版本升级到最新:

    composer self-update

    2. 执行诊断命令:

    composer diagnose

    3. 清除缓存:

    composer clear

    4. 若项目之前已通过其他源安装,则需要更新 composer.lock 文件,执行命令:

    composer update --lock

    5. 重试一次

    Linux 平台

    Linux 平台可以使用以下命令来安装:

    # php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
    # php composer-setup.php
    
    All settings correct for using Composer
    Downloading...
    
    Composer (version 1.6.5) successfully installed to: /root/composer.phar
    Use it: php composer.phar

    移动 composer.phar,这样 composer 就可以进行全局调用:

    # mv composer.phar /usr/local/bin/composer

    切换为国内镜像:

    # composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

    更新 composer:

    # composer selfupdate

    Mac OS 系统

    Mac OS 系统可以使用以下命令来安装:

    $ curl -sS https://getcomposer.org/installer | php
    $ sudo mv composer.phar /usr/local/bin/composer
    $ composer --version
    Composer version 1.7.2 2018-08-16 16:57:12

    切换为国内镜像:

    $ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

    更新 composer:

    $ composer selfupdate

    Composer 的使用

    要使用 Composer,我们需要先在项目的目录下创建一个 composer.json 文件,文件描述了项目的依赖关系。

    文件格式如下:

    {
        "require": {
            "monolog/monolog": "1.2.*"
        }
    }

    以上文件说明我们需要下载从 1.2 开始的任何版本的 monolog。

    接下来只要运行以下命令即可安装依赖包:

    composer install

    require 命令

    除了使用 install 命令外,我们也可以使用 require 命令快速的安装一个依赖而不需要手动在 composer.json 里添加依赖信息:

    $ composer require monolog/monolog

    Composer 会先找到合适的版本,然后更新composer.json文件,在 require 那添加 monolog/monolog 包的相关信息,再把相关的依赖下载下来进行安装,最后更新 composer.lock 文件并生成 php 的自动加载文件。

    update 命令

    update 命令用于更新项目里所有的包,或者指定的某些包:

    # 更新所有依赖
    $ composer update
    
    # 更新指定的包
    $ composer update monolog/monolog
    
    # 更新指定的多个包
    $ composer update monolog/monolog symfony/dependency-injection
    
    # 还可以通过通配符匹配包
    $ composer update monolog/monolog symfony/*

    需要注意的时,包能升级的版本会受到版本约束的约束,包不会升级到超出约束的版本的范围。例如如果 composer.json 里包的版本约束为 ^1.10,而最新版本为 2.0。那么 update 命令是不能把包升级到 2.0 版本的,只能最高升级到 1.x 版本。关于版本约束请看后面的介绍。

    remove 命令

    remove 命令用于移除一个包及其依赖(在依赖没有被其他包使用的情况下),如果依赖被其他包使用,则无法移除:

    $ composer remove monolog/monolog
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 0 installs, 0 updates, 2 removals
      - Removing psr/log (1.0.2)
      - Removing monolog/monolog (1.23.0)
    Generating autoload files

    search 命令

    search 命令可以搜索包:

    $ composer search monolog

    该命令会输出包及其描述信息,如果只想输出包名可以使用 –only-name 参数:

    $ composer search --only-name monolog

    show 命令

    show 命令可以列出当前项目使用到包的信息:

    # 列出所有已经安装的包
    $ composer show
    
    # 可以通过通配符进行筛选
    $ composer show monolog/*
    
    # 显示具体某个包的信息
    $ composer show monolog/monolog

    基本约束

    精确版本

    我们可以告诉 Composer 安装的具体版本,例如:1.0.2,指定 1.0.2 版本。

    范围

    通过使用比较操作符来指定包的范围。这些操作符包括:>,>=,<,<=,!=

    你可以定义多个范围,使用空格或者逗号 , 表示逻辑上的与,使用双竖线 || 表示逻辑上的或。其中与的优先级会大于或。 实例:

    • >=1.0
    • >=1.0 <2.0
    • >=1.0 <1.1 || >=1.2

    我们也可以通过使用连字符  来指定版本范围。

    连字符的左边表明了 >= 的版本,如果右边的版本不是完整的版本号,则会被使用通配符进行补全。例如1.0 - 2.0等同于>=1.0.0 <2.12.0相当于2.0.*),而1.0.0 - 2.1.0则等同于>=1.0.0 <=2.1.0

    通配符

    可以使用通配符来设置版本。1.0.*相当于>=1.0 <1.1
    例子:1.0.*

    波浪号 ~

    我们先通过后面这个例子去解释~操作符的用法:~1.2相当于>=1.2 <2.0.0,而~1.2.3相当于>=1.2.3 <1.3.0。对于使用Semantic Versioning作为版本号标准的项目来说,这种版本约束方式很实用。例如~1.2定义了最小的小版本号,然后你可以升级2.0以下的任何版本而不会出问题,因为按照Semantic Versioning的版本定义,小版本的升级不应该有兼容性的问题。简单来说,~定义了最小的版本,并且允许版本的最后一位版本号进行升级(没懂得话,请再看一边前面的例子)。
    例子:~1.2

    需要注意的是,如果~作用在主版本号上,例如~1,按照上面的说法,Composer可以安装版本1以后的主版本,但是事实上是~1会被当作~1.0对待,只能增加小版本,不能增加主版本。

    折音号 ^

    ^操作符的行为跟Semantic Versioning有比较大的关联,它允许升级版本到安全的版本。例如,^1.2.3相当于>=1.2.3 <2.0.0,因为在2.0版本前的版本应该都没有兼容性的问题。而对于1.0之前的版本,这种约束方式也考虑到了安全问题,例如^0.3会被当作>=0.3.0 <0.4.0对待。
    例子:^1.2.3


    版本稳定性

    如果你没有显式的指定版本的稳定性,Composer会根据使用的操作符,默认在内部指定为-dev或者-stable。例如:

    约束 内部约束
    1.2.3 =1.2.3.0-stable
    >1.2 >1.2.0.0-stable
    >=1.2 >=1.2.0.0-dev
    >=1.2-stable >=1.2.0.0-stable
    <1.3 <1.3.0.0-dev
    <=1.3 <=1.3.0.0-stable
    1 - 2 >=1.0.0.0-dev <3.0.0.0-dev
    ~1.3 >=1.3.0.0-dev <2.0.0.0-dev
    1.4.* >=1.4.0.0-dev <1.5.0.0-dev

    例子:1.0 - 2.0如果你想指定版本只要稳定版本,你可以在版本后面添加后缀-stable

    minimum-stability 配置项定义了包在选择版本时对稳定性的选择的默认行为。默认是stable。它的值如下(按照稳定性排序):devalphabetaRCstable。除了修改这个配置去修改这个默认行为,我们还可以通过稳定性标识(例如@stable@dev)来安装一个相比于默认配置不同稳定性的版本。例如:

    {
        "require": {
            "monolog/monolog": "1.0.*@beta",
            "acme/foo": "@dev"
        }
    }
  • windows 查看端口占用

    netstat -aon|findstr "8081"
    
    taskkill /f /t /im TIM.exe
    结束进程:
    
    taskkill /T /F /PID 9088 

    1、开始—->运行—->cmd,或者是window+R组合键,调出命令窗口:

    2、输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口,比如是8080,首先找到它:

    3、查看被占用端口对应的PID,输入命令:netstat -aon|findstr “8080”,回车,记下最后一位数字,即PID,这里是2668。

    4、继续输入tasklist|findstr “2668”,回车,查看是哪个进程或者程序占用了2668端口,结果是:TIM.exe

    5、或者是我们打开任务管理器,点击查看—>选择列,将PID(进程标示符)前面的勾打上,点击确定。

    切换到进程选项卡,在PID一列查看2668对应的进程,如下图:

    6、结束该进程:在任务管理器中选中该进程点击”结束进程“按钮,或者是在cmd的命令窗口中输入:taskkill /f /t /im TIM.exe

    注:后两步可以使用任务管理器,因为看的比较直观而且方便。

  • 英文1-12月

    1、Jan. January 一月;

    2、Feb. February 二月;

    3、Mar. March 三月;

    4、Apr. April 四月;

    5、May无缩写 五月;

    6、Jun. June 六月;

    7、Jul. July 七月;

    8、Aug. August 八月;

    9、Sep. September九月;

    10、Oct. October 十月;

    11、Nov. November 十一月;

    12、Dec. December 十二月。