2024-08-19

在Linux下使用ZeroTier实现内网穿透并搭建moon服务器的步骤如下:

  1. 安装ZeroTier One:



curl -s https://install.zerotier.com | sudo bash
  1. 启动ZeroTier服务:



sudo systemctl start zerotier-one
  1. 使服务开机自启:



sudo systemctl enable zerotier-one
  1. 手动添加网络或在ZeroTier Central创建网络,并获取网络ID。
  2. 分配给你的设备一个ZeroTier地址:



sudo zerotier-cli join <你的网络ID>
  1. 如果你想要搭建moon服务器进行内网穿透,你需要在moon服务器上安装ZeroTier One,并加入相同的网络。
  2. 在moon服务器上,启动moon服务:



sudo zerotier-one -d -R /var/lib/zerotier-one -p 9993
  1. 在moon服务器的/var/lib/zerotier-one/目录下创建moon.json文件,并配置moon服务器的公钥。
  2. 在需要进行内网穿透的设备上,编辑/var/lib/zerotier-one/planet.d/下对应moon服务器的目录中的public.btc文件,添加moon服务器的公钥。
  3. 重启ZeroTier服务以应用更改。

注意:实际的配置可能会根据你的网络环境和安全策略有所不同。上述步骤仅供参考,具体步骤请根据ZeroTier官方文档和实际网络环境进行调整。

2024-08-19

在Vim中,你可以使用正则表达式来寻找字符串。以下是一些基本的命令:

  1. 使用/命令来查找一个字符串。例如,要查找"example"这个词,你可以按下/然后输入example,接着按下回车。



/example
  1. 查找下一个匹配的结果,按n
  2. 查找上一个匹配的结果,按N

如果你想进行区分大小写的搜索,确保你的Vim设置中ignorecase被关闭。如果你只想在当前打开的文件中查找,确保hlsearch被开启。




:set noignorecase
:set hlsearch

如果你想取消高亮显示,可以使用以下命令:




:nohlsearch

如果你想永久关闭高亮显示,可以在你的.vimrc文件中添加以下设置:




:set nohlsearch

这些是在Vim中使用正则表达式搜索字符串的基本命令。

2024-08-19

在Linux中,扩展磁盘空间通常涉及以下三种方法:

  1. 使用分区工具如fdiskparted来创建新分区。
  2. 使用文件系统扩展工具如resize2fs(对于ext2/ext3/ext4文件系统)。
  3. 如果是LVM(Logical Volume Manager),可以直接调整逻辑卷的大小。

以下是每种方法的简要示例:

方法1:使用fdisk创建新分区并使用resize2fs扩展文件系统




# 查看当前磁盘分区
sudo fdisk -l
 
# 开始分区工具,选择磁盘(例如:/dev/sda)
sudo fdisk /dev/sda
 
# 创建新分区
n
 
# 选择分区类型等(默认回车即可)
 
# 写入分区表并退出
w
 
# 重新识别分区
sudo partprobe /dev/sda
 
# 扩展文件系统
sudo resize2fs /dev/sdaX

方法2:使用parted工具创建分区并扩展文件系统




# 使用parted工具
sudo parted /dev/sda
 
# 在parted交互式命令行中
mklabel gpt
mkpart primary 0% 100%
q
 
# 重新识别分区
sudo partprobe /dev/sda
 
# 扩展文件系统
sudo resize2fs /dev/sdaX

方法3:使用LVM




# 扩展逻辑卷
sudo lvextend -L +SIZE /dev/VGNAME/LVNAME
 
# 扩展文件系统
sudo resize2fs /dev/VGNAME/LVNAME

请注意,在实际操作时,您需要替换/dev/sda/dev/sdaX为实际的磁盘设备和分区,以及/dev/VGNAME/LVNAME为实际的卷组和逻辑卷名称。SIZE为您想要扩展的大小,可以是具体的大小值,或者使用+SIZE来指定增加的量。

在执行任何磁盘操作前,请务必备份重要数据,并确保没有运行重要服务访问该磁盘,以避免数据丢失。

2024-08-19

在Linux中,文件和目录的权限可以通过ls -l命令查看,权限以字符表示,如"rwx",其中"r"代表读权限,"w"代表写权限,"x"代表执行权限。同时,权限也可以用数字表示,r=4, w=2, x=1。

文件和目录权限可以通过chmod命令修改。

例如,给所有用户添加文件执行权限:




chmod a+x filename

移除组用户的写权限:




chmod g-w filename

使用数字设置权限(例如设置权限为rwxr-xr-x):




chmod 755 filename

文件的所有者可以通过chown命令更改文件的所有者。

例如,将文件所有者更改为用户名为newuser的用户:




chown newuser filename

目录的所有权和权限通常继承其父目录。然而,可以使用-R选项递归地更改目录及其内容的所有权和权限:




chown -R newuser directoryname

超级用户(root)可以更改任何文件的所有者或权限,普通用户只能更改自己拥有的文件的权限。

文件和目录的权限还受到umask值的影响,umask是一个数字,它从文件和目录的默认权限中减去。

