2.4k words

安装ss

1
2
yum install python-pip
pip install shadowsocks

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi /etc/shadowsocks.json

#在文件中添加一下内容:
{
"server":["101.101.101.101"],
"server_port":6666,
"password":"xxxxxxxx",
"timeout":300,
"method":"aes-256-cfb",
"local_address":"127.0.0.1",
"local_port":1080,
"fast_open":false,
"tunnel_remote":"8.8.8.8",
"dns_server":["8.8.8.8", "8.8.4.4"],
"tunnel_remote_port":53,
"tunnel_port":53
}
  • server : 服务器地址
  • server_port:服务器端口号
  • password:密码
  • method:加密方式
852 words

QScrollArea作为一个控件容器,主要用于提供横向和纵向的滚动条,常用在图片查看等场景。由于它只作为一个容器存在,所以需要为其设置一个控制:QScrollArea::setWidget(QWidget *)

QScrollArea也可以用来设计复杂的列表:

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
class MyScrollArea : public QScrollArea
{
public:
void MyScrollArea()
{
m_numItem = 0;
m_layout = new QVBoxLayout();
m_layout->addStretch(1);
m_widget = new QWidget();
m_widget->setLayout(m_layout);

this->setWidget(m_widget);
this->setWidgetResizable(True);
}

void addItem(QWidget* item)
{
m_layout->insertWidget(m_numItem, item);
m_numItem ++;
}

void delItem(QWidget* item)
{
m_layout->removeWidget(item);
m_numItem --;
}
}

列表项一般只需要纵向的滚动条,横向宽度保持与外部窗口一致,所以需要重写QScrollArea的resizeEvent

1
2
3
4
5
6
7
8
9
10
void resizeEvent(QResizeEvent* e)
{
QScrollArea::resizeEvent(e);
auto width = e->size()->width();
if (width > 0)
{
m_widget->setMaximumWidth(width);
}
}

3.1k words

挂载NFS

挂载命令

挂载NFS时,常用的命令比如:

1
2
#将远程目录挂载到本地/home/share目录下
mount -t nfs -o nolock 192.168.1.10:/tmp /home/share

在Linux 下可以用mount函数进行挂载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool Mount()
{
string remotePath = m_remoteIP + ":" + m_remotePath;
string localPath = m_localPath;
string params = "nolock,soft,fg,tcp,timeo=5,retrans=1,rsize=4096,vers=3,addr=" + m_remoteIP;

int ret = mount(remotePath.c_str(),
localPath.c_str(),
"nfs",
MS_SYNCHRONOUS,
params.c_str());

if (ret != 0)
{
auto errInfo = errno;
return false;
}

return true;
}
776 words

配置并生成崩溃信息

  1. 查看并开启core dump功能
1
2
3
4
#查看是否开启 0不开
ulimit -c
#开启core dump功能
ulimit -c unlimited
  1. 指定core dump输出目录到/opt/dump/
1
echo /opt/dump/core.%e.%p > /proc/sys/kernel/core_pattern  
  1. 执行问题程序即可,输出如下:
1
2
3
4
5
6
7
#崩溃信息
[root@test ~]# Alignment trap: not handling instruction e8502f00 at [<75f76aca>]
Unhandled fault: alignment exception (0x001) at 0x0d98b981
pgd = 98be4000
[0d98b981] *pgd=00000000

[1]- Bus error (core dumped) ./test
1.6k words

VNC简介

VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议的远程系统,C/S端口默认为5900,B/S端口默认为5800。

RFB (远程帧缓存) 是一个远程图形用户的简单协议,工作在帧缓存级别上,其传输的是像素数据是以XY为起点的方框数据,通过矩形图形数据组进行帧缓存的更新。另外更新是由客户端通过命令驱动的,也就是说更新只是服务器在响应客户端的请求时发生的,如果网络较差时,有些帧的缓存会忽略,这样能减少客户端对网络和绘制速度的要求。

2.5k words

概述

说明

网络通讯中,数据传输方式有:单播,广播和组播。单播是一对一的通信,广播则是对网络中所有主机进行通信。在需要对网络中某些主机进行通信时,单播会多次重复发送数据,广播则会造成资源浪费与安全问题。而组播是将信息发送到某个组播组,只有加入组播组的主机才能接收到消息,这种方式解决了单播情况下数据的重复拷贝及带宽的重复占用,也解决了广播方式下带宽资源的浪费。

组播中数据发送者和接收者之间是一对多点的连接方式,多个接收者加入同一个组播组,共享同一个IP地址,同时组播组中的成员是动态的,某个成员的加入和退出并不影响原有的组播组。当网络中的某些用户需要特定数据时,组播数据发送者(即组播源)仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发。

