l1n6yun's Blog

记录学习的技能和遇到的问题

问题描述

在 Linux 系统中,我们经常使用 Shebang(#!)行来指定脚本的解释器。对于 PHP 脚本,我们通常会在文件开头写上 #!/usr/bin/env php。然而,有时候即使命令行能够识别php 指令,使用 Shebang 行时却会报错 “No such file or directory”。这通常是因为文件的编码格式问题。

解决方案

步骤 1: 检查文件编码

首先,我们需要检查文件的编码格式。在 Linux 系统中,我们可以使用 vim 编辑器来查看和修改文件的编码格式。

  1. 打开终端。
  2. 输入 vim yourfile.php 命令来打开你的 PHP 文件。
  3. 在 vim 中,输入 :set ff 命令来查看文件的格式。

步骤 2: 修改文件编码

如果 :set ff 命令的输出显示 fileformat=dos,那么你需要将文件格式更改为 unix

  1. 在 vim 中,输入 :set ff=unix 命令来更改文件格式。
  2. 按下 Esc 键退出命令模式。
  3. 输入 :wq 命令保存更改并退出 vim

步骤 3: 验证更改

更改文件编码后,再次尝试运行你的 PHP 脚本。如果 Shebang 行不再报错,那么问题已经解决。

在数字时代,我们每天都在产生和消费大量的文本内容。无论是撰写报告、编写文档、还是记录个人笔记,一个高效、简洁且功能丰富的文本编辑器都是我们不可或缺的工具。今天,我要向大家介绍一款名为MarkText的开源Markdown编辑器,它以其出色的性能和优雅的设计,成为了文本编辑领域的一颗新星。

MarkText简介

MarkText是一款开源的Markdown编辑器,专注于速度和可用性。它支持多个操作系统,包括Linux、macOS和Windows,让不同平台的用户都能享受到流畅的写作体验。MarkText以其简洁的界面和实时预览功能,为用户提供了一种无干扰的写作环境,使得写作变得更加专注和高效。

核心特性

MarkText拥有许多令人印象深刻的特性,以下是其中的一些亮点:

  1. 实时预览:MarkText提供了所见即所得的实时预览功能,这意味着你在编辑器中输入的内容会立即反映在预览窗口中,让你可以即时看到最终的排版效果。

  2. 遵循Markdown规范:它支持CommonMark规范和GitHub Flavored Markdown规范,这意味着你可以使用MarkText来编写符合行业标准的Markdown文档。

  3. Markdown扩展:除了标准的Markdown功能,MarkText还支持数学表达式(通过KaTeX)、front matter和emoji等Markdown扩展,丰富了你的写作选项。

  4. 样式快捷方式:MarkText提供了段落和内联样式的快捷方式,帮助你提高写作效率。

  5. 输出格式多样:你可以将文档输出为HTML和PDF文件,满足不同场景的需求。

  6. 主题丰富:MarkText提供了多种主题,如Cadmium Light、Material Dark等,用户可以根据自己的喜好选择不同的主题。

  7. 编辑模式多样:包括源代码模式、打字机模式和专注模式,适应不同用户的写作习惯。

  8. 图片粘贴:直接从剪贴板中粘贴图片,简化了图片插入的过程。

下载与安装

MarkText的安装非常简单。对于macOS用户,你可以通过Homebrew-Cask安装:

brew install --cask mark-text

Windows用户可以下载安装向导并运行,或者使用Chocolatey和Winget等软件包管理器进行安装:

choco install marktext

或者

winget install marktext

Linux用户则可以按照官方提供的安装指南进行操作。

最新版本下载

想要获取MarkText的最新版本,你可以直接访问其GitHub发布页面:

MarkText GitHub Releases

在这里,你可以找到适用于不同操作系统的安装包,选择适合你的版本进行下载和安装。

PHP 调用 MongoDB 全解析

MongoDB 是一款流行的开源文档型数据库,它以 JSON 风格的文档形式存储数据,具有高性能、高可扩展性和灵活的数据模型等特点。而 PHP 作为一种广泛应用于 Web 开发的脚本语言,与 MongoDB 结合可以为开发者提供强大的数据存储和处理能力。本文将详细介绍如何使用 PHP 调用 MongoDB 进行数据的增删改查等操作。

环境准备

在使用 PHP 调用 MongoDB 之前,需要确保已经安装了 MongoDB 数据库和 PHP 的 MongoDB 扩展。可以使用 Composer 来安装 MongoDB 的 PHP 驱动,在项目根目录下创建一个composer.json文件,内容如下:

json

1
2
3
4
5
{
"require": {
"mongodb/mongodb": "^1.13"
}
}

然后在终端中执行composer install命令来安装依赖。

代码示例与解析

连接 MongoDB

1
2
3
4
5
6
7
8
9
10
11
12
<?php

require 'vendor/autoload.php';

$client = new MongoDB\Client("mongodb://localhost:27017");
//指定数据库
$db = $client->selectDatabase('test');
//指定集合
$collection = $db->selectCollection('users');

// 另一种指定合集的方式
$collection = $client->test->users;

上述代码首先通过require 'vendor/autoload.php';引入 Composer 的自动加载文件,然后使用MongoDB\Client类来连接本地的 MongoDB 服务器,端口为27017。接着指定了要使用的数据库test和集合users

插入数据

插入单条数据

1
2
3
4
5
$collection->insertOne([
'name' => '张三',
'age' => 18,
'sex' => '男'
]);

使用insertOne方法可以向集合中插入一条数据,数据以关联数组的形式传入。

指定 ID 插入数据

1
2
3
4
5
6
$collection->insertOne([
'_id' => new MongoDB\BSON\ObjectID('5e7b0b0b0b0b0b0b0b0b0b0b'),
'name' => '李四',
'age' => 27,
'sex' => '男'
]);

在插入数据时,可以手动指定_id字段,使用MongoDB\BSON\ObjectID类来创建一个 ObjectID 对象。

插入多条数据

1
2
3
4
5
6
7
8
9
10
11
12
$collection->insertMany([
[
'name' => '王五',
'age' => 18,
'sex' => '男'
],
[
'name' => '赵六',
'age' => 18,
'sex' => '男'
]
]);

使用insertMany方法可以一次性插入多条数据,传入一个二维数组,每个子数组代表一条数据。

查询数据

查询单条数据

1
2
3
4
$document = $collection->findOne([
'name' => '张三'
]);
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));