例如,设置umask为022,新创建的文件和目录将默认权限设置为644和755:




umask 022

注意:在实际操作中,权限的修改需要确保操作用户拥有修改权限本身,或者是超级用户。

2024-08-19

在Linux中,进程间通信(IPC)是非常重要的。以下是一些常用的进程间通信方法:

  1. 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,需要通过fork创建。
  2. 命名管道(FIFO):有名管道克服了管道没有名字的限制,因此,除了在创建它的进程之外,其他进程也可以访问到它。
  3. 消息队列:消息队列是消息的链接列表,存放在内核中。一个进程往消息队列中添加消息,另一个进程从消息队列中读取消息。
  4. 共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段内存由一个进程创建,但多个进程可以访问。
  5. 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。
  6. 信号:信号是一种比消息传递效率高的通信方式,用于通知接收进程某个事件已经发生。
  7. 套接字(Socket):套接字可用于不同机器间的进程通信。

以下是使用共享内存进行进程间通信的示例代码:




#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
 
int main() {
    int shm_id;
    char* shm_addr;
    const int size = 1024;
 
    // 创建共享内存
    if ((shm_id = shmget(IPC_PRIVATE, size, 0666)) < 0) {
        perror("shmget");
        exit(1);
    }
 
    // 连接共享内存
    if ((shm_addr = (char*)shmat(shm_id, NULL, 0)) < (char*)0) {
        perror("shmat");
        exit(1);
    }
 
    // 向共享内存中写入数据
    strcpy(shm_addr, "Hello, shared memory!");
 
    // 断开共享内存连接
    if (shmdt(shm_addr) < 0) {
        perror("shmdt");
        exit(1);
    }
 
    // 删除共享内存
    shmctl(shm_id, IPC_RMID, NULL);
 
    return 0;
}

在这个例子中,我们首先使用shmget创建了一个新的共享内存段,然后使用shmat将其连接到我们的地址空间。接着,我们通过strcpy将一个字符串复制到共享内存中。最后,我们使用shmdt断开共享内存的连接,并使用shmctl删除共享内存。

这只是共享内存通信的一个简单示例,在实际应用中,你可能需要更复杂的同步机制,如信号量,来确保进程间的同步和互斥。

2024-08-19

在Linux系统中安装谷歌浏览器以及对应版本的驱动程序可以通过以下步骤进行:

  1. 首先,打开终端。
  2. 添加Google Chrome官方提供的仓库:



wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  1. 安装下载的.deb文件:



sudo dpkg -i google-chrome-stable_current_amd64.deb
  1. 如果在安装过程中遇到依赖问题,执行以下命令来修复:



sudo apt-get install -f
  1. 安装ChromeDriver。首先,确定Chrome浏览器的版本:



google-chrome --version
  1. 访问ChromeDriver下载页面,根据Chrome浏览器的版本下载对应版本的ChromeDriver。
  2. 解压下载的ChromeDriver压缩包,并将其放置在系统路径中,例如/usr/local/bin/



sudo mv chromedriver /usr/local/bin/
  1. 给予可执行权限:



sudo chmod +x /usr/local/bin/chromedriver

完成以上步骤后,您应该能够在Linux系统上运行Google Chrome浏览器以及对应版本的ChromeDriver了。

2024-08-19

NetworkManager是一个动态网络管理工具,可以在Linux系统中使用,它可以让你在多种技术之间进行选择,包括WICD、Wireless Tools、Netcfg、Connman等。

以下是一些使用NetworkManager的方法:

  1. 使用nmtui命令

nmtui提供了一个文本用户界面来配置网络设置。你可以使用它来启用、禁用网络接口,设置静态IP地址,以及添加、编辑、删除连接配置。




nmtui
  1. 使用nmcli命令

nmcli是NetworkManager的命令行接口,你可以使用它来获取网络设置的信息,以及启用、禁用网络连接。

例如,列出所有连接:




nmcli con show

启用特定的连接:




nmcli con up id "Connection Name"

禁用特定的连接:




nmcli con down id "Connection Name"
  1. 使用/etc/NetworkManager/NetworkManager.conf文件

你可以通过编辑/etc/NetworkManager/NetworkManager.conf文件来配置NetworkManager。例如,你可以设置DNS、IP地址、网关、域名等。




sudo nano /etc/NetworkManager/NetworkManager.conf

然后添加如下配置:




[global]
dns=dnsmasq
[connection]
id=MyConnection
uuid=123-abc
type=802-11-wireless
interface-name=wlan0
 
[802-11-wireless]
ssid=MyWiFi
mode=infrastructure
security=802-1x
 
[802-1x]
eap=tls
identity=user@example.com
 
[ipv4]
method=auto
 
[ipv6]
method=auto
  1. 使用nm-connection-editor命令

nm-connection-editor是一个图形界面的网络连接编辑器,你可以使用它来创建、编辑、删除网络连接。




nm-connection-editor

以上就是一些使用NetworkManager的方法,具体使用哪种方法取决于你的需求和偏好。

