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

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


  • 首页

  • 归档

  • 搜索

Linux中关于前台任务和后台任务的相关操作

发表于 2021-09-14

概念

以下概念以终端操作为前提

  • 前台任务: 在前台执行的任务, 任务一旦执行则占用终端窗口, 同一窗口内 无法进行其他操作
  • 后台任务: 在后台执行的任务, 任务执行不占用终端窗口, 同一窗口内 可一边执行任务 一边进行其他操作

无论是前台任务还是后台任务, 终端一旦被关闭, 任务会立即终止

前台任务

  1. 终止前台任务

    1
    Ctrl+C
  2. 暂停前台任务

    1
    Ctrl+Z
  3. 查看当前暂停的任务和所有后台任务信息

    1
    jobs -l
  4. 将前台任务切换成后台任务

    1
    2
    3
    1.输入ctrl + z 暂停任务
    2.输入jobs查看任务号
    3.使用 bg %任务号 将该任务号放入后台
  5. 终端关闭 保持前台任务继续运行

    1
    nohup xxxx

    nohup: 表示忽略hup信号, 终端关闭任务进程也不销毁

后台任务

  1. 以后台方式启动任务, 命令末尾加&即可

    1
    watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本
  2. 终止后台任务

    方式一:

    1
    2
    1.输入jobs查看任务号
    2.kill %任务编号

    方式二:

    1
    2
    1.使用ps指令查看任务进程pid
    2.kill pid
  3. 将后台任务切换成前台任务

    1
    2
    1.输入jobs查看任务号
    2.fg %任务编号
  4. 终端关闭 保持后台任务继续运行

    如果后台任务还未启动, 指令前面加nohup:

    1
    nohup watch  -n 10 sh  test.sh  &

    如果后台任务已经启动:

    1
    2
    1.输入jobs查看任务号
    2.使用 disown -h %任务号

    disown指令用于对jobs任务的移除移出操作, 常见参数有:

    1
    2
    3
    disown -a //删除全部作业
    disown -r //删除正在运行的作业
    disown -h %任务号 //移出(非删除)指定作业, 同时忽略hup信号

实现后台任务的另一种方式

除了使用nuhup+&的方式使得任务在后台运行且不受终端关闭影响外, 还有一种方式那就是使用systemd

创建systemd服务步骤如下:

  1. 创建服务配置文件

    1
    vim xxx.service

    将以下内容填入配置文件中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Unit]
    Description=Foo

    [Service]
    ExecStart=/usr/sbin/foo-daemon
    Restart=always

    [Install]
    WantedBy=multi-user.target
    • Description: 表示服务描述
    • ExecStart: 表示需要执行的程序指令, 需要填入程序的完整路径
    • Restart: 表示是否自动重启, 可选参数有no、always、on-success、on-failure、on-abnormal、on-abort、on-watchdog等
    • WantedBy: 表示用户权限

    更多配置, 可参考官方文档 或者博客介绍

  2. 将服务配置文件拷贝至/lib/systemd/system/目录下

    1
    sudo cp xxx.service /lib/systemd/system/
  3. 启动服务

    1
    sudo systemctl start xxx
关于服务的其他操作指令
  1. 停止服务

    1
    sudo systemctl stop xxx
  2. 查看服务运行状态

    1
    sudo systemctl status xxx
  3. 设置服务开机自启动

    1
    sudo systemctl enable xxx
  4. 禁止服务开启自启动

    1
    sudo systemctl disable xxx
  5. 服务重启

    1
    sudo systemctl restart xxx
  6. 查看systemd的版本

    1
    sudo systemctl --version
  7. 查看配置文件

    1
    systemctl cat xxx.service

systemd和nohup+&之间的对比

systemd可以满足以下需求:

  • 方便分析问题的服务运行日志记录
  • 服务管理的日志
  • 异常退出时可以根据需要重新启动

而nohup 只能记录服务运行时的输出和出错日志, 根据我们实际的需求进行选择即可

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

B站入口

打赏通道

微信公众号二维码如下:

img

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

免费稳定的PHP虚拟主机

发表于 2021-09-10

前言

想验证网站项目是否可盈利, 如果购买服务器的话太贵, 怎么办, 那就用免费的吧

国内基本上已经没有免费的虚拟主机可用了, 即便有也是套路你

只好把目标转向国外服务器供应商, 先是找到一家日本的厂商XREA, 主页长这样:

决定试试申请一个, xrea需要注册两个账户, 一个是xrea账户, 另一个是value-admin账户

image-20210910150342841

首先注册value-admin账户:

image-20210910150514615

