git 命令行查看文件的某个版本历史

我一般使用可视化的 ui 工具来查看某个文件的历史,但也免不了有的场景只有命令行工具。

命令行查看如下:

  1. 查看版本的提交号:

    git log
    

    ps: 我习惯使用下面这个命令,能展示每笔提交更详细的信息:

    git log --stat
    
  2. 查看该版本的文件:

    git show e0d599a9807b8ec1ce8271821feb2a90cc8a8e62:app/Console/Commands/TestCommand.php
    

linux 使用 unzip 解压的中文乱码问题

来自windows下的解压乱码真是痛:

image-20211220110600679

zip格式没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,Linux下的默认编码是UTF8。

可以使用 unzip-iconv 这个补丁包,指定解压的编码格式。

一、安装unzip-iconv补丁

$ wget https://github.com/ikohara/dpkg-unzip-iconv/archive/refs/heads/main.zip
$ unzip main.zip
$ cd main
$ make source
$ sudo make build-dep
$ make
$ sudo make install

更详细的说明参考GitHub上的项目信息: https://github.com/ikohara/dpkg-unzip-iconv

二、使用

unzip -O cp936 xxx.zip

参考帮助


增加docker的shm(共享内存)大小

接着上一篇《Linux下的 /dev/shm》,应用在docker中也会使用到容器里的shm。但创建 docker 的时候默认shm大小为64M,如果应用使用了比较大的shm,则很可能会崩溃。此时解决有2个办法:

  1. 挂载宿主机的shm,完美。

    services:
      app:
        image: kelvinblood/app
        ...
    	volumes:
      	- /dev/shm:/dev/shm
    
  2. 运行。

    services:
      app:
        image: kelvinblood/app
        ...
        shm_size: 512mb
        shm_size: '2gb'
    

    或者:

    docker run -it --shm-size="1g" ubuntu
    

selenium 裸安装备忘

  • 因为弄的standalone-chrome-debug,chrome老是崩溃,愤而裸机安装。
  • 因为裸机安装的hub/standalone或者hub/node,chromedriver启动的chrome老是黑屏,愤而用容器的node。
  • 用容器的node,依旧会chrome崩溃

由于上述几个原因,我在本机安装了 selenium,希望能更了解一些selenium,便有了本文。虽然最后我从其他地方解决了遇到的问题,这篇文章也就没有了实际意义,但还是记录下来。

一、安装java

selenium官方没有说明java使用的版本,我决定使用最新的版本。

image-20211214161118210

二、安装Selenium Grid

image-20211214163037163

三、安装chrome和chrome driver

四、4种不同的方式运行Grid

  • Standalone

    java -jar selenium-server-<version>.jar standalone
    java -jar selenium-server-4.1.0.jar standalone --host 0.0.0.0 --port 4445
    
  • Hub and Node

    java -jar selenium-server-4.1.0.jar hub --host 0.0.0.0 --port 4445
    java -jar selenium-server-4.1.0.jar node
    java -jar selenium-server-4.1.0.jar node --detect-drivers true --publish-events tcp://127.0.0.1:4442 --subscribe-events tcp://127.0.0.1:4443
    

    hub/node 用容器化的方式弄

    docker pull selenium/hub:4.1.0
    docker pull selenium/node-chrome:96.0
    
      node-chrome:
        image: selenium/node-chrome:96.0
        restart: always
        network_mode: bridge
        container_name: node-chrome
        ports:
          - "5901:5900"
        environment:
          SE_EVENT_BUS_HOST: 192.168.1.133
          SE_EVENT_BUS_PORT: 4445
          SE_EVENT_BUS_PUBLISH_PORT: 4442
          SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
          NODE_MAX_SESSION: 4
          NODE_MAX_INSTANCES: 4
    
  • Distributed

  • Docker

访问地址:http://localhost:4445/

image-20211214171806096

chrome 崩溃

https://developers.google.com/web/tools/puppeteer/troubleshooting#tips

默认情况下,Docker 运行一个/dev/shm共享内存空间为 64MB的容器。这对于 Chrome来说 通常太小,并且会导致 Chrome 在渲染大页面时崩溃。

要修复,请运行容器 docker run --shm-size=1gb以增加/dev/shm.

从 Chrome 65 开始可以使用--disable-dev-shm-usage标志启动浏览器。这会将共享内存文件写入/tmp而不是/dev/shm.

const browser = await puppeteer.launch({
  args: ['--disable-dev-shm-usage'],
});

尤其是如果你的容器需要跑在kubernetes上,最好还是以添加参数--disable-dev-shm-usage 这种方式运行了。


Nginx 流速限制

我用 nginx 做了一个简单的文件下载,分享一些会议的 ppt 给朋友下载。但是我又担心小水管不小心被拖死,总不能对每一个朋友说“你限制一下你的下载速度”吧。

这篇文章做个简单记录。

http {

    limit_conn_zone $binary_remote_addr zone=perip:2m;

    server
    {
      listen 443 ssl;
      server_name d.kelu.org;

      ... ...

      limit_conn perip 5;
      limit_rate 250k;
      limit_rate_after 10240K;
      autoindex on;
      autoindex_localtime on;
      autoindex_exact_size off;
    }

}
  1. $binary_remote_addr IP地址。这里配置的是IP,也可以使用如 $server_name 作为KEY来限制域名级别的最大连接数。

  2. zone=perip:2m 设置zone为perip,每个ip缓冲区为2m。

  3. limit_conn perip 5 一个 IP 最多同时有5个连接。缓存区的大小为2m。

  4. limit_rate 250k;

    ​ 速率最大为250k/s。

  5. limit_rate_after 10240K

    ​ 忽略最初的流量。

参考资料