作者: houlijiang

  • docker 容器启动限制日志大小

    docker run -d --name=wxedge --restart=always --privileged --net=host  --tmpfs /run --tmpfs /tmp -v /storage:/storage:rw --log-opt max-size=10m --log-opt max-file=3 onething1/wxedge
  • 如何解决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

  • Docker Registry web-ui 部署

    • Registry web-ui 获取

    docker pull hyper/docker-registry-web
    
    • 编辑配置文件 vim RegistryWebUi/config.yml

    registry:
      # Docker registry url
      url: http://ip:端口/v2
      # Docker registry fqdn
      name: localhost:端口
      # To allow image delete, should be false
      readonly: false
      auth:
        # Disable authentication
        enabled: false ##如果不需要分用户权限设置,推荐选择false
    
    • Registry web-ui 运行

    docker run -d -p 10082:8080  --name registry-web --link myRegistry -v $(pwd)/RegistryWebUi/:/conf/:ro hyper/docker-registry-web:latest
    
    * --link myRegistry  这边的myRegistry是我之前搭建的docker仓库容器的名字
    * 之前搭建docker仓库的命令是:
    ocker run -p 31000:5000 --restart=always -itd  --privileged=true -v /hardDisk_sdd/registry:/var/lib/registry  --name myRegistry -v /etc/localtime:/etc/localtime  registry:latest
    
    • Registry 设置

    sudo docker exec -it myRegistry /bin/sh
    cd /etc/docker/registry
    vi config.yml
    加入
      delete:                                                                                                                                                                          
        # To allow image delete                                                                                                                                                        
        enabled: true 
    

    version: 0.1                                                                                                                                                                       
    log:                                                                                                                                                                               
      level: info                                                                                                                                                                      
      formatter: text                                                                                                                                                                  
      fields:                                                                                                                                                                          
        service: registry                                                                                                                                                              
        environment: OfficeProduction                                                                                                                                                  
    storage:                                                                                                                                                                           
      cache:                                                                                                                                                                           
        blobdescriptor: inmemory                                                                                                                                                       
      filesystem:                                                                                                                                                                      
        rootdirectory: /var/lib/registry                                                                                                                                               
      delete:                                                                                                                                                                          
        # To allow image delete                                                                                                                                                        
        enabled: true                                                                                                                                                                  
    http:                                                                                                                                                                              
      addr: :31000                                                                                                                                                                     
      headers:                                                                                                                                                                         
        X-Content-Type-Options: [nosniff]                                                                                                                                              
    health:                                                                                                                                                                            
      storagedriver:                                                                                                                                                                   
        enabled: true                                                                                                                                                                  
        interval: 10s                                                                                                                                                                  
        threshold: 3 
    
    • 重启 myRegistry

    sudo docker restart myRegistry
    
  • Docker registry API

    查询catalog

    sudo curl -k -XGET https://www.registry.com/v2/_catalog
    

    查询tags

    sudo curl -k -XGET https://www.registry.com/v2/<image>/tags/list
    

    删除镜像

    # 查询镜像是否存在,以及tags
    sudo curl -k -XGET https://user:passwd@www.registry.com/v2/debian/tags/list
    # 获取digest参数
    sudo curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -XGET -k https://user:passwd@www.registry.com/v2/debian/manifests/jessie 2>&1 | grep Docker-Content-Digest | awk '{print $3}'
    # 根据digest进行删除
    sudo curl -X DELETE -k https://user:passwd@www.registry.com/v2/debian/manifests/sha256:a4a28eee3eb9698fef895484b2dbf1a2179e0f7b23408f5ebfc39b30bab031b4
    # 数据清理
    sudo docker exec registry /bin/registry garbage-collect /etc/docker/registry/config.yml
    sudo docker exec registry rm -rf /data/docker/registry/v2/respositories/debian

  • PHP-Composer包开发、发布流程

    Composer对与分发自己的PHP软件包,方便别人引用来说是很好的一种方式。平时开发中经常会用到Composer来引入三方的优质软件包,例如 Laravel、easywechat等等,如果我们有一些好的想法如果分发出去呢?下面我们就一步步来告诉大家如何实现自己的第一个Composer包。

    初始化项目

    首先创建composer.json文件用于声明包基本信息。

    {
    "name": "jake/dev-package", # 包名,格式为 vendor/package-name vendor用于避免冲突
    "description": "软件包描述",
    "autoload": { # 自动载入规范
    "psr-4": {
    "Jake\Package\": "src"
    }
    }
    }

    配置好之后就可以在src目录编写项目逻辑,这里我们声明了自动载入符合psr-4规范。

    本地引用软件包

    在为上传到仓库之前,我们可以使用本地路径来引入

    {
        "name": "jake/application",
    
        ...
    
        "repositories": {
          "dev-package": {
            "type": "path",
            "url": "relative/or/absolute/path/to/my/dev-package",
            "options": {
              "symlink": true
            }
          }
        }
    }

    配置中的“type”: “path” 表示引入的是一个本地仓库,url定义了包的路径,路径可以使用相对路径或绝对路径。

    虽然设置了type和url后就可以开发了,但是composer会复制包的代码到vendor目录,而且每次包发生变更都要执行composer update

    为了避免更新执行update操作,可以通过设置”symlink”: true参数让composer创建一个软链接到包所在目录

    最后一步操作就是使用composer require命令来引入软件包。

    composer require jake/dev-package @dev

    发布到公网

    1、 发布到外网首先需要把代码提交到vcs服务器,并且设置为可公开访问。

    2、 然后注册 packagist 帐号用于发布,用邮箱即可注册。

    3、 登录packagist后可通过 submit 页面发布composer包,发布时需要填写可公开访问的vcs地址。如下图

    点击Check跟着向导走即可完成发布。

    提示
    包名中的vendor不可与他人发布的重复。


    使用

    composer require "kyfjake/lumen-swoole:version"

    版本号规则

    1. dev-branch-name表示使用某一个分支版本,对应vcs中的分支
    2. vxx.xx.xx 表示使用xx.xx.xx版本,对应git中的标签 vxx.xx.xx


    版本号匹配规则见: 官方文档 或 composer包版本命名及限定规则

  • 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。

  • 英文日期缩写

    月份缩写:

    January 一月 Jan.

    February 二月 Feb.

    March 三月 Mar.

    April 四月 Apr.

    May 五月 May

    June 六月 Jun.

    July 七月 Jul.

    August 八月 Aug.

    September 九月 Sept.

    October 十月 Oct.

    November 十一月 Nov.

    December 十二月 Dec.

    日期的缩写表示法

    1st,2nd,3rd,4th,5th,6th,7th,8th,9th,10th,11th,12th,13th,14th,15th,16th,17th,18th,19th,20th,21st,22nd,23rd,24th,25th,26th,27th,28th,29th,30th。

    星期的缩写:

    Monday,星期一,Mon.

    Tuesday,星期二,Tue.

    Wednesday,星期三,Wed.

    Thursday,星期四,Thurs/Thur.

    Friday,星期五,Fri.

    Saturday,星期六,Sat.

    Sunday,星期日,Sun.