在Win11上离线安装 .NET Framework 3.5的方法

随 Windows 11提供的是.NET Framework 4.8,该环境可以运行任何 .NET Framework 4.x 应用。
而.NET Framework 3.5 支持为 .NET Framework 2.0 到 3.5 生成的应用,需要自行安装。

当Win11的应用软件需要.net framework3.5的运行环境时,就会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(
包括.NET 2.0和3.0)。

在线安装耗时很长,下面是离线安装.NET Framework 3.5的方法:

1、下载离线安装包,Win 10安装net 3.5的方法都是先下载net 3.5的cab包,然后用dsim命令来安装。

2、关掉所有[杀毒软件]及电脑管理管家等如360安全卫士

3、将下载的安装包放到c盘windows目录下(根据需要放置)

6d10cfdc3c944de5b062d11f880507ec.png

4、用命令行安装:
以管理员身份打开cmd,输入以下命令:

1
dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\Windows\sxs

等待进度到100%,显示操作成功完成: df868a68afad4c21846446c7d3b185f7.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在Win11上离线安装 .NET Framework 3.5的方法

随 Windows 11提供的是.NET Framework 4.8,该环境可以运行任何 .NET Framework 4.x 应用。
而.NET Framework 3.5 支持为 .NET Framework 2.0 到 3.5 生成的应用,需要自行安装。
当Win11的应用软件需要.net framework3.5的运行环境时,就会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)。
在线安装耗时很长,下面是离线安装.NET Framework 3.5的方法:

1、下载离线安装包,Win 10安装net 3.5的方法都是先下载net 3.5的cab包,然后用dsim命令来安装。
2、关掉所有杀毒软件及电脑管理管家等如360安全卫士
3、将下载的安装包放到c盘windows目录下(根据需要放置)
/4、用命令行安装:
以管理员身份打开cmd,输入以下命令:
dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\Windows\sxs

等待进度到100%,显示操作成功完成即可。

Windows安装SSH-Win32-OpenSSH

ssh config配置文件

C:\ProgramData\ssh
C:\ProgramData\ssh\sshd_config
%programdata%\ssh\sshd_config

配置 sshd_config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Port 22
ListenAddress 0.0.0.0
SyslogFacility LOCAL0
LogLevel DEBUG
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no
AuthorizedKeysFile C:/Users/Administrator/.ssh/authorized_keys
IgnoreUserKnownHosts no
IgnoreRhosts yes
Subsystem sftp sftp-server.exe

PermitRootLogin yes
GSSAPIAuthentication no
PubkeyAcceptedKeyTypes=+ssh-rsa

安装 GIT 配置 authorized_keys

C:/Users/Administrator/.ssh/authorized_keys

ssh-keygen需要配置为ISA

1
2
3
4
5
6
7
8
9
10
ssh-keygen -t rsa -m PEM
ssh-keygen -t rsa -m PEM

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase for "/c/Users/Administrator/.ssh/id_rsa" (empty for no passphrase):
Enter same passphrase again:

Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub

ARMBoxLinuxBox盒子工控机

LinuxBox配置清单

序号 事项
1 安装chromium-browser ,命令sudo apt-get install chromium-browser -y
2 禁用ChromeBrower数据收集功能
1.打开 Chromium 浏览器。
2.点击右上角的菜单按钮,选择“设置”。
3.在“隐私和安全”部分,找到“帮助改进 Chrome 的功能和性能”选项并关闭
3 配置ChromeBrower开机自启动和全屏(/home/ubuntu/.config/autostart)
4 配置WiFi连接
5 桌面禁用锁屏和黑屏配置
6 配置Ubuntu时区
sudo timedatectl set-timezone Asia/Shanghai
sudo cat /etc/timezone
7 Chrome disable browser metrics
chmod -R 000 /root/snap/chromium/common/chromium/BrowserMetrics
d--------- 2 root root 16K 6月 12 22:00 BrowserMetrics

LinuxBox盒子图片

操作系统版本 lsb_release -a

1
2
3
4
5
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.10
Release: 24.10
Codename: oracular

连接地址 192.168.0.148

序号 账号 密码
1 ubuntu ubuntu
2 root As12345678