使用findOne方法可以查询符合条件的第一条数据,返回一个文档对象,使用json_encode方法将其转换为 JSON 字符串并输出。

查询多条数据

1
2
3
4
5
6
$cursor = $collection->find([
'name' => '张三'
]);
foreach ($cursor as $document) {
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));
}

使用find方法可以查询符合条件的多条数据,返回一个游标对象,通过foreach循环遍历游标对象,输出每条数据。

查询指定数量的数据

1
2
3
4
5
6
7
8
$cursor = $collection->find([
'name' => '张三'
], [
'limit' => 2
]);
foreach ($cursor as $document) {
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));
}

find方法的第二个参数中,可以使用limit选项来指定查询结果的数量。

条件查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 查询年龄大于18的数据
$cursor = $collection->find([
'age' => [
'$gt' => 18
]
]);
foreach ($cursor as $document) {
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));
}

// 查询年龄小于18,名称等于张三的数据
$cursor = $collection->find([
'name' => '张三',
'age' => [
'$lt' => 19
]
]);
foreach ($cursor as $document) {
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));
}

// 查询性别为空的数据
$cursor = $collection->find([
'sex' => [
'$exists' => false
]
]);
foreach ($cursor as $document) {
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));
}

在查询条件中,可以使用 MongoDB 的查询操作符,如$gt(大于)、$lt(小于)、$exists(是否存在)等。

排序查询

1
2
3
4
5
6
7
8
9
10
$cursor = $collection->find([
'name' => '张三'
], [
'sort' => [
'age' => 1 // 1正序,-1倒叙
]
]);
foreach ($cursor as $document) {
var_dump(json_encode($document, JSON_UNESCAPED_UNICODE));
}

find方法的第二个参数中,可以使用sort选项来对查询结果进行排序,1表示正序,-1表示倒序。

修改数据

查询并修改

