Study hard and make progress every day!

2019-04-28
MacOS上VMWare Fusion中如何给网口设置固定IP

介绍

VMWare Fusion中,虚拟机的网口使用NAT模式时,获取到的IP地址是通过DHCP动态分配的,不是固定分配的。每次开机虚拟机网口IP都有可能变动,SSH登录时每次要去查看,太不方便。
找了下如何设置固定IP的方法,记录如下。

在如下环境中可以设置成功:

  • MacOS Version: 10.14.4 (18E226)
  • Vmware Fusion Version: 10.1.5 (10950653)

步骤

1. 获取虚拟主机的MAC地址

默认安装下,所有的虚拟主机的Image都存放在~/Documents/Virtual\ Machines.localized/下,以名为CentOS 7 64bit的虚拟机为例。获取命令为:

1
cat ~/Documents/Virtual\ Machines.localized/CentOS\ 7\ 64bit.vmwarevm/CentOS\ 7\ 64bit.vmx | grep generatedAddress

找到对应网口的MAC地址, 本文中要绑定的网口ethernet0的MAC地址为00:0C:29:23:6E:CC

2. 设置静态IP

打开配置文件/Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf, vmnet8是VMWare用来设置NAT的虚拟网口,在MacOS下使用命令ifconfig可以看到该虚拟网口。

在配置文件中可以看到DHCP的IP池为192.168.187.128 ~ 192.168.187.254(每个机器可能不同,以实际显示的为准)

阅读此文

2019-04-26
Vmware Fusion中CentOS 7中安装Vmware Tools

安装步骤

  1. 虚拟机状态栏中选择 虚拟机 > 安装Vmware Tools
    期间可能会报CDROM已经被占用等信息,选择还是挂载即可
  2. 打开Terminal手动挂载CDROM, 如果已经挂载,则不需要挂载

    1
    2
    3
    4
    5
    6
    # 查看cdrom是否已经自动挂载
    mount | grep iso9660
    # 手动挂载cdrom
    mkdir /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
  3. 拷贝cdrom内容到/tmp并安装
    安装步骤:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 如果是CentOS最小化安装,则系统没有perl,gcc和kernel-devel,需要先安装
    yum install -y perl gcc make kernel-devel
    # 拷贝vmtools并安装
    cd /tmp/
    cp /mnt/cdrom/VMwareTools-x.x.x-yyyy.tar.gz ./
    tar xzvf VMwareTools-x.x.x-yyyy.tar.gz
    cd vmware-tools-distrib
    # 执行安装程序,没有特殊要求,一路回车即可
    bash ./vmware-install.pl
    # 清理文件
    rm -rf /tmp/VMwareTools-x.x.x-yyyy.tar.gz
    rm -rf /tmp/vmware-tools-distrib/

Reference

阅读此文

2019-04-26
Mac和Linux下一些常用的命令 - command tips

git branch 不要分页

设置git branch不分页显示

1
git config --global pager.branch false


使用git合并特定的commit

比如要在master分支上合并其他分支的commit,commit id是37c89cc, 则命令是:

1
2
git checkout master
git cherry-pick 37c89cc


本地同步远端已删除分支

参考: https://stackoverflow.com/questions/5751582/fetch-from-origin-with-deleted-remote-branches
使用git fetch -p来同步远端已经删除的分支。
-p就是--prune修剪的意思。


Github中clone私有仓库

Github中,对于私有仓库如果直接git clone, 会提示fatal: repository 'https://github.com/xxxxxx/yyyyyy.git/' not found
有两个方法可以用于克隆Github上的私有仓库

  1. 使用ssh key方式
  2. 使用显式的用户名密码的https方式

Github中使用账号密码方式clone私有仓库

git clone命令的url中,添加上github的用户名和密码即可。

1
git clone https://username:password@github.com/xxxxxx/yyyyyy.git

Github中使用ssh key方式clone私有仓库

~/.ssh/config中配置github中使用的key, 类似如下

1
2
3
4
Host "github.com"
HostName "github.com"
User "username"
IdentityFile ~/.ssh/id_rsa_for_github

接下来就可以clone代码了

1
git clone https://github.com/xxxxxx/yyyyyy.git

Reference


查看git中所有分支的日志

使用命令git log --all来查看所有分支的提交日志


在所有的branch中搜索

方法一

使用命令git grep "search-words" $(git rev-list --all) 来在所有的branch的commit中进行搜索。