软件安装(Chrome/中文)

  • chrome安装(root安装)

    1
    sudo snap install chromium
  • 浏览器字体安装

    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt update && sudo apt upgrade -y
    sudo apt install language-pack-zh-hans -y

    sudo locale-gen zh_CN.UTF-8 # 生成中文 locale
    sudo update-locale LANG=zh_CN.UTF-8 # 设置系统默认语言

    export LANG=zh_CN.UTF-8
    sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk -y

Chrome开机自启动

创建桌面启动文件

这种方法适合需要自定义启动参数的场景:

  1. 打开终端,运行以下命令创建启动文件:
1
2
3
mkdir -p ~/.config/autostart
cd ~/.config/autostart
nano chromium.desktop
  1. 在文件中输入以下内容:
1
2
3
[Desktop Entry]
Type=Application
Exec=/usr/bin/chromium-browser --start-maximized --disable-infobars --kiosk "http://192.168.0.190/hmi/dsfq"
  • --start-maximized:启动时最大化窗口。
  • --kiosk:全屏模式。
  • "http://www.example.com":替换为你希望打开的网页地址。
  • 配置URL地址:"http://192.168.0.190/hmi/dsfq"

Ubuntu22.04网络配置固定IP地址

1
2
cp  /etc/systemd/network/10-eth0.network /etc/systemd/network/10-eth0.network.bak
vim /etc/systemd/network/10-eth0.network

/etc/systemd/network/10-eth0.network

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Match]
Name=eth*

[Network]
DHCP=
Address=192.168.1.240/24
Gateway=192.168.1.1
#DNS=192.168.1.1

[DHCPv4]
RouteMetric=100

[IPv6AcceptRA]
RouteMetric=100

/etc/systemd/network/20-wlan0.network

1
2
3
4
5
6
7
8
9
10
11
12
[Match]
Name=wlan0

[Network]
DHCP=yes
IgnoreCarrierLoss=5 seconds

[DHCPv4]
RouteMetric=4096

[IPv6AcceptRA]
RouteMetric=4096

WiFi连接Linux盒子

序号 方式
1 你用命令nmtui 然后选择第二个
2 (如果没有这个nmtui命令)root目录下有一个wifi开头的脚本,执行这个脚本连接WIFI

操作方式/root/wifi-connect.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/root/wifi-connect.sh

Connect to wifi network wlan0: brcmfmac

1: CU_Jtyu
2: DIRECT-519BC577
3: DIRECT-49-HP Laser 136w
4: Cloud-Bird
5: kingdee
6: Cloud-bird5G
Choose wifi SSID: 6
Please enter password/pre shared key for [Cloud-bird5G]:
Trying to authenticate, please wait...
auth ok
Saving wifi config...
Try getting ip from DHCP...
Setting LLMNR support level "yes" for "3", but the global support level is "no".

Ready. Wifi address: 192.168.0.196

Linux盒子配置一直亮屏(禁用锁屏和黑屏)

在 Ubuntu 20.04 中,可以通过命令行禁用锁屏和黑屏功能。以下是具体步骤:

手工操作禁用锁屏(黑屏命令行无效)


禁用锁屏

  1. 禁用屏幕保护程序和锁屏

    • 打开终端(Terminal)。

    • 输入以下命令来禁用屏幕保护程序和锁屏功能:

    1
    2
    3
    4
    5
    6
    sudo gsettings set org.gnome.desktop.screensaver lock-enabled false
    sudo gsettings set org.gnome.desktop.screensaver idle-activation-enabled false

    sudo gsettings set org.gnome.desktop.screensaver enabled false
    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'off'
    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'off'
  • 第一个命令禁用了锁屏功能,第二个命令禁用了屏幕保护程序的自动激活。
  1. 禁用电源管理中的屏幕关闭

    • 输入以下命令来禁用屏幕关闭:
    1
    2
    3
    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
  • 这些命令分别设置了在连接电源适配器和使用电池时,系统不会自动关闭屏幕。

禁用黑屏

黑屏通常是由于屏幕保护程序或电源管理设置导致的。通过上述命令禁用了屏幕保护程序和电源管理中的屏幕关闭后,黑屏问题应该会得到解决。