1
2
3
4
5
6
7
8
$cursor = $collection->findOneAndUpdate([
'name' => '张三'
], [
'$set' => [
'age' => 27
]
]);
var_dump(json_encode($cursor, JSON_UNESCAPED_UNICODE));

使用findOneAndUpdate方法可以查询符合条件的第一条数据并进行修改,返回修改前的文档对象。

更新数据

1
2
3
4
5
6
7
$collection->updateOne([
'name' => '张三'
], [
'$set' => [
'age' => 27
]
]);

使用updateOne方法可以更新符合条件的第一条数据,使用$set操作符来指定要更新的字段和值。

查询并替换

1
2
3
4
5
6
7
$cursor = $collection->findOneAndReplace([
'name' => '张三'
], [
'name' => '李四',
'age' => 27
]);
var_dump(json_encode($cursor, JSON_UNESCAPED_UNICODE));

使用findOneAndReplace方法可以查询符合条件的第一条数据并进行替换,返回替换前的文档对象。

存在更新不存在插入

1
2
3
4
5
6
7
8
9
$collection->updateOne([
'name' => '张三'
], [
'$set' => [
'age' => 27
]
], [
'upsert' => true
]);

updateOne方法的第三个参数中,使用upsert选项设置为true,可以实现如果符合条件的数据存在则更新,不存在则插入的功能。

更新多条数据

1
2
3
4
5
6
7
$collection->updateMany([
'name' => '张三'
], [
'$set' => [
'age' => 27
]
]);

使用updateMany方法可以更新符合条件的多条数据。

删除数据

删除单条数据

1
2
3
$collection->deleteOne([
'name' => '张三'
]);

使用deleteOne方法可以删除符合条件的第一条数据。

删除多条数据

1
2
3
$collection->deleteMany([
'name' => '张三'
]);

使用deleteMany方法可以删除符合条件的多条数据。

删除集合和数据库

1
2
3
4
5
// 删除集合
$collection->drop();

// 删除数据库
$db->drop();

使用drop方法可以删除集合和数据库。

在 Linux 系统中,Samba 是一个功能强大的服务,它允许 Linux 和 Windows 系统之间进行文件共享。通过 Samba,你可以轻松地在不同操作系统之间共享文件和打印机。本文将详细介绍如何在 Linux 上配置 Samba 服务,以实现文件共享。

安装 Samba

首先,你需要确保你的 Linux 系统上安装了 Samba。在基于 Debian 的系统(如 Ubuntu)上,你可以使用以下命令来安装 Samba:

1
2
sudo apt update
sudo apt install samba

这将安装 Samba 服务及其依赖项。

配置 Samba

安装完成后,你需要配置 Samba 以便它知道你想要共享哪些目录。这涉及到编辑 Samba 的配置文件 smb.conf

  1. 使用文本编辑器打开 smb.conf 文件。这里我们使用 vi 编辑器,但你也可以使用 nano 或其他你喜欢的编辑器:
1
sudo vi /etc/samba/smb.conf
  1. smb.conf 文件中,你可以定义多个共享部分,每个部分对应一个共享目录。以下是两个示例共享部分的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mnt-rw]
comment = Read-Write Mount Point
browseable = yes
path = /mnt
force user = root
create mask = 0775
directory mask = 0775
guest ok = Yes
read only = No

[onecloud-share]
comment = Read-Only OneCloud Share
browseable = yes
path = /mnt
guest ok = Yes
read only = yes
  • [mnt-rw] 部分定义了一个名为 mnt-rw 的共享,它指向 /mnt 目录。这个共享允许读写访问,并且对所有用户(包括匿名用户)开放。
  • [onecloud-share] 部分定义了另一个共享,它同样指向 /mnt 目录,但这个共享只允许读访问。

配置选项解释

  • browseable = yes:这个选项使得共享在网络浏览器中可见。
  • path = /mnt:指定共享的文件系统路径。
  • force user = root:强制所有连接到此共享的用户以 root 用户身份访问。
  • create mask = 0775directory mask = 0775:设置文件和目录的默认权限。
  • guest ok = Yes:允许匿名访问。
  • read only = No:对于 [mnt-rw] 共享,这个选项允许写入操作;对于 [onecloud-share] 共享,这个选项设置为 yes,表示只读。

