// ==UserScript==
// @name 宝塔面板优化 - 界面美化
// @namespace http://tampermonkey.net/
// @version 1.3
// @description 移除指定 class 元素、替换特定 span 文字内容,并删除包含“需求反馈”的 span
// @match http://152.136.153.72:9999/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
console.log('⚠ 脚本准备加载');
// 定义需要移除的 class 组合
const selectorsToRemove = [
'.h-auto.mt-\\[1\\.2rem\\]', // h-auto mt-[1.2rem]
'.svgtofont-desired.\\!mr-4px.\\!text-\\[16px\\]', // svgtofont-desired !mr-4px !text-[16px]
'.icon-end-time-free.icon-unpaid-ltd', // icon-end-time-free icon-unpaid-ltd
'.el-card.is-always-shadow.is-always-shadow.\\!border-\\[\\#efefef\\]', // el-card is-always-shadow is-always-shadow !border-[#efefef]
'.icon-end-time.icon-unpaid-ltd' // icon-end-time icon-unpaid-ltd
];
// 移除指定 class 的元素
const removeElementsByClass = () => {
selectorsToRemove.forEach(selector => {
document.querySelectorAll(selector).forEach(el => el.remove());
});
};
// 替换指定 span 的文字内容
const replaceSpanText = () => {
const spanSelector = 'span.mr-1rem.ml-\\[-1\\.5rem\\]';
document.querySelectorAll(spanSelector).forEach(span => {
span.textContent = '精简版';
});
};
// 删除 span/button 包含 指定字符 的 span 元素
const removeSpansWithText = () => {
const spans = document.querySelectorAll('span');
spans.forEach(span => {
if (span.textContent.trim() == '需求反馈') {
span.remove();
}
});
const buttons = document.querySelectorAll('button');
buttons.forEach(span => {
if (span.textContent.trim() == '立即体验') {
span.remove();
}
});
};
// 删除指定class 包含置顶字符的元素
const removeClassWithText =()=>{
const parents = document.querySelectorAll('.header-child-tab');
parents.forEach(span => {
if (
span.textContent.trim() == '安全检测' ||
span.textContent.trim() == '违规词检测' ||
span.textContent.trim() == 'PHP网站安全' ||
span.textContent.trim() == '入侵防御' ||
span.textContent.trim() == '系统加固' ||
span.textContent.trim() == '扫描感知' ||
span.textContent.trim() == '日志审计' ||
span.textContent.trim() == 'SSH登录日志'
) {
span.remove();
}
});
const classparents = document.querySelectorAll('.el-collapse-item');
classparents.forEach(span => {
if (
span.textContent.trim().includes('top5')
) {
span.remove();
}
});
}
// 删除包含特定子元素的 el-col 元素
const removeParentIfChildExists = () => {
// 获取所有 el-col.el-col-6.wrapper-item 元素
const parents = document.querySelectorAll('.el-col.el-col-6.wrapper-item');
parents.forEach(parent => {
// 检查子元素是否包含指定的 class
const child = parent.querySelector('.absolute.-left-1\\.5.-top-1');
if (child) {
parent.remove(); // 移除父元素
}
});
};
// 综合执行函数
const removeElements = () => {
removeElementsByClass();
replaceSpanText();
removeSpansWithText();
removeParentIfChildExists();
removeClassWithText();
};
// 等待dom加载完毕后执行综合函数
let timeoutId;
const debouncedRemove = () => {
clearTimeout(timeoutId);
timeoutId = setTimeout(removeElements, 200);
};
let runCount = 0;
const maxRuns = 5;
const observer = new MutationObserver((mutations, obs) => {
if (runCount >= maxRuns) {
obs.disconnect();
return;
}
obs.disconnect();
debouncedRemove();
runCount++;
obs.observe(document.body, { childList: true, subtree: true });
});
observer.observe(document.body, { childList: true, subtree: true });
// 点击一次执行一次综合函数
let clickTimeout;
document.addEventListener('click', () => {
clearTimeout(clickTimeout);
clickTimeout = setTimeout(removeElements, 200);
});
// 初始执行(延迟 1 秒,等待 DOM 加载)
setTimeout(() => {
removeElements();
}, 1000);
})();
]]>下面是一个完整教程 ,帮助你快速搭建一个基础的 Samba 服务,并允许其他用户访问你的共享目录。
sudo apt update
sudo apt install samba -y
安装完成后,Samba 会自动启动。
Samba 的主配置文件位于:
/etc/samba/smb.conf
建议先做一个备份:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
你可以选择共享一个现有目录,比如 /home/dellevin/shared
。
mkdir -p /home/dellevin/shared
sudo nano /etc/samba/smb.conf
在文件末尾添加如下内容(以共享 shared
目录为例):
[Shared]
comment = Shared Folder
path = /home/dellevin/shared
browseable = yes
read only = no
writable = yes
valid users = dellevin
[Shared]
:共享名称(客户端看到的名字)path
:要共享的目录路径read only = no
和 writable = yes
表示允许写入valid users
:允许访问该共享的用户你需要为允许访问的用户设置 Samba 密码(即使该用户已存在 Linux 系统中):
sudo smbpasswd -a dellevin
系统会提示你输入并确认 Samba 密码。
⚠️ 注意:这个密码可以和系统密码不同。
sudo systemctl restart smbd
sudo systemctl enable smbd
systemctl status smbd
确保服务状态是 active (running)
。
打开“此电脑”或资源管理器,在地址栏输入:
\\你的Ubuntu服务器IP地址
例如:
\\192.168.1.100
然后输入用户名 dellevin
和你在 smbpasswd
中设置的密码即可访问。
打开文件管理器(如 Nautilus),按下 Ctrl + L
输入:
smb://192.168.1.100
或者使用命令行挂载:
sudo mount -t cifs //192.168.1.100/Shared /mnt/shared -o user=dellevin
如果你启用了防火墙 UFW,需要开放 Samba 所需端口:
sudo ufw allow 'Samba'
操作 | 命令 |
---|---|
安装 Samba | sudo apt install samba |
配置文件位置 | /etc/samba/smb.conf |
添加共享目录 | 在配置文件中添加[ShareName] 块 |
设置 Samba 用户密码 | sudo smbpasswd -a username |
重启 Samba | sudo systemctl restart smbd |
开机自启 | sudo systemctl enable smbd |
查看服务状态 | systemctl status smbd |
客户端访问地址 | \\IP地址 或smb://IP地址 |
有的人使用的vmware虚拟机,在开机时候按键被屏蔽,咋都不管用,网上找找boot.efi启动,也找不到。这里我们可以挂载你安装的iso镜像然后在开机的时候选择“打开电源时进入固件”,然后在里面找到你挂载的光盘也就是带有“cdrm drivcer”这个。在进入安装模式之后找到终端。
如果您使用的是黑苹果或者白苹果,可以选择 重启按住Command+R 进入,如果是m系列芯片,长按关机键,进入硬盘选择界面进入。
进入系统Recovery模式,然后点击菜单栏,“实用工具 >> 终端”。打开终端执行如下命令:
csrutil disable
csrutil authenticated-root disable
然后手动输入reboot
重启
重启完毕后,可以用status查看是否为disabled,如果都是那就说明是关闭了
csrutil status
csrutil authenticated-root status
使用diskutil list
可以找到自己硬盘的所在分区
创建挂载目录 mkdir ~/mount
挂载硬盘
sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount
进入挂载目录
cd ~/mount/System/Applications
删除所需要的软件
sudo rm -rf 你的软件名称
重建系统快照
sudo bless --folder /Users/levin/mount/System/Library/CoreServices -bootefi --create-snapshot
挂载硬盘
sudo mount -o nobrowse -t apfs /dev/disk3s1 ~/mount
进入挂载目录
cd mount/System/Applications
删除所需要的软件
sudo rm -rf 你的软件名称
重建系统快照(这里和虚拟机的操作有一点点区别使用的是--setBoot
)
sudo bless --mount "/Users/mac/mount/System/Library/CoreServices" --setBoot --create-snapshot
参考文件:
如何删除Mac OS Monterey自带(预装)软件?:https://blog.csdn.net/yzh0911/article/details/127930513
关于MacOS升级到Big Sur之后根目录无法挂载问题的解决方案:
https://juejin.cn/post/6895635776642482183
VMware16Pro中安装的MacOS11.13禁用系统完整性保护(rootless):
]]>CDN 就是内容分发网络的意思,其英文全称为 Content Delivery Network。简单地说,CDN 可以提前把数据存在离用户最近的数据节点,从而避免长途跋涉经过长途骨干网,最终达到减少骨干网负担、提高访问速度的目的。其实很好理解,就是你访问网站的时候数据如果经过的那个cdn,就会有个缓存,如果你再次访问的时候,就会读取那个cdn的缓存,就不用再跑很远去找你的服务器了。
好了,闲话不多说,现在开始实操。
一台国外服务器10.0.0.1 绑定域名 www.ittoolman.com
一台国内服务器10.0.0.2
需要在所有CDN服务器节点安装Nginx。也就是链接10.0.0.2,给这台服务器安装nginx,这里我是用的是xiaoz的一键Nginx安装包。如果想自己用的话可以自己设置nginx。
wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh
chmod +x nginx.sh && ./nginx.sh
反向代在这里你把它理解成CDN节点就行了
在10.0.0.2上编辑hosts,这样做的目的就是告知服务器从哪里去获取网站数据,也就是回源地址,需要在CDN上做如下修改
vi /etc/hosts
10.0.0.1 www.ittoolman.com
配置一下各种目录
#创建缓存目录
mkdir -p /data/wwwroot/caches/www.ittoolman.com
#设置缓存目录权限
chown -R www:www /data/wwwroot/caches/www.ittoolman.com
#如果网站是https创建证书路径
mkdir -p /data/wwwssl/www.ittoolman.com
#创建配置文件
vi /usr/local/nginx/conf/vhost/ittoolman.com.conf
在ittoolman.com.conf
中添加下面的内容,缓存目录/缓存时间请根据实际情况调整,详细参数和含义请自行百度。
proxy_cache_path /data/wwwroot/caches/www.ittoolman.com levels=1:2 keys_zone=ittoolman:50m inactive=30m max_size=50m;
# HTTP 请求重定向到 HTTPS(可选)
server {
listen 80;
server_name www.ittoolman.com;
return 301 https://$host$request_uri;
}
# HTTPS 配置
server {
listen 443 ssl;
server_name www.ittoolman.com;
# 设置 SSL 证书和私钥路径
ssl_certificate /data/wwwssl/www.ittoolman.com/fullchain.pem;
ssl_certificate_key /data/wwwssl/www.ittoolman.com/privkey.pem;
# 优化ssl配置
ssl_session_timeout 1d;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
access_log /data/wwwlogs/www.ittoolman.com_nginx.log combined;
# 自定义 Server 头
server_tokens off;
add_header Server ittoolmanCDN;
# 启用缓存
location / {
proxy_ssl_verify off;
proxy_pass https://www.ittoolman.com;
proxy_set_header Accept-Encoding "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache ittoolman;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
proxy_redirect off;
}
}
nginx整体配置为
user www www;
worker_processes auto;
worker_rlimit_nofile 50000;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 51200;
#worker_connections 1024;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 1024m;
client_body_buffer_size 10m;
sendfile on;
tcp_nopush on;
keepalive_timeout 120;
server_tokens off;
tcp_nodelay on;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
#开启Brotli压缩
brotli on;
brotli_comp_level 6;
#最小长度
brotli_min_length 512;
brotli_types text/plain text/javascript text/css text/xml text/x-component application/javascript application/x-javascript application/xml application/json application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype;
brotli_static always;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject
image/x-icon;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
#limit connection
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include cdn/*.conf;
include vhost/*.conf;
}
所有配置写完之后,需要检测文件是否写的正确,以及重载nginx配置让配置生效。
# 检查文件是否正确,如果是正确的,会有个successful提示
/usr/local/nginx/sbin/nginx -t
# 重载nginx配置
/usr/local/nginx/sbin/nginx -s reload
在腾讯云/阿里云/cloudflare等dns服务商上面添加a解析
主机记录:www
记录类型:A
记录值:10.0.0.2
做完之后,等待一段时间让其生效,再次访问网站查看
server有这个,表示已经弄好了。
]]>但是又遇到了一个问题,由于我本人懒得备案,导致又拍云,腾讯云的cdn解析都没办法使用,毕竟都需要备案才能使用(可恶啊)。看了几篇帖子之后,他们说阿里云国外版可以cdn国内加速,我申请了一下,但是需要手机号。。。好的,还是pass了。最后还是选择了免费的cloudflare的加速。
先是添加网站,然后再域名提供商填写上cloudflare的ns解析值。等一会就验证过了。好了,这样就配置好了。。。但是,毕竟是国外的加速,用在国内cdn加速还是一坨屎,完全随缘了属于是。。。。
最后贴一张自己写的主页www.ittoolman.com