验证设置

  • 你可以通过以下命令查看当前的设置是否生效:

    1
    2
    3
    4
    gsettings get org.gnome.desktop.screensaver lock-enabled
    gsettings get org.gnome.desktop.screensaver idle-activation-enabled
    gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type
    gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type
  • 如果返回值为 false'nothing',说明设置已经生效。

注意事项

  • 如果你使用的是其他桌面环境(如 KDE、XFCE 等),可能需要使用不同的命令或工具来调整这些设置。
  • 如果你希望恢复默认设置,可以将上述命令中的 false'nothing' 改为 true 或默认值。

通过以上步骤,你应该可以在 Ubuntu 20.04 中通过命令行禁用锁屏和黑屏功能。

Chrome日志存储过大22G chromium/BrowserMetrics

/root/snap/chromium/common/chromium/BrowserMetrics 这个文件夹是什么东西,容量太大了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -n 20
sudo du -ah / | sort -rh | head -n 20

30G /
22G /root/snap/chromium/common/chromium/BrowserMetrics
22G /root/snap/chromium/common/chromium
22G /root/snap/chromium/common
22G /root/snap/chromium
22G /root/snap
22G /root
3.4G /usr
2.8G /snap
2.0G /var
1.6G /usr/share
1.5G /usr/lib
1.4G /var/lib
1.2G /var/lib/snapd
1.2G /snap/gnome-42-2204/201/usr
1.2G /snap/gnome-42-2204/201
1.2G /snap/gnome-42-2204
1.1G /usr/lib/aarch64-linux-gnu
1016M /var/lib/snapd/snaps
961M /snap/gnome-42-2204/201/usr/lib

解决办法chromium/BrowserMetrics

—>解决办法

完全卸载snap安装的Chromium 应用,使用谷歌官方网站下载的浏览器。

1
2
3
4
5
6
sudo snap remove --purge chromium 
sudo snap remove --purge chromium-browser

#安装
sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

禁用更新

1
2
3
4
5
sudo refresh chromium --unhold
sudo snap set chromium refresh.metered=unhold

sudo snap set system refresh.metered=hold
sudo snap get system refresh.metered
1).更新到最新版本
1
sudo snap refresh chromium
2).Disable chromium更新
2.1.第一种disable方式
1
2
3
4
5
6
7
8
9
10
11
12
1.移除snap对chromium的自动更新。
# snap refresh chromium --unhold
Removed general refresh hold of chromium。

2.保持snap对chromium的自动更新
# snap refresh chromium --hold
General refreshes of "chromium" held indefinitely

# snap refresh --time
timer: 00:00~24:00/4
last: today at 21:26 CST
next: tomorrow at 05:11 CST
2.2.第二种disable方式
1
2
3
4
5
1.移除snap对chromium的自动更新。
# sudo snap set chromium refresh.metered=unhold

2.保持snap对chromium的自动更新
# sudo snap set chromium refresh.metered=hold
2.3.Disable snap系统更新
1
2
# sudo snap set system refresh.metered=hold
# sudo snap get system refresh.metered

LinuxBox一键运行脚本编写

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
#!/bin/sh

sudo apt update
sudo apt upgrade -y

sudo timedatectl set-timezone Asia/Shanghai
sudo cat /etc/timezone

sudo mkdir -p /root/snap/chromium/common/chromium/BrowserMetrics
sudo chmod -R 000 /root/snap/chromium/common/chromium/BrowserMetrics

sudo apt update && sudo apt upgrade -y
sudo apt install language-pack-zh-hans -y
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

export LANG=zh_CN.UTF-8

sudo apt-get install vim -y && sudo apt-get remove nano -y
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk -y
sudo apt install -y fontconfig
sudo apt install -y fonts-dejavu-core fonts-liberation

sudo apt autoremove -y

sudo apt install snap -y
sudo apt install snapd -y
sudo snap install chromium

sudo mkdir -p /home/ubuntu/.config/autostart
sudo touch /home/ubuntu/.config/autostart/chromium.desktop