该方法有一个问题,当git rev-list --all列出的commit很多时,可能会报-bash: /usr/bin/git: Argument list too long的错误

方法二

使用命令git rev-list --all | xargs git grep <expression> 来搜索,则不会有Argument list too long的问题

搜索限制在某个目录下的方法

以目录lib/util为例:

1
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util

两个命令中都带了lib/util,因为rev-list只是将有lib/util变更的revisions全部找出来,所以还需要在git grep中添加-- lib/util将搜索限定在找出来的revisions中的路径lib/util下。

其他用法

还有一些其他的搜索方法,参考How to grep (search) committed code in the Git history


git diff 不要分页

使用命令git --no-pager diff设置git diff时不要分页。


查找git中文件是否被ignore以及是被哪个配置文件ignore的

使用git check-ignore *来查找目录下是否有被ignore的文件。
使用git check-ignore -v *来查找目录下ignore的文件,以及是被哪个配置文件ignore的

例子:

1
2
3
4
5
$ git check-ignore *
node_modules
$ git check-ignore -v *
.gitignore:37:/node_modules node_modules
$

例子中可以看到当前目录node_modules是被git ignore的,是被当前目录下的.gitignore文件的37行的配置/node_modules给ignore的。

如果要检查单个文件或者目录是否被ignore了,那么将上述命令的*换为对应的文件即可, 如:

1
2
3
$ git check-ignore -v node_modules/ Gemfile
.gitignore:37:/node_modules node_modules/
$

可见Gemfile没有被ignore, node_modules/被文件.gitignore设置为ignore了。

参考:


git命令获取当前分支

使用git symbolic-ref --short -q HEAD来获取当前分支

参考:


获取git仓库中所有的branch

命令:

1
2
3
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

一个完整的clone所有分支的例子

1
git clone ssh://user_name@git.xxxx.com/git/repository.git && cd repository && git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done && git fetch --all && git pull --all && cd ..

参考:


查找文件记录(包含已删除的文件)

如下命令可以用来查找文件的提交记录,即使文件已经被删除了。

  • 指定具体文件路径查找,适用于还记得文件路径的情况

    1
    git log --all --full-history -- <path-to-file>
  • 只显示最后一个和文件相关的commit

    1
    git log --all --full-history -1 -- <path-to-file>
  • 模糊查找,适用于只记得部分文件名的情况

    1
    git log --all --full-history -- "**/thefile.*"
  • 使用git log查找出文件所对应的commit后,使用git show显示具体commit情况

    1
    git show <SHA> -- <path-to-file>
  • 如果想要具体的文件,那么git checkout <SHA>临时切到指定分支查看对应的文件,

    1
    git checkout <SHA> -- <path-to-file>
  • 如果是查找删除的文件,那么<SHA>后面需要还有一个脱字符^

  • 使用<SHA>^, 因为当前<SHA>中的文件已经被删除了, 需要切换到前一个版本
    1
    git checkout <SHA>^ -- <path-to-file>

Git从远端分支checkout

如果只有一个remote, 直接git checkout branch_name就行。

如果有多个remote,则需要显示指定remote

1
git checkout -b fix-failing-tests origin/fix-failing-tests

参考:


Macos下tree显示中文