这一步 国内的邮箱无法注册, 谷歌邮箱可以 但是居然一直收不到验证码, 最后只好作罢

Awardspace

介绍

随后有找了一家欧美的厂商Awardspace, 经过尝试, 发现可行, 主页长这样:

image-20210910163000949

我直接使用第三方谷歌登录, 国内的小伙伴有可能需要搭个大爬梯才能访问哦

登录成功后进入到控制台界面:

image-20210910163254548

该有的功能全都有, 这个免费虚拟主机给我们提供了:

  • 1G的储存空间
  • 每月5G的流量
  • 1个Mysql数据库
  • 可绑定一个顶级域名和三个子域名
  • 一个邮箱账户

image-20210910163214377

安装或者上传应用

各种博客程序一键安装:

image-20210910163756104

或者上传已有的程序文件, 可以网站直接上传或者使用FTP上传, 如果使用FTP会提示你设置FTP密码:

image-20210910164648342

我这里为了演示 直接一键安装的JOOMLA博客程序

域名绑定

如果你已经有自己的域名了, 可以直接绑定:

image-20210910163953692

image-20210910164215330

然后在你的域名服务上, 进行域名解析, 可以直接使用A记录解析到185.176.43.108这个IP, 或者更改DNS记录为ns5.awardspace.com,ns6.awardspace.com

我这里直接用的是IP解析

访问主页

最后浏览器输入绑定的域名进行测试, 我这边正常访问, 而且速度还不错:

image-20210910164940227

freehostia

这个网站也提供免费的虚拟主机, 时长一年, 可以选择预制的PHP程序:

image-20210910165958993

点击进入官网

freehostia给我们提供了:

  • 250MB存储空间
  • 每月6G流量
  • 1个10MBMySQL
  • 3个邮箱账户

蓝队云

提供免费的PHP虚拟主机

image-20220707153444030

点击进入官网

蓝队云给我们提供了:

  • 1Gb存储空间
  • 不限流量
  • 1个300MBMySQL

灰狼云

免费PHP虚拟空间 一月一续期

image-20220707154001659

该空间可以用于CDN反代, 具体可参见: 《无成本反向代理Jsdelivr》

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

B站入口

打赏通道

微信公众号二维码如下:

img

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

VPS虚拟化架构OpenVZ、KVM、Xen、Hyper-V的区别

发表于 2021-09-10

1、OpenVZ

OpenVZ(简称OVZ)采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,是基于Linux平台的操作系统级服务器虚拟化架构。这个架构直接调用宿主机(俗称:母机)中的内核,模拟生成出子服务器(俗称:VPS,小机),所以,它经过虚拟化后相对于母服务器,性能损失大概只有的1-3%。 当然OpenVZ可以超售,意思味着一台服务器总共16G内存,他可以开出配置为1G内存×17台或以上的子服务器。因为他的虚拟架构关系属于:不是你分配给客户多少资源,就扣除宿主机多少资源;而是客户用多少资源,就扣除宿主机多少资源,所以OpenVZ架构的VPS较为便宜。但由于存在超售因素,如果服务商毫无休止的超售会导致服务器的性能急剧下降。 OpenVZ另一个特点是,它是直接调用宿主机的内核,所以会导致部分软件无法使用,以及部分内核文件是无法修改。

2、KVM

KVM是Linux下的全功能虚拟化架构,基于KVM架构的VPS,默认是没有系统的,可自己上传ISO或调用服务商自带的ISO手动安装系统或使用服务商提供的官方的KVM模板。这个非常适合热爱DIY自己VPS的客户。 由于KVM架构全功能虚拟化架构,甚至拥有独立的BIOS控制,所以对宿主机性能影响较大,所以基于KVM的VPS较贵,但KVM VPS相对其它架构的VPS较为自由。

3.Xen

Xen 由剑桥大学开发,它是基于硬件的完全分割,物理上有多少的资源就只能分配多少资源,因此很难超售。可分为Xen-PV(半虚拟化),和Xen-HVM(全虚拟化)。 Xen是不能超售的,当宿主机只有16G内存以及100G硬盘时,当开Xen架构(任意一个虚拟化)的1G内存、25G硬盘的子机时,会直接占用宿主机1G内存,以及25G硬盘,所以Xen的性能,相比OpenVZ在超售的情况下要好。 Xen-PV:半虚拟化,所以它仅仅适用于linux系列VPS,但它的性能损失比较少,大概相对于宿主机的4%-8%左右。 Xen-HVM:全虚拟化,可以安装Windows或自由挂载ISO文件安装任意系统,由于是全虚拟化,所以性能损失较大,大概相对于宿主机性能损失8%-20%左右。