# 写入文件内容
sudo cat <<EOF > /home/ubuntu/.config/autostart/chromium.desktop
[Desktop Entry]
Type=Application
Exec=/snap/bin/chromium --start-maximized --disable-infobars --kiosk "$1"
EOF

sudo chown -R ubuntu:ubuntu /home/ubuntu/.config/autostart/chromium.desktop

sudo mkdir -p /etc/gdm3/
sudo cp -f /etc/gdm3/custom.conf /etc/gdm3/custom.conf.backup

sudo touch /etc/gdm3/custom.conf

# 写入文件内容
sudo cat <<EOF > /etc/gdm3/custom.conf
[daemon]
AutomaticLoginEnable=True
AutomaticLogin=ubuntu
EOF

# Ubuntu自动登录和开机锁屏取消
## 禁用自动锁屏:
gsettings set org.gnome.desktop.screensaver lock-enabled false
gsettings set org.gnome.desktop.lockdown disable-lock-screen true

# 禁用屏幕休眠
gsettings set org.gnome.desktop.session idle-delay 0

红米电视投屏运维问题解决

ubuntu 外接显示器只有桌面,不进入看板问题

https://blog.csdn.net/qq_45911550/article/details/111399277

如上图,选择镜像,不过这个时候笔记本的屏幕也是在使用中,可以将笔记本设置为合上盖子仍然运行就可以了。

img

1
2
3
4
5
6
7
8
9
10
11
sudo cat /etc/systemd/logind.conf

#HandleLidSwitch=suspend 找到这句

HandleLidSwitch=ignore 改为这句

sudo systemctl restart systemd-logind
# 或者
sudo service systemd-logind restart
# 或者
sudo shutdown -r now

Ubuntu系统初始化后配置清单ToDoList

ToDoList清单

配置时区 sudo timedatectl set-timezone Asia/Shanghai && sudo cat /etc/timezone

配置时区

1
2
sudo timedatectl set-timezone Asia/Shanghai
sudo cat /etc/timezone

配置Limit

编辑/etc/security/limits.conf文件,添加或修改相应的行来增加限制。例如:

1
2
3
4
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

确保 IP 转发已启用

确保内核启用了 IP 转发功能。可以通过以下命令启用:

1
sudo sysctl -w net.ipv4.ip_forward=1

为了使设置永久生效,可以编辑 /etc/sysctl.conf 文件,添加以下内容:

1
net.ipv4.ip_forward = 1

然后运行以下命令应用配置:

1
sudo sysctl -p

增加sudo权限

sudo vim /etc/sudoers

1
user ALL=(ALL:ALL) NOPASSWD: ALL

配置高并发服务器调小TCP协议的time_wait时间

查看网络节点的tcp连接状态,如果发现系统存在大量的TIME_WAIT状态的连接,通过调整内核参数解决:
然后执行以下命令让参数生效: sudo /sbin/sysctl -p

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

linux下ulimit参数调整

sudo vim /etc/security/limits.conf

1
2
3
4
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

临时配置

1
2
ulimit -SHn 65536
ulimit -n

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

改变系统最大打开文件数,需要修改 /etc/sysctl.conf 文件

sudo vim /etc/sysctl.conf

1
fs.file-max = 1048576

设置服务最大文件句柄数:

sudo vim /etc/systemd/system.conf

1
DefaultLimitNOFILE=1048576

配置网络参数修改

sudo vim /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service

1
2
[Service]
TimeoutStartSec=5sec

Linux 操作系统参数

系统全局允许分配的最大文件句柄数:
2 millions system-wide

1
2
3
sudo sysctl -w fs.file-max=2097152
sudo sysctl -w fs.nr_open=2097152
sudo echo 2097152 > /proc/sys/fs/nr_open

TCP 协议栈网络参数

1
2
3
sudo sysctl -w net.core.somaxconn=32768
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sudo sysctl -w net.core.netdev_max_backlog=16384

可用知名端口范围:

1
sudo sysctl -w net.ipv4.ip_local_port_range='1000 65535'

TCP Socket 读写 Buffer 设置:

1
2
3
4
5
6
7
8
9
sudo sysctl -w net.core.rmem_default=262144
sudo sysctl -w net.core.wmem_default=262144
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.core.optmem_max=16777216

#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
sudo sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sudo sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'