启动 Samba 服务

配置完成后,你需要启动 Samba 服务以使更改生效:

1
sudo service smbd start

这个命令将启动 Samba 守护进程,使你的共享目录在网络上可用。

测试共享

在 Windows 系统上,你可以通过网络邻居访问这些共享,或者在文件资源管理器中输入共享的网络路径(例如 \\<Linux-Server-IP>\mnt-rw)来访问。

使用 OpenSSL 工具生成自签名 SSL 证书,为内网环境中的网站安全保驾护航

在内网环境中,使用 OpenSSL 工具进行自签名 SSL 证书的创建,能够为您的网站提供有效的安全保障。

自签证书流程

  1. 创建 ca 私钥。
  2. 基于 ca 私钥生成 ca 根证书。
  3. 构建 ssl 私钥。
  4. 生成 ssl 证书 csr。
  5. 运用 ca 根证书签署以获得 ssl 证书。

操作方法

  1. 创建 ca 私钥(强烈建议设置密码以增强安全性):
1
2
3
4
5
6
7
8
$ openssl genrsa -des3 -out root.key 2048
Generating RSA private key, 2048 bit long modulus
..............................................................+++
................+++
e is 65537 (0x010001)
Enter pass phrase for root.key:

Verifying - Enter pass phrase for root.key:
  1. 生成 ca 证书,自签 20 年有效期,并将此 ca 证书导入需要访问的 PC 的“受信任的根证书颁发机构”中,后续用此 ca 签署的证书均可正常使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ openssl req -x509 -new -nodes -key root.key -sha256 -days 7300 -out root.crt
Enter pass phrase for root.key:

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) [AU]:CN # 国家
State or Province Name (full name) [Some-State]:SiChuan # 省份
Locality Name (eg, city) []:ChengDu # 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sichuan Lingyun Technology Co., LTD # 组织
Organizational Unit Name (eg, section) []: # 部门
Common Name (e.g. server FQDN or YOUR name) []:Sichuan Lingyun Technology Co., LTD # 公司
Email Address []: # 邮箱
  1. 完成上述步骤后,创建 ssl 证书私钥:
1
2
3
4
5
$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...................................................................................+++
..........+++
e is 65537 (0x010001)
  1. 随后创建 ssl 证书 csr:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ openssl req -new -key server.key -out 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) [AU]:CN
State or Province Name (full name) [Some-State]:SiChuan
Locality Name (eg, city) []:ChengDu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sichuan Lingyun Technology Co., LTD
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Sichuan Lingyun Technology Co., LTD
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  1. 创建域名附加配置信息,新建一个文件,通过 vim cert.ext ,将以下代码粘贴后保存:
1
2
3
4
5
6
7
8
9
10
11
12
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.2 = 192.168.0.10
IP.3 = 192.168.1.200
DNS.4 = xa.it.com
DNS.5 = xiykj.com
DNS.6 = *.xa.com

需要注意的是,IP.2 = 192.168.11.100 表示 https 要访问的 IP 地址,IP.3 同理也是 IP 地址,ssl 证书允许自签多个 IP 地址,这便是自签 IP 的证书。而 DNS.4 = https://xa.it.com/ 则表示 https 要访问的域名,DNS.5、DNS.6 同理均为域名,ssl 证书也支持自签多个域名,此为自签域名的证书。

  1. 使用CA根证书签署ssl证书,自签ssl证书有效期20年:
1
2
3
4
5
$ openssl x509 -req -in server.csr -out server.crt -days 7300 -CAcreateserial -CA root.crt -CAkey root.key -CAserial serial -extfile cert.ext
Signature ok
subject=C = CN, ST = SiChuan, L = ChengDu, O = "Sichuan Lingyun Technology Co., LTD"
Getting CA Private Key
Enter pass phrase for root.key:
  1. 查看文件,通过执行“ls -al”命令
1
2
3
4
5
6
$ ls -al
cert.ext #ssl证书附加配置信息
serial #证书序列号
server.crt #ssl证书文件,包含公钥信息
server.csr #ssl证书签名文件
server.key #ssl证书私钥
  1. 查看签署的证书信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$ openssl x509 -in server.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