2024-08-19

在Linux系统上更新Node.js到最新版本的方法有多种,以下是三种常见的方法:

  1. 使用NodeSource PPA(个人软件包存档):



# 使用curl下载NodeSource安装脚本
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
 
# 安装Node.js
sudo apt-get install -y nodejs
  1. 使用NVM(Node Version Manager):

    首先安装NVM,然后使用NVM来安装Node.js最新版本。




# 安装NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
 
# 启动一个新的shell或者执行下面的命令来更新NVM的配置
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
 
# 使用NVM安装Node.js最新版本
nvm install node
  1. 使用Node.js官方二进制文件:



# 下载最新版本的Node.js (以16.0.0为例)
curl -O https://nodejs.org/dist/v16.0.0/node-v16.0.0-linux-x64.tar.xz
 
# 解压文件
tar -xJf node-v16.0.0-linux-x64.tar.xz
 
# 移动解压后的文件夹到目标路径
sudo mv node-v16.0.0-linux-x64 /usr/local/
 
# 设置环境变量
echo 'export PATH=/usr/local/node-v16.0.0-linux-x64/bin:$PATH' >> ~/.profile
source ~/.profile

以上三种方法中,第一种和第二种方法通常更为简便,它们利用了预先定义的安装脚本和流程。第三种方法则更为手动和定制化,适合那些想要完全控制Node.js安装过程的用户。

2024-08-19

在Mac OS, Windows, Linux上开发Flutter桌面项目,首先需要安装Flutter SDK。以下是安装和配置Flutter环境的基本步骤:

  1. 下载Flutter SDK:访问Flutter官网(https://flutter.dev),下载对应操作系统的安装包。
  2. 解压缩并安装:将下载的压缩包解压到你想安装Flutter SDK的目录。
  3. 配置环境变量:

    • 在Mac OS或Linux上,编辑你的shell配置文件(如.bash_profile.zshrc),添加以下行:

      
      
      
      export PATH="$PATH:`pwd`/flutter/bin"

      其中pwd是你的Flutter SDK目录。

    • 在Windows上,你可以通过"控制面板" -> "系统和安全" -> "系统" -> "高级系统设置" -> "环境变量"来添加环境变量。
  4. 安装依赖项:运行flutter doctor命令来安装任何缺失的依赖项,如Android SDK和Xcode(仅限Mac OS)。
  5. 启动Flutter设备模拟器或连接真实设备:运行flutter devices查看可用设备列表。
  6. 开始开发:使用flutter run命令启动你的Flutter项目。

以下是一个简单的代码示例,展示如何使用Flutter创建一个简单的桌面应用:




import 'package:flutter/material.dart';
 
void main() {
  runApp(MyApp());
}
 
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Desktop App'),
        ),
        body: Center(
          child: Text('Hello, World!'),
        ),
      ),
    );
  }
}

请注意,Flutter官方支持的是移动设备和web,对于桌面应用,虽然有一些第三方库如flutter_desktop_embedding可以尝试使用,但是并不是所有的功能都完全支持。此外,不同操作系统之间可能会有一些差异,你可能需要检查Flutter文档以获取特定平台的配置和指导。

2024-08-19

要在Linux上部署Yearning并通过内网穿透发布到公网,你需要完成以下步骤:

  1. 安装Yearning。
  2. 设置内网穿透。
  3. 配置Yearning的访问地址。

以下是具体步骤和示例代码:

  1. 安装Yearning:



# 下载Yearning安装脚本
wget https://github.com/cookieY/Yearning/releases/download/v2.5.1/Yearning-v2.5.1-linux-amd64.zip
 
# 安装unzip工具
sudo apt-get install unzip
 
# 解压Yearning安装包
unzip Yearning-v2.5.1-linux-amd64.zip
 
# 进入Yearning目录
cd Yearning-v2.5.1-linux-amd64
 
# 运行Yearning
nohup ./Yearning &
  1. 设置内网穿透:

常用的内网穿透工具有frpngrokn2n等。以frp为例,你需要下载对应系统的frp客户端和服务端程序,并配置frp服务端,然后在客户端配置Yearning的端口映射。




# 下载frp客户端和服务端
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
 
# 解压
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
 
# 编辑frp服务端配置文件frps.ini,配置公网IP和端口
[common]
bind_port = 7000
 
# 启动frp服务端
./frps -c ./frps.ini

在frp客户端的配置文件frpc.ini中配置Yearning的内网穿透:




[common]
server_addr = <your_server_ip>
server_port = 7000
 
[Yearning]
type = tcp
local_ip = 127.0.0.1
local_port = 8000
remote_port = 4000

启动frp客户端:




./frpc -c ./frpc.ini
  1. 配置Yearning的访问地址:

在完成内网穿透后,你可以通过<your_server_ip>:4000来访问Yearning,其中<your_server_ip>是你服务器的公网IP。

确保你的服务器防火墙和安全组规则允许访问7000和4000端口。

这样,Yearning就可以通过内网穿透工具发布到公网,并可以通过公网IP来访问了。