TCP 连接追踪设置

1
2
3
sudo sysctl -w net.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

Failed to allocate directory watch: Too many open files

解决办法:
vim /etc/sysctl.conf
sudo vim /etc/sysctl.conf


1
2
3
fs.file-max = 1048576
fs.inotify.max_user_instances=25120
fs.inotify.max_user_watches=262144

生效

sudo sysctl -p

Ubuntu Date-CST-UTC > CST修改时区时间的最好方法 timedatectl set-timezone Asia/Shanghai

UTC > CST

查看 /etc/timezome 的內容

1
2
sudo cat /etc/timezone

用timedatectl set-timezone Asia/Shanghai 可以快速地更新时区和时间

1
2
sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-timezone Asia/Shanghai

使用 timedatectl 命令顯示當前的系統時區。

1
timedatectl

輸出畫面

1
2
3
4
5
6
7
 Local time: Fri 2021-01-07 22:45:47 UTC
Universal time: Fri 2021-01-07 22:45:47 UTC
RTC time: Fri 2021-01-07 22:45:48
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

250605-AngularJS-Button防止重复点击解决办法

范式

1
2
3
4
5
6
7
8
9
10
11
12
13
let isProcessing = false;


if (isProcessing) {
return false; // 防止重复点击
}
isProcessing = true;


// 模拟异步操作完成后恢复按钮状态
setTimeout(function() {
isProcessing = false;
}, 2000);

方案一

angularjs 能不能实现一个组件,放到所有的按钮上面,控制ng-click防重复提交策略

在 AngularJS 中,可以通过创建一个自定义指令来实现一个通用的防重复点击组件,这个指令可以附加到任何按钮上,以控制 ng-click
的防重复提交策略。

以下是一个完整的示例:

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
// 增加按钮防重复点击组件
app.directive('preventRepeatedClick', function ($parse, $timeout) {
return {
restrict: 'A',
priority: 1000, // 确保指令在ngClick之后执行
scope: {
clickDelay: '@'
},
link: function (scope, element, attrs) {
var isProcessing = false;

var delay = parseInt(attrs.clickDelay) || 2000; // 默认延迟 2000 毫秒
delay = (delay >= 2000) ? delay : 2000;

element.on('click', function (event) {
// 如果正在处理事件,直接返回,防止重复点击
if (isProcessing) {
event.preventDefault();
event.stopPropagation();
return;
}

// 禁用按钮,防止重复点击
isProcessing = true;
element.attr('disabled', 'disabled');

// 延迟后启用按钮
$timeout(function () {
isProcessing = false;
element.removeAttr('disabled');
}, delay);
});
}
};
});

2. 使用自定义指令

在 HTML 中,将 prevent-repeated-click 指令附加到按钮上,并可选地指定 click-delay 属性来设置按钮禁用的时间(以毫秒为单位)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<title>AngularJS 防重复点击指令</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="myCtrl">
<button prevent-repeated-click click-delay="2000" ng-click="buttonClick()">点击我</button>
<p>{{message}}</p>
</div>
</body>
</html>

3. 控制器逻辑

在控制器中定义按钮的点击处理函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
app.controller('myCtrl', function ($scope) {
$scope.message = '';

$scope.buttonClick = function () {
console.log('按钮被点击了');
$scope.message = '按钮被点击,正在处理...';
// 模拟处理逻辑
setTimeout(function () {
$scope.message = '处理完成';
$scope.$apply(); // 触发 AngularJS 的 digest 循环
}, 2000);
};
});

解释

  1. **自定义指令 preventRepeatedClick**:
    • **restrict: 'A'**:指定该指令为属性类型。
    • **scope**:定义指令的隔离作用域,ngClick 用于绑定按钮的点击事件,clickDelay 用于设置按钮禁用的时间。
    • link 函数:在指令的链接函数中,监听按钮的点击事件。
      • **isProcessing**:标记按钮是否正在处理事件。
      • **delay**:从 click-delay 属性获取按钮禁用的时间,如果没有指定则使用默认值 2000 毫秒。
      • 禁用按钮:在点击事件发生时,如果 isProcessingtrue,阻止事件的默认行为并返回,防止重复点击。否则,将
        isProcessing 设置为 true 并禁用按钮。
      • **触发 ng-click**:调用绑定的 ngClick 函数。
      • 延迟启用按钮:使用 $timeout 在指定的延迟时间后将 isProcessing 设置为 false 并启用按钮。
  2. 使用指令
    • 在按钮上添加 prevent-repeated-click 指令,并可选地使用 click-delay 属性来指定按钮禁用的时间。
    • 绑定 ng-click 到按钮的点击处理函数。
  3. 控制器逻辑
    • 定义按钮的点击处理函数 buttonClick,在其中执行相关的业务逻辑。

