乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

Git使用之如何合并多个commit

发表于 2021-09-08

前言

我们在开发的时候, 有时候可能会提交多个业务零散的commit, 这些个commit内容合在一块才算是一个完整的任务

为了使得提交记录美观简洁, 同时缓解强迫症症状, 那么我们需要将这些个commit合并成一个commit

如果你要合并的是最近几次commit, 那么可以使用git reset --soft进行commit撤销处理, 如下:

1
git reset --soft HEAD^3

如果你要合并的是历史中间几次commit, 那么得用到git rebase -i指令了

具体操作

假设我们需要将以下最近两个记录进行合并:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
commit def5adef853da4cc05752bdb36577c127be71ba5
Author: xxx
Date: Thu Dec 28 16:01:36 2017 +0800

优化代码

commit f36801544670e00b2f59a28e19017d2786c4085e
Author: xxx
Date: Thu Dec 28 15:59:46 2017 +0800

修复

commit 00b2f59a28e19017d2786c4085e9a28e19017d278
Author: xxx
Date: Thu Dec 28 16:59:46 2017 +0800

修复bug
(END)

那么我们执行以下命令:

1
2
3
4
git rebase -i 00b2f59

或者
git rebase -i HEAD~3

这里的commit id是需要进行合并commit的前一个, 命令执行后, 会自动打开vim文本编辑器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pick f368015 修复
pick def5ade 优化代码

# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out~

接下来, 我们需要对该内容进行修改, 首先我们需要来了解几个指令含义:

  • pick: 表示保留该commit
  • reword: 表示修改该commit的注释
  • edit: 表示保留该commit 同时对代码内容进行修改
  • squash: 表示将该commit合并到上一个commit
  • fixup: 表示将该commit合并到上一个commit 同时丢弃该commit注释
  • exec: 执行shell
  • drop: 删除该commit

这里我们使用squash指令进行合并, 内容修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pick f368015 修复
squash def5ade 优化代码

# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out~

表示将def5ade合并到f368015

wq内容保存后, 将进入到注释修改编辑页:

1
2
3
4
5
6
7
8
9
# This is a combination of 2 commits. 
# first commit
优化代码

# second commit
修复
# Please enter the commit message for your changes. Lines starting 

# with '#' will be ignored, and an empty message aborts the commit.

我们可以对注释进行选择, 不需要的就用#号注释掉, 或者修改成别内容, 保存后, 直接开始自动合并

合并完毕后, 如果你想撤销合并 返回到合并前的状态, 可以使用以下指令:

1
git rebase --abort

通过rebase方式的合并, 会合并生成一个新的commit id, 被合并的commit可以在reflog中找回

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Ubuntu无法运行程序提示No X server at $DISPLAY 或unable to open X display

发表于 2021-09-02

前言

这种情况一般出现在采用vnc远程桌面服务时

桌面中双击应用没有任何反应, 而通过命令窗口启动程序则提示:

unable to open display或者Unable to open X display还有可能是No X server at $DISPLAY

这个时候我们尝试启动xserver 却发现提示no screens found(EE) 如图:

image-20210902173238923

至此 我们推断是没有指定vncserver

解决办法

我们需要通过export DISPLAY来指定连接哪个vncserver

我们在启动vnc服务时可以看到该服务的名称为hitleap:3, 如图:

image-20210902174243526

因此 我们执行以下命令:

1
export DISPLAY=hitleap:3

此时, 我们再重新执行程序, 程序正常启动

关于DISPLAY

在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处, 上面export DISPLAY=hitleap:3表示将图形显示到vncserver

一般默认情况下vncserver名称为:0,比如:

1
export DISPLAY=:0

也有可能是1 、2 、3甚至137

连接成功后可以通过以下指令查看当前显示的详细信息:

1
xdpyinfo

查看当前设置的DISPLAY值:

1
echo $DISPLA

查看当前设备所有的变量 里面可以查看vnc密码以及当前设置的DISPLAY值:

1
printenv

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Mac平台安装Docker

发表于 2021-09-02

前言

Mac平台安装Docker非常的简单, 直接使用Homebrew工具安装即可, 如果你Mac上没有装Homebrew, 可以在命令窗口执行以下命令安装:

1
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

有了homebrew工具后, 只需一行指令搞定docker下载安装

具体操作

  1. 安装docker

    1
    brew install docker

    这里安装的不带图形的命令行版本, 如果想安装图形版docker, 那么加上cask参数:

    1
    brew install --cask --appdir=/Applications docker

    图形版长这样:

    image-20210903122347320

  2. 启动docker服务

    1
    launchctl start docker
  3. 如果你想卸载docker

    1
    brew uninstall docker

接下来可以开始使用docker了, 具体docker操作技巧可参考:

《Linux环境下docker常用指令集合》

如果你的mac系统版本是10以上, 建议还是安装图形版docker, 纯命令版在启动服务的时候会出现启动失败的问题

安装包下载

如果你不通过brew, 想通过下载dmg文件手动安装, 这里提供下载链接:

点击下载

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Ubuntu系统命令行安装Chrome浏览器

发表于 2021-09-02

前言

Ubuntu桌面搭建好后, 发现啥软件也没有, 此时我们最需要的就是一款浏览器

接下来给大家介绍命令行方式安装谷歌浏览器

安装步骤

  1. 查看系统是32位还是64位

    1
    uname -a

    执行后打印结构如果带有x86_64字样表示64位系统 , 如果带有类似 i686 i386字样则为32位系统

  2. 下载安装包

    32位:

    1
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb

    64位:

    1
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  3. 安装程序

    1
    sudo dpkg -i google-chrome*; sudo apt-get -f install
  4. 运行程序

    1
    /usr/bin/google-chrome-stable

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Mac系统如何运行exe程序

发表于 2021-09-02

前言

之前给大家介绍了如何在Ubuntu系统运行exe程序, 具体可查看:

《buntu系统如何运行exe程序》

这次, 给大家介绍如何在Mac平台运行exe程序, 本次测试是在Mac 10.15.4环境下进行

实现步骤

  1. 首先下载并安装XQuartz支持库:

    1
    brew install --cask xquartz
  2. 下载并安装wine

    1
    brew install --cask --no-quarantine wine-stable

    wine给我们提供了很多可用工具:

    image-20210902142316211

  3. 运行exe程序

    1
    wine xxx.exe

    如果报错bad CPU type in executable: wine, 则有可能是因为exe文件是64位的, 此时使用wine64执行即可:

    1
    wine64 xxx.exe

    如果是.net开发的程序, 会提示需要安装支持包, 点击安装即可:

    image-20210902141949081

    image-20210902142203820

  4. 如果要卸载wine

    1
    brew uninstall --cask

更多使用以及其他版本下载可参考wine官网

内容补充

目前mac高版本使用wine会出现报错现象, 如果要运行exe程序的话, 这里给大家推荐另一款产品 CrossOver, 免费版试用期14天,和谐版在文章尾部

除了内置一些常用软件之外, 可以运行单独的exe程序, 步骤如下:

  1. 双击运行命令选项

    image-20211105162353517

  2. 点击浏览按钮选择相应的程序文件直接运行即可

    image-20211105162832862

    image-20211105162927610

点击下载CrossOver (访问密码: 312306)

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Ubuntu系统如何运行exe程序

发表于 2021-09-02

前言

exe文件是windows平台下的应用程序, 需要在Windows环境下才能运行

如果你想在Linux系统运行Windows程序, 那么就要给大家介绍一个工具了

其名为wine

关于Wine

Wine(“Wine Is Not an Emulator” 的递归缩写)是一个能够在多种 POSIX-compliant操作系统(诸如 Linux,Mac OSX及 BSD 等)上运行 Windows 应用的兼容层

那么 话不多说, 我们直接来实现一下:

实现步骤

  1. 下载并安装Wine:

    1
    2
    sudo dpkg --add-architecture i386 && sudo apt-get update &&
    sudo apt-get install wine32 && sudo apt-get install wine
  2. 运行exe程序, 如果装有桌面环境 那么直接双击, 或者在命名窗口执行以下命令:

    1
    wine xxx.exe

    如果是64位程序则使用wine64:

    1
    wine64 xxx.exe