1
2
3
4
5
# 安装tree
brew install tree`
# 中文不乱码加参数 -N
tree -N

CentoOS 7 最小化安装后可能需要的一些命令

1
2
3
4
5
yum install wget curl
yum install unzip
yum install tree
yum install net-tools
yum install lszrz
阅读此文

2019-04-20
Niu-X resource

记录一些有用的网站,持续更新中。。


Linux-command

github地址: linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集

比较系统的各个命令,期待有空时每个粗略一遍,需要时再来查询

阅读此文

2019-04-20
防火墙命令firewall-cmd基本用法

安装和管理firewalld

1
2
3
4
5
6
7
8
9
# 安装firewalld
yum install firewalld firewall-config
systemctl start firewalld # 启动
systemctl status firewalld # 或者 firewall-cmd --state 查看状态
systemctl stop firewalld # 停止
systemctl enable firewalld # 开机自自动
systemctl disable firewalld # 取消自启动
systemctl list-unit-files | grep firewalld # 查看是否开机自启动

基础命令

一些常用的命令如下:

  • 查看防火墙状态
    命令: firewall-cmd --list-all
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ sudo firewall-cmd --list-all
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: ens33
    sources:
    services: ssh dhcpv6-client
    ports:
    protocols:
    masquerade: no
    forward-ports:
    source-ports:
    icmp-blocks:
    rich rules:
    $
阅读此文

2019-04-09
在线架构图工具Online Visual Paradigm

简介

一个免费的在线画AWS架构图的网址https://online.visual-paradigm.com, 30天试用期内可以随时保存和下载源文件。过了试用期后,还可以使用,但无法保存和导出源文件。
visual-paradigm也有客户端,30天免费试用。

  • 优势
    • 集成了AWS各个服务的图标,
    • 有一些经典的架构模板,制作AWS架构图的时候会比较方便。
  • 劣势
    • 试用过后, 费用比较贵

几个例子

使用在线工具画的项目的架构图
architecture_diagram.png

阅读此文

2019-04-08
解析EB logs的一些Linux小命令

开启EB rotated log功能后,EB的日志将会被存储在EB对应bucket的resources/environments/logs/logtype/environment-id/instance-id路径下, 供后续查看。官网文档Viewing Logs from Amazon EC2 Instances in Your Elastic Beanstalk Environment

下面记录几个常用检查日志的小命令

使用exclue和include来获取部分日志

开启EB的rotated log后,EB中的EC2会每小时将日志上传到S3中。以Passenger with Ruby的Platform为例,有production.log, access.log和passenger.log三种文件会被传到S3中,文件名格式:文件路径+时间戳+gz的格式

1
2
3
4
5
$ ls *log1554688861.gz*
_var_app_support_logs_rotated_access.log1554688861.gz
_var_app_support_logs_rotated_passenger.log1554688861.gz
_var_app_support_logs_rotated_production.log1554688861.gz
$

Bucket下的日志,默认不会自动清理,日积月累,instance-id路径下的文件会越来越多,而目前aws cli的s3 cps3 sync,并没有提供根据创建时间的filter,有时候获取固定哪段时间的文件就不太方便。

阅读此文

2019-04-02
AWS EC2中开启BBR

官网中关于如何在EC2中开启BBR的说明。Amazon Linux AMI 2017.09 Release Notes

开启方法

开启方法摘录如下:

The Kernel has been updated to latest 4.9.y stable tree, new ENA driver 1.3.0 as well as support for TCP Bottleneck Bandwidth and RTT (BBR) which improve network performance.
BBR is not enabled by default. You can enable it on your EC2 Instance via:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ sudo modprobe tcp_bbr
$ sudo modprobe sch_fq
$ sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
Persistent configuration should look like:
$ sudo su -
# cat <<EOF>> /etc/sysconfig/modules/tcpcong.modules
>#!/bin/bash
> exec /sbin/modprobe tcp_bbr >/dev/null 2>&1
> exec /sbin/modprobe sch_fq >/dev/null 2>&1
> EOF
# chmod 755 /etc/sysconfig/modules/tcpcong.modules
# echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.d/00-tcpcong.conf
阅读此文

2019-03-21
CentOS 7下Ctrl-C失效问题

rvm 1.29.4在CentOS 7上有一个bug,在Bash下,source了rvm后,执行Crtl+C时,无法终止shell命令。

具体讨论在Unable to pass SIGINT signal (control-C) on 1.29.4 中。

解决办法:

  1. 在用户账号下强制使用trap设置回被改写的信号量INT QUIT
  2. 升级rvm到1.29.4以上版本
阅读此文

2019-03-11
使用nginx处理S3静态资源

在网页或APP中,使用S3公开的静态资源,比如图片,小视频等。通常有这么几个常用的方式

  • 直接在页面中使用S3的public链接
  • 使用自己的域名,再在Web服务器侧redirect到S3的链接
  • 使用自己的域名,再在服务器上经过反向代理服务,获取S3内容后再返回给客户端或浏览器。

在APP中,因为不需要考虑SEO,可以在页面或接口中直接返回S3的链接,APP直接访问S3资源,效率最高。
如果是网页,有时候为了SEO的需要,可能更多的会采用第二和第三种方式, 将资源经过服务器来中转一下。
下面介绍一下第二和第三种方式在Nginx侧的简单实现。

使用Nginx来redirect S3的链接

如下是一个简单的Nginx的配置的例子。基于以下几个前提

  • 测试域名为test.jibing57.com
  • 所有放在S3上的静态文件,在网站上都以/s3_redirect路径打头
  • S3 Region为us-west-2, Bucket 为s3-for-blog
  • /s3_redirect开头的文件redirect到真实的S3 URL中。
阅读此文