通过这种方式,你可以将 prevent-repeated-click 指令附加到任何按钮上,以实现防重复点击的功能,而无需在每个按钮的控制器中重复编写相同的逻辑。

方案二

AngularJS 的双向数据绑定来实现。以下是一个示例:

  1. HTML 部分:使用 ng-disabled 指令来绑定按钮的禁用状态。
  2. JavaScript 部分:在控制器中定义一个变量来控制按钮的禁用状态,并在事件处理函数中修改这个变量。

HTML

1
2
3
4
5
<div ng-app="myApp">
<div ng-controller="myCtrl">
<button ng-click="buttonClick($event)" ng-disabled="isDisabled">点击我</button>
</div>
</div>

JavaScript

1
2
3
4
5
6
7
8
9
10
11
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
// 初始化按钮禁用状态为 false
$scope.isDisabled = false;

$scope.buttonClick = function($event) {
console.log('按钮被点击了');
// 修改按钮的禁用状态
$scope.isDisabled = !$scope.isDisabled;
};
});

在这个示例中,我们使用了 ng-disabled 指令来绑定按钮的禁用状态到 $scope.isDisabled 变量。当点击按钮时,buttonClick
函数会被调用,它会切换 $scope.isDisabled 的值,从而改变按钮的禁用状态。

  • 初始状态下,$scope.isDisabledfalse,按钮是启用状态。
  • 当按钮被点击时,buttonClick 函数将 $scope.isDisabled 设置为 true,按钮变为禁用状态。
  • 再次点击按钮时,buttonClick 函数将 $scope.isDisabled 设置为 false,按钮恢复启用状态。

Ubuntu服务器参数优化

确保 IP 转发已启用

确保内核启用了 IP 转发功能。可以通过以下命令启用:

1
sudo sysctl -w net.ipv4.ip_forward=1

为了使设置永久生效,可以编辑 /etc/sysctl.conf 文件,添加以下内容:

1
2
3
4
5
net.ipv4.ip_forward = 1
fs.file-max = 1048576

fs.inotify.max_user_instances=25120
fs.inotify.max_user_watches=262144

然后运行以下命令应用配置:

1
sudo sysctl -p

增加sudo权限

sudo vim /etc/sudoers

1
user ALL=(ALL:ALL) NOPASSWD: ALL

配置高并发服务器调小TCP协议的time_wait时间

查看网络节点的tcp连接状态,如果发现系统存在大量的TIME_WAIT状态的连接,通过调整内核参数解决:
然后执行以下命令让参数生效: sudo /sbin/sysctl -p

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

linux下ulimit参数调整

sudo vim /etc/security/limits.conf

1
2
3
4
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

临时配置

1
2
ulimit -SHn 65536
ulimit -n

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

改变系统最大打开文件数,需要修改 /etc/sysctl.conf 文件

sudo vim /etc/sysctl.conf

1
fs.file-max = 1048576

设置服务最大文件句柄数:

sudo vim /etc/systemd/system.conf

1
DefaultLimitNOFILE=1048576

配置网络参数修改

sudo vim /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service

1
2
[Service]
TimeoutStartSec=5sec

Linux 操作系统参数

系统全局允许分配的最大文件句柄数:
2 millions system-wide

1
2
3
sudo sysctl -w fs.file-max=2097152
sudo sysctl -w fs.nr_open=2097152
sudo echo 2097152 > /proc/sys/fs/nr_open

TCP 协议栈网络参数

1
2
3
sudo sysctl -w net.core.somaxconn=32768
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sudo sysctl -w net.core.netdev_max_backlog=16384