1.7k words

WSL是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。

官方教程

启用子系统

  • 控制面板 -> 程序和功能 -> 启用或关闭Windows功能 -> 勾选 适用于Linux的Windows子系统

  • 控制面板 -> 程序和功能 -> 启用或关闭Windows功能 -> 勾选 虚拟机平台

image-20211208114609489

安装Ubuntu

  1. 下载Ubuntu20.04系统,可以将系统下载到其他盘上

  2. 修改文件后缀名:Ubuntu20.04.appx --> Ubuntu.zip,并解压

  3. 双击exe文件,输入用户名与密码即可

    image-20211208114959128

  4. 使用默认登录用户为root

    • 打开管理员模式下的cmd,输入./ubuntu2004.exe config --default-user root
    • 输入 net stop lxssmanager重启wsl即可

WSL配置与使用

1
2
3
4
5
6
7
8
9
10
#更新
wsl --update
#查询已安装的子系统
wsl -l -v
#设置默认系统为wsl2
wsl --set-default-version 2
#将已安装的子系统升级到wsl2
wsl --set-version Ubuntu 2
#删除子系统
wslconfig /unregister xxx
  • WSL2需要保证Winows版本不低于19041
  • windwos下访问子系统目录,在文件夹路径栏上输入:\\wsl$
  • WSL1和WSL2的区别

image-20211209090047432

  • WSL2与VMware和VirtualBox的共存:需要VMware15.5.5+,VirtualBox 6+才能打开

32位交叉编译环境配置

  • 只支持WSL2版本
1
2
3
4
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386 -y
sudo apt-get install g++ -y

运行图形界面

window内核版本为21+

先在windows更新WSL:wsl --update, 再在linux安装界面程序:apt-get install gedit,win10 21+系统内置了WSLG(GUI)功能,可以在Window菜单发现多了一个Ubuntu目录,其中显示了已经安装的界面程序,直接点击即可运行:

image-20211216103137449

内核版本不支持

  1. 安装VcXsrv Windows X Server download | SourceForge.net

  2. 打开并配置VcXsrv

    image-20211216103507780

    image-20211216103527258

    image-20211216103540971

    1. linux设置显示的服务端

      • 打开bashrc文件:vi ~/.bashrc
      • 在文件最后添加两行并保存:
      1
      2
      3
      #下面的IP地址为window的ip
      export DISPLAY=192.168.0.218:0
      export LIBGL_ALWAYS_INDIRECT=1
      • 刷新配置:source .bashrc
      • 测试界面软件:gedit test.ini

开启桥接网络

配置Hyper-V

  1. 打开以太网配置属性,如果Hyper-V可扩展的虚拟交换机有开启的话,需要先关闭

    image-20220615150618915

  2. 打开Hyper-V管理器,点击虚拟交换机管理器

  3. 选择WSL,连接类型选择外部网络,然后点击应用即可

image-20220526101518816

image-20220526101931101

WLS配置

  1. 设置IP

    1
    2
    3
    4
    5
    6
    7
    #静态IP
    ip addr flush dev eth0
    ip addr add 192.168.0.155/23 broadcast 192.168.1.255 dev eth0

    #动态IP
    apt-get install udhcpc
    udhcpc
  2. 设置路由

    1
    ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0
  3. 设置DNS解析

    • 打开wsl配置 vi /etc/wsl.conf,输入
    1
    2
    [network]
    generateResolvConf = false
    • 打开dns配置 /etc/resolv.conf,输入
    1
    2
    3
    nameserver 192.168.1.1
    nameserver 114.114.114.114
    nameserver 223.5.5.5
1.9k words

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

3.2k words

安装与使用

  1. pip提速,使用国内源
1
2
3
4
#清华源
pip install xxx --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
#阿里云
pip install xxx --upgrade -i http://mirrors.aliyun.com/pypi/simple/

永久修改:

1
2
3
4
5
6
7
#打开配置,windows下C:/Users/xxxx/pip/pip.ini
vi ~/.pip/pip.conf
#输入以下内容
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
  1. pip搜索
1
2
pip install pip_search
pip_search xxxx
  1. 文件服务器
1
2
3
4
# python3
python3 -m http.server
# python2
python -m SimpleHTTPServer

基本语法

  1. 判断类型
1
2
3
4
5
#使用isinstance或type判断变量类型
#isinstance可判断父类,type不支持判断父类
test = A()
check = isinstance(test, A) #True
check = (type(test) == A) #True
  1. 运算
1
2
3
4
5
6
7
#数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
a = 10
b = 6
c = a / b #除法 1.66
d = a // b #整除 1
e = a % b #求模 4
f = 2 ** 3 #求幂 8