cd:ae:a9:3e:b7:bb:93:e1
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CN, ST = SiChuan, L = ChengDu, O = "Sichuan Lingyun Technology Co., LTD"
Validity
Not Before: Jul 18 06:26:05 2024 GMT
Not After : Jul 13 06:26:05 2044 GMT
Subject: C = CN, ST = SiChuan, L = ChengDu, O = "Sichuan Lingyun Technology Co., LTD"
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:aa:4e:ca:f5:0d:51:e7:b4:ba:3c:0b:6e:a5:4a:
d8:b4:0d:ad:19:54:3d:11:02:14:29:41:45:76:fc:
4a:b0:6c:5c:76:46:91:ff:8d:89:7a:f2:a8:62:73:
1d:c4:3a:96:8c:74:82:0a:e9:58:55:73:4a:4e:ec:
17:23:43:90:39:69:0e:aa:ac:ec:71:3e:60:e5:6b:
0c:e7:7b:f9:8f:93:db:a8:45:ae:d9:43:6f:f1:a1:
1c:01:0a:14:33:ce:4f:8c:81:f0:34:b5:cc:7c:81:
f6:91:1a:69:31:dc:8a:d1:c1:cc:34:6f:96:71:e0:
c2:86:79:37:47:a7:e4:c8:71:3f:44:82:38:7e:11:
4d:05:96:fd:01:d8:8c:8b:75:0b:bc:6e:ad:37:1d:
77:94:0b:2a:15:1a:43:3c:f6:59:61:eb:ea:8a:73:
54:06:b0:ed:70:11:77:42:57:59:e1:80:df:eb:0b:
36:d7:7b:d6:c8:53:20:e7:3a:cb:7c:95:67:ea:ff:
25:06:80:e9:93:b2:1d:a0:58:9f:ec:60:65:76:e8:
24:2c:14:9d:86:47:83:3b:b9:66:59:7d:69:b5:bd:
46:af:4f:15:a7:21:45:d1:8c:a1:9b:8b:73:20:94:
17:0e:1b:da:d2:e3:93:fb:98:d8:db:13:2b:ed:ff:
f5:95
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Authority Key Identifier:
keyid:8D:FB:23:BD:1D:AA:3B:C0:12:62:2A:15:8F:27:BF:81:EB:94:15:42

X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
X509v3 Subject Alternative Name:
DNS:localhost, IP Address:192.168.11.100, IP Address:192.168.10.200, DNS:xa.it.com, DNS:xiykj.com, DNS:*.xa.com
Signature Algorithm: sha256WithRSAEncryption
74:0f:a7:56:97:66:e1:8d:7a:5e:4e:7b:6f:b0:da:26:31:5c:
a3:77:9d:7f:25:19:1c:e2:cd:6a:ee:b3:9e:1f:55:3e:ea:8c:
05:5b:0f:9e:ac:f7:0f:72:8b:4c:6e:eb:20:4c:c3:d4:7b:d1:
63:79:54:dc:8d:46:f5:2e:73:fe:4f:5e:8f:d2:3c:54:47:90:
ae:cd:20:28:31:19:88:26:ec:46:86:1c:1e:ab:8b:67:77:d6:
81:1d:62:1b:59:7c:d6:4d:52:fe:44:b7:18:ce:6d:47:d3:34:
48:c8:59:c9:f9:3a:2a:41:9a:7c:50:c0:43:b0:6a:f4:3c:b1:
d5:49:f1:be:21:ae:b9:d8:72:48:19:f8:20:8c:3b:03:c5:c7:
26:0d:27:08:4d:0b:9e:27:ea:3c:bf:c3:09:07:fe:b0:68:9c:
76:1a:3f:49:44:af:67:9f:47:af:88:9f:50:25:1c:f4:a3:05:
b6:fb:1c:04:16:3d:6d:d3:ac:99:92:73:05:2f:c8:08:9a:e4:
88:e4:12:4d:f3:d0:aa:47:3c:eb:cf:9b:20:3a:88:e5:33:1b:
32:65:14:78:1d:c4:24:e8:63:e7:8e:18:b3:2b:bb:e2:94:38:
1d:dd:1f:f5:13:a2:db:ef:65:bc:12:a9:66:4f:48:15:57:e8:
82:79:24:a0
  1. 使用 CA 验证 ssl 证书状态,若显示“OK”则表示通过验证:
1
2
$ openssl verify -CAfile root.crt server.crt
server.crt: OK

最后,将 root.crt 导入到需要访问的客户端 PC 的“受信任的根证书颁发机构”中,同时将 server.crt、server.key 文件部署在服务器上即可。

PHPStorm 控制台出现乱码的情况,往往是由于控制台所采用的字符编码和输出内容的编码存在差异所致。比如说,控制台或许默认运用的是 GBK 编码,然而您的 PHP 代码输出的却是 UTF-8 编码的内容,抑或是其他的编码形式。

upload successful

开启 PHPStorm 的设置页面,在其中进行搜索“Console Encoding”,接着选中“Default Encoding”这一选项,并将“UTF-8”设定为默认编码。

upload successful

再次执行相关命令,此时控制台理应能够正常显示内容。

upload successful

是一个开源项目,用于破解和优化Windows系统上的Remote Desktop Protocol(远程桌面协议)。它允许你在没有官方许可的情况下,实现多用户的并发远程访问,这对于IT管理员、开发者或者需要频繁远程控制电脑的用户来说,是一个非常实用的工具。

项目简介

RDPWrap的主要功能是绕过Windows系统的限制,使得单个安装了RDP服务的计算机可以同时接受多个远程桌面连接,而无需购买额外的授权。该项目由Stas’M Sajewicz创建并维护,社区也在持续贡献和支持。

技术分析

RDPWrap的工作原理是通过对Windows的Remote Desktop Services(RDS)服务进行钩子处理,改变其内部的行为模式。它提供了一个配置工具,用于检测当前系统的支持情况,并更新本地的bypass.dll文件以启用多会话模式。此外,RDPWrap还包含一个实时更新的服务端口数据库,帮助用户跟踪最新的系统版本兼容性。

需要注意的是,由于涉及到系统底层操作,RDPWrap可能需要管理员权限运行,且在安装和配置过程中应谨慎操作,避免对系统稳定性产生影响。

应用场景

  1. 节省成本 - 对于拥有大量Windows设备但预算有限的企业,RDPWrap可以帮助他们避免购买昂贵的多用户许可证。
  2. 远程教育与培训 - 教师或教练可以同时监控多个学生的学习进度,提供即时反馈。
  3. 多用户共享 - 在家庭环境中,家庭成员可以在各自的设备上同时远程访问一台高性能主机进行游戏或计算任务。
  4. 服务器管理 - IT专业人员可以更方便地同时管理多台服务器,无需来回切换登录。

特点

  • 开源免费 - 开源意味着代码公开,用户可以自由查看,学习甚至改进。
  • 跨平台支持 - 支持多种Windows操作系统版本,从XP到最新的Windows 10。
  • 简单易用 - 提供直观的配置工具,即使是对技术不太了解的用户也能轻松设置。
  • 持续更新 - 社区活跃,不断跟进新的Windows更新,确保兼容性。

使用建议

在使用RDPWrap之前,请确保已理解其工作方式并做好数据备份,因为任何对系统核心组件的操作都可能存在风险。另外,尊重他人的版权,合法使用远程桌面服务,切勿用于非法目的。

总结来说,RDPWrap是一个强大且实用的工具,尤其适合需要高效远程管理Windows系统的用户。只要合理使用,它就能为你带来极大的便利。希望这篇介绍能够帮助你更好地理解和利用RDPWrap,享受更灵活的远程桌面体验。

项目地址:https://github.com/stascorp/rdpwrap

在使用Docker的过程中,镜像下载速度一直是许多开发者面临的痛点。尤其是在网络环境不佳的情况下,等待镜像下载完成可能会耗费大量的时间和耐心。不过,今天我要为大家介绍一个能够显著提升Docker镜像下载速度的工具——毫秒镜像。

什么是毫秒镜像?