可用知名端口范围:

1
sudo sysctl -w net.ipv4.ip_local_port_range='1000 65535'

TCP Socket 读写 Buffer 设置:

1
2
3
4
5
6
7
8
9
sudo sysctl -w net.core.rmem_default=262144
sudo sysctl -w net.core.wmem_default=262144
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.core.optmem_max=16777216

#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
sudo sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sudo sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'

TCP 连接追踪设置

1
2
3
sudo sysctl -w net.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

Failed to allocate directory watch: Too many open files

解决办法:
vim /etc/sysctl.conf
sudo vim /etc/sysctl.conf


1
2
3
fs.file-max = 1048576
fs.inotify.max_user_instances=25120
fs.inotify.max_user_watches=262144

生效

sudo sysctl -p

系统启用了 SELinux 或 AppArmor,限制 MongoDB 的访问权限。导致服务 mongod.service 启动失败

当系统启用了 SELinux 或 AppArmor 限制 MongoDB 的访问权限导致服务启动失败时,可以按照以下方法解决:

1. 检查日志文件

  • 查看 MongoDB 的日志文件,通常位于 /var/log/mongodb/mongod.log,日志中会记录具体的错误信息。
  • 检查系统日志,使用命令 journalctl -u mongod.service 查看服务启动时的详细日志。

2. 检查权限设置

  • 检查数据目录权限:确保 MongoDB 数据目录(如 /var/lib/mongodb)的所有者和组为 mongodb 用户,并且具有读写权限。可以使用以下命令修改权限:

    1
    2
    sudo chown -R mongodb:mongodb /var/lib/mongodb
    sudo chmod -R 755 /var/lib/mongodb
  • 检查日志目录权限:确保日志文件路径(如 /var/log/mongodb)也具有正确的权限。

3. 检查 SELinux 和 AppArmor 配置

  • 临时禁用 SELinux:可以临时禁用 SELinux 来测试是否是 SELinux 导致的问题。使用命令 sudo setenforce 0 将 SELinux
    设置为宽容模式。如果禁用后服务可以正常启动,说明是 SELinux 配置问题。
  • 检查 SELinux 策略:查看 SELinux 的日志文件(如 /var/log/audit/audit.log),查找与 MongoDB 相关的拒绝访问记录。
  • 配置 SELinux 策略:根据日志中的拒绝记录,可以使用 audit2allow 工具生成相应的 SELinux 策略模块,并将其加载到系统中。
  • 检查 AppArmor 配置:如果系统使用 AppArmor,检查 MongoDB 的 AppArmor 配置文件(通常位于
    /etc/apparmor.d/usr.sbin.mongod),确保配置文件中允许 MongoDB 访问必要的文件和目录。

4. 检查其他常见问题

  • 检查端口占用:确保 MongoDB 默认端口(27017)没有被其他进程占用。可以使用命令 netstat -tuln | grep 27017 检查端口占用情况。
  • 检查配置文件:检查 MongoDB 的配置文件(如 /etc/mongod.conf),确保配置文件中的路径和参数设置正确。

5. 重新启动服务

完成上述检查和修改后,重新启动 MongoDB 服务:

1
sudo systemctl restart mongod

然后检查服务状态:

1
sudo systemctl status mongod

如果服务仍然无法启动,可以继续查看日志文件和系统日志,进一步排查问题

ubuntu中文乱码问题解决

安装字体命令(中文字体)

1
2
3
4
5
6
7
sudo apt update && sudo apt upgrade -y

sudo apt install language-pack-zh-hans -y

sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk -y
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei -y -y
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk fonts-arphic-ukai fonts-arphic-uming fonts-droid-fallback -y

环境变量设置

Ubuntu默认的中文字符编码为zh_CN.UTF-8

输入命令:sudo vim /etcenvironment
修改内容如下:

1
2
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="zh_CN.UTF-8"

设置环境变量

1
2
3
sudo locale-gen zh_CN.UTF-8   # 生成中文 locale
sudo update-locale LANG=zh_CN.UTF-8 # 设置系统默认语言
export LANG=zh_CN.UTF-8

Ubuntu系统配置中文显示