问题集锦

如果在桌面环境中双击exe没有反应, 同时命令行执行wine报错Application tried to create a window, but no driver could be loaded.

那么可以进入wine配置窗口, 添加相应的依赖库, 具体操作如下:

运行winecfg指令:

image-20210902122022293

image-20210902122045500

回车后弹出wine配置窗口, 在Libraries选项中添加一下三个依赖库:

image-20210902122005234

添加完成后点击OK, 此时再双击exe文件即可正常运行

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

如何使用Web浏览器访问Ubuntu环境下的vnc桌面

发表于 2021-09-02

前言

一般我们在服务端安装后vncserver后, 主机端通过vnc客户端程序输入ip端口和密码后即可远程登录桌面

为了方便使用, 我希望可以使用浏览器直接访问, 那么接下来给大家介绍其实现方法:

实现概述

想要实现浏览器访问桌面, 首先我们需要安装桌面程序, 至于如何安装ubuntu桌面程序 可以参考以下文章:

《给Multipass容器安装桌面环境》

《Ubuntu系统安装LXDE+VNC桌面环境》

在桌面程序安装完毕的前提下, 我们只需要在服务器中安装novnc程序即可

novnc相当于是一个中间代理, 充当了vnc viewer的一个角色, 使得我们无需安装本地vnc客户端即可访问桌面

具体操作如下:

安装步骤

  1. 下载并安装novnc程序:

    1
    sudo snap install novnc
  2. 启动novnc连接vncserver 同时设置web访问端口为6081

    1
    sudo novnc --listen 6081 --vnc localhost:5901

    image-20210902110019439

  3. 浏览器输入以下地址访问

    1
    http://ip:6081/vnc.html

    如下:

    image-20210902105804968

    输入密码:

    image-20210902111100228

    进入后长这样:

    image-20210902111148950

  4. 为了保持novnc常驻在后台, 我们可以启动novnc后台服务:

    1
    sudo snap set novnc services.n6082.listen=6082 services.n6082.vnc=localhost:5902

    参数说明:

    • services.n6082.listen=6082 :表示名为n6082的服务web监听端口设为6082, 服务名称可以随便起, 但是前后要保持一致
    • services.n6082.vnc=localhost:5902: 表示名为n6082的服务连接的vncserver端口设为6082

    那么 也就是说, novnc可以同时连接多个vncserver, 比如这样:

    1
    sudo snap set novnc services.n1.listen=6081 services.n1.vnc=localhost:5901 services.n2.listen=6082 services.n2.vnc=localhost:5902

    同时连接了两个vncserver, 对应的端口分别为6081和6082` , 也就是不同的端口访问不同的桌面

novnc指令补充

  1. 查看当前开启的服务数量:

    1
    sudo snap get novnc services

    打印结果长这样:

    1
    2
    3
    Key             Value
    services.n1 {...}
    services.n2 {...}
  2. 关闭服务

    1
    sudo snap set novnc services.n1.listen='' services.n1.vnc=''
  3. 查看具体某个服务的信息

    1
    sudo snap get novnc services.n1

补充

  1. 如果你需要设置vncserver开机自启动:

    1
    systemctl start vncserver@:1.service && systemctl enable vncserver@:1.service
  2. 你想查看vnserver服务是否开启:

    1
    2
    3
    4
    systemctl status vncserver@:.service

    或者
    systemctl is-enabled vncserver@.service
  3. 你想重启vncserver:

    1
    systemctl restart vncserver@:1.service
  4. 你想设置vnc分辨率:

    1
    vncserver -geometry 1280x1024
  5. 你想修改vncserver登录密码:

    1
    vncpasswd

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Ubuntu系统安装LXDE+VNC桌面环境

发表于 2021-09-02

前言

在众多linux桌面环境中, LXDE属于非常轻量的一款, 占用系统资源小, 适合小型服务器使用

接下来介绍该桌面环境的安装步骤

快速安装

  1. 更新源

    1
    sudo apt-get update
  2. 安装图形驱动 否则内置和下载的应用无法启动

    1
    sudo apt-get install xorg
  3. 安装lxde桌面程序

    1
    sudo apt-get install lxde-core

    安装过程中会让你选择显示管理器, 选择gdm3即可

    image-20210831172358907

  4. 安装VNCServer 用于远程桌面连接

    1
    sudo apt-get install tightvncserver

    更多关于tightvncserver可参考中文文档

  5. 启动vnc服务

    1
    vncserver

    提示我们输入访问密码:

    image-20210901175901616

    这里的密码用于接下来的远程登录用

开始远程访问

第一种 vnc客户端访问模式

Mac平台可直接执行以下指令安装:

1
brew install Caskroom/cask/vnc-viewer

或者下载安装包:

点击下载(访问密码:312306)

安装vnc客户端后在地址栏输入目标ip和端口, 端口默认为5901

image-20210901180352068

输入密码登录后发现只有灰屏幕:

image-20210901180441212

接下来我们需要配置一下vncserver的环境:

  1. 首先关闭vncserver

    1
    vncserver -kill :1
  2. 修改前对配置文件进行备份

    1
    cp ~/.vnc/xstartup ~/.vnc/xstartup.bak
  3. 修改配置文件

    1
    vim ~/.vnc/xstartup

    将以下内容添加至文本末尾:

    1
    2
    lxterminal &
    /usr/bin/lxsession -s LXDE &
  4. 修改配置文件权限

    1
    chmod +x ~/.vnc/xstartup
  5. 重新启动vnc服务

    1
    vncserver

最后重新连接远程桌面, 如下:

image-20210902104141960

第二种 浏览器访问模式

具体参考:

《如何使用Web浏览器访问Ubuntu环境下的vnc桌面》

补充

  1. 如果重复执行vncserver指令会开启多个vnc服务它们并行运行 互不干扰

  2. 除了使用tightvncserver搭建vnc服务器之外 还可以使用x11vnc, 详情查看文档:

    点击进入

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

服务器之间传输文件的方式都有哪些

发表于 2021-09-01

前言

如果有图形界面的话 我们可以直接使用FileZilla或者 SecureCRT 进行文件传输

但Linux服务器都是不带图形界面的, 这个时候我们需要通过相关指令来处理

假设有两台公网的Linux机器A和B, 我们需要从A传输文件至B

可以采用以下几种方式:

第一种 使用nc指令

操作如下:

服务器B开启文件端口监听:

1
nc -l 3300 > aaa.tar //将接受的文件取名为aaa.tar

服务器A传输文件:

1
nc 服务器Bip 3300 < 需要传送的文件

第二种 使用scp指令

操作如下:

1
scp -r 需要传输的目录 root@服务器ip:目标存放目录

第三种 使用rsync指令

操作如下:

1
rsync -r 需要传输的目录 root@服务器Bip:目标存放目录

和scp很相似, 比scp多了一个排除子目录的功能:

1
rsync -r -v --exclude 需要排除不进行传输的子目录 需要传输的目录 root@服务器Bip:目标存放目录

如果要同时排除多个目录 那么需要指定多次--exclude 如下:

1
rsync -r -v --exclude 排除目录1 --exclude 排除目录2 需要传输的目录 root@服务器Bip:目标存放目录

第四种 使用wget工具

操作如下:

首先服务器B需要开启http服务, 这里以python为例:

1
python -m http.server 3300

服务器A开始从B下载文件:

1
sudo wget -bc --limit-rate=6M 0.0.0.0:3300/需要下载的文件

参数说明:

  • -b : 后台执行
  • -c: 断点续传
  • –limit-rate=6M: 限速6M

总结

工具 优点 缺点
nc 采用tcp协议 占用系统资源小 速度快 安全性不高 操作相对繁琐
wget 采用tcp协议 支持子目录排除 支持限速 断点续传 安全性不高操作相对繁琐
scp 采用ssh协议 传输安全 支持限速 占用系统资源小 不支持子目录排除
rsync 采用ssh协议 传输安全 速度比scp快 支持子目录排除 支持限速和本地复制 和断点续传 小文件众多时比较消耗资源

本地传输

使用scp和rsync不仅可以对两台服务器上的数据进行相互传输 还可以进行本地数据传输 比如将服务器上的数据下载到本地:

1
rsync -r root@服务器IP:服务器目录 本地目录

或者

1
scp -r root@服务器IP:服务器目录 本地目录

还可以将本地的数据上传到服务器 只需将前后两者反过来即可 比如:

1
rsync  -r  本地目录 root@服务器IP:服务器目录

或者

1
scp -r  本地目录 root@服务器IP:服务器目录

断点续传

如果传输的文件比较大 可以采用断点续传的方式 然而scp并不支持断点续传, wget只能实现服务器之间数据传输以及本地从服务器拉取数据 无法做到将本地数据推到服务器

好在rsync工具给我们提供一个用于断点续传的指令, 如下:

1
rsync -r  --partial --progress 本地目录 root@服务器IP:服务器目录

参数解释:

  • --partial:保留因故没有完全传输的文件,以加快随后的再次传输,即断点续传
  • --progress : 在传输时显示传输过程

rsync还允许我们这样写:

1
rsync -r  -P 本地目录 root@服务器IP:服务器目录

参数解释:

  • -P :等价于--partial和--progress

关于rsync目录排除不生效的问题

这种情况通常是目录路径不对的问题 比如:

1
rsync -r -P  --exclude=/root/songjian/auto  root@服务器IP:/root/songjian songjian

上面这种写法并不能正确排除目录 正确的写法应该如下:

1
rsync -r -P  --exclude=/songjian/auto  root@服务器IP:/root/songjian songjian

B站入口

打赏通道

本文为作者原创 转载时请注明出处 谢谢

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

一个非常强大的网络工具NC使用详解

发表于 2021-09-01

nc是netcat的简写 是一个非常强大的网络工具

它可以:

  • 模拟服务端侦听指定端口
  • 模拟客户端对服务端进行连接
  • 机器之间传输文件
  • 机器之间网络测速
模拟服务端和客户端

我们在使用阿里云服务器的时候, 除了要在服务器给应用部署端口之外 还需要再阿里云后台安全组中开放端口映射 这样外网才能对服务器程序进行访问

有时候 我们需要测试安全组策略是否打通, 假设我们在安全组中配置外网4001端口映射到服务器80端口, 这个时候我们可以在服务端模拟一个80侦听端口:

1
nc -l 80

然后外网主机同样使用nc进行模拟访问:

1
nc -zv 服务器ip 4001

当然你想使用telnet模拟客户端也可以:

1
telnet 服务器ip 4001

如果连接成功 表示端口策略打通 连接拒绝则不通 倘若连接超时 有可能服务端程序有问题

利用nc同时开启多个侦听端口:

1
nc -l 80 &

只需在尾部加上&重复执行该命令即可

image-20210901122029161

文件传输

首先在服务端启动一个接收文件的监听,格式如下:

1
nc -l port >file

意思是把接收到的数据都写到file文件里(这里文件名随意取)

image-20210901122707802

然后在主机上将文件发过去:

1
nc 服务器ip 端口 < 需要传送的文件

image-20210901122816765

文件传输完毕后服务端侦听自动断开

当然 我们也可以先发送文件 然后再在服务端接收文件 效果也是一样的

目录传输

如果需要将目录下多个文件同时传输, 可以采用以下指令

服务端 端口监听到文件后解压操作:

1
nc -l port | tar xfvz -

主机端 将当前目录下所有文件打包 然后传输:

1
tar cfz - * | nc 服务器ip 端口
网速测试

服务端开启文件传输监听:

1
nc -l 端口 >/dev/null

null表示数据都输出给空设备(这样不写磁盘,测试网速更准确)

主机端开始传输数据:

1
nc 服务器ip 端口 </dev/zero

把无限个0发送给服务端 模拟真实传输

此时 主机新开一个窗口 使用dstat命令查看当前网速

image-20210901143339010

dstat可以查看当前cpu,磁盘,网络,内存页和系统的一些当前状态指标

我们通过关注recv 和send两列即可查看当前接收和发送的网络速率 注意数字后面的单位B,KB,MB

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…222324…50

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

493 日志
143 标签
RSS
© 2025 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%