4.Hyper-V

Hyper-V是微软的一款虚拟化产品,大部分国内的VPS服务商使用这个架构(包括标准互联?),主要是因为其转为Windows定制,管理起来较为方便。目前的Hyper-V也支持Linux,只不过性能损失比较严重。 Hyper-V完美支持Windows系统,包括32位和64位。如果大家选购Hyper-V架构的VPS,强烈建议使用Windows。 Hyper-V目前不能超售内存,但可超售硬盘,硬盘是根据客户使用情况扣除。一般来说,宿主机的硬盘不会100%用完,这点不用担心。

总结:

总的来说,Xen和Hyper-V见的比较少,对于OpenVZ、KVM推荐选择KVM虚拟化。

本文为转载自:https://www.cnblogs.com/ydwzhang/p/10080380.html

B站入口

打赏通道

微信公众号二维码如下:

img

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

几款主流的虚拟机软件对比

发表于 2021-09-10

前言

说到虚拟机或者虚拟技术 容器技术, 大家可能会联想到一大堆软件, 诸如VMware、VirtualBox、Parallels 、Hyper-V、OpenVZ、Xen、KVM、Mutilpass、Docker等等

今天我们选取几款比较大众化的虚拟机软件对比分析一下:

虚拟软件 优势 劣势
VMware 跨平台 功能强大 易用性好 收费 仅限 Intel 处理器
Parallels Desktop 功能丰富 和Mac融合性强, 无需重启即时切换 收费 只支持Mac平台
VirtualBox 跨平台 开源免费 资源占用相对较大
Hyper-V 硬虚拟化技术 性能强 稳定性好 部署简单 只支持Windows平台, 不支持USB外设

附加

《VPS虚拟化架构OpenVZ、KVM、Xen、Hyper-V的区别》

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

B站入口

打赏通道

微信公众号二维码如下:

img

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

一个强大的轻量级全文即时搜索工具meilisearch

发表于 2021-09-10

前言

MeiliSearch 是近两年开源的一个全文搜索引擎,采用Rust语言开发, 主要目标是在小数据规模下实现比 ElasticSearch 更加快速和易用的搜索体验。设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量

目前已支持中文分词

MeiliSearch 支持的功能如下:

  1. 开源
  2. 用户量(开源搜索引擎第二名)
  3. 中文分词
  4. 同义词
  5. 纠错
  6. 高亮
  7. 全文返回
  8. 高级搜索
  9. 停用词、停用字段
  10. 加权、降权
  11. 逻辑搜索
  12. 唯一字段聚合
  13. 分页
  14. 重新索引

中文文档

快速上手

  1. 下载安装并运行

    1
    2
    curl -L https://install.meilisearch.com | sh
    ./meilisearch

    image-20210910103712092

    此时访问浏览器http://localhost:7700/长这样:

    image-20210910103853046

    里面还没有数据, 接下来下载测试数据

  2. 下载测试数据

    movie.json

  3. 将测试数据导入至meilisearch数据库

    1
    2
    3
    curl \
    -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \
    --data @movies.json
  4. 访问主页

    1
    http://127.0.0.1:7700

    image-20210910104053837

搜索速度相当的快

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

B站入口

打赏通道

微信公众号二维码如下:

img

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

Git使用之如何修改commit注释

发表于 2021-09-08

前言

我们在开发的时候, 有时候可能会需要对历史commit进行注释的修改, 那么可以采用以下几种方法

详解

分为以下三种情况:

1. 修改最近一次commit

如果你只想修改最近一次commit的注释, 那么可以执行以下命令:

1
git commit --amend

执行后会出现vim编辑窗口, 在里面修改注释然后保存退出即可

2. 合并修改最近几次commit

如果我们想对最近几次commit进行合并然后重新注释, 我们可以使用reset --soft 进行提交撤销操作, 比如撤销最近三次提交:

1
git reset --soft HEAD^3

命令执行后, 前三次提交的内容将全部恢复到未提交状态, 此时我们可以添加注释重新提交

3. 修改历史commit

如果需要修改的不是最近几次commit, 那么需要用到rebase指令,

假设我们需要将以下第二个记录的注释进行修改:

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
20
pick 00b2f59 修复bug
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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pick 00b2f59 修复bug
reword 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~

表示对f368015这个commit进行注释修改

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

1
2
3
4
5
6
# This is a combination of 2 commits. 

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

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

我们可以对注释进行修改,然后保存退出即可

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

B站入口

打赏通道

微信公众号二维码如下:

img

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

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

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

1…202122…48

乱码三千

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

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