毫秒镜像(https://docker.1ms.run)是由合肥木雷坞信息技术有限公司提供的Docker镜像加速服务。它通过在国内部署高速的镜像代理服务器,帮助用户快速获取Docker Hub上的镜像资源,从而大大缩短了镜像下载时间。

如何使用毫秒镜像?

使用毫秒镜像非常简单,主要有两种方式:全局配置和临时配置。

全局配置

全局配置可以让毫秒镜像永久生效,适用于大多数用户。以下是具体的配置步骤:

  1. 编辑Docker配置文件
    打开终端,运行以下命令,将毫秒镜像的地址添加到Docker的配置文件中:
1
echo '{"registry-mirrors": ["https://docker.1ms.run"]}' | sudo tee /etc/docker/daemon.json > /dev/null

这一步会将镜像加速地址写入/etc/docker/daemon.json文件中。

  1. 重启Docker服务
    配置完成后,需要重启Docker服务以使配置生效:
1
systemctl daemon-reload systemctl restart docker

完成以上步骤后,毫秒镜像就会自动为你的Docker镜像下载提供加速服务。

临时配置

如果你不想修改全局配置,也可以在拉取镜像时临时使用毫秒镜像。例如:

1
docker pull docker.1ms.run/library/nginx

这种方式会在本次拉取操作中使用毫秒镜像加速,而不会影响其他镜像的拉取。

登录毫秒镜像

如果需要使用更高级的功能,比如VIP加速通道,可以注册并登录毫秒镜像。登录命令如下:

1
docker login docker.1ms.run

登录后,你将享受更快速、更稳定的镜像下载体验。

赞助商与合作伙伴

毫秒镜像背后有强大的赞助商和合作伙伴支持。例如,腾讯CODING团队提供的免费Git托管和CI/CD全流程研发能效平台,以及宝塔Linux面板、雷池WAF社区版、耗子面板和林枫云等合作伙伴,都为用户提供了丰富的服务器管理和安全防护解决方案。

使用协议与免责声明

在使用毫秒镜像时,用户需要遵守相关法律法规,并自行承担使用风险。开发者不对因使用本程序而导致的任何直接或间接损失承担责任。使用本程序即视为同意免责声明的所有条款。

自动获取: Chrome登录 阿里云盘 后,控制台粘贴

1
JSON.parse(localStorage.token).refresh_token

upload successful

在日常使用浏览器的过程中,书签功能是许多用户不可或缺的工具之一。它可以帮助我们快速访问常用的网站,节省时间并提高上网效率。然而,有些用户可能希望单击书签时能够直接在新标签页中打开,而不是在当前标签页中替换内容。今天,我们就来分享一下如何在火狐浏览器中设置书签单击后在新标签页打开的方法。

火狐浏览器的书签功能简介

火狐浏览器(Mozilla Firefox)是一款广受欢迎的开源浏览器,以其强大的功能、灵活的自定义选项和出色的隐私保护而受到用户的喜爱。书签功能是火狐浏览器的一个重要特性,用户可以通过它将喜欢的网站添加到收藏夹中,方便随时访问。默认情况下,单击书签会在当前标签页中打开链接,但有时我们可能需要在新标签页中打开书签,以便同时查看多个网页。

设置书签单击后在新标签页打开的步骤

打开火狐浏览器的高级首选项窗口

首先,启动火狐浏览器,在浏览器顶部的地址栏中输入 about:config,然后按下回车键。这个地址会带你进入火狐浏览器的高级配置页面,这里包含了大量可以自定义的选项。

upload successful

接受风险并继续

当页面切换后,你会看到一个提示文字,警告你更改配置可能会导致浏览器不稳定或出现其他问题。不用担心,这只是浏览器的常规提示。点击“接受风险并继续”按钮,进入高级首选项窗口。

搜索并修改相关设置

在高级首选项窗口的搜索框中输入 browser.tabs.loadBookmarksinTabs,然后按下回车键。搜索结果中会出现一个名为 browser.tabs.loadBookmarksinTabs 的选项,它的默认值通常是 false。

upload successful

修改选项值

找到这个选项后,点击其右侧的双向箭头,将其值切换为 true。这样,当你再次单击书签时,链接就会在新标签页中打开。

0%