first commit
@@ -0,0 +1,92 @@
|
||||
当机械硬盘的 **05重新分配扇区计数([Reallocated Sectors Count](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=Reallocated+Sectors+Count&zhida_source=entity))** 出现异常时,说明硬盘已经开始用备用扇区替换坏扇区,这是硬盘故障的早期预警。以下是详细的应对方案:
|
||||
|
||||
* * *
|
||||
|
||||
### **一、紧急处理措施(数据保全优先)**
|
||||
|
||||
1. **立即备份重要数据**
|
||||
|
||||
|
||||
* 使用 `[Robocopy](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=Robocopy&zhida_source=entity)` 或 `rsync` 进行全盘镜像(避免反复读取加重损坏):
|
||||
bash
|
||||
Copy
|
||||
robocopy D:\\ E:\\Backup /MIR /R:1 /W:1 /ZB /MT:16
|
||||
* 若硬盘已严重卡顿,改用 **[ddrescue](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=ddrescue&zhida_source=entity)**(Linux环境)跳过坏道:
|
||||
bash
|
||||
Copy
|
||||
ddrescue -d /dev/sdb /dev/sdc rescue.log
|
||||
|
||||
1. **停用该硬盘**
|
||||
|
||||
|
||||
* 断电后作为只读盘挂载到其他设备操作
|
||||
* 避免运行CHKDSK(可能加速坏道扩散)
|
||||
|
||||
* * *
|
||||
|
||||
### **二、诊断与修复(针对不同严重程度)**
|
||||
|
||||
### **情况1:05值<100(轻度异常)**
|
||||
|
||||
* **安全擦除重映射**:
|
||||
用厂商工具(如[WD Data Lifeguard](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=WD+Data+Lifeguard&zhida_source=entity)/[希捷SeaTools](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=%E5%B8%8C%E6%8D%B7SeaTools&zhida_source=entity))执行 **Full Erase**,可能恢复部分备用扇区
|
||||
* **屏蔽坏道**:
|
||||
bash
|
||||
Copy
|
||||
使用[HDD Regenerator](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=HDD+Regenerator&zhida_source=entity)的"Reverse Scan"模式标记坏扇区
|
||||
|
||||
### **情况2:05值持续增长(恶化中)**
|
||||
|
||||
* **强制禁用坏道**:
|
||||
|
||||
|
||||
1. 用 `[MHDD](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=MHDD&zhida_source=entity)` 或 `[Victoria](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=Victoria&zhida_source=entity)` 扫描全盘
|
||||
2. 对 `>500ms` 响应的扇区手动标记为坏道
|
||||
3. 执行 `Erase WAITs` 擦除延迟扇区
|
||||
|
||||
* **修改LBA映射表**(高级操作):
|
||||
通过 `smartctl --smart-attributes` 查看待映射扇区,用 `hdparm --repair-sector` 尝试修复
|
||||
|
||||
### **情况3:05值>1000或C5/C6异常(严重故障)**
|
||||
|
||||
* **立即更换硬盘**:
|
||||
此时备用扇区即将耗尽,随时可能完全失效
|
||||
* **专业恢复建议**:
|
||||
若含关键数据,需找51Recovery等机构做磁头移植(费用约800-3000元)
|
||||
|
||||
* * *
|
||||
|
||||
### **三、监控与预防**
|
||||
|
||||
1. **SMART长期监控**
|
||||
|
||||
|
||||
* 配置 `smartd` 每日自动检测(Linux):
|
||||
conf
|
||||
Copy
|
||||
DEVICESCAN -a -I 194 -W 2,40,45 -m admin@example.com
|
||||
* Windows用户可用 `[CrystalDiskInfo](https://zhida.zhihu.com/search?content_id=721616182&content_type=Answer&match_order=1&q=CrystalDiskInfo&zhida_source=entity)` 设置警报
|
||||
|
||||
1. **优化使用环境**
|
||||
|
||||
|
||||
* 保持硬盘温度<45℃(高温加速氧化)
|
||||
* 使用UPS防电压波动
|
||||
* 每月执行 `短自检`(`smartctl -t short /dev/sdX`)
|
||||
|
||||
* * *
|
||||
|
||||
### **四、技术原理说明**
|
||||
|
||||
* **05值的本质**:
|
||||
硬盘发现坏扇区时,会将其数据迁移到保留的备用扇区(G-list),并更新SMART的05计数
|
||||
* **临界阈值**:
|
||||
当备用扇区用完(05值接近厂商预设阈值),硬盘将进入只读模式或彻底失效
|
||||
|
||||
* * *
|
||||
|
||||
**最终建议**:
|
||||
|
||||
* 05值>50的硬盘 **不应再存储重要数据**
|
||||
* 企业级硬盘(如希捷银河系列)允许更高05值,但消费级盘>10就需警惕
|
||||
* 数据无价,优先备份再尝试修复!
|
||||
@@ -0,0 +1,106 @@
|
||||
Cloudflare是一家全球知名的互联网基础设施公司,**最核心的产品是一套集CDN加速、网络安全和智能DNS于一体的服务平台**。它通过分布在全球的服务器网络,将网站的静态内容缓存到离访客最近的节点,让用户无论身处何地都能以更低延迟、更快速度访问网站,有效改善海外访问体验和移动端加载速度。
|
||||
|
||||
同时,Cloudflare具备强大的[DDoS攻击防护](https://zhida.zhihu.com/search?content_id=260854812&content_type=Article&match_order=1&q=DDoS%E6%94%BB%E5%87%BB%E9%98%B2%E6%8A%A4&zhida_source=entity)能力和Web应用防火墙,可以自动识别并拦截恶意流量,极大降低因攻击导致的网站宕机或数据泄漏风险,保障网站安全稳定运行。
|
||||
|
||||
除了速度和安全优势,**Cloudflare还提供DNS解析、高级缓存管理、免费[SSL证书](https://zhida.zhihu.com/search?content_id=260854812&content_type=Article&match_order=1&q=SSL%E8%AF%81%E4%B9%A6&zhida_source=entity)、Bot管理等功能**,帮助网站更容易通过Google等搜索引擎的安全与性能评估,从而提升SEO表现。
|
||||
|
||||
最重要的是,**Cloudflare的入门级服务对大多数中小网站完全免费,业内戏称“大善人”、“赛博活佛”,可以说Cloudflare浑身是宝啊。** 开通和配置过程也非常简单——**只需在域名注册商后台将域名DNS服务器切换到Cloudflare,然后在Cloudflare面板中设置解析记录指向你的主机IP即可。**
|
||||
|
||||
**Cloudflare适合谁使用?**对于面向海外市场的外贸站点,无论是ToB还是ToC站点,Cloudflare都是非常推荐的 CDN 解决方案。
|
||||
|
||||
本[Cloudflare教程](https://link.zhihu.com/?target=https%3A//ecomools.com/cloudflare-cdn/)将带你们使用Cloudflare的域名解析功能以及接入免费CDN,现在就让我们开始吧!
|
||||
|
||||
注意:在教程开始之前你得先拥有一个域名。
|
||||
|
||||
注册Cloudflare账号并添加站点
|
||||
-------------------
|
||||
|
||||
访问[Cloudflare网站](https://link.zhihu.com/?target=https%3A//dash.cloudflare.com/sign-up),注册一个Cloudflare账号。如果你已经有账号,那么直接登录即可。
|
||||
|
||||
登录到后台,在**账户主页**中,我们点击**“添加域”**来添加我们的站点:
|
||||
|
||||

|
||||
|
||||
然后输入我们的根域名,选择**“快速扫描DNS记录”**,让Cloudflare自动扫描我们的DNS记录即可。
|
||||
|
||||

|
||||
|
||||
点击**“继续”**后选择我们的计划,这里选择免费的计划即可。
|
||||
|
||||

|
||||
|
||||
在Cloudflare中添加DNS记录
|
||||
-------------------
|
||||
|
||||
我们在上一步添加站点中选择了“快速扫描DNS记录”,Cloudflare会帮我们自动扫描域名现有的DNS记录。因为我们的域名刚注册时,默认 DNS 记录一般都是指向域名注册商的服务器,这些默认记录可以全部删除。
|
||||
|
||||
**删掉之后我们再单独添加两条DNS记录:@和www**
|
||||
|
||||
* @ 代表主域名,比如 @ 就表示 ecomools(dot)com。**这条记录添加 A 记录,指向我们的服务器公网 IP**。
|
||||
* www 代表带有 www. 前缀的域名(如 www(dot)ecomools(dot)com)。**这条记录添加 CNAME 记录,指向主域名**(也就是 ecomools(dot)com)。
|
||||
|
||||
**这样设置后,无论用户访问 ecomools**(dot)**com 还是 www**(dot)**ecomools**(dot)**com,都能正确跳转到我的服务器和网站内容**。像下图这样:
|
||||
|
||||

|
||||
|
||||
我们可以**看到这两条A记录旁边都有一朵橙色的云,写着“已代理”。表示已经开启了CDN,Cloudflare会帮忙我们加速和保护流量。**
|
||||
|
||||
添加完这两条记录以后,点击**“继续前往激活”**进入到以下界面。这是**Cloudflare给我们提供的名称服务器(也称域名服务器)**。我们后续需要在域名注册商中将域名服务器改为Cloudflare的。
|
||||
|
||||

|
||||
|
||||
将域名DNS服务器切换到Cloudflare
|
||||
----------------------
|
||||
|
||||
**接下来,我们需要在域名提供商中将域名DNS服务器切换到Cloudflare。** 我们这里以[NameCheap](https://zhida.zhihu.com/search?content_id=260854812&content_type=Article&match_order=1&q=NameCheap&zhida_source=entity)为示例:
|
||||
|
||||
找到我们的域名,点击“Manage”按钮。
|
||||
|
||||

|
||||
|
||||
然后找到“NAMESERVERS”选项卡,打开下拉框,选择“Custom DNS”。
|
||||
|
||||

|
||||
|
||||
然后设置为Cloudflare给我们提供的域名服务器。
|
||||
|
||||

|
||||
|
||||
点击“√”保存后,通常等待十分钟左右,DNS 解析就会自动生效。
|
||||
|
||||
好,这样就完事了,我们的网站就已经成功接入Cloudflare了。
|
||||
|
||||
**我们不仅成功接入了 Cloudflare,获得了额外的网站安全和 CDN 加速保护**。
|
||||
|
||||
但是可能你立马去访问域名的话还是没那么快能够看到我们的网站。因为我们做的DNS设置修改,这个变化不是立刻全世界都能看到。互联网的每个角落都有无数个DNS服务器,它们会“缓存”之前的解析结果。
|
||||
|
||||
这些缓存需要一段时间才会刷新,刷新完后,别人访问你的网站时才会用到最新的DNS设置。通常是10分钟左右就能够看到更新后的结果,绝大多数情况下在2-8小时内就能全球生效。我们可以通过[该网站](https://link.zhihu.com/?target=https%3A//www.whatsmydns.net/%23NS/)查询我们的DNS是否已经更新。
|
||||
|
||||
以后如果更换主机,那么我们只需要在Cloudflare里面修改即可,不需要去到域名注册商中去更改主机IP。**但是续费还是需要去域名注册商中去注册。**
|
||||
|
||||
使用Cloudflare CDN的潜在风险
|
||||
---------------------
|
||||
|
||||
### 1\. 对于中国大陆用户来说是“负优化”
|
||||
|
||||
Cloudflare 并没有在中国大陆部署边缘节点,其节点多数位于香港、日本、新加坡、美国等。如果你的服务器在海外,你接入了Cloudflare,中国大陆用户访问网站时绕路严重,速度反而会更慢;甚至某些运营商(如移动、电信)可能会与 Cloudflare 的网络连接不稳定,出现丢包或加载失败。**所以Cloudflare比较适合出口外贸站,但不适合面向大陆用户的站点。**
|
||||
|
||||
### 2\. 可能会出现“重定向次过多”的情况
|
||||
|
||||
如果网站和Cloudflare的配置不当,那么就有可能会出现重定向次过多 “ERR\_TOO\_MANY\_REDIRECTS” 的情况。
|
||||
|
||||

|
||||
|
||||
这是由于 Cloudflare 默认 SSL 模式为“灵活(Flexible)”,而你的网站本身已经启用了 SSL(如 Let’s Encrypt 证书),并设置了 HTTP 自动跳转到 HTTPS。此时会发生以下逻辑循环:
|
||||
|
||||
* 访客访问 http:// yourdomain(dot)com;
|
||||
* Cloudflare 与用户之间使用 HTTPS(表现看似加密);
|
||||
* Cloudflare 与源站之间使用 HTTP(因 Flexible 模式);
|
||||
* 但你的源站又强制把 HTTP 跳转到 HTTPS;
|
||||
* Cloudflare 收到 HTTPS 请求后仍以 HTTP 访问;
|
||||
* 又被跳转到 HTTPS,形成死循环。
|
||||
* 最终导致浏览器报错:重定向次数过多(ERR\_TOO\_MANY\_REDIRECTS)。
|
||||
|
||||
解决方法也很简单:**只需将 Cloudflare 中的 SSL 模式从【灵活(Flexible)】改为【完全(Full)】或【完全(严格)(Full Strict)】即可。**
|
||||
|
||||
原文首发于[Ecomools](https://link.zhihu.com/?target=https%3A//ecomools.com/cloudflare-cdn/)
|
||||
@@ -0,0 +1,45 @@
|
||||
域名解析是网站运行的重要环节,当用户在浏览器中输入域名,首先需要域名解析环节参与将域名转换成网站的服务器IP,才能完成对网站的访问,由此可见域名解析在网站访问中重要作用。但是很多人对域名解析的相关事项,尤其是域名解析的生效时间并不了解。本文国科云将简单探讨下域名解析的生效时间以及相关影响因素,为网站管理人员提供一些建议和参考。
|
||||
|
||||
什么是域名解析生效时间?
|
||||
------------
|
||||
|
||||
需要注意的是,域名解析记录设置成功后,不一定会即时生效,可能需要等待一段时间。域名解析生效时间就是指从用户添加、修改或者删除解析记录开始到该解析记录在全球范围内生效所需的时间。这个时间并不是固定不变的,而是受[TTL值](https://zhida.zhihu.com/search?content_id=244680716&content_type=Article&match_order=1&q=TTL%E5%80%BC&zhida_source=entity)大小、DNS缓存、DNS服务器的处理速度等多种因素的影响。另外,不同情况下域名解析生效时间也有所不同,下面我针对几种常见情况做下简单介绍。
|
||||
|
||||
域名解析多久生效?
|
||||
---------
|
||||
|
||||
**1.新添加解析记录**
|
||||
|
||||
如果是首次添加解析记录的情况,由于之前全球各地的DNS服务器中并没有相关的DNS缓存,所以当用户发起解析请求时,DNS服务器就会直接请求权威解析服务器,获取最新添加的解析记录,因此在这种情况下域名解析是实时生效的。
|
||||
|
||||
**2.修改解析记录**
|
||||
|
||||
和首次添加解析记录不同,修改解析记录并不会实时生效。因为在此之前各地的DNS服务器中已经存储了原解析记录的缓存,修改解析记录后,用户发起解析请求时,DNS服务器仍然会将缓存中的原记录告知客户端,而不会去请求[权威服务器](https://zhida.zhihu.com/search?content_id=244680716&content_type=Article&match_order=1&q=%E6%9D%83%E5%A8%81%E6%9C%8D%E5%8A%A1%E5%99%A8&zhida_source=entity)获取最新的结果。只有当各地的DNS缓存失效后,DNS服务器才会去请求最新的解析记录,这个时间与原解析记录的TTL值相关。如果TTL值设置的是10分钟,那么新的解析记录就需要10分钟才能全球生效.
|
||||
|
||||
**3.删除解析记录**
|
||||
|
||||
和修改解析记录一样,删除解析记录也不会立即生效。解析记录删除后,各地的DNS服务器中仍然缓存有原解析记录,当用户发起访问时,DNS服务器会将缓存中的原记录告知客户端。同样需要等待各地的DNS缓存失效后,删除解析记录才会生效,时间与原解析记录的TTL值相关。
|
||||
|
||||
**4.修改DNS服务器。**
|
||||
|
||||
修改DNS服务器和修改解析记录一样,也不会实时生效。因为各地的DNS服务器中缓存有权威服务器的配置缓存,当用户发起解析请求时,DNS服务器仍然会请求原权威服务器。当DNS服务器中的缓存失效后,DNS服务器才会通过全球的迭代查询,去请求最新的权威服务器。由于各地DNS服务器的刷新时间不一致,且刷新时间较长,可能就会导致有的DNS生效,有的DNS未生效情况的发生,全球DNS服务器全部生效需要等待24—48小时(.com 等国际域名需要 48 小时,.cn 等国内域名需要 24 小时)。
|
||||
|
||||
影响域名解析生效时间的因素有哪些?
|
||||
-----------------
|
||||
|
||||
DNS缓存:当用户发起解析请求时,浏览器首先会从本地缓存中读取数据,而不是每次都请求权威解析服务器获取最新的记录,这就可能导致修改解析后,DNS服务器无法同步最新的结果。
|
||||
|
||||
TTL值:TTL,全称Time to Live,是解析记录在DNS服务器中的生存时间。TTL值越大,解析记录在DNS服务器中的缓存时间越长,反之越短。
|
||||
|
||||
权威服务器的性能:权威DNS服务器是域名授权解析的DNS服务器,其性能和处理速度也是影响域名解析生效时间的重要因素。
|
||||
|
||||
加快域名解析生效的建议
|
||||
-----------
|
||||
|
||||
清除本地缓存:对客户端而言,通过清除本地的DNS缓存可以强制DNS服务器重新请求权威服务器,而获取最新的解析记录,从而缩短解析生效的时间。
|
||||
|
||||
设置较小的TTL值:对网站来说,设置较小的TTL值缩短解析记录在DNS服务器中的缓存时间,可以让DNS服务器以更短的时间间隔去请求新的解析记录,从而加快域名解析的生效速度。
|
||||
|
||||
选择高性能权威服务器:选择处理速度快且稳定的权威DNS服务器,可以提供更安全、高效的权威解析服务,从而确保解析的及时性和准确性。
|
||||
|
||||
总之,域名解析生效时间是一个受多种因素影响的复杂过程。通过了解这些因素并采取相应的措施,我们可以尽可能地缩短域名解析的生效时间,提高网站的访问速度和用户体验。
|
||||
@@ -0,0 +1,101 @@
|
||||
平时在Ubuntu系统上安装软件常用命令行在线安装或者下载deb格式文件通过命令安装:
|
||||
|
||||
```text
|
||||
sudo dpkg -i *.deb(安装程序文件名)
|
||||
```
|
||||
|
||||
昨天想要尝试一下Krita软件,于是到官网([https://krita.org/zh-cn/](https://link.zhihu.com/?target=https%3A//krita.org/zh-cn/))查找安装文件。
|
||||
|
||||

|
||||
|
||||
可是官网提供的Linux格式安装文件只有Appimage格式,没有deb格式。
|
||||
|
||||

|
||||
|
||||
下载之后直接运行会提示“没有安装处理Appimage文件的应用程序。是否搜索可大打开此文件的程序?”
|
||||
|
||||
有困难找[DeepSeek](https://zhida.zhihu.com/search?content_id=254883403&content_type=Article&match_order=1&q=DeepSeek&zhida_source=entity),得到一篇比较靠谱的指导,于是按图索骥操作:
|
||||
|
||||
一、安装依赖库
|
||||
|
||||
AppImage 运行需依赖 FUSE 库,未安装时可能报错 dlopen(): error loading libfuse.so.2。
|
||||
执行以下命令安装:
|
||||
|
||||
```text
|
||||
sudo apt update
|
||||
sudo apt install libfuse2
|
||||
```
|
||||
|
||||
二、赋予 AppImage 文件可执行权限
|
||||
|
||||
进入 AppImage 文件所在目录:
|
||||
|
||||
```text
|
||||
cd /path/to/your/appimage
|
||||
```
|
||||
|
||||
修改权限为可执行:
|
||||
|
||||
```text
|
||||
chmod +x example.AppImage
|
||||
(example.AppImage 需替换为实际文件名)
|
||||
```
|
||||
|
||||
三、运行 AppImage
|
||||
|
||||
终端运行:
|
||||
|
||||

|
||||
|
||||
或在图形界面运行:
|
||||
双击文件图标,勾选“允许运行”后启动 。
|
||||
|
||||

|
||||
|
||||
程序成功运行,于是以下步骤本人未实际操作,记录下来,仅供参考。
|
||||
|
||||
四、可选操作
|
||||
|
||||
集成到应用程序菜单
|
||||
安装 appimagelauncher 工具,支持自动管理 AppImage 文件:
|
||||
|
||||
```text
|
||||
sudo add-apt-repository ppa:appimagelauncher-team/stable
|
||||
sudo apt update
|
||||
sudo apt install appimagelauncher
|
||||
```
|
||||
|
||||
安装后双击 AppImage 文件时,可选择“集成到系统菜单” 。
|
||||
|
||||
手动创建桌面快捷方式
|
||||
|
||||
创建 .desktop 文件:
|
||||
|
||||
nano ~/.local/share/applications/example.desktop
|
||||
|
||||
输入以下内容(替换路径和名称):
|
||||
|
||||
```text
|
||||
[Desktop Entry]
|
||||
Name=Example
|
||||
Exec=/path/to/example.AppImage
|
||||
Icon=/path/to/icon.png
|
||||
Type=Application
|
||||
Categories=Utility;
|
||||
Terminal=false
|
||||
```
|
||||
|
||||
保存后刷新菜单:
|
||||
|
||||
```text
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
``` :ml-citation{ref="7,8" data="citationList"}
|
||||
```
|
||||
|
||||
五、常见问题
|
||||
|
||||
安装后无法启动:检查 FUSE 库是否安装成功,或重新下载完整 AppImage 文件。
|
||||
|
||||
触控权限限制:若双击无反应,尝试通过终端运行并检查权限设置。
|
||||
|
||||
存储占用:AppImage 文件可直接删除以卸载软件,无需额外操作。
|
||||
@@ -0,0 +1,199 @@
|
||||
[数据恢复软件是现代办公和日常生活中不可或缺的工具,无论是误删重要文档、格式化U盘,还是系统崩溃导致数据丢失,一款高效的数据恢复软件都能帮你挽回损失。2025年数据恢复软件市场呈现爆发式增长,各类工具层出不穷,但质量参差不齐。作为一名经历过多次数据危机的用户,我深知选择一款可靠数据恢复软件的重要性。今天,我将横向评测15款主流数据恢复软件,从免费到付费,从新手友好到专业级工具,为你揭晓哪款最值得入手。数据恢复的核心在于成功率和易用性,而本次评测的重点—](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)—**转转大师数据恢复软件**,[在实测中以95%的恢复成功率和极简操作脱颖而出,成为2025年数据恢复软件中的佼佼者。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||

|
||||
|
||||
数据恢复软件
|
||||
|
||||
### [免费篇:谁是性价比之王?](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
1. **[转转大师数据恢复(2025最新版)](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**
|
||||
**官网**:[https://www.huifuzhinan.com](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**[2025版新特性:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[AI智能扫描算法、碎片文件重组技术、实时预览增强](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**[个人体验:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[作为本次评测的惊喜发现,转转大师彻底改变了我对免费数据恢复软件的认知。上周我误格式化了存有项目资料的64G U盘,抱着试试看的心态下载了转转大师,选择"格式化恢复"模式后,软件仅用8分钟就完成深度扫描,预览界面清晰展示了所有Word文档和PSD文件。最终成功恢复98%的数据,包括3个被覆盖的表格文件——这是其他免费工具无法做到的。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||

|
||||
|
||||
数据恢复软件
|
||||
|
||||
**核心优势**:
|
||||
•**[全场景覆盖:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[支持误删、格式化、分区丢失、病毒攻击等10种场景](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
• **[设备兼容性:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[硬盘/U盘/SD卡/相机卡全支持,甚至能恢复行车记录仪视频](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
• **[操作门槛:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[三步式向导(选择场景→扫描→恢复),小白也能5分钟上手](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
• **[技术亮点:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[2025版新增的"扇区级重组"技术,对碎片化文件恢复率提升40%](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**缺点**:[不支持恢复MAC系统丢失的数据](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**2.Recuva**
|
||||
**官网**:[https://www.ccleaner.com/recuva](https://link.zhihu.com/?target=https%3A//www.ccleaner.com/recuva)
|
||||
|
||||

|
||||
|
||||
recuva
|
||||
|
||||
**价格**:[免费版/专业版190.44元](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**个人体验**:作为老牌**数据恢复软件**,[Recuva的轻量特性仍值得肯定。测试中,它对2天内删除的JPG图片恢复成功率达85%,但面对超过7天的格式化数据,深度扫描耗时长达45分钟,且20%的文件出现乱码。与转转大师相比,其界面停留在Windows XP风格,预览功能仅支持图片缩略图,文档无法查看内容。适用场景:学生党临时救急,不建议恢复重要数据](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**3.DiskGenius免费版**
|
||||
**官网**:[https://www.diskgenius.cn](https://link.zhihu.com/?target=https%3A//www.diskgenius.cn/)
|
||||
|
||||

|
||||
|
||||
DiskGenius
|
||||
|
||||
|
||||
**功能限制**:[单文件≤2GB,高级恢复需付费(专业版468元)](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**个人体验**:[这款工具更偏向分区管理,数据恢复功能隐藏较深。尝试恢复RAW格式U盘时,需手动勾选"深度扫描",对新手不够友好。但其独特的"分区表重建"功能对技术用户有用,可惜免费版恢复速度比转转大师慢30%。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**4.360数据恢复**
|
||||
|
||||

|
||||
|
||||
360数据恢复
|
||||
|
||||
**优缺点**:[完全免费但捆绑广告,扫描过程中频繁弹窗推广安全卫士。实测误删文档恢复率仅60%,且不支持大文件预览。不推荐用于重要数据恢复。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**5.PhotoRec**
|
||||
**官网**:[https://www.cgsecurity.org](https://link.zhihu.com/?target=https%3A//www.cgsecurity.org/)
|
||||
|
||||

|
||||
|
||||
PhotoRec
|
||||
|
||||
**特色**:[开源免费,专注多媒体恢复](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**个人体验**:[命令行操作让我望而却步,需对照教程输入指令。成功恢复相机SD卡中的CR2照片,但文件名全部丢失,需手动重命名。适合程序员或Linux用户,普通用户建议优先选择转转大师的图形化界面。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**6.Wise Data Recovery**
|
||||
**官网**:[https://www.wisecleaner.com](https://link.zhihu.com/?target=https%3A//www.wisecleaner.com/)
|
||||
|
||||

|
||||
|
||||
Wise Data Recovery
|
||||
|
||||
**亮点**:[1MB超小安装包,启动速度快](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**局限**:[免费版仅能恢复≤200MB数据,扫描结果无文件路径信息,如同大海捞针。对比转转大师的"按文件夹筛选"功能,效率差距明显。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**7.MiniTool Power Data Recovery免费版**
|
||||
**官网**:[https://www.minitool.com](https://link.zhihu.com/?target=https%3A//www.minitool.com/)
|
||||
|
||||

|
||||
|
||||
MiniTool Power Data Recovery
|
||||
|
||||
**限制**:[1GB恢复额度,深度扫描需付费升级(个人版89美元)](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**个人体验**:[界面设计现代,但扫描速度感人——500GB硬盘耗时1小时20分钟,而转转大师仅需25分钟。其"邮件恢复"功能独特,但对普通用户实用性有限。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**付费篇:专业工具值不值得买?**
|
||||
|
||||
**8.EaseUS Data Recovery Wizard**
|
||||
**官网**:[https://www.easeus.com.cn](https://link.zhihu.com/?target=https%3A//www.easeus.com.cn/)
|
||||
|
||||

|
||||
|
||||
EaseUS Data Recovery Wizard
|
||||
|
||||
**价格**:[专业版499元/年](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**个人体验**:[作为国际知名数据恢复软件,EaseUS的RAID恢复功能确实强大。但测试中发现,其对中文文件名支持不佳,15%的文档出现乱码。与转转大师相比,年度订阅制成本过高,个人用户不如选择99元终身授权的转转大师专业版。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**9.Stellar Data Recovery**
|
||||
**官网**:[https://www.stellarinfo.com](https://link.zhihu.com/?target=https%3A//www.stellarinfo.com/)
|
||||
|
||||

|
||||
|
||||
Stellar Data Recovery
|
||||
|
||||
**价格**:[标准版599元](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**亮点**:[支持虚拟机磁盘恢复](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**缺点**:[中文界面翻译生硬,恢复成功率与转转大师(95%)持平,但价格贵5倍。企业用户可考虑,个人用户性价比低。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**10.Disk Drill**
|
||||
**官网**:[https://www.cleverfiles.com](https://link.zhihu.com/?target=https%3A//www.cleverfiles.com/)
|
||||
|
||||

|
||||
|
||||
Disk Drill
|
||||
|
||||
**价格**:[专业版699元](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**特色**:[Mac兼容,数据保护功能](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**个人体验**:[在MacBook上测试时,其"恢复保险库"功能确实独特,但扫描500GB硬盘耗时1小时10分钟,比转转大师慢2倍。99元的转转大师Mac版完全能替代其基础功能。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**11.Recoverit**
|
||||
**官网**:[https://huifu.wondershare.cn](https://link.zhihu.com/?target=https%3A//huifu.wondershare.cn/)
|
||||
|
||||

|
||||
|
||||
Recoverit
|
||||
|
||||
**价格**:[终身版699元](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**优势**:[视频修复功能强大](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**对比**:[对MP4文件的修复成功率(82%)略高于转转大师(78%),但整体数据恢复成功率低10%,价格却贵6倍。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**12.R-Studio**
|
||||
**价格**:个人版599元
|
||||
|
||||

|
||||
|
||||
R-Studio
|
||||
|
||||
**适用场景**:[专业数据恢复,支持RAID重组](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**缺点**:[操作界面如同天书,需专业培训才能使用,不适合普通用户。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**13.EasyRecovery**
|
||||
**官网**:[https://www.ontrack.com](https://link.zhihu.com/?target=https%3A//www.ontrack.com/)
|
||||
|
||||

|
||||
|
||||
EasyRecovery
|
||||
|
||||
**价格**:[家庭版799元](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**[代理问题](https://zhida.zhihu.com/search?content_id=261151596&content_type=Article&match_order=1&q=%E4%BB%A3%E7%90%86%E9%97%AE%E9%A2%98&zhida_source=entity)**:[国内由苏杰马克丁代理,用户反馈售后响应慢,不如转转大师的7×16小时在线客服。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**14.FinalData**
|
||||
|
||||

|
||||
|
||||
FinalData
|
||||
|
||||
**价格**:[标准版699元](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
**市场份额**:[国内用户不足5%,恢复成功率88%,性价比低于转转大师。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**[15.Ontrack EasyRecovery](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**
|
||||
|
||||
**价格**:109美金
|
||||
|
||||
**评测结论**:[老牌软件但本地化差,恢复速度和成功率均不及转转大师。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
### 2025年数据恢复软件对比表
|
||||
|
||||
| 软件名称 | 价格 | 终身授权 | 恢复成功率 | 适合人群 | 官网链接 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 转转大师 | 39元 | ✅ | 99% | 个人/中小企业 | [https://www.huifuzhinan.com](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com) |
|
||||
| EaseUS | 499元/年 | ❌ | 92% | 企业级 | [https://www.easeus.com.cn](https://link.zhihu.com/?target=https%3A//www.easeus.com.cn) |
|
||||
| Stellar | 599元 | ✅ | 95% | 专业技术人员 | [https://www.stellarinfo.com](https://link.zhihu.com/?target=https%3A//www.stellarinfo.com) |
|
||||
| Disk Drill | 699元 | ✅ | 88% | Mac用户 | [https://www.cleverfiles.com](https://link.zhihu.com/?target=https%3A//www.cleverfiles.com) |
|
||||
| Recuva | 免费/190元 | ✅ | 85% | 临时救急 | [https://www.ccleaner.com/recuva](https://link.zhihu.com/?target=https%3A//www.ccleaner.com/recuva) |
|
||||
|
||||
### 不同场景恢复成功率对比(实测数据)
|
||||
|
||||
| 数据丢失场景 | 转转大师 | EaseUS | Stellar | Recuva | 360恢复 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 误删文档(7天内) | 98% | 95% | 96% | 85% | 60% |
|
||||
| U盘格式化 | 92% | 90% | 91% | 65% | 45% |
|
||||
| 分区丢失 | 85% | 88% | 86% | 不支持 | 不支持 |
|
||||
| 病毒加密文件 | 78% | 82% | 80% | 不支持 | 不支持 |
|
||||
| 相机卡RAW照片 | 94% | 92% | 93% | 80% | 75% |
|
||||
|
||||
### [为什么推荐转转大师数据恢复软件?](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
[经过200小时的实测对比,转转大师数据恢复软件凭借以下优势成为2025年个人用户首选:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**[1\. 超高性价比:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[99元终身授权,比国外软件便宜6-10倍](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**[2\. 本地化优势:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[全中文界面,7×16小时在线客服,解决问题更快](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**[3\. 技术创新:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[2025版AI智能扫描比传统软件快3倍,碎片重组技术领先同行](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**[4\. 全场景覆盖:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[从误删文件到硬盘坏道,家庭用户遇到的98%数据丢失问题都能解决](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
**[免费试用建议:](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[访问转转大师官网下载后,先扫描预览文件完整性,确认能恢复后再升级专业版——这比盲目购买国外软件更明智。数据恢复的核心是成功率和可靠性,而转转大师在这两方面都交出了令人满意的答卷。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
### [结语:数据安全的最后一道防线](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
|
||||
[选择](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[数据恢复软件](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[如同选择保险——平时看似无用,关键时刻却能挽回重大损失。2025年的今天,国产软件已经在技术上实现对国外工具的超越,转转大师就是最好的证明。无论是学生党、职场人还是中小企业,都值得将这款](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[数据恢复软件](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)**[纳入你的"数字急救包"。记住,数据恢复成功率与时间成反比,发现数据丢失后应立即停止写入操作,第一时间用转转大师扫描——这才是保护数据安全的最佳实践。](https://link.zhihu.com/?target=https%3A//www.huifuzhinan.com/zhihucq/)
|
||||
@@ -0,0 +1,46 @@
|
||||
首先 **SSH** 登录群晖,检测群晖当前用户主目录下是否有 .ssh 文件夹,如果没有使用下列命令创建:
|
||||
|
||||
2\. 使用 `vim ~/.ssh/[authorized_keys](https://zhida.zhihu.com/search?content_id=166258670&content_type=Article&match_order=1&q=authorized_keys&zhida_source=entity)` 将自己的 **SSH** 公钥粘贴进去,按 `ESC` 输入 `wq` 并回车保存。
|
||||
|
||||
3\. 如果没有公钥的话,需要在自己电脑上使用 `[ssh-keygen](https://zhida.zhihu.com/search?content_id=166258670&content_type=Article&match_order=1&q=ssh-keygen&zhida_source=entity) -t rsa -C "MyName"` 创建一个密钥,然后使用 `cat ~/.ssh/id_rsa.pub`获取公钥信息,粘贴到**群晖**的 `~/.ssh/authorized_keys` 文件中。
|
||||
|
||||
4\. 设置权限:
|
||||
|
||||
```bash
|
||||
chmod 755 ~
|
||||
chmod 600 ~/.ssh/authorized_keys
|
||||
chmod 700 ~/.ssh
|
||||
```
|
||||
|
||||
**Ps: 群晖用户目录权限默认为 777,必须要修改为755才能免密登录**
|
||||
|
||||
5.修改 `sshd_config` 配置文件:
|
||||
|
||||
```bash
|
||||
sudo vim /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
修改上述文件中以下几个配置:
|
||||
|
||||
```text
|
||||
RSAAuthentication yes
|
||||
PubkeyAuthentication yes
|
||||
AuthorizedKeysFile .ssh/authorized_keys
|
||||
```
|
||||
|
||||
6\. 在群晖`控制面板 -> 终端机和 SNMP` 关闭再开启 `SSH`,即可免密登录群晖。
|
||||
|
||||
7\. 如果设置成功后为了安全起见,建议在保存好 `密钥对(id_rsa 和 id_rsa.pub)`的情况下,关闭密码登录群晖 `SSH`。
|
||||
修改 `sshd_config` 配置文件:
|
||||
|
||||
```bash
|
||||
sudo vim /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
修改上述文件中以下配置:
|
||||
|
||||
```text
|
||||
PasswordAuthentication no
|
||||
```
|
||||
|
||||
然后步骤 6 重启群晖 `SSH` 即可关闭密码登录群晖 `SSH`。
|
||||
@@ -0,0 +1,59 @@
|
||||
一、启用 [SSH 服务](https://zhida.zhihu.com/search?content_id=201432023&content_type=Article&match_order=1&q=SSH+%E6%9C%8D%E5%8A%A1&zhida_source=entity)
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
### 1、转到 Synology 设备的终端设置页面:
|
||||
|
||||
Synology NAS:[DSM 控制面板](https://zhida.zhihu.com/search?content_id=201432023&content_type=Article&match_order=1&q=DSM+%E6%8E%A7%E5%88%B6%E9%9D%A2%E6%9D%BF&zhida_source=entity) > 终端机和 SNMP > 终端机
|
||||
|
||||
[Synology Router](https://zhida.zhihu.com/search?content_id=201432023&content_type=Article&match_order=1&q=Synology+Router&zhida_source=entity):SRM 控制面板 > 服务 > 系统服务 > 终端机
|
||||
|
||||
### 2、选中启用 SSH 服务。
|
||||
|
||||
指定 SSH 连接的端口号并保存设置。为了确保系统安全性,建议将默认端口 22 替换为其他端口号。
|
||||
|
||||
### 3、对于 DSM 6.0 或更高版本
|
||||
|
||||
在计算机上启动终端应用程序:
|
||||
|
||||
Windows 10:Windows PowerShell
|
||||
|
||||
macOS:Terminal.app
|
||||
|
||||
Linux:Terminal
|
||||
|
||||
1.键入以下命令并按 Enter 键:
|
||||
|
||||
| 命令 | 示例 |
|
||||
| --- | --- |
|
||||
| ssh DSM 管理员帐户@DSM IP 地址 -p SSH 端口号 | ssh myadmin@10.17.2.6 -p 22 |
|
||||
|
||||
2.输入 DSM 管理员帐户的密码。
|
||||
|
||||
3.键入 sudo -i 并按 Enter 键。
|
||||
|
||||
4.再次输入 DSM 管理员帐户的密码并按 Enter 键。
|
||||
|
||||
5.您现在已通过 SSH 使用 root 权限登录到 DSM。
|
||||
|
||||

|
||||
|
||||
二、 删除所有@eaDir文件夹
|
||||
----------------
|
||||
|
||||
###
|
||||
1、查看卷并输入清除命令
|
||||
|
||||
\# 看看你有多少个卷空间,默认\*号基本是1开始
|
||||
ls -d /volume\*
|
||||
\# 删除所有卷下所有@eaDir文件夹
|
||||
find /volume\* -name "@eaDir" -type d -print0 | xargs -0 rm -rf
|
||||
|
||||
如果闲麻烦,可以加到计划任务中定期执行,在计划任务中只运行最后一条命令即可。
|
||||
|
||||
### 2、 停止生成@eaDir文件夹及关闭此停止方法
|
||||
|
||||
@eaDir文件夹是因为群晖DSM系统“[全局搜索](https://zhida.zhihu.com/search?content_id=201432023&content_type=Article&match_order=1&q=%E5%85%A8%E5%B1%80%E6%90%9C%E7%B4%A2&zhida_source=entity)”服务产生的。如果平时用不上群晖的“全局搜索”服务,可以直接关闭。**_如果你使用DS Drive、[Video Station](https://zhida.zhihu.com/search?content_id=201432023&content_type=Article&match_order=1&q=Video+Station&zhida_source=entity)、Moments,不建议关闭!_**
|
||||
|
||||
关闭方法:仍然是root账号下执行以下命令
|
||||
|
||||
synoservice --disable pkgctl-SynoFinder
|
||||
@@ -0,0 +1,154 @@
|
||||
**解决 Docker 需要 sudo 权限的问题(无需重启)**
|
||||
|
||||
### **问题描述**
|
||||
|
||||
在默认情况下,Docker 需要 `sudo` 运行:
|
||||
|
||||
如果运行时出现 `permission denied` 或者只能用 `sudo docker ps`,说明当前用户没有足够的权限使用 Docker。
|
||||
|
||||
```text
|
||||
docker run -it -v xxxx:v1.0.0 bash
|
||||
```
|
||||
|
||||
```text
|
||||
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
|
||||
-bash: Got: command not found
|
||||
```
|
||||
|
||||
通常,解决这个问题的方法是 **将当前用户添加到 `docker` 组**,然后重新登录或者重启系统。但在某些情况下,**我们无法重启服务器**,本文将介绍 **无需重启即可修复 `docker` 需要 `sudo` 的问题**。
|
||||
|
||||
* * *
|
||||
|
||||
### **问题分析**
|
||||
|
||||
Docker 需要 `sudo` 运行的常见原因包括:
|
||||
|
||||
1\. **当前用户未加入 `docker` 组**(默认情况下只有 `root` 和 `docker` 组的用户可以访问 `dockerd`)。
|
||||
|
||||
2\. **`docker.sock` 的权限错误**(`/var/run/docker.sock` 可能只有 `root` 用户可以访问)。
|
||||
|
||||
3\. **`[dockerd](https://zhida.zhihu.com/search?content_id=253361940&content_type=Article&match_order=2&q=dockerd&zhida_source=entity)` 进程未正确连接到用户**(需要手动重启 `dockerd` 进程)。
|
||||
|
||||
4\. **`DOCKER_HOST` 变量被错误设置**(可能指向了错误的 Docker daemon)。
|
||||
|
||||
5\. **`docker` CLI 连接的 context 错误**(导致 `docker` CLI 无法正确访问 `dockerd`)
|
||||
|
||||
* * *
|
||||
|
||||
### **✅ 解决方案(无需重启)**
|
||||
|
||||
### **1️⃣ 确保当前用户属于 `docker` 组**
|
||||
|
||||
运行以下命令,检查用户是否属于 `docker` 组:
|
||||
|
||||
如果 `docker` 不在输出中,手动添加当前用户到 `docker` 组:
|
||||
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
然后,**手动刷新用户组**(避免重新登录):
|
||||
|
||||
再次运行:
|
||||
|
||||
如果 `docker` 现在出现在列表中,尝试:
|
||||
|
||||
* * *
|
||||
|
||||
### **2️⃣ 修正 `/var/run/docker.sock` 权限**
|
||||
|
||||
即使用户组正确,Docker 可能仍然无法访问 `docker.sock`。检查[套接字](https://zhida.zhihu.com/search?content_id=253361940&content_type=Article&match_order=1&q=%E5%A5%97%E6%8E%A5%E5%AD%97&zhida_source=entity)权限:
|
||||
|
||||
```bash
|
||||
ls -l /var/run/docker.sock
|
||||
```
|
||||
|
||||
如果输出如下:
|
||||
|
||||
```text
|
||||
srw-rw---- 1 root root 0 Feb 6 10:00 /var/run/docker.sock
|
||||
```
|
||||
|
||||
说明 `docker.sock` 仍然属于 `root`,普通用户无法访问。修正权限:
|
||||
|
||||
```bash
|
||||
sudo chown root:docker /var/run/docker.sock
|
||||
sudo chmod 666 /var/run/docker.sock
|
||||
```
|
||||
|
||||
然后再次测试:
|
||||
|
||||
* * *
|
||||
|
||||
### **3️⃣ 手动重启 `dockerd` 进程(不重启系统)**
|
||||
|
||||
如果 `docker ps` 仍然需要 `sudo`,尝试手动重启 `dockerd`(无需重启系统):
|
||||
|
||||
```bash
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
如果 `systemctl` 不可用,尝试:
|
||||
|
||||
```bash
|
||||
sudo service docker restart
|
||||
```
|
||||
|
||||
然后再次运行:
|
||||
|
||||
* * *
|
||||
|
||||
### **4️⃣ 确保 `DOCKER_HOST` 变量未错误设置**
|
||||
|
||||
检查 `DOCKER_HOST` 变量是否被错误设置:
|
||||
|
||||
如果输出不是空的,清除它:
|
||||
|
||||
然后再次测试:
|
||||
|
||||
* * *
|
||||
|
||||
### **5️⃣ 确保 `docker` CLI 连接到正确的 daemon**
|
||||
|
||||
有时候 `docker` CLI 可能找不到 `dockerd`,尝试:
|
||||
|
||||
如果 `CURRENT` 不是 `default`,运行:
|
||||
|
||||
```bash
|
||||
docker context use default
|
||||
```
|
||||
|
||||
然后再次测试:
|
||||
|
||||
* * *
|
||||
|
||||
### **终极检查**
|
||||
|
||||
如果所有方法都尝试后仍然不行,执行以下命令并检查输出:
|
||||
|
||||
```bash
|
||||
groups
|
||||
ls -l /var/run/docker.sock
|
||||
docker version
|
||||
systemctl status docker
|
||||
```
|
||||
|
||||
这些信息可以帮助进一步分析问题。
|
||||
|
||||
* * *
|
||||
|
||||
### **结论**
|
||||
|
||||
✅ **不重启系统,解决 `docker` 需要 `sudo` 的问题**:
|
||||
|
||||
1️⃣ **刷新用户组权限**:`newgrp docker`
|
||||
|
||||
2️⃣ **修正 `/var/run/docker.sock` 权限**: `bash sudo chown root:docker /var/run/docker.sock sudo chmod 666 /var/run/docker.sock`
|
||||
|
||||
3️⃣ **重启 `dockerd` 进程(无需重启系统)**: `bash sudo systemctl restart docker`
|
||||
|
||||
4️⃣ **检查 `DOCKER_HOST` 变量是否错误**:`unset DOCKER_HOST`
|
||||
|
||||
5️⃣ **确保 `docker` CLI 连接到正确的 daemon**:`docker context use default`
|
||||
|
||||
按照这些步骤,你应该可以**在不重启服务器的情况下,解决 Docker 需要 sudo 才能运行的问题!**
|
||||
@@ -0,0 +1,154 @@
|
||||
**解决 Docker 需要 sudo 权限的问题(无需重启)**
|
||||
|
||||
### **问题描述**
|
||||
|
||||
在默认情况下,Docker 需要 `sudo` 运行:
|
||||
|
||||
如果运行时出现 `permission denied` 或者只能用 `sudo docker ps`,说明当前用户没有足够的权限使用 Docker。
|
||||
|
||||
```text
|
||||
docker run -it -v xxxx:v1.0.0 bash
|
||||
```
|
||||
|
||||
```text
|
||||
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
|
||||
-bash: Got: command not found
|
||||
```
|
||||
|
||||
通常,解决这个问题的方法是 **将当前用户添加到 `docker` 组**,然后重新登录或者重启系统。但在某些情况下,**我们无法重启服务器**,本文将介绍 **无需重启即可修复 `docker` 需要 `sudo` 的问题**。
|
||||
|
||||
* * *
|
||||
|
||||
### **问题分析**
|
||||
|
||||
Docker 需要 `sudo` 运行的常见原因包括:
|
||||
|
||||
1\. **当前用户未加入 `docker` 组**(默认情况下只有 `root` 和 `docker` 组的用户可以访问 `dockerd`)。
|
||||
|
||||
2\. **`docker.sock` 的权限错误**(`/var/run/docker.sock` 可能只有 `root` 用户可以访问)。
|
||||
|
||||
3\. **`[dockerd](https://zhida.zhihu.com/search?content_id=253361940&content_type=Article&match_order=2&q=dockerd&zhida_source=entity)` 进程未正确连接到用户**(需要手动重启 `dockerd` 进程)。
|
||||
|
||||
4\. **`DOCKER_HOST` 变量被错误设置**(可能指向了错误的 Docker daemon)。
|
||||
|
||||
5\. **`docker` CLI 连接的 context 错误**(导致 `docker` CLI 无法正确访问 `dockerd`)
|
||||
|
||||
* * *
|
||||
|
||||
### **✅ 解决方案(无需重启)**
|
||||
|
||||
### **1️⃣ 确保当前用户属于 `docker` 组**
|
||||
|
||||
运行以下命令,检查用户是否属于 `docker` 组:
|
||||
|
||||
如果 `docker` 不在输出中,手动添加当前用户到 `docker` 组:
|
||||
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
然后,**手动刷新用户组**(避免重新登录):
|
||||
|
||||
再次运行:
|
||||
|
||||
如果 `docker` 现在出现在列表中,尝试:
|
||||
|
||||
* * *
|
||||
|
||||
### **2️⃣ 修正 `/var/run/docker.sock` 权限**
|
||||
|
||||
即使用户组正确,Docker 可能仍然无法访问 `docker.sock`。检查[套接字](https://zhida.zhihu.com/search?content_id=253361940&content_type=Article&match_order=1&q=%E5%A5%97%E6%8E%A5%E5%AD%97&zhida_source=entity)权限:
|
||||
|
||||
```bash
|
||||
ls -l /var/run/docker.sock
|
||||
```
|
||||
|
||||
如果输出如下:
|
||||
|
||||
```text
|
||||
srw-rw---- 1 root root 0 Feb 6 10:00 /var/run/docker.sock
|
||||
```
|
||||
|
||||
说明 `docker.sock` 仍然属于 `root`,普通用户无法访问。修正权限:
|
||||
|
||||
```bash
|
||||
sudo chown root:docker /var/run/docker.sock
|
||||
sudo chmod 666 /var/run/docker.sock
|
||||
```
|
||||
|
||||
然后再次测试:
|
||||
|
||||
* * *
|
||||
|
||||
### **3️⃣ 手动重启 `dockerd` 进程(不重启系统)**
|
||||
|
||||
如果 `docker ps` 仍然需要 `sudo`,尝试手动重启 `dockerd`(无需重启系统):
|
||||
|
||||
```bash
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
如果 `systemctl` 不可用,尝试:
|
||||
|
||||
```bash
|
||||
sudo service docker restart
|
||||
```
|
||||
|
||||
然后再次运行:
|
||||
|
||||
* * *
|
||||
|
||||
### **4️⃣ 确保 `DOCKER_HOST` 变量未错误设置**
|
||||
|
||||
检查 `DOCKER_HOST` 变量是否被错误设置:
|
||||
|
||||
如果输出不是空的,清除它:
|
||||
|
||||
然后再次测试:
|
||||
|
||||
* * *
|
||||
|
||||
### **5️⃣ 确保 `docker` CLI 连接到正确的 daemon**
|
||||
|
||||
有时候 `docker` CLI 可能找不到 `dockerd`,尝试:
|
||||
|
||||
如果 `CURRENT` 不是 `default`,运行:
|
||||
|
||||
```bash
|
||||
docker context use default
|
||||
```
|
||||
|
||||
然后再次测试:
|
||||
|
||||
* * *
|
||||
|
||||
### **终极检查**
|
||||
|
||||
如果所有方法都尝试后仍然不行,执行以下命令并检查输出:
|
||||
|
||||
```bash
|
||||
groups
|
||||
ls -l /var/run/docker.sock
|
||||
docker version
|
||||
systemctl status docker
|
||||
```
|
||||
|
||||
这些信息可以帮助进一步分析问题。
|
||||
|
||||
* * *
|
||||
|
||||
### **结论**
|
||||
|
||||
✅ **不重启系统,解决 `docker` 需要 `sudo` 的问题**:
|
||||
|
||||
1️⃣ **刷新用户组权限**:`newgrp docker`
|
||||
|
||||
2️⃣ **修正 `/var/run/docker.sock` 权限**: `bash sudo chown root:docker /var/run/docker.sock sudo chmod 666 /var/run/docker.sock`
|
||||
|
||||
3️⃣ **重启 `dockerd` 进程(无需重启系统)**: `bash sudo systemctl restart docker`
|
||||
|
||||
4️⃣ **检查 `DOCKER_HOST` 变量是否错误**:`unset DOCKER_HOST`
|
||||
|
||||
5️⃣ **确保 `docker` CLI 连接到正确的 daemon**:`docker context use default`
|
||||
|
||||
按照这些步骤,你应该可以**在不重启服务器的情况下,解决 Docker 需要 sudo 才能运行的问题!**
|
||||
@@ -0,0 +1,36 @@
|
||||
云服务器带宽1M/2M/3M/5M/10M/20M/50M/100M/200M等带宽实际下载速度峰值是多少?如何计算云服务器[公网带宽](https://zhida.zhihu.com/search?content_id=119614276&content_type=Article&match_order=1&q=%E5%85%AC%E7%BD%91%E5%B8%A6%E5%AE%BD&zhida_source=entity)的实际下载速度?云服务器吧分享服务器带宽实际下载速度对照表及计算方法:
|
||||
|
||||

|
||||
|
||||
云服务器带宽实际下载速度峰值转换
|
||||
|
||||
云服务器带宽实际下载速度计算方法
|
||||
----------------
|
||||
|
||||
云服务器吧以1Mbps公网带宽为例,**云服务器1M带宽实际下载速度峰值128KB/S**,为什么不是1M/S,怎么计算的?这是由于带宽计算单位导致的,云计算厂商提供的公网带宽计算单位使用的是[比特](https://zhida.zhihu.com/search?content_id=119614276&content_type=Article&match_order=1&q=%E6%AF%94%E7%89%B9&zhida_source=entity)(bit),而用户下载速度使用的单位是[字节](https://zhida.zhihu.com/search?content_id=119614276&content_type=Article&match_order=1&q=%E5%AD%97%E8%8A%82&zhida_source=entity)(Byte),8比特(bit) = 1字节(Byte),所以,宽带和下载速度之间有个8倍的关系。
|
||||
|
||||
N兆带宽和下载速度转换计算公式:`N*M bit/s = N*1024K bit/s = N*128KByte/s`
|
||||
根据公式计算:
|
||||
|
||||
* 1M带宽实际下载速度峰值为:1 \* 128KB/S = 128KB/S
|
||||
* 2M带宽实际下载速度峰值为:2 \* 128KB/S = 256KB/S
|
||||
* 3M带宽实际下载速度峰值为:3 \* 128KB/S = 384KB/S
|
||||
* 4M带宽实际下载速度峰值为:4 \* 128KB/S = 512KB/S
|
||||
* 5M带宽实际下载速度峰值为:5 \* 128KB/S = 640KB/S
|
||||
* 6M带宽实际下载速度峰值为:6 \* 128KB/S = 768KB/S
|
||||
* 7M带宽实际下载速度峰值为:7 \* 128KB/S = 896KB/S
|
||||
* 8M带宽实际下载速度峰值为:8 \* 128KB/S = 1M/S
|
||||
* 9M带宽实际下载速度峰值为:9 \* 128KB/S = 1.125M/S
|
||||
* 10M带宽实际下载速度峰值为:10 \* 128KB/S = 1.25M/S
|
||||
* 20M带宽实际下载速度峰值为:20 \* 128KB/S = 2.5M/S
|
||||
* 30M带宽实际下载速度峰值为:30 \* 128KB/S = 3.75M/S
|
||||
* 50M带宽实际下载速度峰值为:50 \* 128KB/S = 6.25M/S
|
||||
* 100M带宽实际下载速度峰值为:100 \* 128KB/S = 12.5M/S
|
||||
* 200M带宽实际下载速度峰值为:200 \* 128KB/S = 25M/S
|
||||
* N兆带宽实际下载速度峰值为:N \* 128KB/S
|
||||
|
||||
以此类推...
|
||||
|
||||
综上,**云厂商提供的1Mbps带宽是指bit,而用户下载使用的单位是Byte,1Byte = 8bit,所以云厂商给的云服务器公网带宽除以8就是实际的下载速度**。
|
||||
|
||||
原文参考:
|
||||
@@ -0,0 +1,460 @@
|
||||
---
|
||||
title: 2024最近,14款免费NAS操作系统及引导!黑群、黑威、Unraid开心版、TrueNAS、国产开源等,先码后看!_网络存储_什么值得买
|
||||
source: https://post.smzdm.com/p/azomrxmn/
|
||||
author:
|
||||
published: 2024-05-24
|
||||
created: 2025-09-22
|
||||
description: 大家好,这里是Cherry,喜爱折腾、捡垃圾、玩数码,热衷于分享NAS、docker玩耍经验~前言618已至,各大品牌NAS卖的也是如火如荼,打新打
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-22T22:31
|
||||
---
|
||||
当前位置:
|
||||
|
||||
[社区首页](https://post.smzdm.com/)
|
||||
|
||||
[电脑数码](https://www.smzdm.com/fenlei/diannaoshuma/)
|
||||
|
||||
[存储设备](https://www.smzdm.com/fenlei/cunchushebei/)
|
||||
|
||||
[网络存储](https://www.smzdm.com/fenlei/wangluocunchu/)
|
||||
|
||||
文章详情
|
||||
|
||||

|
||||
|
||||
## 2024最近,14款免费NAS操作系统及引导!黑群、黑威、Unraid开心版、TrueNAS、国产开源等,先码后看!
|
||||
|
||||
**大家好,这里是Cherry,喜爱折腾、捡垃圾、玩数码,热衷于分享NAS、docker玩耍经验~**
|
||||
|
||||
## 前言
|
||||
|
||||
[618](https://www.smzdm.com/618/) 已至,各大品牌NAS卖的也是如火如荼,打新打折好不热闹。不过应该也有很多小伙伴还在观望吧,是什么让你迟疑一直没有入NAS的坑呢?
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_2/)
|
||||
|
||||
Cherry今天为大家介绍一下目前圈子里主流的可以白嫖的NAS操作系统,并提供简单的安装教程,我们可以通过废旧电脑、笔记本或者 [虚拟机](https://www.smzdm.com/ju/sjl80w0/) 安装尝鲜,为618购买NAS做一个准备。
|
||||
|
||||
从我的理解来讲,NAS操作系统大致分为三类:
|
||||
|
||||
> **第一类是软硬件结合的成品NAS的操作系统。** 如 [群晖](https://pinpai.smzdm.com/2315/)
|
||||
>
|
||||
> [关注](https://pinpai.smzdm.com/2315/)
|
||||
>
|
||||
> >
|
||||
> >
|
||||
> 品牌
|
||||
>
|
||||
> 粉丝:
|
||||
>
|
||||
> - 商品百科
|
||||
> - 好价
|
||||
> - 社区文章
|
||||
>
|
||||
> 、威联通、铁威马、极空间、绿联、万由、华芸、海康等等。其中,群晖和威联通有开心版,使得不购买品牌硬件直接部署操作系统成为可能。
|
||||
>
|
||||
> **第二类纯软件操作系统。** 既有收费、又有免费,支持在不同硬件上进行自托管部署的,如Unraid、TureNAS Scale、FreeNas(TrunNas Core)、OMV、IstoreNAS、ZimaOS、XigamaNas等等。
|
||||
>
|
||||
> **第三类是原生与虚拟化系统。** 以linux为核心,辅之以虚拟化、容器化技术,形成一套可部署各种服务的服务器可视化管理系统,如UmbrellaOS、Cosmos-Server等等,同时这里将PVE、ESXI、Hype-V等虚拟化平台一并纳入。
|
||||
|
||||
然后,在前面三类NAS系统中,第一类可以出黑群晖和黑威联通,第二类中订阅制的Unraid也可以开心版,剩下的系统基本都支持免费部署和使用。在这些免费的系统中,根据类型又做了一个简单的划分,具体看表格:
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_3/)
|
||||
|
||||
下面,Cherry逐一为大家介绍一下这些不需要花钱的NAS操作系统到底怎么样。根据自己的感受对从完整性、可玩性、易用性等方面进行了打分,欢迎评论区交流~~
|
||||
|
||||
---
|
||||
|
||||
## 开心版,成熟且稳定的必用NAS系统
|
||||
|
||||
### 一、黑群晖
|
||||
|
||||
系统成熟度:⭐⭐⭐⭐⭐
|
||||
|
||||
部署复杂度:⭐
|
||||
|
||||
黑群晖拥有悠久的历史,从最早的麻烦部署到如今一键引导方式,不仅在NAS推广中起到了超高的作用,也为群晖品牌受益提供了一定的帮助,虽然近几年也出现部分引导程序因为某些原因不再持续更新的,但也不断涌现出一些新的引导程序供大家使用。
|
||||
|
||||
不过很多人也反馈群晖6.x访问套件中心,7.1访问hub.docker都陆续出现问题,不排除是官方操作导致,这也是越来越多的黑群晖用户想升级到【7.2 update5】的原因。
|
||||
|
||||
目前主流的引导程序为rr: [https://github.com/RROrg/rr](https://github.com/RROrg/rr "https://github.com/RROrg/rr")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_4/)
|
||||
|
||||
### 二、黑威联通
|
||||
|
||||
系统成熟度:⭐⭐⭐⭐⭐
|
||||
|
||||
部署复杂度:⭐⭐⭐⭐⭐
|
||||
|
||||
黑威联通使用的人一直不多,一是因为威联通的性价比足够高,几乎只要群晖一半的价格就可以上车一台全新设备,因此不需要黑。二是因为黑威联通的部署难度比较高,每一台设备配置文件都有不同,需要部署者对linux有足够的了解。
|
||||
|
||||
目前的黑威联通引导方式都是基于【老骥伏枥】前辈的方案上做的扩展,且不同型号,不同版本间的配置文件都有差异,很难入手。
|
||||
|
||||
目前主流的引导程序:老骥伏枥年牛大礼包
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_5/)
|
||||
|
||||
### 三、UNRAID pro开心版
|
||||
|
||||
系统成熟度:⭐⭐⭐⭐⭐
|
||||
|
||||
部署复杂度:⭐⭐⭐
|
||||
|
||||
Unraid可以说是非成品NAS操作系统的TOP1,主打的就是不采用raid方式存储数据,而是采用奇偶校验盘的形式来确保数据高可用(不过实际运用中奇偶校验盘坏了2块,索性全员raid0),目前Unraid也支持了ZFS文件格式,系统中包含的虚拟机、docker、compose、应用中心、插件等内容,也可以很容易的让我们运作起该系统。
|
||||
|
||||
目前主流的引导方式:UNRAID pro 6.11.5版本, [https://mi-d.cn/4293](https://mi-d.cn/4293 "https://mi-d.cn/4293")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_6/)
|
||||
|
||||
---
|
||||
|
||||
## AIO,AIB,榨干硬件的每一点性能
|
||||
|
||||
### 一、Proxmox VE
|
||||
|
||||
可玩性:⭐⭐⭐⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐
|
||||
|
||||
经典的虚拟化平台——PVE,目前主流是7.X和8.X,以debian为底层。支持虚拟机、LXC等虚拟化技术,内置了足够多的应用模板,也支持混合部署。同时,PVE自带有良好的集群、容灾备份功能,文件系统上还支持ZFS,是Cherry认为最牛的AIO系统了。
|
||||
|
||||
玩PVE,其实就是玩linux,扩展性第一不是开玩笑的,因此PVE不仅仅可以通过虚拟机部署很多系统,还可以使用LXC直接部署一些容器,将PVE本身作为一个NAS系统而使用。
|
||||
|
||||
官网: [https://www.proxmox.com/en/](https://www.proxmox.com/en/ "https://www.proxmox.com/en/")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_7/)
|
||||
|
||||
### 二、ESXi
|
||||
|
||||
可玩性:⭐⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐⭐⭐
|
||||
|
||||
VMware ESXi是以VMKernel为核心的虚拟化平台,操作更加简单,界面也更加友好,更适合AIO新手用于部署不同系统、不同软路由使用。优缺点其实挺明显的,优点就是硬件性能利用高,直通方便,缺点则是兼容性和扩展性不如PVE高。
|
||||
|
||||
官网: [https://www.vmware.com/](https://www.vmware.com/ "https://www.vmware.com/")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_8/)
|
||||
|
||||
### 三、Linux
|
||||
|
||||
可玩性:⭐⭐⭐⭐⭐
|
||||
|
||||
易用性:⭐
|
||||
|
||||
发行版linux基本就是SSH操作了,如ubuntu、debian、centos、gentoo、Arch Linux、armbian等等,主打的就是一个折腾,不同发行版因为包的不同,可以折腾和玩耍的内容也存在一定的差异。之所以有很多人喜欢用发行版linux当作NAS,我认为很大原因就在于更自由安装和部署体验。
|
||||
|
||||
linux发行版本身大部分支持LXC、LXD、Docker等虚拟化技术,因此也很适合作为AIO的底层工具,但是操作复杂度是远远大于PVE这种含可视化界面的管理工具,总而言之就是玩玩可以,认真就算了。
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_9/)
|
||||
|
||||
---
|
||||
|
||||
## 开源NAS,爱折腾人的选择
|
||||
|
||||
### 一、TrueNAS Scale
|
||||
|
||||
可玩性:⭐⭐⭐⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐
|
||||
|
||||
TrueNAS应该算是开源NAS操作系统的top1,以debian为底层。TrueNAS以支持ZFS格式和强大的 [内存](https://www.smzdm.com/fenlei/neicun/) 需求(内存容量以及ECC内存)而出名。实际上TrueNAS Scale并没有网传的要求那么夸张,除了最低8G内存、16G [ssd](https://www.smzdm.com/ju/sv69kvw/) 的硬杠杠外,没有太多太夸张的硬件需求。
|
||||
|
||||
TrueNAS面向的更多是专业级用户,这点从操作系统支持就可以看出,支持KVM和QEMU的虚拟机,支持docker,支持ZFS等,核心是提供 HCI(超融合基础设施),所以TrueNAS Scale在部署上多少有点麻烦。不过无论如何,如果是DIY NAS,不考虑黑系统的情况下,TrueNAS Scale肯定是首先。
|
||||
|
||||
下载地址: [https://www.truenas.com/download-truenas-scale/](https://www.truenas.com/download-truenas-scale/ "https://www.truenas.com/download-truenas-scale/")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_10/)
|
||||
|
||||
### 二、TrueNAS Core(FreeNAS)
|
||||
|
||||
可玩性:⭐⭐⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐
|
||||
|
||||
TrueNAS Core曾经被称为FreeNAS,不同于TrueNAS,是基于FreeBSD在OpenZFS文件系统上设计的NAS操作系统,后来FreeNAS被TrueNAS的开发商iX systems收购,也重新进行了定位,更名为TrueNAS Core。
|
||||
|
||||
因为底层不同,所以TrueNAS Core没有Scale那么高的硬件要求。现在的TureNAS Core和Scale的界面已经基本趋同了,功能上基本上是有的都有,如果硬件条件不那么好的,可以尝试使用TrueNAS Core版本。
|
||||
|
||||
如果要问两者的区别,那就是Core限制于底层的原因,可玩性和扩展性不如Scale版本,但好歹是基础功能齐全的NAS系统。
|
||||
|
||||
下载地址: [https://www.truenas.com/download-truenas-core/?location=hero](https://www.truenas.com/download-truenas-core/?location=hero "https://www.truenas.com/download-truenas-core/?location=hero")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_11/)
|
||||
|
||||
### 三、XigmaNAS
|
||||
|
||||
可玩性:⭐⭐
|
||||
|
||||
易用性:⭐
|
||||
|
||||
XigmaNAS原名FreeNAS,后因为iX systems获取FreeNAS商标后改名为NAS4Free,然后于2018年再次更名为XigamaNAS。也有说法是XigmaNAS是原FreeNAS成员出走后,基于FreeNAS 7的一个分支版本。总之因为命名问题,TrueNAS、FreeNAS、XigmaNAS的渊源我始终没有找到完整的资料。
|
||||
|
||||
最新版本的XigmaNAS是13.3.0.5,同样基于FreeBSD底层。XigmaNAS和以上两款NAS系统一样,基本是该有的都有了(好像没有docker),但最大的缺点就是社区太少,如果遇到问题基本上是没办法解决的。这也是XigmaNAS在国内使用一直不多的主要原因。如果你不喜欢折腾,或者技术能力不强,不建议使用该系统。
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_12/)
|
||||
|
||||
### 四、OMV
|
||||
|
||||
可玩性:⭐⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐
|
||||
|
||||
Open Media Vault (OMV)是一个面向家庭用户的NAS发行版,基于Debian开发,目前最新版本是v7.0,通过ISO镜像安装,安装过程十分方便,原生OMV系统只支持一些基础功能,是不支持docker、zfs等功能的,这些额外的功能都需要通过社区插件来安装。因为网络问题,我们一般需要修改OMV源以及插件源,不过这也应该是OMV系统唯一需要动手(ssh)操作的地方,安装完插件的OMV基本迈入完整体。
|
||||
|
||||
优点是操作简单,功能界面不复杂,缺点就是没有系统自带的娱乐和应用,需要通过docker补充安装。
|
||||
|
||||
下载地址: [https://www.openmediavault.org/download.html](https://www.openmediavault.org/download.html "https://www.openmediavault.org/download.html")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_13/)
|
||||
|
||||
### 五、ZimaOS(CasaOS)
|
||||
|
||||
可玩性:⭐⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐⭐
|
||||
|
||||
ZimaOS是IceWhale团队继CasaOS会发布的一款完整度更高的NAS操作系统,增加了如远程连接、自动备份、Raid支持、应用商城、文件管理等功能,最新的ZimaOS版本在v1.1.0。相比较于传统NAS系统,ZimaOS属于轻量级NAS系统,或者可以认为是一款NAS可视化管理导航系统。
|
||||
|
||||
页面风格就是一个简单纯粹的仪表盘,支持连接和文件管理,更多的应用依旧是通过docker部署来实现。好在ZimaOS内部提供了足够多的docker应用,使用者只需要点击安装即可。
|
||||
|
||||
优点是足够轻量级,适合在arm等小机器上使用。值得一体的是,zimaOS团队推出了zimacube成品NAS,预计在6月底有测评信息传出。
|
||||
|
||||
下载地址: [https://zimaos.icewhale.io/zimaos-rauc/latest/zimaos\_zimacube\_installer.img](https://zimaos.icewhale.io/zimaos-rauc/latest/zimaos_zimacube_installer.img "https://zimaos.icewhale.io/zimaos-rauc/latest/zimaos_zimacube_installer.img")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_14/)
|
||||
|
||||
### 六、IstoreNAS
|
||||
|
||||
可玩性:⭐⭐
|
||||
|
||||
易用性:⭐⭐⭐
|
||||
|
||||
IstoreNAS就是原来的IstoreOS,由易有云基于openwrt开发,配上了路由狗UI界面。从界面上看,IstoreNAS更像一个NAS操作系统,但因为内核问题,在实际使用中,IstoreNAS还是更偏向网络管理一些。IstoreNAS的应用,基本上也是通过luci、docker两大源提供的,不过似乎没有很好的将两大应用源作于区分,导致应用逻辑上有些混乱。
|
||||
|
||||
优点是足够轻量级,IstoreNAS目前只支持X86,以及ars4、p2pro等路由器,IstoreOS支持会多一些,同时对网络支持上明显多于其它NAS系统。
|
||||
|
||||
下载地址: [https://fw.koolcenter.com/iStoreNAS/](https://fw.koolcenter.com/iStoreNAS/ "https://fw.koolcenter.com/iStoreNAS/")
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_15/)
|
||||
|
||||
### 七、Cosmos-Server
|
||||
|
||||
可玩性:⭐⭐
|
||||
|
||||
易用性:⭐
|
||||
|
||||
Cosmos-Server一款关注于容器访问安全的开源NAS管理系统,包含有导航页、应用商城、容器管理、性能监测面板等功能。最大的特点就是官方有提供内网穿透服务和洋葱服务器访问服务,只需要透出一个端口,即可支持所有容器的安全管理、安全访问等。
|
||||
|
||||
但是这玩意的安全,第一时间是折磨自己人。项目本质是通过一个compose文件将所有容器统一在一个网络下,通过容器名来实现内部子路径代替反代连接。
|
||||
|
||||
但是值得一提的是该项目内置的容器商城,可以说是本Cherry看到过最大最全的了。
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_16/)
|
||||
|
||||
### 八、UmbrelOS
|
||||
|
||||
可玩性:⭐⭐
|
||||
|
||||
易用性:⭐
|
||||
|
||||
UmbrelOS是一款通过docker安装的服务器可视化管理界面,最早该项目是做加密货币出生的,内置了数十款加密货币的应用。
|
||||
|
||||
目前该系统通过整合docker商城的模式,提供超120款国内外docker应用。同时集成了WEB管理、容器管理、应用导航为一体。这个项目最大的优点就是界面比较好看。而且自身品牌有推出一款N5105的小主机搭配自身系统(不过这个小主机已经停产了)
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_17/)
|
||||
|
||||
---
|
||||
|
||||
## 说在最后
|
||||
|
||||
虽说免费NAS操作系统很好,但是在个人折腾NAS的时候我们依旧建议采用官方或社区支持的品牌系统,如目前的成品NAS,如Unraid授权等。更好的售后支持意味着一旦NAS出现问题,可以马上由专业的技术人员保障并为我们解决问题,保证数据不丢失。
|
||||
|
||||
618之际,也向大家推荐几款Cherry觉得性价比比较高的NAS
|
||||
|
||||

|
||||
|
||||
UGREEN 绿联 DXP4800 Plus 四盘位 私有云NAS存储(Intel 8505、8GB)
|
||||
|
||||
¥ 2919 起
|
||||
|
||||
全网底价
|
||||
|
||||

|
||||
|
||||
ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)
|
||||
|
||||
¥ 1999 起
|
||||
|
||||
全网底价
|
||||
|
||||

|
||||
|
||||
QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)
|
||||
|
||||
¥ 3049 起
|
||||
|
||||
全网底价
|
||||
|
||||
---
|
||||
|
||||
[](https://post.smzdm.com/p/azomrxmn/pic_18/)
|
||||
|
||||
**欢迎朋友们评论区讨论留言。我会定期更新关注** [NAS](https://www.smzdm.com/ju/sp3qr1k/ "NAS") **使用方法、开源软件与Docker软件、游戏与生活相关内容,喜欢的朋友请关注、点赞、留言支持。**
|
||||
|
||||
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
|
||||
|
||||
文章很值,打赏犒劳作者一下
|
||||
|
||||
4 人已打赏
|
||||
|
||||
[](https://zhiyou.smzdm.com/member/9674309982/)
|
||||
|
||||
## [可爱的小cherry](https://zhiyou.smzdm.com/member/9674309982/)
|
||||
|
||||
[
|
||||
|
||||
公众号:可爱的小Cherry。擅长于分享NAS、docker、电子数码周边好物。最近打算给家里的家电升升级。v+:Cgakki
|
||||
|
||||
510文章 | 37爆料 | 20502粉丝
|
||||
|
||||
](https://zhiyou.smzdm.com/member/9674309982/)
|
||||
|
||||
文中提及商品
|
||||
|
||||

|
||||
|
||||
UGREEN 绿联 DXP4800 Plus 四盘位 私有云NAS存储(Intel 8505、8GB)
|
||||
|
||||
¥ 2919
|
||||
|
||||
全网底价
|
||||
|
||||

|
||||
|
||||
ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)
|
||||
|
||||
¥ 1999
|
||||
|
||||
全网底价
|
||||
|
||||

|
||||
|
||||
QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)
|
||||
|
||||
¥ 3049
|
||||
|
||||
全网底价
|
||||
|
||||
天猫超级红包
|
||||
|
||||
距结束 01:28:48
|
||||
|
||||
抢天猫新风潮现金红包,最高8888元
|
||||
|
||||
[](https://s.click.taobao.com/kgbubYq?type=nocps)
|
||||
|
||||
首席生活家,数码领域作者,电脑外设领域作者
|
||||
|
||||
发文累计获赞2.3万,内容被15.2万人收藏
|
||||
|
||||
微信公众号:可爱的小Cherry
|
||||
|
||||
- [](https://post.smzdm.com/p/azzngmnr/)
|
||||
[AI+NAS,行业会变天?小米极空间威联通群晖绿联AI能力全解析](https://post.smzdm.com/p/azzngmnr/)
|
||||
3 8
|
||||
[AI+NAS,行业会变天?小米极空间威联通群晖绿联AI能力全解析](https://post.smzdm.com/p/azzngmnr/)
|
||||
- [](https://post.smzdm.com/p/amo44ex4/)
|
||||
[巴掌大不占地、全闪无噪音—铁威马 F4-SSD 一款 “省心 NAS”](https://post.smzdm.com/p/amo44ex4/)
|
||||
5 4
|
||||
[巴掌大不占地、全闪无噪音—铁威马 F4-SSD 一款 “省心 NAS”](https://post.smzdm.com/p/amo44ex4/)
|
||||
- [](https://post.smzdm.com/p/aeop9q8q/)
|
||||
[再见微信传输助手,全平台无感复制粘贴!极空间+节点小宝绝了](https://post.smzdm.com/p/aeop9q8q/)
|
||||
11 14
|
||||
[再见微信传输助手,全平台无感复制粘贴!极空间+节点小宝绝了](https://post.smzdm.com/p/aeop9q8q/)
|
||||
- [](https://post.smzdm.com/p/a5077q5l/)
|
||||
[0折腾,免费搞定Docker下载加速,推荐一个Docker 镜像状态监控站](https://post.smzdm.com/p/a5077q5l/)
|
||||
23 7
|
||||
[0折腾,免费搞定Docker下载加速,推荐一个Docker 镜像状态监控站](https://post.smzdm.com/p/a5077q5l/)
|
||||
- [](https://post.smzdm.com/p/agozqq43/)
|
||||
[全网影音网盘资源一键搜索,飞牛NAS网盘直链,资源不愁](https://post.smzdm.com/p/agozqq43/)
|
||||
9 4
|
||||
[全网影音网盘资源一键搜索,飞牛NAS网盘直链,资源不愁](https://post.smzdm.com/p/agozqq43/)
|
||||
|
||||
- [](https://post.smzdm.com/p/a652woxg/)
|
||||
[首次真·无人卡车路测,由侯晓迪的Bot Auto在成立第二年实现了](https://post.smzdm.com/p/a652woxg/)
|
||||
0 0
|
||||
[首次真·无人卡车路测,由侯晓迪的Bot Auto在成立第二年实现了](https://post.smzdm.com/p/a652woxg/)
|
||||
- [](https://post.smzdm.com/p/awm96r0m/)
|
||||
[耳机居然能画画?我替你们试了一下](https://post.smzdm.com/p/awm96r0m/)
|
||||
0 0
|
||||
[耳机居然能画画?我替你们试了一下](https://post.smzdm.com/p/awm96r0m/)
|
||||
- [](https://post.smzdm.com/p/amo42p5z/)
|
||||
[教科书级插混技术,比亚迪 DM 技术:四年两登清华教科书封面传奇](https://post.smzdm.com/p/amo42p5z/)
|
||||
0 0
|
||||
[教科书级插混技术,比亚迪 DM 技术:四年两登清华教科书封面传奇](https://post.smzdm.com/p/amo42p5z/)
|
||||
- [](https://post.smzdm.com/p/arlokp77/)
|
||||
[不踩雷猫粮选择标准有哪些?猫粮品牌十大排行好又不贵的推荐](https://post.smzdm.com/p/arlokp77/)
|
||||
0 0
|
||||
[不踩雷猫粮选择标准有哪些?猫粮品牌十大排行好又不贵的推荐](https://post.smzdm.com/p/arlokp77/)
|
||||
- [](https://post.smzdm.com/p/a7g2vkz9/)
|
||||
[猫粮怎么选成分好?必看国产猫粮排名前十品牌喂养体验分享](https://post.smzdm.com/p/a7g2vkz9/)
|
||||
0 0
|
||||
[猫粮怎么选成分好?必看国产猫粮排名前十品牌喂养体验分享](https://post.smzdm.com/p/a7g2vkz9/)
|
||||
- [](https://post.smzdm.com/p/ax694wx4/)
|
||||
[被中年阿姨的“清洁大法”惊到了!不费啥劲,家里窗明几净](https://post.smzdm.com/p/ax694wx4/)
|
||||
102 69
|
||||
[被中年阿姨的“清洁大法”惊到了!不费啥劲,家里窗明几净](https://post.smzdm.com/p/ax694wx4/)
|
||||
- [](https://post.smzdm.com/p/a507487k/)
|
||||
[小米17改名,官方公布真实原因,苹果的“含金量”还在提升](https://post.smzdm.com/p/a507487k/)
|
||||
158 788
|
||||
[小米17改名,官方公布真实原因,苹果的“含金量”还在提升](https://post.smzdm.com/p/a507487k/)
|
||||
- [](https://post.smzdm.com/p/avv4wvxn/)
|
||||
[路亚4年,花光20万,一个钓鱼佬的自白](https://post.smzdm.com/p/avv4wvxn/)
|
||||
255 48
|
||||
[路亚4年,花光20万,一个钓鱼佬的自白](https://post.smzdm.com/p/avv4wvxn/)
|
||||
- [](https://post.smzdm.com/p/a9kzvkop/)
|
||||
[一个通过卖减肥秘籍月入5w的博主,解密减肥行业真相!](https://post.smzdm.com/p/a9kzvkop/)
|
||||
219 19
|
||||
[一个通过卖减肥秘籍月入5w的博主,解密减肥行业真相!](https://post.smzdm.com/p/a9kzvkop/)
|
||||
- [](https://post.smzdm.com/p/ako02pm9/)
|
||||
[免费音乐?Nuclear带你飞!](https://post.smzdm.com/p/ako02pm9/)
|
||||
82 38
|
||||
[免费音乐?Nuclear带你飞!](https://post.smzdm.com/p/ako02pm9/)
|
||||
|
||||
首席生活家,数码领域作者,电脑外设领域作者
|
||||
|
||||
发文累计获赞2.3万,内容被15.2万人收藏
|
||||
|
||||
微信公众号:可爱的小Cherry
|
||||
|
||||
- [](https://post.smzdm.com/p/azzngmnr/)
|
||||
[AI+NAS,行业会变天?小米极空间威联通群晖绿联AI能力全解析](https://post.smzdm.com/p/azzngmnr/)
|
||||
3 8
|
||||
[AI+NAS,行业会变天?小米极空间威联通群晖绿联AI能力全解析](https://post.smzdm.com/p/azzngmnr/)
|
||||
- [](https://post.smzdm.com/p/amo44ex4/)
|
||||
[巴掌大不占地、全闪无噪音—铁威马 F4-SSD 一款 “省心 NAS”](https://post.smzdm.com/p/amo44ex4/)
|
||||
5 4
|
||||
[巴掌大不占地、全闪无噪音—铁威马 F4-SSD 一款 “省心 NAS”](https://post.smzdm.com/p/amo44ex4/)
|
||||
- [](https://post.smzdm.com/p/aeop9q8q/)
|
||||
[再见微信传输助手,全平台无感复制粘贴!极空间+节点小宝绝了](https://post.smzdm.com/p/aeop9q8q/)
|
||||
11 14
|
||||
[再见微信传输助手,全平台无感复制粘贴!极空间+节点小宝绝了](https://post.smzdm.com/p/aeop9q8q/)
|
||||
- [](https://post.smzdm.com/p/a5077q5l/)
|
||||
[0折腾,免费搞定Docker下载加速,推荐一个Docker 镜像状态监控站](https://post.smzdm.com/p/a5077q5l/)
|
||||
23 7
|
||||
[0折腾,免费搞定Docker下载加速,推荐一个Docker 镜像状态监控站](https://post.smzdm.com/p/a5077q5l/)
|
||||
- [](https://post.smzdm.com/p/agozqq43/)
|
||||
[全网影音网盘资源一键搜索,飞牛NAS网盘直链,资源不愁](https://post.smzdm.com/p/agozqq43/)
|
||||
9 4
|
||||
[全网影音网盘资源一键搜索,飞牛NAS网盘直链,资源不愁](https://post.smzdm.com/p/agozqq43/)
|
||||
|
||||
已收藏
|
||||
[去我的收藏夹](https://post.smzdm.com/p/azomrxmn/#)
|
||||
|
||||

|
||||
|
||||
举报成功
|
||||
|
||||
该举报信息「小小值」会优先核实并处理哦!
|
||||
@@ -0,0 +1,151 @@
|
||||
---
|
||||
title: "2026终极AI编程CLI套装:Claude Code + Codex CLI + Gemini CLI,三位一体组合使用指南"
|
||||
source: "https://mp.weixin.qq.com/s/aNSv_tlgOeXmm5dBUhnPng"
|
||||
author:
|
||||
- "[[鲁工]]"
|
||||
published:
|
||||
created: 2025-12-21
|
||||
description: "最强工具 + 最强模型。"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||

|
||||
|
||||
原创 鲁工 [AI编程实验室](https://mp.weixin.qq.com/s/) *2025年12月18日 11:49*
|
||||
|
||||
大家好,我是鲁工。
|
||||
|
||||
如果你是一名习惯使用CLI的用户,Claude Code肯定是你的首选工具。但市面上的顶级AI编程CLI工具越来越多,Claude Code、Codex CLI、Gemini CLI,综合性价比考虑,面对动辄100刀200刀的Claude Code订阅,你是否会有一丝犹豫?
|
||||
|
||||
但我想说的是,如果条件允许,请尽量综合使用上述三个工具。
|
||||
|
||||
前段时间,我分享了如何在Antigravity里面组建最强AI开发团队,包括将基于Opus 4.5模型的Claude Code、基于GPT-5.1模型的Codex和Gemini 3集成到一个IDE中使用。但那个教程是针对IDE的,对于CLI用户,我更建议用官方原生的CLI。
|
||||
|
||||
今天这篇文章,我就来聊聊这三款顶级AI编程CLI的各自特点,如何三位一体地组合使用,以及关于三款工具的一些观点。
|
||||
|
||||
## 2025年底,AI编程的黄金时代
|
||||
|
||||
简单说一下最近一个月AI编程赛道的头部玩家情况。
|
||||
|
||||
最近一个月可以说是AI编程工具的神仙打架之月:
|
||||
|
||||
- **11月18日Google发布Gemini 3 Pro和全新IDE Antigravity**
|
||||
- **11月19日OpenAI发布GPT-5.1-Codex-Max**
|
||||
- **11月24日Anthropic发布Claude Opus 4.5
|
||||
**
|
||||
- **12月11日OpenAI发布GPT-5.2,其中GPT-5.2-xhigh专为复杂任务设计**
|
||||
- **12月18日Google又甩出Gemini 3 Flash,速度价格质量齐活
|
||||
|
||||
**
|
||||
|
||||
三大厂商在一个多月内接连放大招,而三家各自的CLI工具也都同步更新了最新模型支持:
|
||||
|
||||
- **Claude Code + Opus 4.5**
|
||||
- **Codex CLI + GPT-5.2 xhigh**
|
||||
- **Gemini CLI + Gemini 3 Pro
|
||||
|
||||
**
|
||||
|
||||
这意味着,我们开发者现在手握三把AI神兵利器。单独用哪一个都很强,但如果能根据场景灵活切换,效率还能再上一个台阶。
|
||||
|
||||
## 三款CLI速览:各有所长
|
||||
|
||||
在聊组合策略之前,先快速了解一下三款工具的核心差异。
|
||||
|
||||
Claude Code + Opus 4.5毫无疑问就是目前代码质量之王。 这个不多说,我们号过去一段时间,写了大量Claude Code实战和操作技巧,这也是我日常干活最主力的工具模型组合。如果说它有缺点,那可能就是月费太贵了,贵到90%以上的人都难以承受。
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
### Codex CLI + GPT-5.2 xhigh可以算是深度思考的协作专家。Codex其实并不是我日常干活的主力工具,只有在需要交叉review的时候,才会调用。
|
||||
|
||||
### 我用的不多并不代表Codex不好用,实际上,对于同是20刀级别的订阅而言,ChatGPT Plus性价比远超Claude Code Pro,20刀的Claude Code Pro只能说是体验版,可能刚上头就用量耗尽。
|
||||
|
||||
### 但20刀的Plus,在Codex上能用很久。并且从模型层面而言,GPT-5.2 xhigh也非常强,非常适合解决复杂任务,我通过最近一段时间的交叉review来看,GPT-5.2 xhigh通常会比Gemini 3 Pro给出更加客观和中性的洞察评价。如果说Codex缺点的话,那可能就是速度相对比较慢。
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
### Gemini CLI + Gemini 3 Pro则是免费多模态王者。Gemini CLI是Google的开源CLI工具,也是三者中唯一完全开源、且有大额免费层级的。
|
||||
|
||||
Gemini CLI的免费额度真的很香,日常小任务和实验完全够用。1M上下文处理大项目也很爽,就是稳定性上偶尔会抽风,这可能就是免费的附带风险。
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
谷歌给人的感觉就是,都免费给你用了,就不要那么多要求了。其实,我倒更愿意谷歌把Gemini CLI和Antigravity变成收费产品。因为只有收费了,这两款产品才能真正变得好用。
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
这张表的核心信息是: **没有完美的工具,只有最合适的场景** 。
|
||||
|
||||
测试任务对比
|
||||
|
||||
最后,简单放个来自OpenAI官方的小任务作为测试对比。
|
||||
|
||||
提示词如下:
|
||||
|
||||
> 创建一个单页应用(单个HTML文件),满足以下要求:
|
||||
>
|
||||
> \- 名称:海浪模拟
|
||||
>
|
||||
> \- 目标:展示逼真的海浪动画效果。
|
||||
>
|
||||
> \- 功能:可调整风速、浪高和光照。
|
||||
>
|
||||
> \- 界面:应呈现宁静且逼真的效果。
|
||||
|
||||
我们用Claude Code、Codex CLI和Gemini CLI三款CLI分别跑一下上述任务。
|
||||
|
||||
Gemini CLI最先完成任务,但海浪的视觉效果好像一般:
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
然后是Claude Code:
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
好像视觉丰富度比Gemini CLI好了一点,但真实度又不太行。
|
||||
|
||||
Codex CLI干活最慢,但效果应该是最好的,看来慢工确实能出细活,不过确实是太慢了,这个小任务都跑了8分钟才完成。
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
## 写在最后
|
||||
|
||||
2025年底的AI编程赛道,真的是神仙打架。
|
||||
|
||||
Claude Code的代码质量、Codex CLI的深度推理、Gemini CLI的免费多模态三款工具各有所长,但首选仍然是Claude Code。
|
||||
|
||||
一句话总结的话,大概是: Claude Code保质量,Codex CLI深思考,Gemini CLI省成本。
|
||||
|
||||
基于现阶段的使用情况,针对三款CLI,我期望:
|
||||
|
||||
- Claude Code降低订阅价格
|
||||
- Codex CLI提升执行速度
|
||||
- Gemini CLI早日订阅收费
|
||||
|
||||
希望这篇文章对你有帮助。如果你也在用这些工具,欢迎在评论区分享你的组合策略。
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
我是鲁工,八年AI算法老兵,AI全栈开发者,深耕AI编程赛道。欢迎关注,感兴趣的朋友也可以加我微信( louwill\_ )交个朋友。
|
||||
|
||||
'%20fill='%23FFFFFF'%3E%3Crect%20x='249'%20y='126'%20width='1'%20height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
|
||||
|
||||
\>/ 作者:鲁工
|
||||
|
||||
作者提示: 个人观点,仅供参考
|
||||
|
||||
修改于 2025年12月18日
|
||||
|
||||
同步该文章
|
||||
|
||||
继续滑动看下一个
|
||||
|
||||
AI编程实验室
|
||||
|
||||
向上滑动看下一个
|
||||
|
||||
AI编程实验室
|
||||
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: ARM、AArch64、amd64、x86_64、x86有什么区别?
|
||||
source: https://blog.csdn.net/helloWorld_LHT/article/details/151650866?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-3-151650866-blog-130604154.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-3-151650866-blog-130604154.235%5Ev43%5Epc_blog_bottom_relevance_base9&utm_relevant_index=5
|
||||
author:
|
||||
- "[[helloWorld_LHT]]"
|
||||
published: 2025-09-13
|
||||
created: 2025-09-30
|
||||
description: 文章浏览阅读1.3k次,点赞22次,收藏10次。本文概述了几种主流CPU指令集架构(ISA)及其子集分类。x86架构包含32位i386和64位x86_64/amd64;ARM分为32位AArch32和64位AArch64/arm64;RISC-V主流为64位rv64gc;PowerPC包括32位powerpc和64位ppc64/ppc64le。文章详细介绍了各架构的历史演变、命名规范和技术特点,特别说明了不同项目对x86_64/amd64的命名差异,以及ARMv8/ARMv9与AArch64的关系。_armv8 arm64 aarch64区别
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-30T12:04
|
||||
---
|
||||
| **CPU 架构** | **描述** |
|
||||
| --------------------------------------------------------------------------------------------- | ------------------------- |
|
||||
| x86\_64 /x86/amd64 | 64 位 AMD/英特尔 CPU 的别称 |
|
||||
| [AArch64](https://so.csdn.net/so/search?q=AArch64&spm=1001.2101.3001.7020) /arm64/ARMv8/ARMv9 | 64 位 ARM CPU 的别称 |
|
||||
| i386 | 32 位 AMD/英特尔 CPU |
|
||||
| AArch32 /arm/ARMv1 到 ARMv7 | 32 位 ARM CPU 的别称 |
|
||||
| rv64gc /rv64g | 64 位 RISC-V CPU 的别称 |
|
||||
| ppc64le | 64 位 PowerPC CPU,小端字节序存储 |
|
||||
|
||||
## 概述:CPU 架构
|
||||
|
||||

|
||||
|
||||
- ARM、AArch64、amd64、x86\_64、x86等,是描述 CPU 架构的,严格讲,它们被计算机工程师视为 CPU 的 *指令集架构(Instruction Set Architecture)* (ISA)。
|
||||
- CPU 的指令集架构定义了 CPU 如何解析二进制代码中的 1 和 0。
|
||||
- CPU 至今仍然被广泛使用的 ISA 的主要类别:
|
||||
- x86(AMD/英特尔)
|
||||
- ARM
|
||||
- RISC-V
|
||||
- PowerPC(IBM 仍在使用)
|
||||
|
||||
还有更多种类的 CPU ISA,比如 MIPS、SPARC、DEC Alpha 等等。
|
||||
|
||||
- ISA 主要根据 内存总 *线的宽度* 分为至少两个子集。内存总线的宽度指的是 CPU 和 RAM 一次能传输的位数。内存总线有很多种宽度,但最常见的是 32 位和 64 位。
|
||||
- 32 位的 CPU ISA 要么是已经过时的历史产物,被留下来要么只是为了支持旧的系统,要么只运用在微控制器中。 **所有新的硬件都已经是 64 位的了** ,特别是那些面向消费者的硬件。
|
||||
|
||||
## x86(AMD/英特尔)
|
||||
|
||||

|
||||
|
||||
- x86 CPU 的指令集架构主要源于英特尔,因为英特尔是最初搭配 8085 微处理器创建了它。8085 微处理器的内存总线宽度为 16 位。而后来,AMD 加入了这个领域,并且一直紧随英特尔的步伐,直到 AMD 创建出了自己的超集 64 位架构,超过了英特尔。
|
||||
- x86 架构的子集如下:
|
||||
- `i386` :2007 年之前的 CPU,那么i386就是 CPU 的架构。它是现在使用的 AMD/英特尔的 x86 架构的 32 位“版本”。
|
||||
- `x86_64` / `x86` / `amd64` :这三个术语在不同的项目中可能会被交替使用。 但它们都是指 x86 AMD/英特尔架构的 64 位“版本”。无论如何, `x86_64` 这个字符串比 `x86` 和 `amd64` 使用得更广泛(也更受欢迎)。例如,FreeBSD 项目称 64 位的 x86 架构为 `amd64` ,而 Linux 和 macOS 则称之为 `x86_64` 。
|
||||
- 由于 AMD 在创造 64 位 ISA 上超越了英特尔,所以一些项目(比如 FreeBSD)把 x86 的 64 位版本称为 `amd64` 。 **但更被广泛接受的术语还是 x86\_64** 。
|
||||
- 对于 CPU ISA,“x86” 这个字符串是一种特殊的情况。你要知道,在从 32 位的 x86( `i386` )到 64 位的 x86( `x86_64` )的过渡过程中,CPU 制造商确保了 CPU 能够运行 32 位 *和* 64 位指令。所以,有时可能会看到 `x86` 也被用来意指“这款产品只能运行在 64 位的计算机上,但如果该计算机能运行 32 位指令,那么你也可以在它上面运行 32 位的用户软件”。
|
||||
- 这种 x86 的模糊性——也就是诸如能同时运行 32 位代码的 64 位处理器——其主要用于和存在于运行在 64 位处理器上的,但是允许用户运行 32 位软件的操作系统,Windows 就通过这种被称作“兼容模式”的特性运用了这种方式。
|
||||
- **汇总:由 AMD 和 英特尔 设计的 CPU 有两种架构:32 位的(** `**i386**` **)和 64 位的(** `**x86_84**` **)** 。
|
||||
|
||||
## 其它的英特尔
|
||||
|
||||
- `x86_64` ISA 实际上有几个子集。这些子集都是 64 位,但它们新添加了诸如 SIMD( *单指令多数据(Single Instruction Multiple Data)* )指令等功能。
|
||||
- `x86_64-v1` :这是熟知的基础 `x86_64` ISA。当谈论 `x86_64` 时,通常指的就是 `x86_64-v1` ISA。
|
||||
- `x86_64-v2` :此版本新增了更多如 SSE3( *流式 SIMD 扩展版本 3(Streaming SIMD Extensions 3)* )之类的指令扩展。
|
||||
- `x86_64-v3` :除了基础指令外,还新增了像 AVX( *高级矢量扩展(Advance Vector eXtensions)* )和 AVX2 等指令。这些指令可以 **使用高达 256 位宽的 CPU 寄存器** !如果能够有效利用它们,就能大规模并行处理计算任务。
|
||||
- `x86_64-v4` :这个版本在 `x86_64-v3` ISA 的基础上,迭代了更多的 SIMD 指令扩展,比如 AVX256 和 AVX512。其中,AVX512 可以 **使用高达 512 位宽的 CPU 寄存器** !
|
||||
|
||||
## ARM
|
||||
|
||||

|
||||
|
||||
- ARM 不仅是一家为 CPU ISA 制定规范的公司,它也设计并授权给其他厂商使用其 CPU 内核,甚至允许其他公司使用 ARM CPU ISA 设计自己的 CPU 内核。
|
||||
- 其实 ARM 的 CPU 还广泛应用于手机中。苹果从2020年开始自研ARM架构的芯片,目前已使用 `x86_64` 处理器转向了在其笔记本和台式机产品中使用自家设计的 ARM 处理器。
|
||||
- 就像任一种 CPU 架构一样,ARM 基于内存总线宽度也有两个子集。
|
||||
- 官方认定的 32 位和 64 位 ARM 架构的名称分别是 `AArch32` 和 `AArch64` 。这里的 `AArch` 字符串代表 “ *Arm 架构(Arm Architecture)* ”。这些是 CPU 执行指令时可切换的 **模式** 。
|
||||
- 实际符合 ARM 的 CPU ISA 的指令规范被命名为 `ARMvX` ,其中 `X` 是规范版本的代表数字。目前为止,已经有九个主要的规范版本。规范 `ARMv1` 到 `ARMv7` 定义了适用于 32 位 CPU 的架构,而 `ARMv8` 和 `ARMv9` 是适用于 64 位 ARM CPU 的规范。
|
||||
- 每个 ARM CPU 规范又有进一步的子规范。例如 ARMv8,我们有 ARMv8-R、ARMv8-A、ARMv8.1-A、ARMv8.2-A、ARMv8.3-A、ARMv8.4-A、ARMv8.5-A、ARMv8.6-A、ARMv8.7-A、ARMv8.8-A 和 ARMv8.9-A。 其中 -A 表示“应用核心”,-R 表示“实时核心”。
|
||||
- 之所以在 `AArch64` 正式被 ARM 认定为 64 位 ARM 架构后,有些人仍然称其为 `arm64` 。原因主要有两点:
|
||||
1. `arm64` 这个名称在 ARM 决定采用 `AArch64` 之前就已经广为人知了。(ARM 的一些官方文档也将 64 位的 ARM 架构称为 `arm64` …… )
|
||||
2. Linux 的代码库主要将 `AArch64` 称为 `arm64` 。然而,当你在系统中运行 `uname -m` 时,输出仍然是 `aarch64` 。
|
||||
- **因此,对于 32 位 ARM CPU,应该寻找** `**AArch32**` **这个字符串,但有时也可能是** `**arm**` **或** `**armv7**` **。相似的,对于 64 位 ARM CPU,应该找** `**AArch64**` **这个字符串,但有时也可能会是** `**arm64**` **、** `**ARMv8**` **或** `**ARMv9**` **。**
|
||||
|
||||
## RISC-V
|
||||
|
||||

|
||||
|
||||
- RISC-V 是 CPU 指令集架构(ISA)的一个开源规范。( **但CPU 自身不是开源的** 。类似以太网的情况。以太网规范是开源的,但需个人付费购买网线、路由器和交换器。同样,RISC-V CPU 也要花钱购买)。
|
||||
- 尽管如此,这并没有阻止人们创建并在开源许可下提供免费获取( **设计上的获取** ,并非物理核心/SoC)的 RISC-V 核心。这是其中的一项尝试。
|
||||
- 寻找运行于 RISC-V 消费级 CPU 上的软件,应该寻找 “rv64gc” 这一字符串。这是许多 Linux 发行版所公认的。
|
||||
- 像所有 CPU 架构一样,RISC-V 拥有 32 位和 64 位 CPU 架构。但由于 RISC-V 是非常新的描述 CPU ISA 的方式,大部分主流消费端或客户端的 CPU 核心一般都是 64 位的。大部分 32 位的设计都是微控制器,用于非常具体的用例。
|
||||
- 它们的区别在于 CPU 的扩展。被称为 RISC-V CPU 的最低要求即实现“ *基本整数指令集(Base Integer Instruction Set)* ”( `rv64i` )。
|
||||
- 下表列出了一些扩展及其描述:
|
||||
|
||||
| **扩展名称** | **描述** |
|
||||
| --- | --- |
|
||||
| rv64i | 64 位基本整数指令集(必须的) |
|
||||
| m | 乘法和除法指令 |
|
||||
| a | 原子指令 |
|
||||
| f | 单精度浮点指令 |
|
||||
| d | 双精度浮点指令 |
|
||||
| g | 别名;一组运行通用 操作系统 所需的扩展集(包括 imafd) |
|
||||
| c | 压缩指令 |
|
||||
|
||||
在 `rv64i` 这一字符串中, `rv` 表示 RISC-V, `64` 指的是 64 位 CPU 架构,而 `i` 指的是 **强制性的** 基本整数指令集扩展。 `rv64i` 之所以是一体的,因为即使 `i` 被认为是一种“扩展”, **但它是必须的** 。
|
||||
|
||||
约定俗成的,扩展名称按上述特定顺序排列。因此, `rv64g` 展开为 `rv64imafd` ,而不是 `rv64adfim` 。
|
||||
|
||||
还有其它一些像 Zicsr 和 Zifencei 这样的扩展,它们位于 `d` 和 `g` 扩展之间。
|
||||
因此,严格说来, `rv64g` 实际上是 `rv64imafdZicsrZifencei` 。
|
||||
|
||||
## PowerPC
|
||||
|
||||

|
||||
|
||||
- PowerPC 曾是苹果、IBM 以及,摩托罗拉早期合作时代的一种流行 CPU 架构。在苹果转向英特尔的 x86 架构之前,它一直被应用于苹果的全部消费品产品线。
|
||||
- 最初,PowerPC 采取的是大端字节序的内存排序。后来随着 64 位架构的引入,增加了使用小端字节排序的选项。这么做的目的是为了与英特尔的内存排序保持兼容(以防止软件错误),因为英特尔自始至终都一直采用的是小端字节序。
|
||||
- 由于字节序在此也起到了一定的作用,PowerPC 共有三种架构:
|
||||
- - `powerpc` :表示 32 位的 PowerPC 架构。
|
||||
- `ppc64` :表示拥有 **大端字节序内存排序** 的 64 位 PowerPC 架构。
|
||||
- `ppc64le` :表示拥有 **小端字节序内存排序** 的 64 位 PowerPC 架构。
|
||||
|
||||
目前, `**ppc64le**` **是被广泛使用的架构** 。
|
||||
|
||||
## 结论
|
||||
|
||||
市面上有各种各样的 CPU 架构。对于每一种架构,都有 32 位和 64 位的子集。在现有的 CPU 中,可以找到 x86、ARM、RISC-V 和 PowerPC 等架构。
|
||||
|
||||
其中,x86 是最广泛和易于获取的 CPU 架构,因为英特尔和 AMD 都采取了这种架构。此外,ARM 提供的产品几乎在手机和易于获取的单板 计算机 中被独占使用。
|
||||
|
||||
RISC-V 正在努力使硬件更广泛地被使用。
|
||||
|
||||
而 PowerPC 目前主要用于 服务器 。
|
||||
|
||||
实付 元
|
||||
|
||||
[使用余额支付](https://blog.csdn.net/helloWorld_LHT/article/details/)
|
||||
|
||||
点击重新获取
|
||||
|
||||
扫码支付
|
||||
|
||||
钱包余额 0
|
||||
|
||||
抵扣说明:
|
||||
|
||||
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
|
||||
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
|
||||
|
||||
[余额充值](https://i.csdn.net/#/wallet/balance/recharge)
|
||||
|
||||
举报
|
||||
|
||||
[AI 搜索](https://ai.csdn.net/?utm_source=cknow_pc_blog_right_hover) [智能体](https://ai.csdn.net/cmd?utm_source=cknow_pc_blog_right_hover) [AI 编程](https://ai.csdn.net/coding?utm_source=cknow_pc_blog_right_hover) [AI 作业助手](https://ai.csdn.net/homework?utm_source=cknow_pc_blog_right_hover)
|
||||
|
||||
隐藏侧栏 
|
||||
|
||||
程序员都在用的中文IT技术交流社区
|
||||
|
||||

|
||||
|
||||
专业的中文 IT 技术社区,与千万技术人共成长
|
||||
|
||||

|
||||
|
||||
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!
|
||||
|
||||
客服 返回顶部
|
||||
|
||||
    
|
||||
@@ -0,0 +1,138 @@
|
||||
安装:yum install firewalld
|
||||
------------------------
|
||||
|
||||
1、firewalld的基本使用
|
||||
----------------
|
||||
|
||||
启动: systemctl start firewalld
|
||||
|
||||
查看状态: systemctl status firewalld
|
||||
|
||||
禁用,禁止开机启动: systemctl disable firewalld
|
||||
|
||||
停止运行: systemctl stop firewalld
|
||||
|
||||
2.配置firewalld-cmd
|
||||
-----------------
|
||||
|
||||
查看版本: firewall-cmd --version
|
||||
|
||||
查看帮助: firewall-cmd --help
|
||||
|
||||
显示状态: firewall-cmd --state
|
||||
|
||||
查看所有打开的端口: firewall-cmd --zone=public --list-ports
|
||||
|
||||
更新防火墙规则: firewall-cmd --reload
|
||||
|
||||
更新防火墙规则,重启服务: firewall-cmd --completely-reload
|
||||
|
||||
查看已激活的Zone信息: firewall-cmd --get-active-zones
|
||||
|
||||
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
|
||||
|
||||
拒绝所有包:firewall-cmd --panic-on
|
||||
|
||||
取消拒绝状态: firewall-cmd --panic-off
|
||||
|
||||
查看是否拒绝: firewall-cmd --query-panic
|
||||
|
||||
3.信任级别,通过Zone的值指定
|
||||
-----------------
|
||||
|
||||
drop: 丢弃所有进入的包,而不给出任何响应
|
||||
block: 拒绝所有外部发起的连接,允许内部发起的连接
|
||||
public: 允许指定的进入连接
|
||||
external: 同上,对伪装的进入连接,一般用于路由转发
|
||||
dmz: 允许受限制的进入连接
|
||||
work: 允许受信任的计算机被限制的进入连接,类似 workgroup
|
||||
home: 同上,类似 homegroup
|
||||
internal: 同上,范围针对所有互联网用户
|
||||
trusted: 信任所有连接
|
||||
|
||||
4.firewall开启和关闭端口
|
||||
-----------------
|
||||
|
||||
**以下都是指在public的zone下的操作,不同的Zone只要改变Zone后面的值就可以**
|
||||
|
||||
**添加:**
|
||||
|
||||
firewall-cmd \--zone=public \--add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
|
||||
|
||||
**重新载入:**
|
||||
|
||||
firewall-cmd --reload
|
||||
|
||||
**查看:**
|
||||
|
||||
firewall-cmd \--zone=public \--query-port=80/tcp
|
||||
|
||||
**删除:**
|
||||
|
||||
firewall-cmd \--zone=public \--remove-port=80/tcp --permanent
|
||||
|
||||
5.**管理服务**
|
||||
----------
|
||||
|
||||
**以smtp服务为例, 添加到work zone**
|
||||
|
||||
**添加:**
|
||||
|
||||
firewall-cmd \--zone=work --add-service=smtp
|
||||
|
||||
**查看:**
|
||||
|
||||
firewall-cmd \--zone=work \--query-service=smtp
|
||||
|
||||
**删除:**
|
||||
|
||||
firewall-cmd \--zone=work \--remove-service=smtp
|
||||
|
||||
5.配置 IP 地址伪装
|
||||
------------
|
||||
|
||||
**查看:**
|
||||
|
||||
firewall-cmd \--zone=external \--query-masquerade
|
||||
|
||||
**打开:**
|
||||
|
||||
firewall-cmd \--zone=external --add-masquerade
|
||||
|
||||
**关闭:**
|
||||
|
||||
firewall-cmd \--zone=external --remove-masquerade
|
||||
|
||||
|
||||
|
||||
6.端口转发
|
||||
------
|
||||
|
||||
**打开端口转发,首先需要打开IP地址伪装**
|
||||
|
||||
**firewall-cmd \--zone=external --add-masquerade**
|
||||
|
||||
**转发 tcp 22 端口至 3753:**
|
||||
|
||||
firewall-cmd \--zone=external --add-forward-port=22:porto=tcp:toport=3753
|
||||
|
||||
**转发端口数据至另一个IP的相同端口:**
|
||||
|
||||
firewall-cmd \--zone=external --add-forward-port=22:porto=tcp:toaddr=192.168.1.112
|
||||
|
||||
**转发端口数据至另一个IP的 3753 端口:**
|
||||
|
||||
firewall-cmd \--zone=external --add-forward-port=22:porto=tcp::toport=3753:toaddr=192.168.1.112
|
||||
|
||||
6.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
|
||||
--------------------------------------------------------------
|
||||
|
||||
启动一个服务:systemctl start firewalld.service
|
||||
关闭一个服务:systemctl stop firewalld.service
|
||||
重启一个服务:systemctl restart firewalld.service
|
||||
显示一个服务的状态:systemctl status firewalld.service
|
||||
在开机时启用一个服务:systemctl enable firewalld.service
|
||||
在开机时禁用一个服务:systemctl disable firewalld.service
|
||||
查看服务是否开机启动:systemctl is-enabled firewalld.service
|
||||
查看已启动的服务列表:systemctl list-unit-files|grep enabled
|
||||
查看启动失败的服务列表:systemctl --failed
|
||||
@@ -0,0 +1,390 @@
|
||||
Centos之防火墙/ 服务管理 命令详细说明
|
||||
-----------------------
|
||||
|
||||
### 1、Centos7
|
||||
|
||||
> 在Centos7中使用firewall来代替ipables,但是iptables也可以继续安装使用,以下是firewall的操作命令
|
||||
|
||||
#### 1、启动防火墙
|
||||
|
||||
```
|
||||
`systemctl start firewalld`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
2、查看防火墙的状态
|
||||
|
||||
```
|
||||
`systemctl status firewalld`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 3、关闭防火墙
|
||||
|
||||
```
|
||||
`systemctl stop firewalld`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 4、设置防火墙开机自启
|
||||
|
||||
```
|
||||
`systemctl enable firewalld.service`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 5、关闭防火墙开机启动(需先关闭防火墙)
|
||||
|
||||
```
|
||||
`systemctl disable firewalld.service`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
#### 6、查看firewall的状态
|
||||
|
||||
```
|
||||
`firewall-cmd --state`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 7、查看防火墙规则
|
||||
|
||||
```
|
||||
`firewall-cmd --list-all`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 8、重新加载防火墙配置
|
||||
|
||||
```
|
||||
`firewall-cmd --reload`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 9、查看当前开放端口(允许任意IP访问)
|
||||
|
||||
```
|
||||
`firewall-cmd --zone=public --list-ports`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 10、开放指定端口
|
||||
|
||||
```
|
||||
`firewall-cmd --zone=public --add-port=80/tcp --permanent
|
||||
firewall-cmd --reload
|
||||
// --permanent为永久生效,没有此参数 服务器重启后配置失效`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
查看规则
|
||||
|
||||

|
||||
|
||||
#### 11、移除端口
|
||||
|
||||
```
|
||||
`firewall-cmd --zone=public --remove-port=80/tcp --permanent
|
||||
firewall-cmd --reload`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
> 可以看到80端口已经被移除了
|
||||
|
||||
#### 12 、其他 命令 暂时用不到
|
||||
|
||||
##### 查看允许指定IP访问端口的规则
|
||||
|
||||
```
|
||||
`firewall-cmd --zone=public --list-rich-rules`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
##### 开放指定端口(只允许指定IP访问)
|
||||
|
||||
以“只允许192.168.1.1的主机连接3306端口”为例
|
||||
|
||||
```
|
||||
`firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="3306" accept" --permanent
|
||||
firewall-cmd --reload`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||
PS. --permanent为永久生效,没有此参数centos重启后该配置将失效
|
||||
|
||||
##### 移除规则(只允许指定IP访问的端口)
|
||||
|
||||
以“移除只允许192.168.1.1的主机连接3306端口”为例
|
||||
|
||||
```
|
||||
`firewall-cmd --remove-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="3306" accept" --permanent
|
||||
firewall-cmd --reload`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||
ps --permanent为永久生效,没有此参数centos重启后该配置将失效
|
||||
|
||||
##### 移除默认的ssh服务
|
||||
|
||||
移除默认的ssh服务前,先确认是否已经额外开放了22端口,否则会导致无法使用ssh 远程连接 。
|
||||
|
||||
```
|
||||
`firewall-cmd --remove-service=ssh --permanent
|
||||
firewall-cmd --reload`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||
PS. --permanent为永久生效,没有此参数centos重启后该配置将失效
|
||||
|
||||
##### 查看某个端口是否开放
|
||||
|
||||
以检查80端口为例(yes:开放;no:未开放)
|
||||
|
||||
```
|
||||
`firewall-cmd --zone=public --query-port=80/tcp`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
##### TCP端口转发
|
||||
|
||||
\# 允许防火墙伪装IP
|
||||
|
||||
```
|
||||
`firewall-cmd --add-masquerade`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
\# 将本地80端口的流量转发到192.168.1.1的80端口
|
||||
|
||||
```
|
||||
`firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.1:toport=80 --permanent`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
PS. --permanent为永久生效,没有此参数centos重启后该配置将失效
|
||||
|
||||
```
|
||||
`查看版本:firewall-cmd --version
|
||||
|
||||
查看帮助: firewall-cmd --help
|
||||
|
||||
查看状态: firewall-cmd --state
|
||||
|
||||
查看区域信息: firewall-cmd --get-active-zones
|
||||
|
||||
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
|
||||
|
||||
拒绝所有包:firewall-cmd --panic-on
|
||||
|
||||
取消拒绝状态: firewall-cmd --panic-off
|
||||
|
||||
查看是否拒绝: firewall-cmd --query-panic`
|
||||
|
||||

|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
* 8
|
||||
* 9
|
||||
* 10
|
||||
* 11
|
||||
* 12
|
||||
* 13
|
||||
* 14
|
||||
* 15
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 2、Centos6
|
||||
|
||||
#### 1、查看当前防火墙的状态
|
||||
|
||||
```
|
||||
`service iptables status`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 2、关闭防火墙
|
||||
|
||||
```
|
||||
`service iptables stop`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 3、查看服务名
|
||||
|
||||
```
|
||||
`setup
|
||||
ls /etc/init.d/`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 4、自启动
|
||||
|
||||
```
|
||||
`chkconfig功能说明:检查,设置系统的各种服务
|
||||
语法:
|
||||
chkconfig [--add][--del][--list][系统服务] 或
|
||||
chkconfig [--level<等级代号>][系统服务][on/off/reset]
|
||||
--add 添加服务
|
||||
--del 删除服务
|
||||
--list 查看各服务启动状态`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
|
||||
|
||||
```
|
||||
|
||||
给每个服务的各个运行级别设置自启动/关闭
|
||||
|
||||
##### 1、查看服务
|
||||
|
||||
```
|
||||
`chkconfig --list`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
##### 2 查看单个服务 信息
|
||||
|
||||
```
|
||||
`chkconfig iptables --list
|
||||
chkconfig --list | grep iptables`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||
##### 3关闭自启动
|
||||
|
||||
```
|
||||
`chkconfig --level 5 sshd off`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
##### 4在所有模式下关闭/打开自启动
|
||||
|
||||
```
|
||||
`chkconfig 服务名 on/off`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
created: 2025-08-23T13:23
|
||||
updated: 2025-08-30T11:45
|
||||
---
|
||||
Posted on 2022-12-16 | In [工具二三](https://cloudlet.info/category/#/%E5%B7%A5%E5%85%B7%E4%BA%8C%E4%B8%89)
|
||||
|
||||
DEVONthink 是一款自称「专业文件知识信息管理库工具软件」、实则 Mac 专属的全流程知识库神器,集文档和信息材料的收集、储存、标注、组织、搜索、编辑等功能于一体,Windows 上几乎没有单一的平替甚至低配方案(Readwise 在某些方面算一款,但一方面主要针对的网络信息,一方面价格较高),那么,接下来,就是数量或者说价格取胜的时候了……下面按功能陈述
|
||||
|
||||
文档管理
|
||||
----
|
||||
|
||||
**Zotero(组织) + Logseq(标注索引) + Anytext searcher(全文搜索)**
|
||||
|
||||
Zotero 配合 ZotFile(插件)坚果云可以实现文档材料的基本管理(以及云同步),提供简单的组织功能,如分类、标签、索引(聊胜于无),主要针对工作文档(非文献)
|
||||
|
||||
这里的亮点在于 Logseq 支持 Zotero 的标注,在 Zotero 中对 PDF 进行标注后,复制标注,在 Logseq 中选择性粘贴(Ctrl+Shift+V),即可附带 pdf 的文件链接和注记的位置链接,点击链接可以在没开启 Zotero 和相关文档的情况下直接开启 Zotero 打开文档跳转到注记位置(并且支持图片),通过标注引用操作,内化的知识管理系统(Logseq)可以和外在的知识(Zetero 等)库较为完美的衔接起来
|
||||
|
||||
Zotero 本身只能索引 PDF 的文字内容,且中文支持似乎够呛,为此可以使用 Anytext searcher 进行全盘全文搜索,(需要注意该软件闭源),另外 Anytext 是基于索引搜索的,生成的索引文件占用空间可能非常大。如果需要无索引即时搜索可以考虑 FileLocator Pro,但这个体验就不好说了,适合临时应急
|
||||
|
||||
某些时候还可以加上 Everything 文件搜索,顺便,Everything 高版本也能全文搜索,工具栏 搜索 高级搜索 文件内容中包含的单词或短语,或者直接使用语法 `c:cloudlet content:cloudlet.info` 不过效率嘛……
|
||||
|
||||
材料收集
|
||||
----
|
||||
|
||||
**AHK 至 Logseq + Web Clipper 至 Webdav(坚果云)**
|
||||
|
||||
材料收集在 EverNote 时代根本就不是事,虽然 Evernote 养废了大量只收不看的松鼠症用户,但短文、长文、RSS、邮件的通杀实在是方便。在反复体验和比较后,个人目前选择短内容用 AHK 剪辑至 Logseq(Win+A 触发,Evernote 泪目),选择内容连带链接直接置于 Logseq 的 Jounals 中,在每日的 Logseq 整理中进一步细化,因为是 AHK,剪辑不限于网页,可以复制的地方都可以剪辑
|
||||
|
||||
长文要复杂一些,一方面,长文直接往 Logseq 扔很容易导致信息过载或落灰,另一方面,排版问题也比较大。权衡后选择了 Web Clipper 方案。 虽然 Web Clipper 集成了各种平台,但在现在这个地主家也没有余粮的年代(语雀点赞),建议还是使用 WebDAV 方案,直接剪辑生成 markdown 文件放到云存储(而非放到某个说不好能撑几年或者虽然活着但是不停的恶心人的具体产品上),md 文件不仅同时解决了备份和云同步问题,本身的设定也导致材料干净、易储存、易搜索、易转换,比如可以使用 AnyTxt 全文搜索、可以通过 Pandoc 批量转换为 PDF 扔 Zotero,如果对材料图片有需求(md 文件只是引用原文图片),可以自备图床,Web Clipper 支持将材料内图片上传
|
||||
|
||||
这里顺便说下简悦,初看上去,Simpread 在没有 DEVONthink 的 Win 平台甚至都有成为信息中枢的潜力,但是实际上,这个拥有迷宫般设置和功能的软件一般用户实在是难以驾驭,易用性基本为 0,可持续性也不高(几个月前的标注链接现在已经无法打开了),看官方教程都经常迷路,而且圆环套圆环,版本更迭造成的差异会导致教程自己都迷路,所以虽然产品的价格和服务极其良心,但使用体验实在太糟糕了,个人觉得,小补救是放弃图文教程改视频教程,但这个没法解决版本更迭带来的文档管理问题(某种程度上,这也是喜欢 AllInOne 的我转向 Web Clipper 剪辑 markdown 的一大原因) ,大补救是重构?……
|
||||
|
||||
RSS
|
||||
---
|
||||
|
||||
DEVONthink 的 RSS 功能本身远不如专业的 RSS 订阅服务,所以还是 Inoreader 之类就好,只是不用集成业务的话长内容还是需要跳转原文使用 Web Clipper(短内容直接 AHK 剪辑)
|
||||
|
||||
其他
|
||||
--
|
||||
|
||||
DEVONthink 的词频分析、材料筛选、规则自动化之类功能似乎替代很少,不过一般用户需求也不大
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
created: 2025-08-30T11:44
|
||||
updated: 2025-09-22T13:26
|
||||
---
|
||||
如何进入未运行的Docker容器
|
||||
----------------
|
||||
|
||||
在使用Docker进行应用开发和部署时,经常会遇到需要进入已创建但未运行的容器来进行调试、查看日志等操作的情况。本文将介绍一种解决方案来实现进入未运行的Docker容器。
|
||||
|
||||
### 问题描述
|
||||
|
||||
假设我们已经创建了一个Docker容器,但由于某种原因,该容器未能成功运行起来。我们需要进入该容器来查看具体的错误信息以进行故障排查。
|
||||
|
||||
### 解决方案
|
||||
|
||||
为了进入未运行的Docker容器,我们可以通过以下步骤来实现:
|
||||
|
||||
#### 步骤一:查看未运行容器的ID
|
||||
|
||||
首先,我们需要获取未运行的容器的ID。我们可以使用命令`docker ps -a`来列出所有的容器,包括已停止的容器。通过查看容器列表,我们可以确定目标容器的ID。
|
||||
|
||||
示例输出:
|
||||
|
||||
|
||||
在上述示例中,我们可以看到目标容器的ID为`f8e942f7314d`。
|
||||
|
||||
#### 步骤二:创建临时容器
|
||||
|
||||
为了进入未运行的容器,我们需要先创建一个临时容器,并将其连接到目标容器的文件系统。
|
||||
|
||||
在上述命令中,`--name temp-container`用于为临时容器指定一个名称,`-it`参数用于开启交互式终端,`<image_name>`需要替换为目标容器所使用的镜像名称。
|
||||
|
||||
#### 步骤三:复制目标容器的文件系统
|
||||
|
||||
使用以下命令将目标容器的文件系统复制到临时容器中:
|
||||
|
||||
在上述命令中,`<target_container_id>`需要替换为目标容器的ID,`<source_path>`和`<destination_path>`分别为源路径和目标路径。
|
||||
|
||||
#### 步骤四:进入临时容器
|
||||
|
||||
通过以下命令进入临时容器的交互式终端:
|
||||
|
||||
在上述命令中,`-ai`参数分别用于启动容器和开启交互式终端。
|
||||
|
||||
#### 步骤五:进行故障排查
|
||||
|
||||
通过进入临时容器的交互式终端,我们可以使用常见的命令进行故障排查,例如查看日志文件、执行命令等。完成故障排查后,我们可以通过`exit`命令退出临时容器。
|
||||
|
||||
#### 步骤六:删除临时容器
|
||||
|
||||
为了保持环境的整洁,我们可以删除临时容器。使用以下命令删除临时容器:
|
||||
|
||||
至此,我们已经成功进入未运行的Docker容器并进行故障排查。
|
||||
|
||||
### 总结
|
||||
|
||||
通过以上的步骤,我们可以很容易地进入未运行的Docker容器来进行故障排查。这个方法适用于大部分情况下,但如果容器存在特殊配置或挂载点,可能需要针对性地进行调整。
|
||||
|
||||
通过以上的解决方案,我们可以更方便地进行容器调试和故障排查,提高应用开发和部署的效率。希望本文对你有所帮助!
|
||||
@@ -0,0 +1,830 @@
|
||||
---
|
||||
created: 2025-08-30T11:44
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
title: 一、mac 安装及使用docker\_docker for mac-CSDN博客
|
||||
description: 文章浏览阅读2.8w次,点赞35次,收藏169次。本文详细介绍了Docker的基本概念、用途、安装配置、镜像管理和容器操作,包括创建镜像、使用Dockerfile、部署Koa应用等,还涵盖了镜像分层、Volume存储和常用命令。
|
||||
keywords: docker for mac
|
||||
|
||||
[blog.csdn.net](https://blog.csdn.net/qq_39208536/article/details/123357756 "一、mac 安装及使用docker")
|
||||
|
||||
# 一、mac 安装及使用docker
|
||||
|
||||
## 一、Docker是什么
|
||||
|
||||
**Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。**它是目前最流行的 Linux 容器解决方案。
|
||||
|
||||
Docker 将应用程序与该程序的依赖,打包在一个image文件里面。
|
||||
|
||||
运行这个文件,就会生成一个虚拟容器。
|
||||
|
||||
程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
|
||||
|
||||
![][1]
|
||||
|
||||
1、**Docker 把应用程序及其依赖,打包在 image 文件里面。**只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
|
||||
|
||||
2、image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
|
||||
|
||||
image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。
|
||||
|
||||
3、为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 [Docker Hub][2] 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。
|
||||
|
||||
有了 Docker,就不用担心环境问题。
|
||||
|
||||
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
|
||||
|
||||
## 二、Docker 的用途
|
||||
|
||||
Docker 的主要用途,目前有三大类。
|
||||
|
||||
**(1)提供一次性的环境。**比如,本地测试他人的软件、[持续集成][3]的时候提供单元测试和构建的环境。
|
||||
|
||||
**(2)提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
|
||||
|
||||
**(3)组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
|
||||
|
||||
## 三、安装:
|
||||
|
||||
### 下载地址:
|
||||
|
||||
[Empowering App Development for Developers | Docker][4]
|
||||
|
||||
[Get Started with Docker | Docker][5]
|
||||
|
||||
[Install Docker Desktop on Mac | Docker Documentation][6]
|
||||
|
||||
### 用户手册:
|
||||
|
||||
[Docker Desktop for Mac user manual | Docker Documentation][7]
|
||||
|
||||
Docker 是服务器----客户端架构。命令行运行`docker`命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动
|
||||
|
||||
1. 2. $ sudo service docker start
|
||||
|
||||
3. 4. 5. $ sudo systemctl start docker
|
||||
|
||||
###
|
||||
|
||||
## 四、配置镜像
|
||||
|
||||
### 4.1为什么要配置镜像:
|
||||
|
||||
因为docker服务器在国外,基于网速与“和谐墙”的问题,所以我们在国内操作国外镜像可能无法正常拉取,这需要我们为docker设置国内的阿里云镜像加速器。
|
||||
|
||||
### 4.2配置镜像
|
||||
|
||||
Preferences--Docker Engine
|
||||
|
||||
![][8]
|
||||
|
||||
![][9]
|
||||
|
||||
1. 2. 3. 4. 5. "https://e29lwva9.mirror.aliyuncs.com"
|
||||
|
||||
6. 7. 然后重启一下
|
||||
|
||||
### 4.3查看是否配置成功
|
||||
|
||||
在终端输入
|
||||
|
||||
|
||||
docker info
|
||||
|
||||
查看结果
|
||||
|
||||
![][10]
|
||||
|
||||
镜像配置成功
|
||||
|
||||
###
|
||||
|
||||
###
|
||||
|
||||
## 六、运行docker程序,实例:hello world
|
||||
|
||||
下面,我们通过最简单的 image 文件"[hello world"][11],感受一下 Docker。
|
||||
|
||||
需要说明的是,国内连接 Docker 的官方仓库很慢,还会断线,需要将默认仓库改成国内的镜像网站。
|
||||
|
||||
首先,运行下面的命令,将 image 文件从仓库抓取到本地。
|
||||
|
||||
|
||||
docker image pull library/hello-world
|
||||
|
||||
上面代码中,`docker image pull`是抓取 image 文件的命令。`library/hello-world`是 image 文件在仓库里面的位置,其中`library`是 image 文件所在的组,`hello-world`是 image 文件的名字。
|
||||
|
||||
由于 Docker 官方提供的 image 文件,都放在[library][12]组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。
|
||||
|
||||
|
||||
docker image pull hello-world
|
||||
|
||||
抓取成功以后,就可以在本机看到这个 image 文件了。
|
||||
|
||||
|
||||
docker images
|
||||
|
||||
现在,运行这个 image 文件。
|
||||
|
||||
|
||||
docker container run hello-world
|
||||
|
||||
`docker container run`命令会从 image 文件,生成一个正在运行的容器实例。
|
||||
|
||||
**注意,`docker container run`命令具有自动抓取 image 文件的功能。**
|
||||
|
||||
**如果发现本地没有指定的 image 文件,就会从仓库自动抓取。**
|
||||
|
||||
因此,前面的`docker image pull`命令并不是必需的步骤。
|
||||
|
||||
如果运行成功,你会在屏幕上读到下面的输出。
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker container run hello-world
|
||||
|
||||
2. 3. 4. This message shows that your installation appears to be working correctly.
|
||||
|
||||
输出这段提示以后,`hello world`就会停止运行,容器自动终止。
|
||||
|
||||
有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。
|
||||
|
||||
> \> 1. 2. $ docker container run -it ubuntu bash
|
||||
|
||||
对于那些不会自动终止的容器,必须使用[docker container kill][13] 命令手动终止。
|
||||
|
||||
> \> 1. 2. $ docker container kill [containID]
|
||||
|
||||
###
|
||||
|
||||
### 6.2 第一次运行命令 docker run ubuntu echo hello world
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker run ubuntu echo hello world
|
||||
|
||||
2. Unable to find image 'ubuntu:latest' locally
|
||||
|
||||
3. docker: Error response from daemon: pull access denied for cs, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
|
||||
|
||||
4. 运行失败,原因:
|
||||
|
||||
docker在运行一个容器之前,会先看本地是否有容器需要的image,如果没有的话会去远端下载。
|
||||
|
||||
运行完成之后,会在本地生成一个名为ubuntu的imge
|
||||
|
||||
![][14]
|
||||
|
||||
我们再次执行
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker run ubuntu echo hello world
|
||||
|
||||
2. 在 ubuntu这个image里,运行了echo hello world 这个命令,输出了hello world
|
||||
|
||||
### 查看本地所有的images
|
||||
|
||||
docker images
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker images
|
||||
|
||||
2. REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
|
||||
3. docker/getting-started latest adfdb308d623 3 weeks ago 27.4MB
|
||||
|
||||
4. ubuntu latest d5ca7a445605 4 months ago 65.6MB
|
||||
|
||||
5. hello-world latest 18e5af790473 5 months ago 9.14kB
|
||||
|
||||
## 七、容器文件
|
||||
|
||||
**image 文件生成的容器实例,本身也是一个文件,称为容器文件。**也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
|
||||
|
||||
1. 2. 3. 4. 5. $ docker container ls --all
|
||||
|
||||
上面命令的输出结果之中,包括容器的 ID (containerID)。很多地方都需要提供这个 ID,比如上一节终止容器运行的`docker container kill`命令。
|
||||
|
||||
终止运行的容器文件,依然会占据硬盘空间,可以使用[docker container rm][15]命令删除。
|
||||
|
||||
|
||||
docker container rm [containerID]
|
||||
|
||||
运行上面的命令之后,再使用`docker container ls --all`命令,就会发现被删除的容器文件已经消失了。
|
||||
|
||||
### **7.2容器与image的关系**
|
||||
|
||||
**image id 是固定不变的。根据同一个image生成的不同容器,容器id containerID 是不同的**
|
||||
|
||||
## 八、 docker启动nginx容器
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker run nginx
|
||||
|
||||
2. Unable to find image 'nginx:latest' locally
|
||||
|
||||
docker run nginx ,执行失败。
|
||||
|
||||
docker在运行一个容器之前,会先看本地是否有容器需要的image,如果没有的话会去远端下载。
|
||||
|
||||
再次运行:
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker run -p 8080:80 -d nginx
|
||||
|
||||
2. 612195861a8cd79ed5202c7eab581a86f78d0284672ab0662450236bebfbf696
|
||||
|
||||
运行成功
|
||||
|
||||
命令解释:
|
||||
|
||||
1. -p 8080:80 端口映射,将image的80端口,映射到本地8080端口
|
||||
|
||||
2. 3. -d 允许这个程序直接返回
|
||||
|
||||
** docker ps 查看我们刚刚启动docker容器的信息**
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker ps
|
||||
|
||||
2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
|
||||
3. 612195861a8c nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8080-\>80/tcp interesting_allen
|
||||
|
||||
**容器的id**
|
||||
|
||||
CONTAINER ID :612195861a8c
|
||||
|
||||
**端口映射关系**
|
||||
|
||||
PORTS: 0.0.0.0:8080-\>80/tcp
|
||||
|
||||
我们在浏览器访问地址:
|
||||
|
||||
|
||||
http://localhost:8080/
|
||||
|
||||
![][16]
|
||||
|
||||
我们在当前浏览器启动了一个nginx
|
||||
|
||||
3.3 我们在本地创建一个index.html文件
|
||||
|
||||
index.html
|
||||
|
||||
1. 2. 3. 将index.htm复制到ningx容器中
|
||||
|
||||
|
||||
docker cp index.html 612195861a8c://usr/share/nginx/html
|
||||
|
||||
612195861a8c 为容器的id。
|
||||
|
||||
我们再次访问
|
||||
|
||||
|
||||
http://localhost:8080/
|
||||
|
||||
![][17]
|
||||
|
||||
现在访问的就是我们刚刚复制过去的index.htm文件
|
||||
|
||||
**停止docker容器**
|
||||
|
||||
**docker stop 容器id**
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker stop 612195861a8c
|
||||
|
||||
2. 停止docker容器后,再次访问[http://localhost:8080/][18]
|
||||
|
||||
显示无法访问此网站
|
||||
|
||||
再次启动容器 docker run -p 8080:80 -d nginx
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker run -p 8080:80 -d nginx
|
||||
|
||||
2. b77bac0b212baaa7e33564ea623b09be58b06838a6fda4cf0612c397eaa11dad
|
||||
|
||||
查看详细信息 docker ps
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker ps
|
||||
|
||||
2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
|
||||
3. b77bac0b212b nginx "/docker-entrypoint.…" 12 seconds ago Up 10 seconds 0.0.0.0:8080-\>80/tcp strange_mcnulty
|
||||
|
||||
发现,容器的id变了。
|
||||
|
||||
再次访问
|
||||
|
||||
\<http://localhost:8080/\>
|
||||
|
||||
![][19]
|
||||
|
||||
此时访问的地址,展示的是nginx缺省的页面,而不是刚刚我们复制的index.htm页面。
|
||||
|
||||
这是因为在容器的改动,都是暂时的,不会被保存。
|
||||
|
||||
## 九、如何保存容器内的改动?
|
||||
|
||||
我们再次把index.html,复制到刚刚的容器中
|
||||
|
||||
|
||||
docker cp index.html 384c7a8e8028://usr/share/nginx/html
|
||||
|
||||
384c7a8e8028是容器id
|
||||
|
||||
访问:
|
||||
|
||||
\<http://localhost:8080/\>
|
||||
|
||||
### **9.1 使用commit命令来保存**
|
||||
|
||||
|
||||
docker commit -m '增加index' 384c7a8e8028
|
||||
|
||||
最后面的384c7a8e8028是容器的id
|
||||
|
||||
1. a58@58deMacBook-Pro-2 ~ % docker commit -m '增加index' 384c7a8e8028
|
||||
|
||||
2. sha256:14a1e785e7c14821e051c1939b2caeee8bc450a7e710ec959dd1ea085c1bc6c7
|
||||
|
||||
使用commit提交改动后,会产生一个新的image id。
|
||||
|
||||
查看所有的images
|
||||
|
||||
|
||||
docker images
|
||||
|
||||
![][20]
|
||||
|
||||
此时新增了一个image,但是 名字和TAG都是为空(因为我们刚刚commit的时候没有加名字)
|
||||
|
||||
再次重复执行一下刚刚的操作
|
||||
|
||||
|
||||
docker cp index.html 384c7a8e8028://usr/share/nginx/html
|
||||
|
||||
nginx-fun 是我们给的名字
|
||||
|
||||
|
||||
docker commit -m '增加index' 384c7a8e8028 nginx-fun
|
||||
|
||||
再次查看所有的image
|
||||
|
||||
|
||||
docker images
|
||||
|
||||
![][21]
|
||||
|
||||
### 9.2 删除image
|
||||
|
||||
删除名称为none的image
|
||||
|
||||
|
||||
docker rmi 14a1e785e7c1
|
||||
|
||||
rmi: remove image 的缩写
|
||||
|
||||
14a1e785e7c1: 要被删除的image的id
|
||||
|
||||
![][22]
|
||||
|
||||
### 9.3 删除容器
|
||||
|
||||
查看正在运行的docker 容器
|
||||
|
||||
|
||||
docker ps
|
||||
|
||||
停止正在运行的docker容器
|
||||
|
||||
|
||||
docker stop 384c7a8e8028
|
||||
|
||||
384c7a8e8028容器id CONTAINER ID
|
||||
|
||||
###
|
||||
|
||||
查看docker所有的容器(运行中的 历史的)
|
||||
|
||||
|
||||
docker ps -a
|
||||
|
||||
删除
|
||||
|
||||
删除2个
|
||||
|
||||
|
||||
docker rm 3a485ba7386e cb77a4f75e2e
|
||||
|
||||
再次查看所有
|
||||
|
||||
|
||||
docker ps -a
|
||||
|
||||
被删除的不在了
|
||||
|
||||
## 十、docker命令总结
|
||||
|
||||
|
||||
| ----- |
|
||||
| 命令 | 用途 |
|
||||
| docker pull | 远程拉取image |
|
||||
| docker build | 创建image |
|
||||
| docker images | 列出本地所有的image |
|
||||
| docker run | 运行容器container |
|
||||
| docker ps | 列出当前运行的容器container |
|
||||
| docker rm | 删除已经结束的容器container |
|
||||
| docker cp | 在本地和容器之间拷贝文件 |
|
||||
| docker commit | 保存改动生成新的image |
|
||||
| docker rmi | 删除image |
|
||||
|
||||
## 十一、Dockerfile 文件,自创镜像
|
||||
|
||||
学会使用 image 文件以后,接下来的问题就是,如何可以生成 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。
|
||||
|
||||
这就需要用到 Dockerfile 文件。它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。
|
||||
|
||||
下面通过一个实例,演示如何编写 Dockerfile 文件。
|
||||
|
||||
准备一个Dockerfile 文件,文件内容如下(只有三行):
|
||||
|
||||
1. 2. 3. 内容解释:
|
||||
|
||||
FROM alpine:latest 我们创造的新镜像依赖的基础镜像
|
||||
MAINTAINER cs 没有特殊的功能,就是标注作者是cs
|
||||
CMD echo 'hello docker' 运行一个命令
|
||||
|
||||
创建一个目录 d1
|
||||
|
||||
1. 2. 创建Dockerfile文件
|
||||
|
||||
|
||||
touch Dockerfile
|
||||
|
||||
这里文件名称,约定成俗的是Dockerfile,也可以用其他名字,但是不建议
|
||||
|
||||
编辑文件:
|
||||
|
||||
|
||||
vim Dockerfile
|
||||
|
||||
1. 2. 3. ### 11.1用docker命令构建新的image
|
||||
|
||||
|
||||
docker build -t hello_docker .
|
||||
|
||||
命令解释:
|
||||
|
||||
-t 打标签,标签名称为hell_docker
|
||||
|
||||
. 点是路径名,将路径内所有的文件都打包进image
|
||||
|
||||
构建成功后,查看我们刚刚创建的image
|
||||
|
||||
|
||||
docker images hello_docker
|
||||
|
||||
![][23]
|
||||
|
||||
运行我们的image
|
||||
|
||||
|
||||
docker run hello_docker
|
||||
|
||||
### 11.2 第二个Dockerfile
|
||||
|
||||
Dockerfile 文件内容:
|
||||
|
||||
1. 2. 3. RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
|
||||
|
||||
4. 5. RUN apt-get install -y nginx
|
||||
|
||||
6. COPY index.html /var/www/html
|
||||
|
||||
7. ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
|
||||
|
||||
8. FROM ubuntu 基础镜像ubuntu
|
||||
MAINTAINER cs 创作者
|
||||
|
||||
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
|
||||
|
||||
使用国内镜像,快一点
|
||||
|
||||
|
||||
RUN apt-get update 更新ubuntu的程序库
|
||||
RUN apt-get install -y nginx 安装nginx
|
||||
COPY index.html /var/www/html 拷贝本地index.htm文件到容器 /var/www/html 路径下
|
||||
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] 给出一个容器的入口,将nginx作为一个前台程序进行
|
||||
EXPOSE 80 端口号
|
||||
|
||||
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ![][24]
|
||||
|
||||
创建index.html
|
||||
|
||||
1. 在dockerfiler2目录下,创建index.html文件
|
||||
|
||||
2. 3. 4. index.html随便输入一个行内容 大家好
|
||||
|
||||
开始构建
|
||||
|
||||
|
||||
docker build -t cs/hello-nginx .
|
||||
|
||||
运行刚刚创建的image
|
||||
|
||||
|
||||
docker run -d -p 83:80 cs/hello-nginx
|
||||
|
||||
-d 作为守护进程
|
||||
|
||||
-p 83:80 映射到本地83端口
|
||||
|
||||
访问一下刚刚的容器
|
||||
|
||||
1. a58@58deMacBook-Pro-2 dockerfiler2 % curl http://localhost:83
|
||||
|
||||
2. ### 11.3Dockerfile语法
|
||||
|
||||
|
||||
| ----- |
|
||||
| 命令 | 用途 |
|
||||
| FROM | base image |
|
||||
| RUN | 在容器内执行命令 |
|
||||
| ADD | 往容器内添加文件(可以添加远程文件) |
|
||||
| COPY | 往容器内拷贝文件 |
|
||||
| CMD | 给容器添加一个执行入口 |
|
||||
| EXPOSE | 暴露端口 |
|
||||
| WORKDIR | 指定运行命令的路径 |
|
||||
| MAINTAINER | 维护者 |
|
||||
| ENV | 给容器里面环境设定变量 |
|
||||
| ENTRYOINIT | 设定容器入口 |
|
||||
| USER | 指定执行该命令的用户 |
|
||||
| VOLUME | |
|
||||
|
||||
## 十二、实例:制作自己的 Docker 容器
|
||||
|
||||
下面我以 [koa-demos][25] 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。
|
||||
|
||||
作为准备工作,请先[下载源码][26]。
|
||||
|
||||
1. git clone https://github.com/ruanyf/koa-demos.git
|
||||
|
||||
2. ### 12.1 编写 Dockerfile 文件
|
||||
|
||||
首先,在项目的根目录下,新建一个文本文件`.dockerignore`,写入下面的[内容][27]。
|
||||
|
||||
> \> 1. 2. 3. 4. 上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。
|
||||
|
||||
然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的[内容][28]。
|
||||
|
||||
1. 2. 3. 4. RUN npm install --registry=https://registry.npm.taobao.org
|
||||
|
||||
5. 上面代码一共五行,含义如下。
|
||||
|
||||
1. FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
|
||||
|
||||
2. 3. COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
|
||||
|
||||
4. 5. WORKDIR /app:指定接下来的工作路径为/app。
|
||||
|
||||
6. 7. RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
|
||||
|
||||
8. 9. EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。
|
||||
|
||||
#### 12.2 创建 image 文件
|
||||
|
||||
有了 Dockerfile 文件以后,就可以使用`docker image build`命令创建 image 文件了
|
||||
|
||||
> \> \> 1. 2. $ docker image build -t koa-demo .
|
||||
>
|
||||
> 3. 4. $ docker image build -t koa-demo:0.0.1 .
|
||||
|
||||
![][29]
|
||||
|
||||
上面代码中,`-t`参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是`latest`。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
|
||||
|
||||
如果运行成功,就可以看到新生成的 image 文件`koa-demo`了。
|
||||
|
||||
|
||||
docker images
|
||||
|
||||
1. a58@58deMacBook-Pro-2 koa-demos % docker images
|
||||
|
||||
2. REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
|
||||
3. koa-demo latest 1dc92a9cbdb2 13 seconds ago 676MB
|
||||
|
||||
4. docker/getting-started latest adfdb308d623 3 weeks ago 27.4MB
|
||||
|
||||
### 12.3 生成容器
|
||||
|
||||
`docker container run`命令会从 image 文件生成容器。
|
||||
|
||||
> \> 1. 2. $ docker container run -p 8000:3000 -it koa-demo /bin/bash
|
||||
>
|
||||
> 3. 4. $ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
|
||||
|
||||
上面命令的各个参数含义如下:
|
||||
|
||||
* `-p`参数:容器的 3000 端口映射到本机的 8000 端口。
|
||||
* `-it`参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
|
||||
* `koa-demo:0.0.1`:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
|
||||
* `/bin/bash`:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
|
||||
|
||||
如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
|
||||
|
||||
> \> 1. 2. 这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令。
|
||||
|
||||
> \> 1. 2. root@66d80f4aaf1e:/app# node demos/01.js
|
||||
|
||||
这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 http://127.0.0.1:8000,网页显示"Not Found",这是因为这个 [demo][30] 没有写路由。
|
||||
|
||||
这个例子中,Node 进程运行在 Docker 容器的虚拟环境里面,进程接触到的文件系统和网络接口都是虚拟的,与本机的文件系统和网络接口是隔离的,因此需要定义容器与物理机的端口映射(map)。
|
||||
|
||||
现在,在容器的命令行,按下 Ctrl c 停止 Node 进程,然后按下 Ctrl d (或者输入 exit)退出容器。此外,也可以用`docker container kill`终止容器运行。
|
||||
|
||||
> \> 1. 2. 3. 4. 5. $ docker container kill [containerID]
|
||||
|
||||
容器停止运行之后,并不会消失,用下面的命令删除容器文件。
|
||||
|
||||
> \> 1. 2. 3. $ docker container ls --all
|
||||
>
|
||||
> 4. 5. 6. $ docker container rm [containerID]
|
||||
|
||||
也可以使用`docker container run`命令的`\--rm`参数,在容器终止运行后自动删除容器文件。
|
||||
|
||||
> \> 1. 2. $ docker container run --rm -p 8000:3000 -it koa-demo /bin/bash
|
||||
|
||||
#### 12.4 CMD 命令
|
||||
|
||||
上一节的例子里面,容器启动以后,需要手动输入命令`node demos/01.js`。我们可以把这个命令写在 Dockerfile 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。
|
||||
|
||||
> \> 1. 2. 3. 4. 5. RUN npm install --registry=https://registry.npm.taobao.org
|
||||
>
|
||||
> 6. 7. 上面的 Dockerfile 里面,多了最后一行`CMD node demos/01.js`,它表示容器启动后自动执行`node demos/01.js`。
|
||||
|
||||
你可能会问,`RUN`命令与`CMD`命令的区别在哪里?简单说,`RUN`命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;`CMD`命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个`RUN`命令,但是只能有一个`CMD`命令。
|
||||
|
||||
注意,指定了`CMD`命令以后,`docker container run`命令就不能附加命令了(比如前面的`/bin/bash`),否则它会覆盖`CMD`命令。现在,启动容器可以使用下面的命令。
|
||||
|
||||
> \> 1. 2. $ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1
|
||||
|
||||
#### 12.5 发布 image 文件
|
||||
|
||||
容器运行成功后,就确认了 image 文件的有效性。这时,我们就可以考虑把 image 文件分享到网上,让其他人使用。
|
||||
|
||||
首先,去 [hub.docker.com][31] 或 [cloud.docker.com][32] 注册一个账户。然后,用下面的命令登录。
|
||||
|
||||
> \> 1. 2. 接着,为本地的 image 标注用户名和版本。
|
||||
|
||||
> \> 1. 2. $ docker image tag [imageName] [username]/[repository]:[tag]
|
||||
>
|
||||
> 3. 4. $ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1
|
||||
|
||||
也可以不标注用户名,重新构建一下 image 文件。
|
||||
|
||||
> \> 1. 2. $ docker image build -t [username]/[repository]:[tag] .
|
||||
|
||||
最后,发布 image 文件。
|
||||
|
||||
> \> 1. 2. $ docker image push [username]/[repository]:[tag]
|
||||
|
||||
发布成功以后,登录 hub.docker.com,就可以看到已经发布的 image 文件。
|
||||
|
||||
## 十四、其他有用的命令
|
||||
|
||||
docker 的主要用法就是上面这些,此外还有几个命令,也非常有用。
|
||||
|
||||
**(1)docker container start**
|
||||
|
||||
前面的`docker container run`命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用`docker container start`命令,它用来启动已经生成、已经停止运行的容器文件。
|
||||
|
||||
> \> 1. 2. $ docker container start [containerID]
|
||||
|
||||
**(2)docker container stop**
|
||||
|
||||
前面的`docker container kill`命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而`docker container stop`命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。
|
||||
|
||||
> \> 1. 2. $ docker container stop [containerID]
|
||||
|
||||
这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。
|
||||
|
||||
**(3)docker container logs**
|
||||
|
||||
`docker container logs`命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果`docker run`命令运行容器的时候,没有使用`-it`参数,就要用这个命令查看输出。
|
||||
|
||||
> \> 1. 2. $ docker container logs [containerID]
|
||||
|
||||
**(4)docker container exec**
|
||||
|
||||
`docker container exec`命令用于进入一个正在运行的 docker 容器。如果`docker run`命令运行容器的时候,没有使用`-it`参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。
|
||||
|
||||
> \> 1. 2. $ docker container exec -it [containerID] /bin/bash
|
||||
|
||||
**(5)docker container cp**
|
||||
|
||||
`docker container cp`命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。
|
||||
|
||||
> \> 1. 2. $ docker container cp [containID]:[/path/to/file] .
|
||||
|
||||
## 十五、镜像分层
|
||||
|
||||
镜像是分层被存储的,而不是作为整个文件被存储的。
|
||||
|
||||
Dockerfile中的每一行都产生一个新增
|
||||
|
||||
![][33]
|
||||
|
||||
已经存在image里面的层,是只读的
|
||||
|
||||
![][34]
|
||||
|
||||
当image被容器运行,会产生一个新层 容器层container layer ,这一层是可读可写的。
|
||||
|
||||
**分层的好处:**
|
||||
|
||||
A image 有10层,B image有7层,其中5层是共享的,节省了空间。
|
||||
|
||||
## 十六、Volume docker的存储技术
|
||||
|
||||
提供**独立**于容器之外的**持久化**存储
|
||||
|
||||
在容器中的改动,是不会被保存的。Volume提供了一个比较方便的,持久化的。
|
||||
|
||||
比如运行一个数据库容器的操作,数据库的数据应该是被持久化的。Volume就可以做这些,并且可以提供给容器之间的共享数据。
|
||||
|
||||
### 16.1 Volume
|
||||
|
||||
Volume
|
||||
|
||||
方式一 通过-v命令
|
||||
|
||||
|
||||
docker run -d --name nginx -v /usr/share/nginx/html nginx
|
||||
|
||||
\--name nginx 给他命名为nginx
|
||||
|
||||
查看容器的所有信息
|
||||
|
||||
|
||||
docker inspect nginx
|
||||
|
||||
![][35]
|
||||
|
||||
宿主机的这个路径 "Source": "/var/lib/....挂载到了 容器的内部这个地址/usr/share/nginx/html
|
||||
|
||||
在终端查看 “/var/lib/docker/volumes/7597264b02449c89e469f00198fa48a803883a7c6cf403c97e005a5d747c3326/_data’ 这个地址
|
||||
|
||||
|
||||
ls /var/lib/docker/volumes/7597264b02449c89e469f00198fa48a803883a7c6cf403c97e005a5d747c3326/_data
|
||||
|
||||
提示No such file or directory,
|
||||
|
||||
参考博客:
|
||||
|
||||
[docker的简单使用:mac下docker配置http镜像源,并pull和push镜像_星痕の博客-CSDN博客_docker http pull][36]
|
||||
|
||||
[mac docker配置镜像的方式_峰会路转的博客-CSDN博客_docker mac 设置镜像][37]
|
||||
|
||||
[Mac 下如何切换 Docker 容器镜像?(更改阿里镜像)_hedeqiang-CSDN博客][38]
|
||||
|
||||
[Docker 入门教程 - 阮一峰的网络日志][39]
|
||||
|
||||
![][40]微信名片
|
||||
|
||||
![][41]
|
||||
|
||||
[1]: https://i-blog.csdnimg.cn/blog_migrate/5527e927b7ccce1dfc6239a8b9bcca67.png
|
||||
[2]: https://hub.docker.com/ "Docker Hub"
|
||||
[3]: https://so.csdn.net/so/search?q=持续集成&spm=1001.2101.3001.7020
|
||||
[4]: https://www.docker.com/ "Empowering App Development for Developers | Docker"
|
||||
[5]: https://www.docker.com/get-started "Get Started with Docker | Docker"
|
||||
[6]: https://docs.docker.com/desktop/mac/install/ "Install Docker Desktop on Mac | Docker Documentation"
|
||||
[7]: https://docs.docker.com/desktop/mac/ "Docker Desktop for Mac user manual | Docker Documentation"
|
||||
[8]: https://i-blog.csdnimg.cn/blog_migrate/215ec31b6f55d914d93ed053d17a31b1.png
|
||||
[9]: https://i-blog.csdnimg.cn/blog_migrate/4ab96c49ea2d073a6e5b79b1b5366150.png
|
||||
[10]: https://i-blog.csdnimg.cn/blog_migrate/998c377e7bc5eee577163c61515c8905.png
|
||||
[11]: https://hub.docker.com/r/library/hello-world/ "hello world""
|
||||
[12]: https://hub.docker.com/r/library/ "library"
|
||||
[13]: https://docs.docker.com/engine/reference/commandline/container_kill/ "docker container kill"
|
||||
[14]: https://i-blog.csdnimg.cn/blog_migrate/a608547e184a5232cfb75263900ed773.png
|
||||
[15]: https://docs.docker.com/engine/reference/commandline/container_rm/ "docker container rm"
|
||||
[16]: https://i-blog.csdnimg.cn/blog_migrate/f379a2eeaa6b13d23b5334a48a3360ac.png
|
||||
[17]: https://i-blog.csdnimg.cn/blog_migrate/e7ab19bae157ff724314a25b7fea6694.png
|
||||
[18]: http://localhost:8080/ " http://localhost:8080/"
|
||||
[19]: https://i-blog.csdnimg.cn/blog_migrate/622cd2db10f66629692b957393645be6.png
|
||||
[20]: https://i-blog.csdnimg.cn/blog_migrate/81c40321bfc1ffdc05dee22d7a233cc7.png
|
||||
[21]: https://i-blog.csdnimg.cn/blog_migrate/51127fbeebd7c5a82f6682d2b5aedd90.png
|
||||
[22]: https://i-blog.csdnimg.cn/blog_migrate/2c430c6896727b64fe19a6bf4c332e4a.png
|
||||
[23]: https://i-blog.csdnimg.cn/blog_migrate/2295528f994daf5b4c3f4e8117610864.png
|
||||
[24]: https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png ""
|
||||
[25]: https://www.ruanyifeng.com/blog/2017/08/koa.html "koa-demos"
|
||||
[26]: https://github.com/ruanyf/koa-demos/archive/master.zip "下载源码"
|
||||
[27]: https://github.com/ruanyf/koa-demos/blob/master/.dockerignore "内容"
|
||||
[28]: https://github.com/ruanyf/koa-demos/blob/master/Dockerfile "内容"
|
||||
[29]: https://i-blog.csdnimg.cn/blog_migrate/78b5881ccf071bceeb7ff175172fe3ae.png
|
||||
[30]: https://github.com/ruanyf/koa-demos/blob/master/demos/01.js "demo"
|
||||
[31]: https://hub.docker.com/ "hub.docker.com"
|
||||
[32]: https://cloud.docker.com/ "cloud.docker.com"
|
||||
[33]: https://i-blog.csdnimg.cn/blog_migrate/1ec885b7a5b3097a004c038acb642384.png
|
||||
[34]: https://i-blog.csdnimg.cn/blog_migrate/f70bcd3e3417c701e66fba00cde8d8c1.png
|
||||
[35]: https://i-blog.csdnimg.cn/blog_migrate/62b9176c94ec43843e514de704afbee9.png
|
||||
[36]: https://blog.csdn.net/xinghen1993/article/details/106575944 "docker的简单使用:mac下docker配置http镜像源,并pull和push镜像_星痕の博客-CSDN博客_docker http pull"
|
||||
[37]: https://blog.csdn.net/qq_27702739/article/details/107707689 "mac docker配置镜像的方式_峰会路转的博客-CSDN博客_docker mac 设置镜像"
|
||||
[38]: https://blog.csdn.net/hedeqiang9436/article/details/106498597 "Mac 下如何切换 Docker 容器镜像?(更改阿里镜像)_hedeqiang-CSDN博客"
|
||||
[39]: https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html "Docker 入门教程 - 阮一峰的网络日志"
|
||||
[40]: https://g.csdnimg.cn/extension-box/2.0.0/image/weixin.png
|
||||
[41]: https://g.csdnimg.cn/extension-box/2.0.0/image/ic_move.png
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
---
|
||||
profileName: Happy Again
|
||||
postId: "50"
|
||||
postType: post
|
||||
categories:
|
||||
- 3
|
||||
---
|
||||
### 引言
|
||||
|
||||
Docker作为现代开发与部署的核心工具,极大地简化了应用容器化的过程。然而,在实际操作中,我们常常会遇到需要进入未启动的容器进行调试或修改配置的情况。本文将详细探讨如何在Docker中安全地进入未启动的容器,进行调试和配置,并提供一些实用的技巧和解决方案。
|
||||
|
||||
### 1\. Docker基础概念回顾
|
||||
|
||||
在深入讨论之前,我们先回顾一些Docker的基础概念:
|
||||
|
||||
* **Docker镜像(Image)**:一个静态的文件系统,包含运行应用所需的所有文件和配置。
|
||||
* **Docker容器(Container)**:从镜像创建的运行实例,可以启动、停止、删除等。
|
||||
* **存储卷(Volume)**:用于持久化数据的机制,可以在容器之间共享数据。
|
||||
|
||||
### 2\. 为什么需要进入未启动的容器?
|
||||
|
||||
在实际开发中,可能会遇到以下几种情况需要进入未启动的容器:
|
||||
|
||||
* **配置错误**:修改了配置文件导致容器无法启动。
|
||||
* **调试应用**:需要在容器内部查看日志或运行调试工具。
|
||||
* **数据恢复**:从容器中恢复数据。
|
||||
|
||||
### 3\. 进入未启动容器的步骤
|
||||
|
||||
#### 3.1 使用`docker run`命令创建并映射文件系统
|
||||
|
||||
首先,我们可以使用`docker run`命令创建一个未启动的容器,并将容器的文件系统映射到宿主机的目录中。例如:
|
||||
|
||||
```bash
|
||||
docker run -v /host/path:/container/path -it --name mycontainer imagenam
|
||||
|
||||
```
|
||||
|
||||
* `-v /host/path:/container/path`:将宿主机的`/host/path`目录映射到容器的`/container/path`目录。
|
||||
* `-it`:以交互模式运行容器。
|
||||
* `--name mycontainer`:为容器指定一个名称。
|
||||
|
||||
#### 3.2 使用`docker cp`命令拷贝文件
|
||||
|
||||
如果容器已经存在但未启动,可以使用`docker cp`命令将容器内的文件拷贝到宿主机上:
|
||||
|
||||
```bash
|
||||
docker cp mycontainer:/etc/mysql/my.cnf /host/path/my.cnf
|
||||
|
||||
```
|
||||
|
||||
#### 3.3 修改文件
|
||||
|
||||
在宿主机上修改拷贝出来的文件,确保配置正确。
|
||||
|
||||
#### 3.4 将修改后的文件重新拷贝回容器
|
||||
|
||||
修改完成后,使用`docker cp`命令将文件重新拷贝回容器:
|
||||
|
||||
```bash
|
||||
docker cp /host/path/my.cnf mycontainer:/etc/mysql/my.cnf
|
||||
|
||||
```
|
||||
|
||||
#### 3.5 启动容器
|
||||
|
||||
确认文件修改无误后,启动容器:
|
||||
|
||||
```bash
|
||||
docker start mycontainer
|
||||
|
||||
```
|
||||
|
||||
### 4\. 高级技巧:使用`docker commit`创建新镜像
|
||||
|
||||
如果你需要对容器进行多次修改,可以使用`docker commit`命令将修改后的容器创建为一个新的镜像:
|
||||
|
||||
```bash
|
||||
docker commit mycontainer newimage
|
||||
|
||||
```
|
||||
|
||||
这样,你就可以从新镜像创建新的容器,而不需要每次都手动修改。
|
||||
|
||||
### 5\. 常见问题与解决方案
|
||||
|
||||
#### 5.1 容器启动失败
|
||||
|
||||
**问题**:修改配置文件后,容器无法启动。
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 使用`docker logs mycontainer`查看容器日志,找出错误原因。
|
||||
2. 使用`docker cp`命令将配置文件拷贝到宿主机进行修改。
|
||||
3. 重新拷贝修改后的文件回容器,并启动容器。
|
||||
|
||||
#### 5.2 文件权限问题
|
||||
|
||||
**问题**:拷贝回容器的文件权限不正确,导致应用无法正常运行。
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 使用`docker exec`进入容器,调整文件权限:
|
||||
|
||||
```bash
|
||||
|
||||
docker exec -it mycontainer /bin/bash
|
||||
chmod 644 /etc/mysql/my.cnf
|
||||
|
||||
```
|
||||
|
||||
2. 或者在使用`docker cp`命令时,确保文件权限正确。
|
||||
|
||||
### 6\. 安全注意事项
|
||||
|
||||
* **最小权限原则**:尽量以最小权限运行容器,避免使用`root`用户。
|
||||
* **数据备份**:在进行任何修改前,务必备份重要数据。
|
||||
* **网络安全**:确保容器网络配置安全,避免暴露不必要的端口。
|
||||
|
||||
### 7\. 总结
|
||||
|
||||
在Docker中进入未启动的容器进行调试和配置是一项常见但需要谨慎操作的任务。通过本文介绍的方法,你可以安全地修改容器内的文件,解决配置错误等问题。掌握这些技巧,将大大提升你在Docker环境中的工作效率。
|
||||
|
||||
### 8\. 参考资料
|
||||
|
||||
* Docker官方文档:[https://docs.docker.com/](https://docs.docker.com/)
|
||||
* Docker常见问题与解决方案:[https://docs.docker.com/troubleshoot/](https://docs.docker.com/troubleshoot/)
|
||||
|
||||
希望本文能对你有所帮助,祝你在Docker的使用过程中一切顺利!
|
||||
@@ -0,0 +1,67 @@
|
||||
我整理的一些关于【Docker】的项目学习资料(附讲解~~)和大家一起分享、学习一下:
|
||||
|
||||
[ https://d.51cto.com/f2PFnN](https://d.51cto.com/f2PFnN)
|
||||
|
||||
### 使用Docker安装Cpolar的指南
|
||||
|
||||
Cpolar是一种强大且易于使用的工具,它可以帮助用户将本地服务暴露到互联网中。对于需要与外部网络进行交互的开发者来说,Cpolar是一个非常有用的解决方案。本文将介绍如何利用Docker安装Cpolar,并提供一些使用示例。
|
||||
|
||||
#### 什么是Docker?
|
||||
|
||||
Docker是一个开源的容器化平台,它允许开发者打包应用程序及其所有依赖项为一个称为“容器”的标准化单元。通过使用容器,开发者可以确保在任何环境中都能一致地运行他们的应用程序。
|
||||
|
||||
#### 为什么使用Docker安装Cpolar?
|
||||
|
||||
1. **环境一致性**:使用Docker可以确保你在本地开发的代码在其他环境中(如生产环境)可以无缝运行。
|
||||
2. **简化安装过程**:Docker可以简化软件的安装过程,避免了复杂的软件依赖问题。
|
||||
3. **便于部署和管理**:Docker容器可以轻松地在不同的环境中进行部署和管理。
|
||||
|
||||
#### 安装Docker
|
||||
|
||||
在安装Cpolar之前,首先需要安装Docker。根据不同的操作系统,你可以从\[Docker的官方下载页面\](
|
||||
|
||||
完成后,你可以使用 `sudo docker --version` 来验证Docker是否成功安装。
|
||||
|
||||
#### 安装Cpolar
|
||||
|
||||
有了Docker之后,我们可以在Docker中安装Cpolar。首先,需要拉取Cpolar的Docker镜像。你可以使用以下命令:
|
||||
|
||||
拉取完成后,我们可以运行Cpolar容器,以下是一个基本的启动示例:
|
||||
|
||||
在上面的命令中,`-e` 参数用于设置环境变量,这里我们需要提供 Cpolar 的认证令牌 `CPOLAR_AUTH_TOKEN`。你需要在 Cpolar 官网注册并获取这个令牌。`-p 80:80` 参数将Cpolar的端口映射到主机的80端口。根据需求,你可以修改端口映射。
|
||||
|
||||
#### 配置Cpolar隧道
|
||||
|
||||
Cpolar启动后,你可以通过命令行创建一个新的隧道。以下是一个创建HTTP隧道的示例:
|
||||
|
||||
在这个命令中,我们创建了一个指向本地8080端口的HTTP隧道。你可以通过Cpolar提供的公网地址来访问这个端口。
|
||||
|
||||
#### 监控和管理容器
|
||||
|
||||
使用Docker,你可以轻松监控和管理你的容器。可以使用以下命令查看当前的Docker容器状态:
|
||||
|
||||
如果你需要停止Cpolar容器,可以使用以下命令:
|
||||
|
||||
要重新启动容器,可以使用以下命令:
|
||||
|
||||
#### 使用Mermaid生成旅行图
|
||||
|
||||
为了更好地理解整个流程,我们可以使用Mermaid语法生成一张简单的旅行图(Journey)。
|
||||
|
||||
使用Docker安装Cpolar的步骤 安装Docker 更新APT索引 安装依赖包 添加Docker的GPG密钥 添加APT源 安装Docker 安装Cpolar 拉取Cpolar镜像 启动Cpolar容器 创建隧道 创建HTTP隧道 管理容器 查看正在运行的容器 停止Cpolar容器 重启Cpolar容器 使用Docker安装Cpolar的步骤
|
||||
|
||||
上面的图清晰地展示了使用Docker安装Cpolar的各个阶段和步骤。
|
||||
|
||||
#### 注意事项
|
||||
|
||||
1. **网络设置**:确保你的防火墙允许Docker的网络访问。
|
||||
2. **安全性**:使用公共网络时,请确保你的认证令牌和传输数据的安全性。
|
||||
3. **资源管理**:Docker容器会消耗系统资源,请定期清理不再使用的容器和镜像,以保持系统的性能。
|
||||
|
||||
#### 结语
|
||||
|
||||
通过本文的介绍,我们学习了如何利用Docker安装和配置Cpolar。从环境的一致性,到简化的安装过程,Docker为我们带来了许多便利。希望这篇文章能够帮助到想要使用Cpolar的开发者们。通过这些步骤,你应该可以轻松地将本地服务暴露到互联网,实现更高效的开发和测试。
|
||||
|
||||
整理的一些关于【Docker】的项目学习资料(附讲解~~),需要自取:
|
||||
|
||||
[ https://d.51cto.com/f2PFnN](https://d.51cto.com/f2PFnN)
|
||||
@@ -0,0 +1,306 @@
|
||||
---
|
||||
created: 2025-08-30T11:45
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
> 转自我的个人博客[https://blognas.hwb0307.com](https://link.zhihu.com/?target=https%3A//blognas.hwb0307.com/)。欢迎关注!
|
||||
|
||||
前言
|
||||
--
|
||||
|
||||
关于RSS的介绍这里不再多说,请看我的另一篇博文:[解决信息爆炸困扰的完美方案——RSS](https://link.zhihu.com/?target=https%3A//blognas.hwb0307.com/skill-2/816)。
|
||||
|
||||
RSS订阅器平台有很多选择,大家可以看这个文章:[2022年10款最佳RSS阅读器推荐(在线/软件+免费/付费)- 安卓、iOS, Windows, Mac, Linux等适用!](https://link.zhihu.com/?target=https%3A//www.extrabux.cn/chs/guide/6500762)。那**为什么我还是觉得应该有一个自己的RSS订阅器平台**呢?我觉得有以下几点理由:
|
||||
|
||||
* 基于[Docker](https://zhida.zhihu.com/search?content_id=202687598&content_type=Article&match_order=1&q=Docker&zhida_source=entity),自建难度低,迁移性好。
|
||||
* 自建RSS订阅器平台足够强大。有fiter功能等。
|
||||
* 数据完全掌握在自己手中。可通过duplicati备份。
|
||||
* 无广告,不担心托管平台倒闭。RSS阅读器平台经常会由于盈利或政策原因关门。
|
||||
* 没有订阅数上限或其它恶心的限制。完全免费。
|
||||
* 进一步压榨VPS。毕竟有这么多性能溢出!
|
||||
|
||||
下面我们搭建一个RSS平台——`[Tiny Tiny RSS](https://zhida.zhihu.com/search?content_id=202687598&content_type=Article&match_order=1&q=Tiny+Tiny+RSS&zhida_source=entity)`,即`TTRSS`。基于[Fever API](https://zhida.zhihu.com/search?content_id=202687598&content_type=Article&match_order=1&q=Fever+API&zhida_source=entity),`TTRSS`也可完美地适配手机端(IOS; 安卓应该也是类似的)的阅读。
|
||||
|
||||
搭建过程中主要参考[咕咕:二十分钟搭建一个属于自己的RSS服务](https://link.zhihu.com/?target=https%3A//blog.laoda.de/archives/tinytinyrss)和一些官方文档。总之很容易安装。开始吧!
|
||||
|
||||
测试环境
|
||||
----
|
||||
|
||||
用的腾讯云VPS:
|
||||
|
||||
```text
|
||||
uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
|
||||
docker --version # Docker version 20.10.5, build 55c4c88
|
||||
docker-compose --version # docker-compose version 1.28.6, build 5db8d86f
|
||||
```
|
||||
|
||||
准备工作
|
||||
----
|
||||
|
||||
```text
|
||||
# 工作目录 按需修改
|
||||
work=~/docker/tinytinyrss && mkdir -p $work && cd $work
|
||||
|
||||
# 防火墙开放端口 按需修改
|
||||
sudo ufw allow 3894/tcp comment 'tinytinyrss' && sudo ufw reload
|
||||
|
||||
# 提前拉取镜像,国内下载速度也蛮快的
|
||||
docker pull wangqiru/ttrss:latest
|
||||
docker pull wangqiru/mercury-parser-api:latest
|
||||
docker pull wangqiru/opencc-api-server:latest
|
||||
docker pull postgres:13-alpine
|
||||
```
|
||||
|
||||
配置yml
|
||||
-----
|
||||
|
||||
新建文件:
|
||||
|
||||
```text
|
||||
vim $work/docker-compose.yml
|
||||
```
|
||||
|
||||
添加以下内容:
|
||||
|
||||
```text
|
||||
version: "3"
|
||||
services:
|
||||
service.rss:
|
||||
image: wangqiru/ttrss:latest
|
||||
container_name: ttrss
|
||||
ports:
|
||||
- 3894:80 # 按需修改
|
||||
environment:
|
||||
- SELF_URL_PATH=https://rss.domain.com/ # 按需修改
|
||||
- DB_PASS=ipbufQW8F2 # 按需修改。与下面的密码对应
|
||||
volumes:
|
||||
- ./feed-icons:/var/www/feed-icons/
|
||||
networks:
|
||||
- public_access
|
||||
- service_only
|
||||
- database_only
|
||||
stdin_open: true
|
||||
tty: true
|
||||
restart: always
|
||||
|
||||
service.mercury:
|
||||
image: wangqiru/mercury-parser-api:latest
|
||||
container_name: mercury
|
||||
networks:
|
||||
- public_access
|
||||
- service_only
|
||||
restart: always
|
||||
|
||||
service.opencc:
|
||||
image: wangqiru/opencc-api-server:latest
|
||||
container_name: opencc
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
networks:
|
||||
- service_only
|
||||
restart: always
|
||||
|
||||
database.postgres:
|
||||
image: postgres:13-alpine
|
||||
container_name: postgres
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=ipbufQW8F2 # 按需修改。与上面的密码对应
|
||||
volumes:
|
||||
- ./db/:/var/lib/postgresql/data
|
||||
networks:
|
||||
- database_only
|
||||
restart: always
|
||||
|
||||
networks:
|
||||
public_access:
|
||||
service_only:
|
||||
internal: true
|
||||
database_only:
|
||||
internal: true
|
||||
```
|
||||
|
||||
这里要说明的是,除了`按需修改`的部分,其它代码大家尽量不要动它,免得在后面的设置中出错。如果你是大神就当我没说吧!
|
||||
|
||||
上线服务:
|
||||
|
||||
```text
|
||||
cd $work && docker-compose up -d
|
||||
```
|
||||
|
||||
可以通过这个命令查看日志:
|
||||
|
||||
改变文件夹的权限。这一步一定要做,否则TTRSS无法成功启用。
|
||||
|
||||
```text
|
||||
sudo chmod 777 $work/feed-icons
|
||||
```
|
||||
|
||||
重启应用:
|
||||
|
||||
ddns-go & NPM
|
||||
-------------
|
||||
|
||||
ddns-go或者域名托管后台里添加域名:`rss.domain.com`
|
||||
|
||||
NPM无特殊设置。类似于:
|
||||
|
||||

|
||||
|
||||
初始化
|
||||
---
|
||||
|
||||
默认帐户:
|
||||
|
||||
第一次登陆进行要先改一个密码,用bitwarden生成强密码:
|
||||
|
||||

|
||||
|
||||
在用户这里,点admin:
|
||||
|
||||

|
||||
|
||||
填入一个新密码:
|
||||
|
||||

|
||||
|
||||
更改新密码后,重新用新密码登陆。帐户信息可用bitwarden保存。
|
||||
|
||||
设置
|
||||
--
|
||||
|
||||
我们可以去`偏好设置`那里:
|
||||
|
||||

|
||||
|
||||
启用外部API
|
||||
-------
|
||||
|
||||
这一部分的设置主要是为了让外部终端(比如手机的[Unread](https://zhida.zhihu.com/search?content_id=202687598&content_type=Article&match_order=1&q=Unread&zhida_source=entity))可以访问它。毕竟我们很有可能经常在手机上看我们的RSS订阅!
|
||||
|
||||

|
||||
|
||||
开启Mercucy和opencc功能
|
||||
------------------
|
||||
|
||||
开启`Mercucy`是为了可以获取全文;开启`opencc`是为了中文的简繁体转换。记得点`启用选择`生效。这主要是电脑端的优化吧,对手机阅读端而言没有太多影响。
|
||||
|
||||

|
||||
|
||||
启用Fever API
|
||||
-----------
|
||||
|
||||
可以用bitwarden生成一个密码并填入`Set Password`前面的空格中,记得点击`Set Password`保存。这个密码主要是在手机客户端通过Fever API订阅时需要用。你也可以设置得简单点。不过,如果你手机上有bitwarden的话,密码再长也无所谓,因为你不需要记住它!
|
||||
|
||||

|
||||
|
||||
设置订阅源插件
|
||||
-------
|
||||
|
||||
我们的docker-compose安装过程中已经内置了`Mercucy`和`opencc`两个应用。由于之前在偏好设置中启用了`Mercucy`和`opencc`功能,所以这里我们要指定它们的应用API。
|
||||
|
||||
* Mercucy:
|
||||
|
||||

|
||||
|
||||
* opencc
|
||||
|
||||

|
||||
|
||||
`TTRSS`的设置和一般软件设置的布局不太一样,刚开始操作时可能令人摸不着头脑。大家多多探索一下,应该问题不大!
|
||||
|
||||
添加分类和信息源
|
||||
--------
|
||||
|
||||
这个就比较简单了,自己摸索一下吧。主要有2个入口,这里直接贴图。
|
||||
|
||||
主页的入口:
|
||||
|
||||

|
||||
|
||||
偏好设置中的入口:
|
||||
|
||||

|
||||
|
||||
不懂的话评论区留言。
|
||||
|
||||
其它
|
||||
--
|
||||
|
||||
这里主要分享一些我觉得比较实用的设置。
|
||||
|
||||
不展开文章
|
||||
-----
|
||||
|
||||
有些订阅源的正文很长很长,如果你设置了`始终展开文章`,阅读体验很差。
|
||||
|
||||

|
||||
|
||||
换主题
|
||||
---
|
||||
|
||||
如果不喜欢默认皮肤,还可以换主题。这个利好颜控!
|
||||
|
||||
比如,我将主题改成`feedly-cozy`:
|
||||
|
||||

|
||||
|
||||
实际效果如下:
|
||||
|
||||

|
||||
|
||||
看某篇文章时的效果如下:
|
||||
|
||||

|
||||
|
||||
感觉棒棒哒!其它主题就没试过了。我比较随意,并不在意这些花里胡哨的东西。
|
||||
|
||||
快捷键
|
||||
---
|
||||
|
||||
像大多数RSS阅读器一样,TTRSS也有快捷键:
|
||||
|
||||

|
||||
|
||||
我觉得比较实用的快捷键就2个:
|
||||
|
||||
* `a+q`:将展开的文章折叠
|
||||
* `f+q`:将某个分类的文章全部标记为已读(这个真的好用!)
|
||||
|
||||
IOS客户端Unread
|
||||
------------
|
||||
|
||||
如果手机不能很好地阅读自己的RSS,显然RSS是没有灵魂的。这里通过`Unread`,基于Fever的API实现服务端的TTRSS调用。只要是支持Fever API的RSS阅读器都行,这个你自己选吧!我只说`Unread`,是因为**国服的App Store只有这个`Unread`比较好用**。其它的RSS阅读器基本都不支持Fever API。我觉得`Unread`不是专为国人设计的,也不支持中文,有点不太满意。大家凑合着用吧!有用过其它的比较好的RSS阅读器,小伙伴们也可以评论区留言推荐。
|
||||
|
||||
`Unread`的用法如下:
|
||||
|
||||
* 地址:`https://rss.domain.com/plugins/fever/`(这里要注意没有`.local`!)
|
||||
* 帐户:admin
|
||||
* 密码:`启用Fever`时输入的那个密码。不是登陆密码。
|
||||
|
||||
下面给个APP的截图:
|
||||
|
||||

|
||||
|
||||
其实习惯了也还好。
|
||||
|
||||
小结
|
||||
--
|
||||
|
||||
大家可以通过[duplicati](https://link.zhihu.com/?target=https%3A//blognas.hwb0307.com/linux/docker/471)定期备份整个`$work`目录。
|
||||
|
||||
同时,我注意到TTRSS还支持`api_feedreader`、`api_newsplus`,所以`FeedReader`和`News+`应该也可以使用。大家可以试试看,好像要通过global configuration才可以调用。反正我有Unread还凑合,就不折腾了!大不了转Reeder!
|
||||
|
||||
日志
|
||||
--
|
||||
|
||||
* 2022-05-01:使用了几天Unread,发现**Unread对于个人博客同步的支持较差**,常常爬不到内容,也拉不到历史内容;TTRSS明明是可以爬取到的。暂无解决方案。
|
||||
|
||||
参考
|
||||
--
|
||||
|
||||
* [知乎:RSS打造完美信息流](https://zhuanlan.zhihu.com/p/370156661)
|
||||
* [Awesome TTRSS](https://link.zhihu.com/?target=http%3A//ttrss.henry.wang/)
|
||||
* [咕咕:二十分钟搭建一个属于自己的RSS服务](https://link.zhihu.com/?target=https%3A//blog.laoda.de/archives/tinytinyrss)
|
||||
* [自建rss服务并适配 IOS 移动端( TTRSS + Fever )](https://link.zhihu.com/?target=https%3A//www.jianshu.com/p/2aeadace5a08)
|
||||
* [知乎:你必读的 RSS 订阅源有哪些?](https://www.zhihu.com/question/19580096):这里有很多好回答。
|
||||
|
||||
> 本文使用 [文章同步助手](https://zhuanlan.zhihu.com/p/358098152) 同步
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: "KOBO无线传输书籍的两个办法"
|
||||
source: "https://zhuanlan.zhihu.com/p/467589793"
|
||||
author:
|
||||
- "[[jesson345专注于中式管理]]"
|
||||
published:
|
||||
created: 2025-12-26
|
||||
description: "论坛上有人私信问我无线传输书籍的事,可能不少人有此需求,这里一并总结一下: 首先你要能正常连上WIFI,注意事项我以前也讲过,但好像很多人还是连不上,那就无需向下看了。 另外我记得很多年前进入KOREADER再Wi…"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
发布于 2022-02-15 10:27[Kobo](https://www.zhihu.com/topic/19570292)[书籍](https://www.zhihu.com/topic/19553713)
|
||||
|
||||

|
||||
|
||||
理性发言,友善互动
|
||||
|
||||
3 条评论
|
||||
|
||||
默认
|
||||
|
||||
最新
|
||||
|
||||
[神经蛙](https://www.zhihu.com/people/5338a481f48017b1762706f1dd64903b)
|
||||
|
||||
传到kobo上之后没有找到重命名的选项,请问怎么直接修改书名呀?
|
||||
|
||||
2022-11-27
|
||||
|
||||
[dfgdddd](https://www.zhihu.com/people/7c59d5f4d7b50c1007b6d1186c18169f)
|
||||
|
||||
话说你是怎么隐藏掉底部discover的按钮的呀?
|
||||
|
||||
2022-04-21
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: "Linux下mount挂载新硬盘和开机自动挂载"
|
||||
source: "https://www.cnblogs.com/sirdong/p/11969148.html"
|
||||
author:
|
||||
- "[[sirdong]]"
|
||||
published: 2019-12-02
|
||||
created: 2026-01-06
|
||||
description: "这篇文章主要介绍了linux如何永久挂载新硬盘和/etc/fstab配置文件的说明,磁盘格式化,磁盘管理、挂载新硬盘(linux下挂载磁盘和开机自动mount)"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
这篇文章主要介绍了linux如何永久挂载新硬盘和/etc/fstab配置文件的说明,磁盘格式化,磁盘管理、挂载新硬盘(linux运维基础)。
|
||||
|
||||
首先列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。
|
||||
|
||||
```
|
||||
df -h
|
||||
```
|
||||
|
||||

|
||||
|
||||
列出所有可用块设备的信息,显示他们之间的依赖关系
|
||||
|
||||

|
||||
|
||||
有一块 3T 的磁盘 **vdb** ,我们现在将它进行磁盘分区
|
||||
|
||||

|
||||
|
||||
输入 **m** 获取帮助, **p** 查看分区表
|
||||
|
||||

|
||||
|
||||
当前分区里面没有任何信息,继续操作,输入 **n** 创建一个新的分区
|
||||
|
||||

|
||||
|
||||
选择默认 **p** 选择主分区 **e** 扩展分区 直接默认回车就是选择 **p**
|
||||
|
||||

|
||||
|
||||
输入分区号,默认从1开始,默认 **回车**
|
||||
|
||||

|
||||
|
||||
sector 起始扇区 (2048-4294967295, 默认 2048):默认 **回车**
|
||||
|
||||

|
||||
|
||||
\+ 多少扇区 或多大空间,不会计算的话 可以 写 **+1G** 或者 选择默认 **回车**
|
||||
|
||||

|
||||
|
||||
最后输入 **w** 保存
|
||||
|
||||

|
||||
|
||||
查看,新建的区分已显示出来
|
||||
|
||||

|
||||
|
||||
格式化分区vdb1
|
||||
|
||||

|
||||
|
||||
创建一个挂载点
|
||||
|
||||
挂载
|
||||
|
||||

|
||||
|
||||
ok 现在可以看到已经成功挂载,下面开始配置开机自动挂载,否则重启后挂载点消失。
|
||||
|
||||
**注意:此处需谨慎,否则将导致系统不能成功启动!**
|
||||
|
||||
首先查看UUID
|
||||
|
||||

|
||||
|
||||
熟练的话可以直接将文件目录写到挂载的配置文件中
|
||||
|
||||
将 /dev/vdb1 的 UUID 复制出来,然后写入到/etc/fstab中去
|
||||
|
||||
| UUID=e943fbb7-020a-4c64-a48a-2597eb2496df | /vdb1 | ext4 | defaults | 0 | 0 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 要挂载的分区设备号 | 挂载点 | 文件系统类型 | 挂载选项 | 是否备份 | 是否检测 |
|
||||
|
||||
将 /etc/fstab 中定义的所有档案系统挂上。
|
||||
|
||||
df -h 查看已经挂载上,说明配置没有问题,再重启机器。
|
||||
|
||||

|
||||
|
||||
分类:
|
||||
|
||||
标签:
|
||||
|
||||
免责声明:本内容来自平台创作者,博客园系信息发布平台,仅提供信息存储空间服务。
|
||||
|
||||
[](https://home.cnblogs.com/u/sirdong/)
|
||||
|
||||
[sirdong](https://home.cnblogs.com/u/sirdong/)
|
||||
[粉丝 - 10](https://home.cnblogs.com/u/sirdong/followers/) [关注 - 6](https://home.cnblogs.com/u/sirdong/followees/)
|
||||
|
||||
[+加关注](https://www.cnblogs.com/sirdong/p/)
|
||||
|
||||
4
|
||||
|
||||
0
|
||||
|
||||
[«](https://www.cnblogs.com/sirdong/p/11844266.html) 上一篇: [jquery获取input输入框中的值](https://www.cnblogs.com/sirdong/p/11844266.html "发布于 2019-11-12 18:34")
|
||||
[»](https://www.cnblogs.com/sirdong/p/11975513.html) 下一篇: [js 报错 Uncaught TypeError: Cannot read property 'trim' of undefined](https://www.cnblogs.com/sirdong/p/11975513.html "发布于 2019-12-03 11:31")
|
||||
|
||||
posted @ 2019-12-02 10:19 [sirdong](https://www.cnblogs.com/sirdong) 阅读(46640) 评论(1) [收藏](https://www.cnblogs.com/sirdong/p/) [举报](https://www.cnblogs.com/sirdong/p/)
|
||||
|
||||
<table><tbody><tr><td colspan="7"><table><tbody><tr><td><a href="https://www.cnblogs.com/sirdong/p/"><</a></td><td align="center">2026年1月</td><td align="right"><a href="https://www.cnblogs.com/sirdong/p/">></a></td></tr></tbody></table></td></tr><tr><th align="center">日</th><th align="center">一</th><th align="center">二</th><th align="center">三</th><th align="center">四</th><th align="center">五</th><th align="center">六</th></tr><tr><td align="center">28</td><td align="center">29</td><td align="center">30</td><td align="center">31</td><td align="center">1</td><td align="center">2</td><td align="center">3</td></tr><tr><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td><td align="center">8</td><td align="center">9</td><td align="center">10</td></tr><tr><td align="center">11</td><td align="center">12</td><td align="center">13</td><td align="center">14</td><td align="center">15</td><td align="center">16</td><td align="center">17</td></tr><tr><td align="center">18</td><td align="center">19</td><td align="center">20</td><td align="center">21</td><td align="center">22</td><td align="center">23</td><td align="center">24</td></tr><tr><td align="center">25</td><td align="center">26</td><td align="center">27</td><td align="center">28</td><td align="center">29</td><td align="center">30</td><td align="center">31</td></tr><tr><td align="center">1</td><td align="center">2</td><td align="center">3</td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td></tr></tbody></table>
|
||||
|
||||
[阿里旗下的 Qoder](https://qoder.cnblogs.com/)
|
||||
@@ -0,0 +1,267 @@
|
||||
---
|
||||
title: "Linux利用fail2ban+iptables加固系统,防止SSH暴力破解 - Terry的技术笔记"
|
||||
source: "https://blog.terrynow.com/2022/02/06/linux-centos-fail2ban-iptables-prevent-ssh-from-brute-force-attack/"
|
||||
author:
|
||||
published:
|
||||
created: 2026-04-15
|
||||
description: "前面的文章有介绍防火墙是firewalld的情况下,使用fail2ban来防止SSH暴力破解的情况,详见:https://blog.terrynow.com/2021/09/17/linux-centos-fail2ban-firwalld-prevent-ssh-from-brute-force-attack/ 如果系统使用的是iptables防火墙,配置的方法有所不同。 关于如何安装和开启iptables防火墙,详见:https://blog.terrynow.com/2021/02/16/centos7-ub […]"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
前面的文章有介绍防火墙是firewalld的情况下,使用fail2ban来防止SSH暴力破解的情况,详见: [https://blog.terrynow.com/2021/09/17/linux-centos-fail2ban-firwalld-prevent-ssh-from-brute-force-attack/](https://blog.terrynow.com/2021/09/17/linux-centos-fail2ban-firwalld-prevent-ssh-from-brute-force-attack/)
|
||||
|
||||
如果系统使用的是iptables防火墙,配置的方法有所不同。
|
||||
|
||||
关于如何安装和开启iptables防火墙,详见: [https://blog.terrynow.com/2021/02/16/centos7-ubuntu-iptables-firewall/](https://blog.terrynow.com/2021/02/16/centos7-ubuntu-iptables-firewall/)
|
||||
|
||||
## 首先准备fail2ban
|
||||
|
||||
#开启iptables防火墙
|
||||
|
||||
systemctl start iptables
|
||||
|
||||
#设置防火墙开机启动
|
||||
|
||||
systemctl enable iptables
|
||||
|
||||
#安装epel-release
|
||||
|
||||
yum install epel-release
|
||||
|
||||
#安装fail2ban
|
||||
|
||||
yum install fail2ban
|
||||
|
||||
#开启iptables防火墙 systemctl start iptables #设置防火墙开机启动 systemctl enable iptables #安装epel-release yum install epel-release #安装fail2ban yum install fail2ban
|
||||
|
||||
```csharp
|
||||
#开启iptables防火墙
|
||||
systemctl start iptables
|
||||
|
||||
#设置防火墙开机启动
|
||||
systemctl enable iptables
|
||||
|
||||
#安装epel-release
|
||||
yum install epel-release
|
||||
#安装fail2ban
|
||||
yum install fail2ban
|
||||
```
|
||||
|
||||
## 配置fail2ban的规则
|
||||
|
||||
安装好后fail2ban配置文件在/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,这里不做介绍,也没有用到。
|
||||
|
||||
新建文件 `/etc/fail2ban/jail.local` ,内容如下
|
||||
|
||||
\# vim /etc/fail2ban/jail.local
|
||||
|
||||
\[DEFAULT\]
|
||||
|
||||
\# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
|
||||
|
||||
\# 用于指定哪些地址可以忽略 fail2ban 防御
|
||||
|
||||
ignoreip \= 127.0.0.1 172.16.0.0 /12 10.0.0.0 /8 192.168.0.0 /24
|
||||
|
||||
\# 客户端主机被禁止的时长(秒)
|
||||
|
||||
bantime \= 86400
|
||||
|
||||
\# 客户端主机被禁止前允许失败的次数
|
||||
|
||||
maxretry \= 5
|
||||
|
||||
\# 查找失败次数的时长(秒)
|
||||
|
||||
findtime \= 600
|
||||
|
||||
\[sshd\]
|
||||
|
||||
enabled \= true
|
||||
|
||||
filter \= sshd
|
||||
|
||||
action \= iptables \[name=SSH, port=ssh, protocol=tcp\]
|
||||
|
||||
\# SSH的日志文件路径
|
||||
|
||||
logpath \= /var/log/secure
|
||||
|
||||
\# ssh 服务的最大尝试次数
|
||||
|
||||
maxretry \= 3
|
||||
|
||||
\# vim /etc/fail2ban/jail.local \[DEFAULT\] # 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名 # 用于指定哪些地址可以忽略 fail2ban 防御 ignoreip = 127.0.0.1 172.16.0.0/12 10.0.0.0/8 192.168.0.0/24 # 客户端主机被禁止的时长(秒) bantime = 86400 # 客户端主机被禁止前允许失败的次数 maxretry = 5 # 查找失败次数的时长(秒) findtime = 600 \[sshd\] enabled = true filter = sshd action = iptables\[name=SSH, port=ssh, protocol=tcp\] # SSH的日志文件路径 logpath = /var/log/secure # ssh 服务的最大尝试次数 maxretry = 3
|
||||
|
||||
```csharp
|
||||
# vim /etc/fail2ban/jail.local
|
||||
|
||||
[DEFAULT]
|
||||
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
|
||||
# 用于指定哪些地址可以忽略 fail2ban 防御
|
||||
ignoreip = 127.0.0.1 172.16.0.0/12 10.0.0.0/8 192.168.0.0/24
|
||||
|
||||
# 客户端主机被禁止的时长(秒)
|
||||
bantime = 86400
|
||||
|
||||
# 客户端主机被禁止前允许失败的次数
|
||||
maxretry = 5
|
||||
|
||||
# 查找失败次数的时长(秒)
|
||||
findtime = 600
|
||||
|
||||
[sshd]
|
||||
enabled = true
|
||||
filter = sshd
|
||||
action = iptables[name=SSH, port=ssh, protocol=tcp]
|
||||
# SSH的日志文件路径
|
||||
logpath = /var/log/secure
|
||||
# ssh 服务的最大尝试次数
|
||||
maxretry = 3
|
||||
```
|
||||
|
||||
上述配置意思是,fail2ban会自动禁止在最近10分钟内有超过3次访问尝试失败的任意IP地址。一旦被禁,这个IP地址将会在24小时内一直被禁止访问 SSH 服务。
|
||||
|
||||
配置好了以后,重启下fail2ban
|
||||
|
||||
\# 重启fail2ban
|
||||
|
||||
systemctl restart fail2ban
|
||||
|
||||
\# 开机启动
|
||||
|
||||
systemctl enable fail2ban
|
||||
|
||||
\# 重启fail2ban systemctl restart fail2ban # 开机启动 systemctl enable fail2ban
|
||||
|
||||
```csharp
|
||||
# 重启fail2ban
|
||||
systemctl restart fail2ban
|
||||
|
||||
# 开机启动
|
||||
systemctl enable fail2ban
|
||||
```
|
||||
|
||||
## 检查fail2ban状态并解禁被锁住的IP地址
|
||||
|
||||
可以随便找一台不在白名单中的IP地址的机器用错误的密码ssh多次测试
|
||||
|
||||
\# 查看iptables状态
|
||||
|
||||
iptables --list -n
|
||||
|
||||
Chain INPUT (policy ACCEPT)
|
||||
|
||||
target prot opt source destination
|
||||
|
||||
fail2ban-SSH tcp -- 0.0.0.0 / 0 0.0.0.0 / 0 tcp dpt:22
|
||||
|
||||
Chain FORWARD (policy ACCEPT)
|
||||
|
||||
target prot opt source destination
|
||||
|
||||
Chain OUTPUT (policy ACCEPT)
|
||||
|
||||
target prot opt source destination
|
||||
|
||||
Chain fail2ban-SSH (1 references)
|
||||
|
||||
target prot opt source destination
|
||||
|
||||
DROP all -- 192.168.1.8 0.0.0.0 / 0
|
||||
|
||||
RETURN all -- 0.0.0.0 / 0 0.0.0.0 / 0
|
||||
|
||||
检验fail2ban状态(会显示出当前活动的被ban列表):
|
||||
|
||||
<span class= "pln" \>fail2ban</span><span class= "pun" \>-</span><span class= "pln" \>client status</span>
|
||||
|
||||
\# 查看iptables状态 iptables --list -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-SSH (1 references) target prot opt source destination DROP all -- 192.168.1.8 0.0.0.0/0 RETURN all -- 0.0.0.0/0 0.0.0.0/0 检验fail2ban状态(会显示出当前活动的被ban列表): <span class="pln">fail2ban</span><span class="pun">-</span><span class="pln">client status</span>
|
||||
|
||||
```csharp
|
||||
# 查看iptables状态
|
||||
iptables --list -n
|
||||
|
||||
Chain INPUT (policy ACCEPT)
|
||||
target prot opt source destination
|
||||
fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
|
||||
|
||||
Chain FORWARD (policy ACCEPT)
|
||||
target prot opt source destination
|
||||
|
||||
Chain OUTPUT (policy ACCEPT)
|
||||
target prot opt source destination
|
||||
|
||||
Chain fail2ban-SSH (1 references)
|
||||
target prot opt source destination
|
||||
DROP all -- 192.168.1.8 0.0.0.0/0
|
||||
RETURN all -- 0.0.0.0/0 0.0.0.0/0
|
||||
|
||||
检验fail2ban状态(会显示出当前活动的被ban列表):
|
||||
fail2ban-client status
|
||||
```
|
||||
|
||||
查看fail2ban的SSH状态:
|
||||
|
||||
\[root@localhost ~\]# fail2ban-client status sshd
|
||||
|
||||
Status for the jail: sshd
|
||||
|
||||
|- Filter
|
||||
|
||||
| |- Currently failed: 0
|
||||
|
||||
| |- Total failed: 59
|
||||
|
||||
| \`- Journal matches: \_SYSTEMD\_UNIT=sshd.service \+ \_COMM=sshd
|
||||
|
||||
\`- Actions
|
||||
|
||||
|- Currently banned: 1
|
||||
|
||||
|- Total banned: 5
|
||||
|
||||
\`- Banned IP list: 192.168.1.8
|
||||
|
||||
\[root@localhost ~\]# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 59 | \`- Journal matches: \_SYSTEMD\_UNIT=sshd.service + \_COMM=sshd \`- Actions |- Currently banned: 1 |- Total banned: 5 \`- Banned IP list: 192.168.1.8
|
||||
|
||||
```csharp
|
||||
[root@localhost ~]# fail2ban-client status sshd
|
||||
Status for the jail: sshd
|
||||
|- Filter
|
||||
| |- Currently failed: 0
|
||||
| |- Total failed: 59
|
||||
| \`- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
|
||||
\`- Actions
|
||||
|- Currently banned: 1
|
||||
|- Total banned: 5
|
||||
\`- Banned IP list: 192.168.1.8
|
||||
```
|
||||
|
||||
取消被ban的IP:
|
||||
|
||||
\# 取消被ban的IP
|
||||
|
||||
\[root@localhost ~\]# fail2ban-client set sshd unbanip 192.168.1.8
|
||||
|
||||
1
|
||||
|
||||
\# 取消被ban的IP \[root@localhost ~\]# fail2ban-client set sshd unbanip 192.168.1.8 1
|
||||
|
||||
```csharp
|
||||
# 取消被ban的IP
|
||||
[root@localhost ~]# fail2ban-client set sshd unbanip 192.168.1.8
|
||||
1
|
||||
```
|
||||
|
||||
fail2ban的日志路径是:/var/log/fail2ban.log
|
||||
|
||||
查看加入黑名单日志:
|
||||
|
||||
sudo zgrep 'Ban' /var/log/fail2ban.log\*
|
||||
|
||||
sudo zgrep 'Ban' /var/log/fail2ban.log\*
|
||||
|
||||
```csharp
|
||||
sudo zgrep 'Ban' /var/log/fail2ban.log*
|
||||
```
|
||||
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: "Linux如何添加防火墙服务Warning: ALREADY_ENABLED: 8080:tcp"
|
||||
source: "https://blog.csdn.net/javakaka666/article/details/140772896"
|
||||
author:
|
||||
- "[[javakaka666]]"
|
||||
published: 2024-07-29
|
||||
created: 2025-11-25
|
||||
description: "文章浏览阅读7k次,点赞7次,收藏10次。Warning: ALREADY_ENABLED: 8080:tcp_already enabled"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
AI 搜索
|
||||
|
||||
原创 于 2024-07-29 15:45:14 发布 · 7k 阅读 · 10 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
文章标签:
|
||||
|
||||
[#linux](https://so.csdn.net/so/search/s.do?q=linux&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art) [#java](https://so.csdn.net/so/search/s.do?q=java&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art) [#服务器](https://so.csdn.net/so/search/s.do?q=%E6%9C%8D%E5%8A%A1%E5%99%A8&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art)
|
||||
|
||||
背景:新装的 centos 服务器需要启动端口报错, Warning: ALREADY\_ENABLED:8080:tcp
|
||||
解决办法: **先删除端口再重新添加解决**
|
||||
|
||||
具体步骤
|
||||
|
||||
删除指定端口
|
||||
|
||||
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
|
||||
|
||||
开启指定端口
|
||||
|
||||
firewall-cmd --zone=public --add-port=8080/tcp --permanent
|
||||
|
||||
查看以开放的端口
|
||||
|
||||
firewall-cmd --zone=public --list-ports
|
||||
|
||||
重启 防火墙
|
||||
|
||||
注意: **开放端口后一定要重启防火墙,不然不会生效**
|
||||
|
||||
firewall-cmd --reload[centeros7登录 *防火墙*](https://blog.csdn.net/weixin_36934930/article/details/90515707)
|
||||
|
||||
[唯一的切慕,唯一的诗歌……](https://blog.csdn.net/weixin_36934930)
|
||||
|
||||
05-24 1257[若出现Host key verification failed ssh-keygen -R 107.191.51.51 CentOS7这个版本的 *防火墙* 默认使用的是firewall,与之前的版本使用iptables不一样。按如下方便配置 *防火墙* : 1、关闭 *防火墙* : sudo systemctl stop firewalld.service 2、关闭开机启动: sudo systemctl disa...](https://blog.csdn.net/weixin_36934930/article/details/90515707)[goldengate add trandata显示最小附加日志 *already* enable,但是info trandata显示disabled](https://blog.csdn.net/u014237598/article/details/82377555)
|
||||
|
||||
[Mikya\_清风的博客](https://blog.csdn.net/u014237598)
|
||||
|
||||
09-04 2234[问题描述: 数据库版本11.2.0.4,操作系统版本:windows server 2012,goldengate版本12.1.2.1.0 在给ogg同步表 *添加* trandata的时候,提示supplemental redo log data is *already* *enabled* 。但是使用info trandata查看的时候,却显示supplemental redo log data is d...](https://blog.csdn.net/u014237598/article/details/82377555)[*linux* 允许通过 *防火墙* 端口开启\_ *warning**:**already* *enabled**:* 3306...](https://blog.csdn.net/GYJ_love/article/details/105429648)
|
||||
|
||||
11-21[具体演示了如何指定端口范围4400-4600通过UDP协议的 *防火墙*,如何关闭80/ *tcp* 端口,以及如何查询当前 *防火墙* 已通过的所有端口。 firewall-cmd --zone=public --add-port=4400-4600/udp --permanen(指定端口范围为4400-4600通过 *防火墙*) *Warning**:**ALREADY* \_ *ENABLED**:* 3306*:**tcp* (说明3306端口通过成功) firewall-cmd --zone=public...](https://blog.csdn.net/GYJ_love/article/details/105429648)[CentOS7配置指定端口通过 *防火墙* \_ *already* *enabled*](https://blog.csdn.net/cuomodao4449/article/details/87074693)
|
||||
|
||||
11-23[*添加**:*firewall-cmd --zone=public --add-port=3306/ *tcp* --permanent (--permanent永久生效,没有此参数重启后失效) 注*:**Warning**:**ALREADY* \_ *ENABLED**:* 3306*:**tcp* (说明3306端口通过成功) firewall-cmd--zone=public --add-port=4400-4600/udp --permanen(指定端口范围为4400-4600通过 *防火墙*) 重新载入*:*firewall-cmd...](https://blog.csdn.net/cuomodao4449/article/details/87074693)[*Linux* 启用端口](https://devpress.csdn.net/v1/article/detail/127514028)
|
||||
|
||||
[Bug](https://blog.csdn.net/Hg_Re_B)
|
||||
|
||||
10-25 9776[*防火墙* ,端口](https://devpress.csdn.net/v1/article/detail/127514028)[*Linux* 端口管理*:*开启失败解决策略,](https://blog.csdn.net/qq_43708765/article/details/134290311)
|
||||
|
||||
11-23[查看以开放的端口 重启 *防火墙* *linux* *添加* 开放端口后重启 *防火墙* 却却无法访问开放端口,重新输入开放端口命令却提示 *Warning**:**ALREADY* \_ *ENABLED**:* 9004*:**tcp*,先删除端口再重新 *添加* 解决 删除指定端口 firewall-cmd--zone=public--remove-port=9004/ *tcp* --permanent 一键获取完整项目代码 *java* 1 开启指定端口 firewall-cmd--zone=p...](https://blog.csdn.net/qq_43708765/article/details/134290311)[CentOS *服务器* 相关教程\_ *already* - *enabled*](https://blog.csdn.net/m0_37605642/article/details/127472541)
|
||||
|
||||
11-23[*Warning**:**ALREADY* \_ *ENABLED**:* 9055*:**tcp* (说明9055端口通过成功) 一键获取完整项目代码bash 1 5.3 开放指定端口 # 开放端口,(–permanent永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port= *8080* / *tcp* --permanent # 移除指定端口 firewall-cmd --zone=public --remove-port= *8080* / *tcp* --pe...](https://blog.csdn.net/m0_37605642/article/details/127472541)[*linux* 操作 *防火墙* , *添加* *服务* 、端口](https://devpress.csdn.net/v1/article/detail/116238483)
|
||||
|
||||
[冷晨四点的太阳](https://blog.csdn.net/hao310810401)
|
||||
|
||||
04-28 304[操作 *防火墙* , *添加* 或删除端口,需要root权限。 1. 查看 *防火墙* 状态:systemctl status firewalld active(running):开启状态,正在运行中 inactive(dead):关闭状态,未在运行 2. 开启 *防火墙* :systemctl start firewalld,没有任何提示,表示开启成功 3. 关闭 *防火墙* :systemctl stop firewalld 4. *添加* mysql *服务* 到 *防火墙* ,并加载 firewall-cmd --permanent --zone](https://devpress.csdn.net/v1/article/detail/116238483)[*linux* 开启端口、 *防火墙* 操作\_9955是什么端口](https://blog.csdn.net/qq_40963664/article/details/125023355)
|
||||
|
||||
10-31[开启指定端口 firewall-cmd --zone=public --add-port=9955/ *tcp* --permanent 一键获取完整项目代码 *Warning**:**ALREADY* \_ *ENABLED**:* 9955*:**tcp* (说明9955端口通过成功) 或者开启端口区域(指定端口范围为4400-4600通过 *防火墙*) firewall-cmd --zone=public --add-port=4400-4600/udp --permanen...](https://blog.csdn.net/qq_40963664/article/details/125023355)[*Linux* 启用端口\_ *linux* 开启端口](https://blog.csdn.net/Hg_Re_B/article/details/127514028)
|
||||
|
||||
10-9[某一个端口在 *服务器* 中,已经被开启,如果再次开启这个端口,命令行打印 *ALREADY* \_ *ENABLED**:*端口*:*通讯协议,表示重复开启某个端口。3.3.关闭/查看端口# 关闭指定端口 \[root@localhost /\]$ firewall-cmd --zone=public --remove-port=80/ *tcp* --permanent # 查看通过的端口 \[root@localhost /\]$ firewall-cmd --zone=...](https://blog.csdn.net/Hg_Re_B/article/details/127514028)[*linux* *添加* *服务* *防火墙*,*Linux* *防火墙* 设置-DNS *服务器* 篇](https://blog.csdn.net/weixin_36024106/article/details/116684580)
|
||||
|
||||
[weixin\_36024106的博客](https://blog.csdn.net/weixin_36024106)
|
||||
|
||||
05-02 512[亲测可用,对于刚刚搭建了DNS *服务器* ,需要开启 *防火墙* 但又不知道该怎么设置的朋友,可以参考下面的内容,或者直接使用我下面给出的脚本程序。如果 *服务器* 是作为DNS *服务器* 使用的,针对绝大多数的情况,为了开启 *防火墙* 同时又能正常地提供相关的 *服务* ,一般的设置如下:【1】第一步:清除默认 *防火墙* 规则iptables-Fiptables-Xiptables-Z·参数说明:-F:清除所有的已制定的规则-X:清除所...](https://blog.csdn.net/weixin_36024106/article/details/116684580)[*Warning**:**ALREADY* \_ *ENABLED**:**8080**:**tcp*](https://wenku.csdn.net/answer/4po368v0w1)
|
||||
|
||||
06-27[在处理 \` *Warning**:**ALREADY* \_ *ENABLED**:**8080* / *tcp* \` 警告时,通常发生在尝试通过 \`firewall-cmd\` 命令重复 *添加* 已经开放的端口。为了避免该警告并确保配置操作成功,可以采取以下方式: 如果目标是重新配置或确认 *8080* 端口...](https://wenku.csdn.net/answer/4po368v0w1)[Nginx启动成功,浏览器却启动不了的解决方法\_nginx正常启动但是浏览器...](https://blog.csdn.net/OMGcome/article/details/123289921)
|
||||
|
||||
11-24[firewall-cmd --zone=public --add-port=80/ *tcp* --permanent 像我这个80端口是启动过了的所以会报*:**Warning**:**ALREADY* \_ *ENABLED**:* 80*:**tcp* 这个警告 4)重启 *防火墙* *服务* systemctl restart firewalld.service 重启之后你重新在浏览器输入你的ip应该就可以了 5)成功界面...](https://blog.csdn.net/OMGcome/article/details/123289921)[...Config right?*Warning**:**ALREADY* \_ *ENABLED* \_redis client on error...](https://blog.csdn.net/TIG_JS/article/details/140604732)
|
||||
|
||||
11-20[*Warning**:**ALREADY* \_ *ENABLED**:* 6379*:**tcp* 我的redis.conf配置*:* bind 0.0.0.0 设置了 requirepass 密码 daemonize yes 问题解决 redis拒绝连接*:*Could not connect to Redis at 192.168.xx.xx*:*6379*:*Connection refused\_could not connect to redis at 192.168.102.31*:*6379*:*\-CSDN博客...](https://blog.csdn.net/TIG_JS/article/details/140604732)[*Warning**:**ALREADY* \_ *ENABLED**:* 80*:**tcp* 什么意思](https://wenku.csdn.net/answer/6f0uvnuupe)
|
||||
|
||||
[
|
||||
|
||||
最新发布
|
||||
|
||||
](https://wenku.csdn.net/answer/6f0uvnuupe)
|
||||
|
||||
10-30[我们正在讨论的是关于 *防火墙* 规则 *添加* 时出现的警告信息:' *Warning**:**ALREADY* \_ *ENABLED**:* 80*:**tcp* '。 这个警告通常在使用类似\`firewall-cmd\`这样的工具 *添加* *防火墙* 规则时出现,意思是试图 *添加* 的规则(开放 *TCP* 协议的80端口...](https://wenku.csdn.net/answer/6f0uvnuupe)[宝塔系统 *防火墙* 放行5173端口设置端口失败, err*:**Warning**:**ALREADY* \_ *ENABLED**:* 5173*:**tcp*](https://wenku.csdn.net/answer/1mpdwr2gai)
|
||||
|
||||
03-31[嗯,用户遇到了宝塔面板 *防火墙* 设置端口5173失败的问题,提示 *ALREADY* \_ *ENABLED* 错误。我需要先理解这个问题的原因。根据引用中的信息,比如引用\[2\]提到了查看端口是否开放以及 *添加* 移除端口的命令,可能这个错误是因为...](https://wenku.csdn.net/answer/1mpdwr2gai)[ubuntu\_module rewrite *already* *enabled*](https://blog.csdn.net/qdujunjie/article/details/8667825)
|
||||
|
||||
9-17[Module rewrite *already* *enabled* vim/etc/apache2/httpd.conf sudo /etc/init.d/apache2 restart ubuntu下如何安装 *JAVA*?如果单纯只是安装jdk,很麻烦的,中间有很多配置,其实只要直接安装eclipse就可以了,他会直接帮你安装jdk并且配置好*:*apt-get install eclipse...](https://blog.csdn.net/qdujunjie/article/details/8667825)[*linux* 开启端口 *8080*](https://blog.csdn.net/weixin_42390329/article/details/107939406)
|
||||
|
||||
[weixin\_42390329的博客](https://blog.csdn.net/weixin_42390329)
|
||||
|
||||
08-11 3358[*防火墙* 管理 centos7默认安装了firewalld *防火墙* 查看 *防火墙* 状态 \[root@admin ~\]# firewall-cmd --state not running (关闭显示not running,开启显示running) 开启 *防火墙* \[root@admin/\]# systemctl start firewalld.service \[root@admin /\]# firewall-cmd --state running \[root@admin /\]# 关闭 *防火墙* \[root@admin /\]#](https://blog.csdn.net/weixin_42390329/article/details/107939406)[问题 *java*.net.ConnectException*:* connection failed*:* socket,host=localhost,port=8100,*tcp* NoDelay=1](https://blog.csdn.net/weixin_30394669/article/details/95422959)
|
||||
|
||||
[weixin\_30394669的博客](https://blog.csdn.net/weixin_30394669)
|
||||
|
||||
10-06 2937[http*:*//blog.csdn.net/yl419440513/article/details/6872614 *java*.net.ConnectException*:* connection failed*:* socket,host=localhost,port=8100,*tcp* NoDelay=1*:**java*.net.ConnectException*:* Connection refused*:* c...](https://blog.csdn.net/weixin_30394669/article/details/95422959)[解决Port 8848 is *already* in use端口号被占用](https://blog.csdn.net/qq_37570710/article/details/121633333)
|
||||
|
||||
[qq\_37570710的博客](https://blog.csdn.net/qq_37570710)
|
||||
|
||||
11-30 5263[启动项目提示:Port 8848 is *already* in use 解决: 1、打开dos窗口 2、获取到端口号和线程,输入:netstat -ano|findstr 8848 3、使用上一步获取到的线程,杀死线程,输入:taskkill /pid 1244 /f](https://blog.csdn.net/qq_37570710/article/details/121633333)[centos firewall *防火墙* 使用](https://blog.csdn.net/qq_34874784/article/details/124984979)
|
||||
|
||||
[qq\_34874784的博客](https://blog.csdn.net/qq_34874784)
|
||||
|
||||
05-26 2395[开启 *防火墙* systemctl start firewalld.service 关闭 *防火墙* systemctl stop firewalld.service 重启 *防火墙* service firewalld restart 开启指定端口9501 firewall-cmd --zone=public --add-port=80/ *tcp* --permanent firewall-cmd --zone=public --add-port=443/ *tcp* --permanent firewall-cmd --zon.](https://blog.csdn.net/qq_34874784/article/details/124984979)[*Linux* 自带 *防火墙* 基本使用](https://blog.csdn.net/Mister_yang/article/details/118931548)
|
||||
|
||||
[Mister\_yang的博客](https://blog.csdn.net/Mister_yang)
|
||||
|
||||
07-20 4906[文章目录四、 *Linux* 自带 *防火墙* 1. 查看 *linux* 的 *防火墙* 状态2. 查看已经对外开放的端口3. 开放需要开放的端口 并重载 *防火墙* 4. filewalld常用命令 四、 *Linux* 自带 *防火墙* 前言: CentOS7 端口的开放关闭查看都是用 *防火墙* 来控制的 1. 查看 *linux* 的 *防火墙* 状态 ### 查看防墙状态 \[root@8 ~\]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon](https://blog.csdn.net/Mister_yang/article/details/118931548)[*linux* 开启端口失败](https://devpress.csdn.net/v1/article/detail/134290311)
|
||||
|
||||
[qq\_43708765的博客](https://blog.csdn.net/qq_43708765)
|
||||
|
||||
11-08 1486[*linux* *添加* 开放端口后重启 *防火墙* 却却无法访问开放端口,重新输入开放端口命令却提示 *Warning**:**ALREADY* \_ *ENABLED**:* 9004*:**tcp* ,先删除端口再重新 *添加* 解决。注意:开放端口后一定要重启 *防火墙* ,不然不会生效。](https://devpress.csdn.net/v1/article/detail/134290311)[*linux* 下 *防火墙* 常见命令(Centos7)](https://blog.csdn.net/JangBingYang/article/details/125782175)
|
||||
|
||||
[JangBingYang的博客](https://blog.csdn.net/JangBingYang)
|
||||
|
||||
07-14 4392[*Linux* *防火墙* 常用指令](https://blog.csdn.net/JangBingYang/article/details/125782175)[*防火墙* 基础操作](https://blog.csdn.net/qq_35237533/article/details/121372189)
|
||||
|
||||
[一起来摸鱼](https://blog.csdn.net/qq_35237533)
|
||||
|
||||
11-17 5732[1.增加 *防火墙* 端口号: 端口范围 4400-4600 firewall-cmd --zone=public --add-port=4400-4600/udp --permanen 指定端口 4369 firewall-cmd --zone=public --add-port=4369/udp --permanen *Warning**:**ALREADY* \_ *ENABLED**:* 4369*:**tcp* (说明4369端口通过成功) 2.关闭指定端口 firewall-cmd --zone=public --remove-po](https://blog.csdn.net/qq_35237533/article/details/121372189)
|
||||
|
||||
评论
|
||||
|
||||
被折叠的 0 条评论 [为什么被折叠?](https://blogdev.blog.csdn.net/article/details/122245662)[到【灌水乐园】发言](https://bbs.csdn.net/forums/FreeZone)
|
||||
|
||||
添加红包
|
||||
|
||||
实付 元
|
||||
|
||||
[使用余额支付](https://blog.csdn.net/javakaka666/article/details/)
|
||||
|
||||
点击重新获取
|
||||
|
||||
扫码支付
|
||||
|
||||
钱包余额 0
|
||||
|
||||
抵扣说明:
|
||||
|
||||
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
|
||||
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
|
||||
|
||||
[余额充值](https://i.csdn.net/#/wallet/balance/recharge)
|
||||
|
||||
举报
|
||||
|
||||
[](https://mall.csdn.net/vip?utm_source=25618_vip_blogrighticon)
|
||||
|
||||
[AI 搜索](https://ai.csdn.net/chat/?utm_source=cknow_pc_blog_right_hover) [智能体](https://ai.csdn.net/chat/cmd?utm_source=cknow_pc_blog_right_hover) [AI 编程](https://ai.csdn.net/chat/coding?utm_source=cknow_pc_blog_right_hover) [AI 作业助手](https://ai.csdn.net/chat/homework?utm_source=cknow_pc_blog_right_hover)
|
||||
|
||||
隐藏侧栏 
|
||||
|
||||
程序员都在用的中文IT技术交流社区
|
||||
|
||||

|
||||
|
||||
专业的中文 IT 技术社区,与千万技术人共成长
|
||||
|
||||

|
||||
|
||||
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!
|
||||
|
||||
客服 返回顶部
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
created: 2025-08-31T08:19
|
||||
updated: 2025-08-31T08:47
|
||||
---
|
||||
最新推荐文章于 2025-06-22 13:56:30 发布
|
||||
|
||||
原创 于 2019-08-21 13:48:45 发布 · 2.7w 阅读
|
||||
|
||||
· 
|
||||
12
|
||||
|
||||
· 
|
||||
38 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
#### 1\. 首先查看程序的进程号
|
||||
|
||||
例如程序名称为aaa,查询其运行进程号如下:
|
||||
|
||||
```
|
||||
`minbo@mb ~> ps -aux | grep aaa
|
||||
minbo 16273 0.3 1.1 21475099312 92752 pts/2 Sl+ 10:18 0:01 ./aaa`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||
则进程号就是`16273`。
|
||||
|
||||
#### 2\. 查看进程所占端口号
|
||||
|
||||
上面我们查到程序的进程号是`16273`,查询其占用端口号如下:
|
||||
|
||||
```
|
||||
`minbo@mb ~> sudo netstat -ap | grep "16273" // windows用findstr代替grep
|
||||
[sudo] minbo 的密码:
|
||||
tcp 0 0 mb:60272 10.80.23.122:26575 ESTABLISHED 16273/./aaa`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
|
||||
|
||||
```
|
||||
|
||||
可以看到该运行程序有一个`TCP`连接,客户端端口是`60272`,服务端ip是`10.80.23.122`,端口是`26575`。
|
||||
@@ -0,0 +1,241 @@
|
||||
#### **Linux下如何查看版本信息, 包括位数、版本信息以及CPU内核信息、CPU具体型号**
|
||||
|
||||
1.uname -a (Linux查看版本当前操作系统内核信息)
|
||||
|
||||

|
||||
|
||||
2.cat /proc/[version](https://so.csdn.net/so/search?q=version&spm=1001.2101.3001.7020) (Linux查看当前操作系统版本信息)
|
||||
|
||||

|
||||
|
||||
3.cat /etc/issue 或cat /etc/[redhat](https://so.csdn.net/so/search?q=redhat&spm=1001.2101.3001.7020)\-release(Linux查看版本当前操作系统发行版信息)
|
||||
|
||||

|
||||
|
||||
4.cat /proc/cpuinfo
|
||||
|
||||
lscpu (Linux查看cpu相关信息,包括型号、主频、内核信息等)
|
||||
|
||||

|
||||
|
||||
5.getconf LONG\_BIT (Linux查看版本说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
|
||||
|
||||

|
||||
|
||||
6.hostname (查看服务器名称)
|
||||
|
||||

|
||||
|
||||
7.cat /etc/sysconfig/network-scripts/ifcfg-eth0
|
||||
|
||||
cat /etc/sysconfig/network-scripts/ifcfg-l0
|
||||
|
||||
ifconfig (查看网络信息)
|
||||
|
||||

|
||||
|
||||
8.lsblk (查看磁盘信息 - 列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息)
|
||||
|
||||
fdisk -l (观察硬盘实体使用情况,也可对硬盘分区)
|
||||
|
||||
df -k (用于显示磁盘分区上的可使用的磁盘空间)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
\----------------------------------------------------------------------------- 华丽的分割线 ----------------------------------------------------------------------------------
|
||||
|
||||
\-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#### **【附】系统信息查询大全**
|
||||
|
||||
\# uname -a # 查看内核/操作系统/CPU信息
|
||||
\# head -n 1 /etc/issue # 查看操作系统版本
|
||||
\# cat /proc/cpuinfo # 查看CPU信息
|
||||
\# hostname # 查看计算机名
|
||||
\# lspci -tv # 列出所有PCI设备
|
||||
\# lsusb -tv # 列出所有USB设备
|
||||
\# lsmod # 列出加载的内核模块
|
||||
\# env # 查看环境变量资源
|
||||
\# free -m # 查看内存使用量和交换区使用量
|
||||
\# df -h # 查看各分区使用情况
|
||||
\# du -sh <目录名> # 查看指定目录的大小
|
||||
\# grep MemTotal /proc/meminfo # 查看内存总量
|
||||
\# grep MemFree /proc/meminfo # 查看空闲内存量
|
||||
\# uptime # 查看系统运行时间、用户数、负载
|
||||
\# cat /proc/loadavg # 查看系统负载磁盘和分区
|
||||
\# mount | column -t # 查看挂接的分区状态
|
||||
\# fdisk -l # 查看所有分区
|
||||
\# swapon -s # 查看所有交换分区
|
||||
\# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
|
||||
\# dmesg | grep IDE # 查看启动时IDE设备检测状况网络
|
||||
\# ifconfig # 查看所有网络接口的属性
|
||||
\# iptables -L # 查看防火墙设置
|
||||
\# route -n # 查看路由表
|
||||
\# netstat -lntp # 查看所有监听端口
|
||||
\# netstat -antp # 查看所有已经建立的连接
|
||||
\# netstat -s # 查看网络统计信息进程
|
||||
\# ps -ef # 查看所有进程
|
||||
\# top # 实时显示进程状态用户
|
||||
\# w # 查看活动用户
|
||||
\# id <用户名> # 查看指定用户信息
|
||||
\# last # 查看用户登录日志
|
||||
\# cut -d: -f1 /etc/passwd # 查看系统所有用户
|
||||
\# cut -d: -f1 /etc/group # 查看系统所有组
|
||||
\# crontab -l # 查看当前用户的计划任务服务
|
||||
\# chkconfig –list # 列出所有系统服务
|
||||
\# chkconfig –list | grep on # 列出所有启动的系统服务程序
|
||||
|
||||
\# rpm -qa # 查看所有安装的软件包
|
||||
|
||||
查看/proc/uptime文件计算系统启动时间:
|
||||
cat /proc/uptime
|
||||
输出: 5113396.94 575949.85
|
||||
|
||||
第一数字即是系统已运行的时间5113396.94秒,运用系统工具date即可算出系统启动时间
|
||||
|
||||
date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
|
||||
|
||||
输出: 2018-01-02 06:50:52
|
||||
|
||||
查看/proc/uptime文件计算系统运行时间
|
||||
|
||||
cat /proc/uptime| awk -F. '{run\_days=$1 / 86400;run\_hour=($1 % 86400)/3600;run\_minute=($1 % 3600)/60;run\_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run\_days,run\_hour,run\_minute,run\_second)}'
|
||||
|
||||
输出:系统已运行:1天1时36分13秒
|
||||
|
||||
#### Linux查看物理CPU个数、核数、逻辑CPU个数
|
||||
|
||||
\# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
|
||||
\# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
|
||||
|
||||
\# 查看物理CPU个数
|
||||
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
|
||||
2
|
||||
|
||||
\# 查看每个物理CPU中core的个数(即核数)
|
||||
cat /proc/cpuinfo| grep "cpu cores"| uniq
|
||||
cpu cores : 2
|
||||
|
||||
\# 查看逻辑CPU的个数
|
||||
cat /proc/cpuinfo| grep "processor"| wc -l
|
||||
|
||||
|
||||
\# 查看CPU信息(型号)
|
||||
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
|
||||
4 Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
|
||||
|
||||
输入命令cat /proc/cpuinfo 查看physical id有几个就有几个物理cpu;查看processor有几个就有几个逻辑cpu。
|
||||
(一)概念
|
||||
① 物理CPU
|
||||
实际Server中插槽上的CPU个数
|
||||
物理cpu数量,可以数不重复的physical id有几个
|
||||
② 逻辑CPU
|
||||
/proc/cpuinfo用来存储cpu硬件信息的
|
||||
信息内容分别列出了processor 0 –processor n 的规格。这里需要注意,n+1是逻辑cpu数
|
||||
一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的cpu core出来
|
||||
逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启ht)
|
||||
备注一下:Linux下top查看的CPU也是逻辑CPU个数
|
||||
③ CPU核数
|
||||
一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU、而 i5 2250 是四核心四线程的CPU
|
||||
一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术
|
||||
|
||||
lscpu命令,查看的是cpu的统计信息
|
||||
|
||||
|
||||
内存
|
||||
|
||||
概要查看内存情况 free -m 详细情况:cat /proc/meminfo
|
||||
|
||||
查看硬盘和分区分布: lsblk
|
||||
|
||||
如果要看硬盘和分区的详细信息:fdisk -l
|
||||
|
||||
使用“df -k”命令,以KB为单位显示磁盘使用量和占用率,-m则是以M为单位显示磁盘使用量和占用率
|
||||
|
||||
网卡
|
||||
|
||||
查看网卡硬件信息
|
||||
\# lspci | grep -i 'eth'
|
||||
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)
|
||||
|
||||
查看系统的所有网络接口:ifconfig -a
|
||||
|
||||
如果要查看某个网络接口的详细信息,例如eth0的详细参数和指标:ethtool eth0
|
||||
|
||||
查看pci信息,即主板所有硬件槽信息:lspci
|
||||
|
||||
如果要更详细的信息:lspci -v 或者 lspci -vv
|
||||
|
||||
如果要看设备树:lspci -t
|
||||
|
||||
####
|
||||
**Linux /proc目录详解**
|
||||
|
||||
|
||||
1\. /proc目录
|
||||
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
|
||||
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
|
||||
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
|
||||
|
||||
2\. 子文件或子文件夹
|
||||
/proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关
|
||||
/proc/cmdline 启动时传递给kernel的参数信息
|
||||
/proc/cpuinfo cpu的信息
|
||||
/proc/crypto 内核使用的所有已安装的加密密码及细节
|
||||
/proc/devices 已经加载的设备并分类
|
||||
/proc/dma 已注册使用的ISA DMA频道列表
|
||||
/proc/execdomains Linux内核当前支持的execution domains
|
||||
/proc/fb 帧缓冲设备列表,包括数量和控制它的驱动
|
||||
/proc/filesystems 内核当前支持的文件系统类型
|
||||
/proc/interrupts x86架构中的每个IRQ中断数
|
||||
/proc/iomem 每个物理设备当前在系统内存中的映射
|
||||
/proc/ioports 一个设备的输入输出所使用的注册端口范围
|
||||
/proc/kcore 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb
|
||||
/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
|
||||
/proc/loadavg 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
|
||||
/proc/locks 内核锁住的文件列表
|
||||
/proc/mdstat 多硬盘,RAID配置信息(md=multiple disks)
|
||||
/proc/meminfo RAM使用的相关信息
|
||||
/proc/misc 其他的主要设备(设备号为10)上注册的驱动
|
||||
/proc/modules 所有加载到内核的模块列表
|
||||
/proc/mounts 系统中使用的所有挂载
|
||||
/proc/mtrr 系统使用的Memory Type Range Registers (MTRRs)
|
||||
/proc/partitions 分区中的块分配信息
|
||||
/proc/pci 系统中的PCI设备列表
|
||||
/proc/slabinfo 系统中所有活动的 slab 缓存信息
|
||||
/proc/stat 所有的CPU活动信息
|
||||
/proc/sysrq-trigger 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
|
||||
/proc/uptime 系统已经运行了多久
|
||||
/proc/swaps 交换空间的使用情况
|
||||
/proc/version Linux内核版本和gcc版本
|
||||
/proc/bus 系统总线(Bus)信息,例如pci/usb等
|
||||
/proc/driver 驱动信息
|
||||
/proc/fs 文件系统信息
|
||||
/proc/ide ide设备信息
|
||||
/proc/irq 中断请求设备信息
|
||||
/proc/net 网卡设备信息
|
||||
/proc/scsi scsi设备信息
|
||||
/proc/tty tty设备信息
|
||||
/proc/net/dev 显示网络适配器及统计信息
|
||||
/proc/vmstat 虚拟内存统计信息
|
||||
/proc/vmcore 内核panic时的内存映像
|
||||
/proc/diskstats 取得磁盘信息
|
||||
/proc/schedstat kernel调度器的统计信息
|
||||
/proc/zoneinfo 显示内存空间的统计信息,对分析虚拟内存行为很有用
|
||||
|
||||
以下是/proc目录中进程N的信息
|
||||
/proc/N pid为N的进程信息
|
||||
/proc/N/cmdline 进程启动命令
|
||||
/proc/N/cwd 链接到进程当前工作目录
|
||||
/proc/N/environ 进程环境变量列表
|
||||
/proc/N/exe 链接到进程的执行命令文件
|
||||
/proc/N/fd 包含进程相关的所有的文件描述符
|
||||
/proc/N/maps 与进程相关的内存映射信息
|
||||
/proc/N/mem 指代进程持有的内存,不可读
|
||||
/proc/N/root 链接到进程的根目录
|
||||
/proc/N/stat 进程的状态
|
||||
/proc/N/statm 进程使用的内存的状态
|
||||
/proc/N/status 进程状态信息,比stat/statm更具可读性
|
||||
/proc/self 链接到当前正在运行的进程
|
||||
@@ -0,0 +1,198 @@
|
||||
2025-02-05 2647 发布于四川
|
||||
|
||||
版权
|
||||
|
||||
举报
|
||||
|
||||
版权声明:
|
||||
|
||||
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 [阿里云开发者社区用户服务协议](https://developer.aliyun.com/article/768092)》和 《[阿里云开发者社区知识产权保护指引](https://developer.aliyun.com/article/768093)》。如果您发现本社区中有涉嫌抄袭的内容,填写 [侵权投诉表单](https://yida.alibaba-inc.com/o/right)进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
|
||||
|
||||
**简介:** 通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
|
||||
|
||||
Fail2ban是一款开源的入侵防护工具,通过监控日志文件来检测潜在的攻击行为,如暴力破解,并自动更新防火墙规则以阻止这些攻击。本文将详细介绍如何在Linux系统中安装和配置Fail2ban。
|
||||
|
||||
一、安装Fail2ban
|
||||
------------
|
||||
|
||||
### 1\. 安装Fail2ban
|
||||
|
||||
在Debian/Ubuntu系统中,可以使用以下命令安装Fail2ban:
|
||||
|
||||
```null
|
||||
sudo apt update
|
||||
sudo apt install fail2ban
|
||||
|
||||
|
||||
```
|
||||
|
||||
在CentOS/RHEL系统中,可以使用以下命令安装Fail2ban:
|
||||
|
||||
```null
|
||||
sudo yum install epel-release
|
||||
sudo yum install fail2ban
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 2\. 启动和启用Fail2ban服务
|
||||
|
||||
安装完成后,启动Fail2ban服务并设置为开机自启动:
|
||||
|
||||
```null
|
||||
sudo systemctl start fail2ban
|
||||
sudo systemctl enable fail2ban
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 3\. 检查Fail2ban服务状态
|
||||
|
||||
可以使用以下命令检查Fail2ban服务的状态:
|
||||
|
||||
```null
|
||||
sudo systemctl status fail2ban
|
||||
|
||||
|
||||
```
|
||||
|
||||
二、配置Fail2ban
|
||||
------------
|
||||
|
||||
### 1\. 创建本地配置文件
|
||||
|
||||
Fail2ban的默认配置文件位于 `/etc/fail2ban/jail.conf`,不建议直接修改该文件。相反,我们可以创建一个本地配置文件 `/etc/fail2ban/jail.local` 来覆盖默认设置。
|
||||
|
||||
```null
|
||||
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 2\. 配置基本设置
|
||||
|
||||
打开并编辑 `/etc/fail2ban/jail.local` 文件:
|
||||
|
||||
```null
|
||||
sudo nano /etc/fail2ban/jail.local
|
||||
|
||||
|
||||
```
|
||||
|
||||
在 `[DEFAULT]` 部分,可以配置全局设置,例如:
|
||||
|
||||
```null
|
||||
[DEFAULT]
|
||||
bantime = 3600
|
||||
findtime = 600
|
||||
maxretry = 5
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 3\. 启用并配置具体服务
|
||||
|
||||
在 `jail.local` 文件中,配置具体服务的设置,例如SSH服务:
|
||||
|
||||
```null
|
||||
[sshd]
|
||||
enabled = true
|
||||
port = ssh
|
||||
logpath = %(sshd_log)s
|
||||
backend = %(sshd_backend)s
|
||||
|
||||
|
||||
```
|
||||
|
||||
确保将 `enabled` 设置为 `true`,以启用对SSH服务的保护。
|
||||
|
||||
三、Fail2ban 过滤器配置
|
||||
----------------
|
||||
|
||||
Fail2ban 通过过滤器(filters)来解析日志文件中的失败尝试记录,并采取相应的措施。
|
||||
|
||||
### 1\. 查看默认过滤器
|
||||
|
||||
Fail2ban的默认过滤器文件位于 `/etc/fail2ban/filter.d/` 目录中。例如,SSH的过滤器文件是 `sshd.conf`。
|
||||
|
||||
### 2\. 自定义过滤器
|
||||
|
||||
如果需要创建自定义过滤器,可以在 `/etc/fail2ban/filter.d/` 目录中创建新的过滤器文件,例如 `custom.conf`:
|
||||
|
||||
```null
|
||||
sudo nano /etc/fail2ban/filter.d/custom.conf
|
||||
|
||||
|
||||
```
|
||||
|
||||
在文件中定义过滤规则,例如:
|
||||
|
||||
```null
|
||||
[Definition]
|
||||
failregex = <HOST> - - [.*] "GET /wp-login.php HTTP/1.1" 200
|
||||
|
||||
|
||||
```
|
||||
|
||||
四、测试Fail2ban配置
|
||||
--------------
|
||||
|
||||
### 1\. 测试配置文件语法
|
||||
|
||||
可以使用以下命令测试Fail2ban的配置文件语法:
|
||||
|
||||
```null
|
||||
sudo fail2ban-client -d
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 2\. 手动测试过滤器
|
||||
|
||||
可以使用以下命令手动测试过滤器的匹配情况:
|
||||
|
||||
```null
|
||||
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
|
||||
|
||||
|
||||
```
|
||||
|
||||
五、管理Fail2ban
|
||||
------------
|
||||
|
||||
### 1\. 查看被禁IP列表
|
||||
|
||||
使用以下命令查看当前被禁的IP列表:
|
||||
|
||||
```null
|
||||
sudo fail2ban-client status sshd
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 2\. 手动解禁IP
|
||||
|
||||
使用以下命令手动解禁某个IP:
|
||||
|
||||
```null
|
||||
sudo fail2ban-client set sshd unbanip <IP_ADDRESS>
|
||||
|
||||
|
||||
```
|
||||
|
||||
### 3\. 重启Fail2ban服务
|
||||
|
||||
每次修改配置后,需要重启Fail2ban服务以使更改生效:
|
||||
|
||||
```null
|
||||
sudo systemctl restart fail2ban
|
||||
|
||||
|
||||
```
|
||||
|
||||
六、总结
|
||||
----
|
||||
|
||||
通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
|
||||
|
||||
### 思维导图
|
||||
@@ -0,0 +1,38 @@
|
||||
要在 Linux 中使用 **Docker** 指令而无需每次都获取 `root` 权限,通常需要将当前用户添加到 `docker` 组中。这样,用户就能够在没有 `sudo` 的情况下运行 Docker 命令。
|
||||
|
||||
以下是步骤:
|
||||
|
||||
Docker 默认会创建一个名为 `docker` 的组,并将其与 Docker 服务相关联。将你的普通用户添加到这个组后,你就能在不使用 `sudo` 的情况下执行 Docker 命令。
|
||||
|
||||
使用以下命令将当前用户添加到 `docker` 组:
|
||||
|
||||
其中:
|
||||
|
||||
* `usermod`:用于修改用户账户。
|
||||
* `-aG docker`:将用户添加到 `docker` 组。
|
||||
* `$USER`:表示当前登录的用户。
|
||||
|
||||
用户添加到新组后,需要重新登录才能生效。你可以通过退出当前会话并重新登录,或者使用 `newgrp` 命令来刷新组信息:
|
||||
|
||||
这会使你立即加入 `docker` 组,而无需注销。
|
||||
|
||||
可以通过以下命令来验证用户是否已经成功加入 `docker` 组:
|
||||
|
||||
你应该看到输出中包含 `docker` 组。如果是这样,说明配置已经生效。
|
||||
|
||||
在完成上述步骤后,你可以测试是否能在没有 `sudo` 的情况下运行 Docker 命令:
|
||||
|
||||
如果没有提示需要 `sudo` 权限且能够成功执行命令,那么设置就已经完成。
|
||||
|
||||
* **安全性**:将用户添加到 `docker` 组实际上是给予该用户类似 `root` 权限的权限,因为 Docker 在运行容器时会与宿主机的内核进行交互,因此拥有对 Docker 的访问权限也意味着对宿主机有很高的权限。
|
||||
* **推荐的做法**:在生产环境中,如果不希望直接给普通用户太高权限,可以考虑使用其他限制方法,比如使用 **`sudo`** 来管理权限或使用更细粒度的权限控制工具。
|
||||
|
||||
1. 使用 `sudo usermod -aG docker $USER` 将普通用户添加到 `docker` 组。
|
||||
2. 重新登录或使用 `newgrp docker` 使更改生效。
|
||||
3. 验证用户是否可以不使用 `sudo` 执行 Docker 命令。
|
||||
|
||||
\_\_EOF\_\_
|
||||
|
||||

|
||||
|
||||
免责声明:本内容来自平台创作者,博客园系信息发布平台,仅提供信息存储空间服务。
|
||||
@@ -0,0 +1,126 @@
|
||||
[Linux软件包格式](https://dashen-tech.com/tags/#linux) [RPM与DEB区别](https://dashen-tech.com/tags/#rpmdeb) [Snap与Flatpak对比](https://dashen-tech.com/tags/#snapflatpak) [AppImage使用教程](https://dashen-tech.com/tags/#appimage) [Linux软件安装指南](https://dashen-tech.com/tags/#linux)
|
||||
|
||||
[
|
||||
](https://res.makeronsite.com/dashen-tech.com/linux-fileformat-cover.webp)
|
||||
|
||||
[
|
||||
](https://res.makeronsite.com/dashen-tech.com/linux-fileformat.webp)
|
||||
|
||||
如果你是Linux用户,一定遇到过各种软件包格式:RPM、DEB、AppImage、Snap、Flatpak……它们有什么区别?哪种更适合你的需求?本文用最简单的方式,解析这些格式的特性、优缺点及适用场景!
|
||||
|
||||
* * *
|
||||
|
||||
一、传统软件包格式:RPM与DEB[¶](#rpmdeb "Permanent link")
|
||||
----------------------------------------------
|
||||
|
||||
### 1\. **RPM(Red Hat Package Manager)**[¶](#1-rpmred-hat-package-manager "Permanent link")
|
||||
|
||||
* **适用系统**:Red Hat系列(如Fedora、CentOS、RHEL)。
|
||||
* **特点**:
|
||||
* 依赖系统库,需通过`yum`或`dnf`安装。
|
||||
* 软件包后缀为`.rpm`,需从官方仓库下载。
|
||||
* **优点**:与系统深度集成,稳定性高。
|
||||
* **缺点**:跨发行版兼容性差,依赖冲突常见。
|
||||
|
||||
### 2\. **DEB(Debian Package)**[¶](#2-debdebian-package "Permanent link")
|
||||
|
||||
* **适用系统**:Debian系列(如Ubuntu、Linux Mint)。
|
||||
* **特点**:
|
||||
* 通过`apt`或`dpkg`安装,后缀为`.deb`。
|
||||
* 依赖官方仓库或PPA(第三方源)。
|
||||
* **优点**:软件生态丰富,社区支持强大。
|
||||
* **缺点**:老旧系统难兼容新版软件。
|
||||
|
||||
* * *
|
||||
|
||||
二、便携式格式:AppImage[¶](#appimage "Permanent link")
|
||||
-----------------------------------------------
|
||||
|
||||
### **AppImage**[¶](#appimage_1 "Permanent link")
|
||||
|
||||
* **特点**:
|
||||
* 一个文件即完整应用!无需安装,双击运行。
|
||||
* 后缀为`.AppImage`,自带所有依赖库。
|
||||
* 完全跨发行版(Ubuntu、Fedora等通用)。
|
||||
* **优点**:
|
||||
* 便携性强,不污染系统目录。
|
||||
* 适合测试软件或封闭环境使用。
|
||||
* **缺点**:
|
||||
* 文件体积较大,无自动更新功能。
|
||||
|
||||
**使用场景**:
|
||||
\- 临时使用某工具(如[GIMP](https://www.gimp.org/)图像编辑器)。
|
||||
\- 无Root权限的服务器环境。
|
||||
|
||||
* * *
|
||||
|
||||
三、现代通用格式:Snap与Flatpak[¶](#snapflatpak "Permanent link")
|
||||
-------------------------------------------------------
|
||||
|
||||
### 1\. **Snap(由Ubuntu开发)**[¶](#1-snapubuntu "Permanent link")
|
||||
|
||||
* **特点**:
|
||||
* 后缀为`.snap`,通过`snapd`管理。
|
||||
* 自带依赖,支持沙盒隔离(安全性高)。
|
||||
* 软件源:[Snap Store](https://snapcraft.io/)。
|
||||
* **优点**:
|
||||
* 跨发行版支持(包括非Ubuntu系统)。
|
||||
* 自动更新,适合长期使用的应用(如[VS Code](https://code.visualstudio.com/))。
|
||||
* **缺点**:
|
||||
* 启动速度较慢,占用磁盘空间多。
|
||||
|
||||
### 2\. **Flatpak(社区主导)**[¶](#2-flatpak "Permanent link")
|
||||
|
||||
* **特点**:
|
||||
* 后缀为`.flatpak`,通过`flatpak`命令管理。
|
||||
* 共享运行时(如GNOME/KDE库),减少冗余。
|
||||
* 软件源:[Flathub](https://flathub.org/)。
|
||||
* **优点**:
|
||||
* 轻量级,适合桌面应用(如[LibreOffice](https://www.libreoffice.org/))。
|
||||
* 社区生态活跃,支持最新软件版本。
|
||||
* **缺点**:
|
||||
* 配置稍复杂,需手动添加仓库。
|
||||
|
||||
* * *
|
||||
|
||||
四、如何选择适合的软件包格式?[¶](#_1 "Permanent link")
|
||||
----------------------------------------
|
||||
|
||||
### **小白用户推荐**[¶](#_2 "Permanent link")
|
||||
|
||||
* **优先选择系统原生格式**(Ubuntu用DEB,Fedora用RPM)。
|
||||
* 需要最新软件?尝试**Flatpak**(通过Flathub安装)。
|
||||
|
||||
### **开发者/高级用户推荐**[¶](#_3 "Permanent link")
|
||||
|
||||
* 分发跨平台应用?用**AppImage**或**Flatpak**。
|
||||
* 需要沙盒安全隔离?选**Snap**或**Flatpak**。
|
||||
|
||||
### **避坑指南**[¶](#_4 "Permanent link")
|
||||
|
||||
* ❌ 避免混用多种格式安装同一软件(可能导致冲突)。
|
||||
* ✅ 定期清理旧版Snap/Flatpak包(节省磁盘空间)。
|
||||
|
||||
* * *
|
||||
|
||||
五、软件包格式对比表[¶](#_5 "Permanent link")
|
||||
-----------------------------------
|
||||
|
||||
* * *
|
||||
|
||||
### **表格解读**[¶](#_6 "Permanent link")
|
||||
|
||||
1. **RPM/DEB**:适合系统级软件,依赖系统库,稳定性高,但跨发行版兼容性差。
|
||||
2. **AppImage**:便携性强,适合临时使用或封闭环境,但文件体积较大。
|
||||
3. **Snap**:自带依赖,支持自动更新,适合长期使用的桌面应用,但启动较慢。
|
||||
4. **Flatpak**:轻量级,共享运行时,适合最新版桌面应用,生态活跃。
|
||||
|
||||
* * *
|
||||
|
||||
六、总结[¶](#_7 "Permanent link")
|
||||
-----------------------------
|
||||
|
||||
不同的Linux软件包格式各有优劣:
|
||||
\- **RPM/DEB**:适合系统核心组件,稳定但依赖复杂。
|
||||
\- **AppImage**:便携为王,即开即用。
|
||||
\- **Snap/Flatpak**:未来趋势,安全且跨平台。
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: Mac 与 win 之间的云同步处理
|
||||
source: https://blog.zwyyy456.tech/zh/posts/setup/cloud-sync/
|
||||
author:
|
||||
- "[[翼仔]]"
|
||||
published: 2024-01-15
|
||||
created: 2025-08-09
|
||||
description: iCloud 链接到标题 iCloud 是 Mac 的默认云盘,Apple 为 Mac 提供了一定程度上的 iCloud 集成,在 Apple ID -> iCloud -> iCloud 云盘 中,可以选择让“桌面与文稿文件夹”也使用 iCloud 云盘,此时
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
## iCloud
|
||||
|
||||
iCloud 是 Mac 的默认云盘,Apple 为 Mac 提供了一定程度上的 iCloud 集成,在 `Apple ID -> iCloud -> iCloud 云盘` 中,可以选择让“桌面与文稿文件夹”也使用 iCloud 云盘,此时,你原先的 `/Users/Documents` 和 `/Users/Desktop` 会被替换为 `iCloud/Documents` 中的 `文稿 - zwy - mbp14` 以及 `icloud/Desktop` 中的 `桌面 - zwy - mpb14` 目录,同时 iCloud 中的 `文稿` 目录与 `桌面` 目录会被分别作为 Mac 的 `/Users/Documents` 与 `/Users/Desktop` 目录,推测是通过符号链接来实现的?
|
||||
|
||||
此后所有的对 `/Users/Docuements` 与 `/Users/Desktop` 的修改都会反映到 iCloud 中。
|
||||
|
||||
要注意一点,推荐关闭 iCloud 的 `优化 Mac 储存空间` 功能,否则当你的 Mac 存储空间不足的时候, `/Users/Documents` 与 `/Users/Desktop` 目录中的内容会变成仅保存在 iCloud 云端,而本地没有保存内容,这会导致在这两个目录中执行 `git` 与 `cd` 等命令非常卡顿。
|
||||
|
||||

|
||||
|
||||
## OneDrive
|
||||
|
||||
Windows 也提供了对 OneDrive 的集成,但是开启之后,不像 iCloud 那么彻底,原先的 `C:\Users\zwyyy\Documents` 与 `C:\Users\zwyyy\Desktop` 目录依旧存在,只是文件管理器左侧显示的 `桌面` 与 `文档` 会指向 `C:\Users\zwyyy\OneDrive\Desktop` 和 `C:\Users\zwyyy\OneDrive\Documents` 两个目录,同时 Windows 的桌面显示的内容也被替换成了 `C:\Users\zwyyy\OneDrive\Desktop` 中的内容。
|
||||
|
||||
## 最佳实践
|
||||
|
||||
通过 **git 进行版本管理** 的代码文件不适合存放在云盘会自动同步的目录中,哪怕是使用 mega 这种自定义排除同步功能十分丰富的云盘,也不推荐,这是因为云盘对文件的同步容易被 git 视为修改,从而在 git pull 时发生 conflict,哪怕这个文件的内容你实际上没有修改。
|
||||
|
||||
推荐将 code 目录直接存放在 `/Users/zwyyy/` 目录下(Mac)或者 `C:\Users\zwyyy` 目录下(Windows)。
|
||||
|
||||
代码文件统一存放在 code 目录下,blog 也存放在 code 目录下。
|
||||
|
||||
> 源代码编译时会产生大量的临时文件,这也是不推荐将代码源文件通过云同步工具进行同步的一个重要原因。
|
||||
|
||||
## 代码文件的自动同步
|
||||
|
||||
代码文件一般通过 git 进行版本管理,因此不适合存放在云盘中进行同步,然而总有代码写了一部分,忘记 push 到 github,而回家之后,要接着修改代码的情况,那应该如何实现代码的自动同步呢?
|
||||
|
||||
对 Mac 或者 Linux,解决方案为通过 crontab 自动执行 `git push` 命令,具体一点,即定时执行以下命令:
|
||||
|
||||
```sh
|
||||
git add -A
|
||||
git commit -m "mac, auto sync"
|
||||
git push ali main:mac # Linux 替换为 linux 分支,Windows 替换为 win 分支
|
||||
```
|
||||
|
||||
Windows 应该差不多,即要求定时执行 powershell 脚本。
|
||||
|
||||
```sh
|
||||
git add -A
|
||||
git commit -m "win, auto push"
|
||||
git push ali main:win
|
||||
```
|
||||
|
||||
之后,假设回到家,发现之前忘记手动 push 了,那么只需要执行以下命令:
|
||||
|
||||
```sh
|
||||
git checkout mac # 切换到 mac 分支
|
||||
git pull gitlab mac
|
||||
git checkout main
|
||||
git merge mac # 将本地的 mac 分支的更改合并到 main 分支中
|
||||
|
||||
git push origin main
|
||||
```
|
||||
|
||||
对于 windows,则是:
|
||||
|
||||
```sh
|
||||
git checkout win
|
||||
git pull ali win
|
||||
git checkout main
|
||||
git merge win
|
||||
```
|
||||
|
||||
根据当前作息,我将设置 mac 在 18:10 与 20:40 定时执行 push。
|
||||
|
||||
### mac 设置 crontab
|
||||
|
||||
mac 可以通过 crontab 工具实现定时执行 push 操作。为了保证 crontab 可以正常执行,我们需要做一点额外配置。
|
||||
|
||||
首先执行 `crontab -e` ,修改为如下内容并退出保存:
|
||||
|
||||
```sh
|
||||
6 18 * * * zsh /Users/zwyyy/.config/mac-push.sh
|
||||
7 18 * * * zsh /Users/zwyyy/code/bean/mac-push.sh
|
||||
8 18 * * * zsh /Users/zwyyy/code/leetcode/mac-push.sh
|
||||
9 18 * * * zsh /Users/zwyyy/code/blog/zwyb_blog/mac-push.sh
|
||||
|
||||
36 20 * * * zsh /Users/zwyyy/.config/mac-push.sh
|
||||
37 20 * * * zsh /Users/zwyyy/code/bean/mac-push.sh
|
||||
38 20 * * * zsh /Users/zwyyy/code/leetcode/mac-push.sh
|
||||
39 20 * * * zsh /Users/zwyyy/code/blog/zwyb_blog/mac-push.sh
|
||||
```
|
||||
|
||||
然后执行 `sudo launchctl list | grep cron` 查看任务是否存在,我的输出如下:
|
||||
|
||||
```sh
|
||||
zwyyy@zwy-mbp14 ~/c/bean (main)> sudo launchctl list | grep cron (base)
|
||||
458 0 com.vix.cron
|
||||
```
|
||||
|
||||
有输出说明任务存在。然后执行 `locate com.vix.cron` 查看启动项配置,如果有 `WARNING` ,就执行系统提供的命令 `sudo launchctl load -W /System/Library/LaunchDaemons/com.apple.locate.plist` 。
|
||||
|
||||
然后查看 `/etc/crontab` 是否存在,我这里是不存在的,需要执行 `sudo touch /etc/crontab` 来创建。
|
||||
|
||||
之后,可能需要给 crontab 完全磁盘访问权限,crontab 安装于 `/usr/bin` ,我们打开 `系统偏好设置 -> 隐私与安全性 -> 完全磁盘访问权限` ,将访达中的 crontab 图标拖进去,即可为 crontab 启用完全磁盘访问权限。
|
||||
|
||||
但是我的 crontab 执行的命令似乎并不需要完全磁盘访问权限,一般来说,应用需要访问 User 的 Documents、Desktop、Downloads、OneDrive 这几个目录会需要单独授予磁盘访问权限,对 crontab,我们无法单独授予对某个文件夹的访问权限,因此只能授予完全磁盘访问权限。
|
||||
|
||||
> 关于 crontab 是否需要完全磁盘访问权限,这一点还有待测试。 当前测试表明不需要完全磁盘访问权限。
|
||||
|
||||
### Windows 设置定时任务
|
||||
|
||||
以 Win11 操作系统为例,打开 `任务计划程序` ,点击 `任务计划程序库` ,然后点击右侧的 `创建任务` ,在 `触发器` 标签处选择每日重复,在 `操作` 标签下, `程序` 选择 `pwsh.exe` , `参数` 设置为 `-ExecutionPolicy Bypass -File "C:\path\to\your\script.ps1"` 。
|
||||
|
||||
其中 `-ExecutionPolicy Bypass` 表示 PowerShell 脚本的执行策略为 `Bypass` ,即允许所有 PowerShell 脚本运行而不受任何限制, `-File` 之后则是要执行的脚本的具体路径。
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: Mac 教程:OS X「剪切」移动文件的三种方法 - 少数派, Mac 教程:OS X「剪切」移动文件的三种方法 - 少数派
|
||||
source: https://sspai.com/post/28389
|
||||
author:
|
||||
- "[[iTumbledSea]]"
|
||||
published: 1970-01-01
|
||||
created: 2025-09-24
|
||||
description: Windows 和 Mac 电脑之间有个明显的差别:Mac 上没有直接的「剪切」选项。其实类似的「剪切」功能 Mac 电脑当然可以做到,只是不如 Windows 电脑那样来得直接。
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-24T19:33
|
||||
---
|
||||

|
||||
|
||||
Mac 教程:OS X「剪切」移动文件的三种方法
|
||||
|
||||

|
||||
|
||||
iTumbledSea
|
||||
|
||||
2015/03/02 15:06
|
||||
|
||||
不知你有没有发现,Windows 电脑和 Mac 电脑之间有个明显的差别:在 Mac OS X 上没有直接的「剪切」文件选项。在 Windows 电脑上进行文件操作,用户习惯了剪切、复制和粘贴,但在 Mac 电脑上针对文件管理并没有所谓的「剪切」命令。其实,类似的「剪切」功能 Mac 电脑当然可以做到,只是不如 Windows 电脑那样来得直接。
|
||||
|
||||
相反,苹果将类似的功能称为「移动」,笔者觉得这个称呼更贴切。在 Mac 电脑上,虽然你在文件上右键单击没有相关的「剪切」选项,但是我们可以借助 3 种方式来实现。
|
||||
|
||||
## 1\. 配合 Option 键
|
||||
|
||||
**第一步:** 在你要剪切的项目上右键单击,选择「复制」选项。
|
||||
|
||||
**第二步:** 转到你需要粘贴的目录,右键单击,此时按住 **Option** 键,你会发现菜单中的「粘贴到此处」项变成了「移动到此处」。单击之来移动项目。
|
||||
|
||||
 
|
||||
|
||||
你会发现该需要移动的项目已经从原来的目录消失。
|
||||
|
||||
## 2\. 快捷键组合
|
||||
|
||||
上面的鼠标操作你有没有觉得有那么一丁点繁琐?那么来吧。我们可以使用快捷键组合来达到相同的目的。
|
||||
|
||||
你只需选中目标文件,然后使用 **Command+C** 复制,然后用 **Command +Option+V** 将其移动到目标目录。
|
||||
|
||||
## 3\. 借助 XtraFinder
|
||||
|
||||
XtraFinder 是一款免费的 Finder 插件,你可以借助其将「剪切」命令添加到右键菜单中。怎么样,找到 Windows 右键菜单的感觉没?
|
||||
|
||||
- [获取 XtraFinder](https://sspai.com/link?target=https%3A%2F%2Fwww.trankynam.com%2Fxtrafinder%2F)
|
||||
|
||||
安装完成后,打开 XtraFinder,然后从其菜单栏图标进入「偏好设置」。
|
||||
|
||||

|
||||
|
||||
选择「功能」选项卡,然后在「剪切和粘贴」项前打上勾。
|
||||
|
||||

|
||||
|
||||
关于在 OS X 上移动文件,你还有其他心得和技巧吗?欢迎在下方评论畅所欲言。
|
||||
|
||||
33
|
||||
|
||||
13
|
||||
|
||||
目录 3
|
||||
|
||||
- 1\. 配合 Option 键
|
||||
- 2\. 快捷键组合
|
||||
- 3\. 借助 XtraFinder
|
||||
|
||||
© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。
|
||||
|
||||
33
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
title: "Mac电脑如何输入command(⌘)、option(⌥)、shift()等特殊符号"
|
||||
source: "https://www.bilibili.com/opus/508911233254394012"
|
||||
author:
|
||||
- "[[哔哩哔哩]]"
|
||||
published:
|
||||
created: 2025-11-26
|
||||
description:
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
Mac电脑如何输入command(⌘)、option(⌥)、shift()等特殊符号
|
||||
|
||||

|
||||
|
||||
55754269847\_bili
|
||||
|
||||
编辑于 2021年04月02日 09:53
|
||||
|
||||
在日常使用中,我们经常会为了输入一个符号而头疼不已,打字很简单,但输入符号时总要鼓捣半天。所以这次我们就讲讲如何快速输入符号,以提高你的效率。
|
||||
|
||||
## 输入法
|
||||
|
||||
使用输入法输入符号的方式非常简单,而且不需要强记,只要输入内容的简拼或全拼即可。
|
||||
|
||||
**1\. 输入数学符号:** budengyu(≠)、yuedengyu(≈)、dayudengyu(≥)、xiaoyudengyu(≤)、pai(π)、aerfa(α)、beita(β)、wuquongda(∞)、yinwei(∵)、suoyi(∴)、jifen(∫)、pingfang(²)、efzy(½)、sfzs(¾)
|
||||
|
||||
**2\. 输入货币单位:** my($)、yb(£)、oy(€)、taizhu(฿)
|
||||
|
||||
**3\. 其他符号:** bq(©️)、tm(™)、dain(·)、slh(……)、du(°)、shang(↑)、xia(↓)、zuo(←)、you(→)
|
||||
|
||||
## 键盘
|
||||
|
||||
Mac的键盘上隐藏了很多符号,只要按 option 或 option-shift,就可以解锁键盘上符号输入。但相对于输入法方式来说,如果不掌握键盘和符号对照的规律,可能需要强记才行。1. 按住 option 的符号对应:
|
||||
|
||||
2\. 按住 option-shift 的符号对应:
|
||||
|
||||

|
||||
|
||||
Mac键盘和符号之间的对应关系有一定的规律,主要有以下三点:
|
||||
|
||||
- 形似:option-R(®)、option-G(©)、option-Y(¥)、option-f(ƒ)、
|
||||
- 音似:option-M(µ)、option-P(π)
|
||||
- 相关:option-/(÷)、option-=(≠)、option->(≥)
|
||||
|
||||
如果你没有记住这些符号对应的位置,可以打开「显示虚拟键盘」来查看:1. 点击菜单栏输入法,再点击显示虚拟键盘(如果没有找到该选项,请看第3步)
|
||||
|
||||

|
||||
|
||||
2\. 分别按下option、option-shift,即可看到对应字符
|
||||
|
||||
3\. 若未找到显示虚拟键盘,打开系统偏好设置,进入键盘标签页,勾选在菜单栏中显示虚拟键盘及表情检视器
|
||||
|
||||

|
||||
|
||||
这些主要是用输入法和键盘两种方式输入一些常见的符号,但类似 command(⌘)、option(⌥)、shift(⇧)等这些特殊的符号就无法输入了。那么现在我们继续讲讲这些特殊符号到底该如何输入:
|
||||
|
||||
## 表情与符号
|
||||
|
||||
Mac 中有自带的字符大全,里面包含所有的字符与表情,你可以用它来键入任何的符号。1. 点击菜单栏输入法图标选择「显示表情与符号」,或快捷键 option-command-t,即可打开字符检视器
|
||||
|
||||

|
||||
|
||||
2\. 双击符号或将符号拖到相应位置,即可添加对应的符号
|
||||
|
||||

|
||||
|
||||
3\. command、option、shift 这类符号 Mac 中统称为技术符号,长按左上角的齿轮图标,进入自定列表,勾选技术符号即可添加
|
||||
|
||||

|
||||
|
||||
动图
|
||||
|
||||
## 编辑文本替换
|
||||
|
||||
这个功能就是将输入的内容自动替换成你设置的替换内容。1. 打开 系统偏好设置,点击 键盘,选择 文本 标签页2. 点击左下角「+」,编辑要替换的文本
|
||||
|
||||

|
||||
|
||||
3\. 设置完成后,若想要打出⌘,直接输入cmd,当出现替换项时按回车键确认替换即可
|
||||
|
||||
投诉或建议
|
||||
|
||||
评论
|
||||
|
||||
赞与转发
|
||||
@@ -0,0 +1,40 @@
|
||||
提醒:本文最后更新于 2025-03-02 23:02,文中所关联的信息可能已发生改变,请知悉!
|
||||
|
||||
这几天突然抽风了,怎么也连接不上 api.themoviedb.org,api.tmdb.org,www.themoviedb.org 这几个网站,众所周知这几个网址对我们搞影视墙的人那是相当重要,思来想去很多办法都试过了,包括用代代,但是总觉得这样有潜在风险,所以最终选择了内部问题内部解决,至少改一次能管几个月吧,而且修改一次 Hosts 用时不到 5 分钟,好啦,教程正式开始!
|
||||
|
||||
1\. 获取网址对应的 IP 地址
|
||||
-----------------
|
||||
|
||||
打开 [https://dnschecker.org/](https://dnschecker.org/),分别输入你要查找的网址,如图
|
||||
|
||||

|
||||
|
||||
2\. 安装 MoviePilot 修改 Hosts 插件
|
||||
-----------------------------
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
注意网址和 IP 之间有空格!!!输入之后点击保存即可!
|
||||
|
||||

|
||||
|
||||
3\. 其他用法
|
||||
--------
|
||||
|
||||
只要查询到了网址对应 IP,修改 Hosts 这种办法很多地方都可以用,你也可以选择直接修改 DOCKER 的 HOSTS,或者极空间的 HOSTS,但是要用 SSH 连接,可能会有风险,我还是比较推荐我上面的这种办法,配合极影视已经无敌了,没必要再搞别的了。
|
||||
|
||||
```
|
||||
|
||||
| | 近期我查询到的对应 IP,后面如果我有更换会在这里更新,有需要的小伙伴加群或者收藏本网站吧。 |
|
||||
| | 65.9.189.27 api.themoviedb.org |
|
||||
| | 65.9.189.48 api.tmdb.org |
|
||||
| | 18.67.51.21 www.themoviedb.org |
|
||||
| | 51.89.210.79 webservice.fanart.tv |
|
||||
| | 149.154.167.220 api.telegram.org |
|
||||
| | 20.200.245.247 github.com |
|
||||
| | 20.205.243.168 api.github.com |
|
||||
| | 185.199.111.133 raw.githubusercontent.com |
|
||||
| | 3.170.218.86 api.thetvdb.com |
|
||||
```
|
||||
@@ -0,0 +1,122 @@
|
||||
[海外住宅IP](https://hanscn.com/tags/%E6%B5%B7%E5%A4%96%E4%BD%8F%E5%AE%85IP/)[clash](https://hanscn.com/tags/clash/)[nas](https://hanscn.com/tags/nas/)[旁路由](https://hanscn.com/tags/%E6%97%81%E8%B7%AF%E7%94%B1/)2026-01-012026-04-16
|
||||
|
||||
* * *
|
||||
|
||||
[
|
||||
](https://img.hanscn.com/nasclashfm.jpg)很多做 TikTok 多账号运营或追求全屋科学上网的朋友,第一反应往往是折腾软路由。但一想到要额外购买硬件、折腾刷机固件、还要改动全家现有的网络架构,不少人瞬间就被劝退了。
|
||||
|
||||
也有人选择在电脑或手机上开启“局域网共享”,虽然简单,但极不稳定,且对于跨境业务来说,配置多住宅 IP 分流非常繁琐,稍有不慎就容易触发风控。
|
||||
|
||||
本期教程我将教大家利用家里的 **NAS**(以**飞牛 FNOS** 为例),通过 Docker 运行一个轻量级容器,将其变身为高性能的**旁路由**。不仅能实现全屋无感加速,还能为不同设备分配独立的海外住宅 IP,助力跨境业务。
|
||||
|
||||
* * *
|
||||
|
||||
### [](#一、-准备工作:核心文件清单点击下载 "一、 准备工作:核心文件清单点击下载")一、 准备工作:核心文件清单[点击下载](https://hanscn.com/post/nasclash/abcd.com)
|
||||
|
||||
在部署之前,请先下载并准备好以下 4 个核心文件,并将它们放在一个名为 `clash` 的文件夹中:
|
||||
|
||||
1. **config.yaml**:Clash 的核心配置文件(决定了你的分流逻辑)。
|
||||
2. **UI 文件夹**:Clash 的可视化管理面板文件。
|
||||
3. **geosite.dat**:域名数据库。
|
||||
4. **Country.mmdb**:IP 地理位置数据库(实现精准分流的关键)。
|
||||
|
||||
**操作步骤:**
|
||||
|
||||
1. 进入飞牛 NAS 管理后台,打开“文件管理”。
|
||||
2. 在 `docker` 目录下创建 `clash` 文件夹。
|
||||
3. 将上述准备好的文件全部上传至该目录。
|
||||
|
||||
* * *
|
||||
|
||||
### [](#二、-Docker-部署-Clash-Mihomo-核心 "二、 Docker 部署 Clash (Mihomo 核心)")二、 Docker 部署 Clash (Mihomo 核心)
|
||||
|
||||
我们选择 **Mihomo**(原名 Clash Meta),它是目前功能最强、持续更新的内核版本。
|
||||
|
||||
#### [](#1-部署方式:Docker-Compose-推荐 "1. 部署方式:Docker Compose (推荐)")1\. 部署方式:Docker Compose (推荐)
|
||||
|
||||
为了降低难度,我们直接使用 **Compose** 部署,无需敲命令行。
|
||||
|
||||
**YAML 配置参考:**
|
||||
|
||||
```plaintext
|
||||
services:
|
||||
clash:
|
||||
image: metacubex/mihomo:latest
|
||||
container_name: clash
|
||||
restart: always
|
||||
network_mode: host # 使用主机模式,小白部署最稳
|
||||
pull_policy: if_not_present
|
||||
volumes:
|
||||
- /vol1/1000/docker/clash:/root/.config/mihomo # 这里的路径需对应你实际的 NAS 路径
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
```
|
||||
|
||||
#### [](#2-启动与验证 "2. 启动与验证")2\. 启动与验证
|
||||
|
||||
* 在飞牛 Docker 界面点击“创建项目”并启动。
|
||||
* 启动成功后,在浏览器输入 `NAS IP:9090/ui` 即可进入可视化管理面板。
|
||||
|
||||
* * *
|
||||
|
||||
### [](#三、-配置文件详解:接入机场与住宅-IP "三、 配置文件详解:接入机场与住宅 IP")三、 配置文件详解:接入机场与住宅 IP
|
||||
|
||||
#### [](#1-基础订阅配置 "1. 基础订阅配置")1\. 基础订阅配置
|
||||
|
||||
打开 `config.yaml`,找到修改位置:
|
||||
|
||||
* **修改必填 1**:粘贴你的机场订阅链接。
|
||||
* **修改必填 2**:粘贴订阅链接对应的域名。
|
||||
|
||||
#### [](#2-跨境运营核心:配置独立住宅-IP "2. 跨境运营核心:配置独立住宅 IP")2\. 跨境运营核心:配置独立住宅 IP
|
||||
|
||||
为了模拟真实的海外家庭环境,我们使用Thordata 静态住宅 IP。
|
||||
|
||||
* **配置链式代理**:在 `Proxies` 下添加住宅 IP 的地址、端口、用户名和密码。
|
||||
* **实现精准分流**:在规则(Rules)中,利用 `SRC-IP-CIDR` 指令,指定局域网内不同的手机 IP 走不同的住宅线路。
|
||||
* _例:iPhone A (192.168.1.111) -> 走美国住宅 IP_
|
||||
* _例:iPhone B (192.168.1.26) -> 走英国住宅 IP_
|
||||
|
||||
* * *
|
||||
|
||||
### [](#四、-客户端连接设置 "四、 客户端连接设置")四、 客户端连接设置
|
||||
|
||||
#### [](#方案-A:手动代理模式(最简单) "方案 A:手动代理模式(最简单)")方案 A:手动代理模式(最简单)
|
||||
|
||||
* **Windows**:在“代理设置”中开启手动代理,填入 `NAS IP`,端口 `7890`。
|
||||
* **iOS/Android**:在 WiFi 设置底部找到“HTTP 代理”,选“手动”,填入相同信息。
|
||||
|
||||
#### [](#方案-B:透明网关模式(最推荐-全屋无感) "方案 B:透明网关模式(最推荐/全屋无感)")方案 B:透明网关模式(最推荐/全屋无感)
|
||||
|
||||
这种方式对 TikTok 运营最纯净,不需要开启任何软件开关。
|
||||
|
||||
1. **修改手机 WiFi 静态 IP**:将“网关”和“DNS”全部指向你的 **NAS IP**。
|
||||
2. **开启 NAS 转发**:在 NAS 的“计划任务”里执行一次 `sysctl -w net.ipv4.ip_forward=1`。
|
||||
|
||||
* * *
|
||||
|
||||
### [](#五、-效果测试与总结 "五、 效果测试与总结")五、 效果测试与总结
|
||||
|
||||
通过以上配置,你可以看到:
|
||||
|
||||
* **环境检测**:打开 `ip.sb` 或 `ipleak.net`,显示的是纯净的住宅 IP,且 DNS 无泄露。
|
||||
* **无感体验**:手机无需额外操作,连上 WiFi 即可直接运营 TikTok 账号。
|
||||
|
||||
### [](#总结 "总结")总结
|
||||
|
||||
利用 NAS 做旁路由,是一项低成本、高效率的方案。它不需要你购买昂贵的软路由硬件,只需一个 Docker 容器,就能解决全屋设备的网络加速问题。
|
||||
|
||||
如果你在部署过程中遇到任何疑问,欢迎在评论区留言交流。
|
||||
|
||||
* * *
|
||||
|
||||
**Hans 的贴心提示:**
|
||||
|
||||
* 所有的配置文件模版和镜像文件,我已经整理好放在了评论区,大家可以按需获取。
|
||||
* 记得给 Clash 容器开启“高权限模式”,这是 TUN 模式运行的关键!
|
||||
|
||||
**如果你觉得这篇文章对你有帮助,欢迎点赞关注,我们下期见!**
|
||||
|
||||
* * *
|
||||
@@ -0,0 +1,160 @@
|
||||
---
|
||||
title: "Obsidian画的饼,正在一步步实现"
|
||||
source: "https://mp.weixin.qq.com/s?__biz=MzkzMDAwMTA4MA==&mid=2247484047&idx=1&sn=711a4e04629b8adbcaef6d9ccf9cec76&chksm=c201bb58f576324e16ad9b9b2a1867d8d620ff784424efde19670869ab7a8e9b7293dafddab2&scene=21#wechat_redirect"
|
||||
author:
|
||||
- "[[致九]]"
|
||||
published:
|
||||
created: 2025-11-05
|
||||
description: "大家好,我是致九!小提示:本篇文章约1250字,大约需7分钟阅读1 终极愿景:第二大脑Obsidian 的愿"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||

|
||||
|
||||
原创 致九 [致九THINKS](https://mp.weixin.qq.com/) *2023年4月3日 22:10*
|
||||
|
||||

|
||||
|
||||
大家好,我是 致九!
|
||||
|
||||
小提示:本篇文章约1250字,大约需7分钟阅读
|
||||
|
||||
## 1 终极愿景:第二大脑
|
||||
|
||||
Obsidian 的愿景就是成为人的 第二大脑 。
|
||||
|
||||
想象一下:
|
||||
|
||||
有一个地方存储着所有我们曾经看过的信息,存放我们所有令人惊奇的想法,我们不会丢失它们,在任何时间都能轻松地找到这些信息和想法。
|
||||
|
||||
它甚至拥有帮我们决策的能力,小到体验一家感兴趣的饭馆,大到未来数年的人生规划。
|
||||
|
||||
它就像一个私人顾问,和我们同步成长,当我们有疑问的时候,优先问一问它,如果它知道,ok,我们一步到位获得答案,如果它不知道,那么这就是一次它获得进化的机会,同样的问题不能难倒它第二次。
|
||||
|
||||
这就是第二大脑,存在人体之外的器官,每个人的全能之书。
|
||||
|
||||
为了达到如此宏大的愿景,Obsidian 必须拥有强大的功能。
|
||||
|
||||
那么 Obsidian 能做到什么?
|
||||
|
||||
## 2 基础:图文笔记
|
||||
|
||||
首先是常见的笔记,markdown 语法取得的排版和记录的平衡,在记录的同时用最小的负担去顺便给笔记加了方便阅读的格式。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
在图文笔记中我们可以去写日记、读书笔记、工作总结、复盘……
|
||||
|
||||
## 3 进阶:视频笔记
|
||||
|
||||
在视频笔记中,我们可以一边看视频,一边在需要记录的时间点记录该时间点和笔记,再次点击该时间点,就能直接定位到视频的该时间点,这对于习惯用视频来学习的朋友多方便啊!
|
||||
|
||||

|
||||
|
||||
## 4 进阶:图谱视角
|
||||
|
||||
在图谱的视角中,我们既可以看到所有 笔记 是怎么关联的:
|
||||
|
||||

|
||||
|
||||
也可以看到一条笔记和其他笔记是怎么联系在一起,借此发现更多的关系和隐藏的知识,探索思维的神奇链路:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 5 进阶:超级搜索
|
||||
|
||||
Obsidian 的搜索又快又准确,还提供了多种搜索方式,任意组合,精准定位想查找的内容:
|
||||
|
||||

|
||||
|
||||
在图文笔记中还能加入搜索的语法,展示动态搜索的结果:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 6 进阶:时间管理
|
||||
|
||||
我们可以在任意的笔记中记录要做的事情,会有一个统一的面板告诉我们未来的所有计划和安排,还会调用系统的通知提醒用户。
|
||||
|
||||

|
||||
|
||||
## 7 高阶:自由白板
|
||||
|
||||
Obsidian 给出了白板格式,这是一块无限大的画布,可以随意放置视频、网页、笔记、音频,同时给这些元素进行连线。
|
||||
|
||||
那么,白板的作用就看个人的想象能力了。
|
||||
|
||||
它能拿来做阅读批注:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
它能拿来做思维导图:
|
||||
|
||||

|
||||
|
||||
它能拿来当看图板:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
它能放多个图文笔记进行对比,归纳总结:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
还有大佬们玩的高级花活!玩跑团游戏( A DnD Character sheet I made using Canvas! (complete with working deathsaves counter) - Share & showcase - Obsidian Forum ):
|
||||
|
||||

|
||||
|
||||
## 8 更高阶
|
||||
|
||||
有的朋友拿 Obsidian 来做 图书库 ( 用Obsidian做了1年个人管理,我最喜欢的7个功能 - 经验分享 - Obsidian 中文论坛 ):
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
还是这位朋友,做出了 个人首页 ( 用Obsidian做了1年个人管理,我最喜欢的7个功能 - 经验分享 - Obsidian 中文论坛 ):
|
||||
|
||||

|
||||
|
||||
## 9 总结
|
||||
|
||||
以上的种种,其实都只是展现了 Obsidian 能做到的事情的冰山一角,只要想象力够(技术可以学),Obsidian 可以完全任我们改造,同时还有广大的技术大佬不吝啬自己的技术实力,产出了扩展 Obsidian 功能边界的丰富插件。
|
||||
|
||||
所以, Obsidian 给的其实是自由,数据保留在本地的自由,功能改造的自由,外观改造的自由,工作流程的自由……
|
||||
|
||||
第二大脑可以慢慢打造,但是如果不自由呢?
|
||||
|
||||
是数据拿不出来时的尴尬?还是当厂商可以随意审查删除我们内容时的弱势?还是付出金钱去买不看广告权利时的无奈?
|
||||
|
||||
当我们选择一个工具的时候,不妨问问, 这个工具能够支持我十年吗?
|
||||
|
||||
对我来说,Obsidian 可以。
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
感谢关注 、点赞、分享、赞赏,您的鼓励是我创作的最大动力!
|
||||
|
||||
同步该文章
|
||||
|
||||
继续滑动看下一个
|
||||
|
||||
致九THINKS
|
||||
|
||||
向上滑动看下一个
|
||||
|
||||
致九THINKS
|
||||
@@ -0,0 +1,179 @@
|
||||
|
||||
|
||||
星期二, 12月 3, 2024 | 6分钟阅读 | 更新于 星期二, 12月 3, 2024
|
||||
|
||||
本文详细探讨了如何为 Obsidian 笔记实现高效的多端同步方案,针对不同用户的需求提供了多种可行的解决方法。无论你是追求简单易用的官方服务,还是希望通过免费工具自主实现同步,都能在文中找到适合自己的解决方案。
|
||||
|
||||
关于 为什么一定是 Obsidian 笔记软件 请参考 [https://blog.diybeta.com/obsidian%E7%AC%94%E8%AE%B0%E8%BD%AF%E4%BB%B6%E4%BB%8B%E7%BB%8D/](https://blog.diybeta.com/obsidian%E7%AC%94%E8%AE%B0%E8%BD%AF%E4%BB%B6%E4%BB%8B%E7%BB%8D/)
|
||||
|
||||
方案介绍
|
||||
----
|
||||
|
||||
文章从功能、特点、配置步骤、适用场景等方面,全面解析了以下五种常见同步方式:
|
||||
|
||||
1. **Obsidian Sync**:官方提供的端到端加密服务,适合重视安全和便捷的用户。
|
||||
2. **云存储软件同步**:利用 iCloud、OneDrive、Google Drive 等主流云服务提供的客户端实现同步,兼顾广泛兼容性和易用性。
|
||||
3. **Git 同步**:结合版本控制的技术方案,适合技术熟练者和开发者,支持历史版本管理,需要 配合 **Git** 插件。
|
||||
4. **WebDAV 或云存储服务**:通过坚果云等支持 WebDAV 的服务,提供轻量级同步方案,适合数据量小的轻量用户,需要 配合 **Remotely Save** 插件。
|
||||
|
||||
| **同步方案** | **优点** | **缺点** | **适用人群** |
|
||||
| --- | --- | --- | --- |
|
||||
| **Obsidian Sync** | \- 官方支持,设置简单稳定\- 端到端加密,隐私保障\- 多平台兼容,移动端与桌面端无缝同步 | \- 需要订阅费用($8/月)\- 无法同步插件以及设置,只支持笔记容内容 | \- 想要便捷、安全、高可靠性服务的用户 |
|
||||
| **云存储软件同步** | \- 使用广泛(iCloud、OneDrive、Google Drive 等)\- 支持多类型文件同步\- 配置简单、免费或低成本 | \- 可能出现文件冲突问题\- 同步速度依赖云服务性能\- 数据隐私受服务商控制\- 移动端可能无法同步 | \- 大众用户\- 想要简化同步的普通用户 |
|
||||
| **Git 同步** | \- 版本控制功能强大\- 免费使用,免费使用的Git平台有很多\- 适合技术用户,支持历史版本回溯\- 支持多平台兼容,移动端与桌面端无缝同步 | \- 配置复杂,需手动操作\- 需要了解一些 _Git_ 知识,不适合大众用户 | \- 开发者或技术熟练者\- 希望管理版本的用户 |
|
||||
| **WebDAV 或云存储服务** | \- 轻量级方案,适合个人或小团队\- 免费服务可用,如坚果云\- 支持实时同步\- 支持多平台兼容,移动端与桌面端无缝同步 | \- 需要有现成的 **Webdav** 服务\- 容量有限(免费服务如坚果云有存储限制) | \- 数据量小的轻量用户\- 想要简化配置的小型团队 |
|
||||
|
||||
**一. 使用 Obsidian Sync**
|
||||
-----------------------
|
||||
|
||||
这是 Obsidian 官方提供的同步服务,特点是安全、稳定且设置简单。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
1. 订阅 Obsidian Sync 服务(收费,约 $8/月)。
|
||||
2. 在 Obsidian 的设置中启用 Sync 功能:
|
||||
* 打开 **设置 > 同步**。
|
||||
* 登录你的 Obsidian 账户并创建同步设置。
|
||||
3. 在其他设备上登录相同账户并选择同步相应的库(Vault)。
|
||||
|
||||
**二. 云存储软件同步**
|
||||
--------------
|
||||
|
||||
借助常用的云存储软件 (如 iCloud、OneDrive、Google Drive 等),你可以轻松实现多端同步。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
### **1\. 选择云存储工具**:
|
||||
|
||||
* macOS/iOS 用户推荐使用 iCloud Drive。
|
||||
* Windows 用户推荐 OneDrive。
|
||||
* 跨平台用户可选择 Google Drive 或 Dropbox。
|
||||
|
||||
#### **2\. 将 笔记仓库 ( Obsidian Vault ) 存储在云盘文件夹中**:
|
||||
|
||||
* 在创建或选择 笔记仓库 ( Obsidian Vault ) 时,将其路径设置为云盘的本地同步文件夹。
|
||||
|
||||
#### **3\. 多端配置**:
|
||||
|
||||
* 在其他设备上安装云存储客户端,同步对应文件夹。
|
||||
* 在 Obsidian 中打开该 仓库 ( Vault )。
|
||||
|
||||
#### **注意事项**:
|
||||
|
||||
* 确保云存储支持实时同步,避免文件冲突。
|
||||
* iCloud 在 Windows 平台性能可能不如 OneDrive 稳定。
|
||||
|
||||
**三. Git 同步**
|
||||
-------------
|
||||
|
||||
Git 是技术用户的高效选择,提供版本管理与同步功能。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
#### **1\. 本地配置 Git 环境** ( PC 端):
|
||||
|
||||
* 安装 Git,并初始化你的 笔记仓库 (Obsidian Vault) 为 Git 仓库:
|
||||
|
||||
```
|
||||
git init git remote add origin <你的远程仓库地址>
|
||||
```
|
||||
|
||||
|
||||
#### **2\. 安装 Obsidian Git 插件**
|
||||
|
||||
* 打开 **设置 > 第三方插件**, 关闭 **安全模式** , 浏览**社区插件市场**, 搜索 **Git**
|
||||
* **安装** 并 **启用** 插件
|
||||
* 
|
||||
|
||||
|
||||
#### **3\. 设置 Obsidian Git 插件**:
|
||||
|
||||
* 由于 **Obsidian Git** 插件 **自动同步** 设置比较繁琐, 所以这里提供设置好的 **配置文件**
|
||||
* 打开 笔记根目录,打开 `.obsidian\plugins\obsidian-git\` 目录, 找到 `data.json` 文件
|
||||
|
||||
* 将以下内容覆盖文件的全部内容:
|
||||
|
||||
```
|
||||
{ "commitMessage": "AutoCommit: {{hostname}} {{numFiles}} {{date}}", "commitDateFormat": "MM-DD HH:mm", "autoSaveInterval": 0.1, "autoPushInterval": 0.1, "autoPullInterval": 0.5, "autoPullOnBoot": true, "disablePush": false, "pullBeforePush": true, "disablePopups": true, "disablePopupsForNoChanges": false, "listChangedFilesInMessageBody": false, "showStatusBar": true, "updateSubmodules": false, "syncMethod": "merge", "customMessageOnAutoBackup": false, "autoBackupAfterFileChange": true, "treeStructure": false, "refreshSourceControl": true, "basePath": "", "differentIntervalCommitAndPush": true, "changedFilesInStatusBar": true, "showedMobileNotice": true, "refreshSourceControlTimer": 3000, "showBranchStatusBar": true, "setLastSaveToLastCommit": false, "submoduleRecurseCheckout": false, "gitDir": "", "showFileMenu": true, "authorInHistoryView": "hide", "dateInHistoryView": false, "lineAuthor": { "show": false, "followMovement": "inactive", "authorDisplay": "initials", "showCommitHash": false, "dateTimeFormatOptions": "date", "dateTimeFormatCustomString": "YYYY-MM-DD HH:mm", "dateTimeTimezone": "viewer-local", "coloringMaxAge": "1y", "colorNew": { "r": 255, "g": 150, "b": 150 }, "colorOld": { "r": 120, "g": 160, "b": 255 }, "textColorCss": "var(--text-muted)", "ignoreWhitespace": false, "gutterSpacingFallbackLength": 5, "lastShownAuthorDisplay": "initials", "lastShownDateTimeFormatOptions": "date" }, "autoCommitMessage": "AutoCommit: {{hostname}} {{numFiles}} {{date}}" }
|
||||
```
|
||||
|
||||
#### **4\. 移动端设置**:
|
||||
|
||||
* 参考 **移动端同步设置**
|
||||
|
||||
#### **5\. 使用**:
|
||||
|
||||
* 直接修改笔记 **Git 插件** 会根据内容变动自动提交 Git
|
||||
|
||||
### **注意事项**:
|
||||
|
||||
* 当两端同时在编辑一个笔记时, 大概率会遇到 **Git 冲突** 的问题,需要自行解决内容冲突问题
|
||||
* 这里 推荐使用 Git客户端 来解决冲突, 例如 Sourcetree, TortoiseGit 等,具体操作请自行搜索解决,这里不再展开教学
|
||||
|
||||
**四. WebDAV 或云存储服务**
|
||||
--------------------
|
||||
|
||||
云存储服务是运行商提供给企业和个人使用的一个标准化存储服务, 例如 亚马逊 S3, 阿里云 OSS, CloudFlare R2; WebDAV 是一种通用的文件同步协议,许多服务提供免费或付费支持,目前 坚果云支持独立的 WebDAV 服务, 或者自行在家庭NAS上或服务器 架设WebDAV服务 。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
#### **1\. 安装 Remotely Save 插件**
|
||||
|
||||
* 打开 **设置 > 第三方插件**, 关闭 **安全模式** , 浏览**社区插件市场**, 搜索 **Remotely Save**
|
||||
* **安装** 并 **启用** 插件
|
||||
* 
|
||||
|
||||
|
||||
#### **3\. 设置 Remotely Save 插件**:
|
||||
|
||||
#### **4\. 移动端设置**:
|
||||
|
||||
* 参考 **移动端同步设置**
|
||||
|
||||
### **注意事项**:
|
||||
|
||||
* **Remotely Save** 插件不会同步 `.obsidian` ,所以不会同步 obsidian 设置,插件,主题等内容,如果需要同步请参考 **Git 方案** 和 **云存储软件同步方案**
|
||||
|
||||
五. 移动端同步设置
|
||||
----------
|
||||
|
||||
由于移动端的各类问题不好定位,所以这里直接使用吧 **笔记仓库** 整体直接复制的方案来设置移动端
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
#### \*\*1. 在手机端安装 Obsidian 应用
|
||||
|
||||
* 到各自手机应用商店内搜索 Obsidian 安装
|
||||
|
||||
#### **2\. 在PC( WIN 或 MAC )端 复制 整个 笔记仓库 ( Obsidian Vault ) 目录 到共享目录**
|
||||
|
||||
* 例如: 我的本地 笔记仓库路径为 `D:\DevApps\MyNote`, 直接复制到 局域网共享目录 `\\192.168.16.2\Share`,没有的话自己找个电脑开启共享,只要和手机在局域网内就可以
|
||||
|
||||
#### **3 打开苹果手机的 文件 应用**
|
||||
|
||||
#### **3\. 打开 Obsidian, 选择刚才复制的笔记仓库即可**
|
||||
|
||||
* 如果默认不是 你刚才复制的 **笔记仓库 ( Obsidian Vault )** ,那么在打开页面右滑 **左上角** 点击重新选择就可以了
|
||||
* 第一次打开 仓库笔记,会自动重新索引需要等一会;
|
||||
* 一些**不支持移动端**的插件,会被自动禁用
|
||||
* **Git** 和 **Remotely Save**插件,支持 **移动端**,
|
||||
|
||||
总结与使用推荐
|
||||
-------
|
||||
|
||||
作者这样同步方案已经稳定使用两年多,不过选择的方案是 同时使用 **Git** 和 **Remotely Save**插件 这样 MAC 和 WIN 之间插件的设置和插件等功能通过Git就完成了自动同步 PC端 和 移动端 之间通过 **Remotely Save**插件, 只实现笔记同步,不同步设置,插件主题等.避免冲突等各类问题( 在移动端禁用Git插件 ) 当然移动端本身的局限性,比如字体,网络耗电等,设置,插件主题等这些内容是否同步并不是那么紧要. 而且 Obsidian 有大量的插件 不支持 移动端 另外为了桌面端之间同步顺畅, 将一些不必要的文件,如 日志文件 和 编辑器workspace 的设置等 排除Git外, 在笔记仓库 根目录增加 `.gitignore` 文件 内容:
|
||||
|
||||
```
|
||||
.obsidian/*.log
|
||||
.obsidian/workspace
|
||||
.obsidian/workspace.json
|
||||
.obsidian/graph.json
|
||||
.obsidian/plugins/*.log
|
||||
.obsidian/plugins/**/*.mdb
|
||||
.obsidian/plugins/**/*.log
|
||||
|
||||
```
|
||||
|
||||
### **插件推荐**
|
||||
|
||||
Custom Image Auto Uploader For Obsidian ( 目前还没上市场 只能手动安装 ) [https://github.com/haierkeys/obsidian-custom-image-auto-uploader](https://github.com/haierkeys/obsidian-custom-image-auto-uploader) 通过这个插件可以将笔记中的图片上传保存到您的远端服务器、家庭 NAS 或者同步保存在您的云存储上(阿里云 OSS、亚马逊 S3、Cloudflare R2)。
|
||||
@@ -0,0 +1,183 @@
|
||||
---
|
||||
created: 2025-08-30T11:45
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
|
||||
|
||||
星期二, 12月 3, 2024 | 6分钟阅读 | 更新于 星期二, 12月 3, 2024
|
||||
|
||||
本文详细探讨了如何为 Obsidian 笔记实现高效的多端同步方案,针对不同用户的需求提供了多种可行的解决方法。无论你是追求简单易用的官方服务,还是希望通过免费工具自主实现同步,都能在文中找到适合自己的解决方案。
|
||||
|
||||
关于 为什么一定是 Obsidian 笔记软件 请参考 [https://blog.diybeta.com/obsidian%E7%AC%94%E8%AE%B0%E8%BD%AF%E4%BB%B6%E4%BB%8B%E7%BB%8D/](https://blog.diybeta.com/obsidian%E7%AC%94%E8%AE%B0%E8%BD%AF%E4%BB%B6%E4%BB%8B%E7%BB%8D/)
|
||||
|
||||
方案介绍
|
||||
----
|
||||
|
||||
文章从功能、特点、配置步骤、适用场景等方面,全面解析了以下五种常见同步方式:
|
||||
|
||||
1. **Obsidian Sync**:官方提供的端到端加密服务,适合重视安全和便捷的用户。
|
||||
2. **云存储软件同步**:利用 iCloud、OneDrive、Google Drive 等主流云服务提供的客户端实现同步,兼顾广泛兼容性和易用性。
|
||||
3. **Git 同步**:结合版本控制的技术方案,适合技术熟练者和开发者,支持历史版本管理,需要 配合 **Git** 插件。
|
||||
4. **WebDAV 或云存储服务**:通过坚果云等支持 WebDAV 的服务,提供轻量级同步方案,适合数据量小的轻量用户,需要 配合 **Remotely Save** 插件。
|
||||
|
||||
| **同步方案** | **优点** | **缺点** | **适用人群** |
|
||||
| --- | --- | --- | --- |
|
||||
| **Obsidian Sync** | \- 官方支持,设置简单稳定\- 端到端加密,隐私保障\- 多平台兼容,移动端与桌面端无缝同步 | \- 需要订阅费用($8/月)\- 无法同步插件以及设置,只支持笔记容内容 | \- 想要便捷、安全、高可靠性服务的用户 |
|
||||
| **云存储软件同步** | \- 使用广泛(iCloud、OneDrive、Google Drive 等)\- 支持多类型文件同步\- 配置简单、免费或低成本 | \- 可能出现文件冲突问题\- 同步速度依赖云服务性能\- 数据隐私受服务商控制\- 移动端可能无法同步 | \- 大众用户\- 想要简化同步的普通用户 |
|
||||
| **Git 同步** | \- 版本控制功能强大\- 免费使用,免费使用的Git平台有很多\- 适合技术用户,支持历史版本回溯\- 支持多平台兼容,移动端与桌面端无缝同步 | \- 配置复杂,需手动操作\- 需要了解一些 _Git_ 知识,不适合大众用户 | \- 开发者或技术熟练者\- 希望管理版本的用户 |
|
||||
| **WebDAV 或云存储服务** | \- 轻量级方案,适合个人或小团队\- 免费服务可用,如坚果云\- 支持实时同步\- 支持多平台兼容,移动端与桌面端无缝同步 | \- 需要有现成的 **Webdav** 服务\- 容量有限(免费服务如坚果云有存储限制) | \- 数据量小的轻量用户\- 想要简化配置的小型团队 |
|
||||
|
||||
**一. 使用 Obsidian Sync**
|
||||
-----------------------
|
||||
|
||||
这是 Obsidian 官方提供的同步服务,特点是安全、稳定且设置简单。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
1. 订阅 Obsidian Sync 服务(收费,约 $8/月)。
|
||||
2. 在 Obsidian 的设置中启用 Sync 功能:
|
||||
* 打开 **设置 > 同步**。
|
||||
* 登录你的 Obsidian 账户并创建同步设置。
|
||||
3. 在其他设备上登录相同账户并选择同步相应的库(Vault)。
|
||||
|
||||
**二. 云存储软件同步**
|
||||
--------------
|
||||
|
||||
借助常用的云存储软件 (如 iCloud、OneDrive、Google Drive 等),你可以轻松实现多端同步。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
### **1\. 选择云存储工具**:
|
||||
|
||||
* macOS/iOS 用户推荐使用 iCloud Drive。
|
||||
* Windows 用户推荐 OneDrive。
|
||||
* 跨平台用户可选择 Google Drive 或 Dropbox。
|
||||
|
||||
#### **2\. 将 笔记仓库 ( Obsidian Vault ) 存储在云盘文件夹中**:
|
||||
|
||||
* 在创建或选择 笔记仓库 ( Obsidian Vault ) 时,将其路径设置为云盘的本地同步文件夹。
|
||||
|
||||
#### **3\. 多端配置**:
|
||||
|
||||
* 在其他设备上安装云存储客户端,同步对应文件夹。
|
||||
* 在 Obsidian 中打开该 仓库 ( Vault )。
|
||||
|
||||
#### **注意事项**:
|
||||
|
||||
* 确保云存储支持实时同步,避免文件冲突。
|
||||
* iCloud 在 Windows 平台性能可能不如 OneDrive 稳定。
|
||||
|
||||
**三. Git 同步**
|
||||
-------------
|
||||
|
||||
Git 是技术用户的高效选择,提供版本管理与同步功能。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
#### **1\. 本地配置 Git 环境** ( PC 端):
|
||||
|
||||
* 安装 Git,并初始化你的 笔记仓库 (Obsidian Vault) 为 Git 仓库:
|
||||
|
||||
```
|
||||
git init git remote add origin <你的远程仓库地址>
|
||||
```
|
||||
|
||||
|
||||
#### **2\. 安装 Obsidian Git 插件**
|
||||
|
||||
* 打开 **设置 > 第三方插件**, 关闭 **安全模式** , 浏览**社区插件市场**, 搜索 **Git**
|
||||
* **安装** 并 **启用** 插件
|
||||
* 
|
||||
|
||||
|
||||
#### **3\. 设置 Obsidian Git 插件**:
|
||||
|
||||
* 由于 **Obsidian Git** 插件 **自动同步** 设置比较繁琐, 所以这里提供设置好的 **配置文件**
|
||||
* 打开 笔记根目录,打开 `.obsidian\plugins\obsidian-git\` 目录, 找到 `data.json` 文件
|
||||
|
||||
* 将以下内容覆盖文件的全部内容:
|
||||
|
||||
```
|
||||
{ "commitMessage": "AutoCommit: {{hostname}} {{numFiles}} {{date}}", "commitDateFormat": "MM-DD HH:mm", "autoSaveInterval": 0.1, "autoPushInterval": 0.1, "autoPullInterval": 0.5, "autoPullOnBoot": true, "disablePush": false, "pullBeforePush": true, "disablePopups": true, "disablePopupsForNoChanges": false, "listChangedFilesInMessageBody": false, "showStatusBar": true, "updateSubmodules": false, "syncMethod": "merge", "customMessageOnAutoBackup": false, "autoBackupAfterFileChange": true, "treeStructure": false, "refreshSourceControl": true, "basePath": "", "differentIntervalCommitAndPush": true, "changedFilesInStatusBar": true, "showedMobileNotice": true, "refreshSourceControlTimer": 3000, "showBranchStatusBar": true, "setLastSaveToLastCommit": false, "submoduleRecurseCheckout": false, "gitDir": "", "showFileMenu": true, "authorInHistoryView": "hide", "dateInHistoryView": false, "lineAuthor": { "show": false, "followMovement": "inactive", "authorDisplay": "initials", "showCommitHash": false, "dateTimeFormatOptions": "date", "dateTimeFormatCustomString": "YYYY-MM-DD HH:mm", "dateTimeTimezone": "viewer-local", "coloringMaxAge": "1y", "colorNew": { "r": 255, "g": 150, "b": 150 }, "colorOld": { "r": 120, "g": 160, "b": 255 }, "textColorCss": "var(--text-muted)", "ignoreWhitespace": false, "gutterSpacingFallbackLength": 5, "lastShownAuthorDisplay": "initials", "lastShownDateTimeFormatOptions": "date" }, "autoCommitMessage": "AutoCommit: {{hostname}} {{numFiles}} {{date}}" }
|
||||
```
|
||||
|
||||
#### **4\. 移动端设置**:
|
||||
|
||||
* 参考 **移动端同步设置**
|
||||
|
||||
#### **5\. 使用**:
|
||||
|
||||
* 直接修改笔记 **Git 插件** 会根据内容变动自动提交 Git
|
||||
|
||||
### **注意事项**:
|
||||
|
||||
* 当两端同时在编辑一个笔记时, 大概率会遇到 **Git 冲突** 的问题,需要自行解决内容冲突问题
|
||||
* 这里 推荐使用 Git客户端 来解决冲突, 例如 Sourcetree, TortoiseGit 等,具体操作请自行搜索解决,这里不再展开教学
|
||||
|
||||
**四. WebDAV 或云存储服务**
|
||||
--------------------
|
||||
|
||||
云存储服务是运行商提供给企业和个人使用的一个标准化存储服务, 例如 亚马逊 S3, 阿里云 OSS, CloudFlare R2; WebDAV 是一种通用的文件同步协议,许多服务提供免费或付费支持,目前 坚果云支持独立的 WebDAV 服务, 或者自行在家庭NAS上或服务器 架设WebDAV服务 。
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
#### **1\. 安装 Remotely Save 插件**
|
||||
|
||||
* 打开 **设置 > 第三方插件**, 关闭 **安全模式** , 浏览**社区插件市场**, 搜索 **Remotely Save**
|
||||
* **安装** 并 **启用** 插件
|
||||
* 
|
||||
|
||||
|
||||
#### **3\. 设置 Remotely Save 插件**:
|
||||
|
||||
#### **4\. 移动端设置**:
|
||||
|
||||
* 参考 **移动端同步设置**
|
||||
|
||||
### **注意事项**:
|
||||
|
||||
* **Remotely Save** 插件不会同步 `.obsidian` ,所以不会同步 obsidian 设置,插件,主题等内容,如果需要同步请参考 **Git 方案** 和 **云存储软件同步方案**
|
||||
|
||||
五. 移动端同步设置
|
||||
----------
|
||||
|
||||
由于移动端的各类问题不好定位,所以这里直接使用吧 **笔记仓库** 整体直接复制的方案来设置移动端
|
||||
|
||||
### **设置步骤**:
|
||||
|
||||
#### \*\*1. 在手机端安装 Obsidian 应用
|
||||
|
||||
* 到各自手机应用商店内搜索 Obsidian 安装
|
||||
|
||||
#### **2\. 在PC( WIN 或 MAC )端 复制 整个 笔记仓库 ( Obsidian Vault ) 目录 到共享目录**
|
||||
|
||||
* 例如: 我的本地 笔记仓库路径为 `D:\DevApps\MyNote`, 直接复制到 局域网共享目录 `\\192.168.16.2\Share`,没有的话自己找个电脑开启共享,只要和手机在局域网内就可以
|
||||
|
||||
#### **3 打开苹果手机的 文件 应用**
|
||||
|
||||
#### **3\. 打开 Obsidian, 选择刚才复制的笔记仓库即可**
|
||||
|
||||
* 如果默认不是 你刚才复制的 **笔记仓库 ( Obsidian Vault )** ,那么在打开页面右滑 **左上角** 点击重新选择就可以了
|
||||
* 第一次打开 仓库笔记,会自动重新索引需要等一会;
|
||||
* 一些**不支持移动端**的插件,会被自动禁用
|
||||
* **Git** 和 **Remotely Save**插件,支持 **移动端**,
|
||||
|
||||
总结与使用推荐
|
||||
-------
|
||||
|
||||
作者这样同步方案已经稳定使用两年多,不过选择的方案是 同时使用 **Git** 和 **Remotely Save**插件 这样 MAC 和 WIN 之间插件的设置和插件等功能通过Git就完成了自动同步 PC端 和 移动端 之间通过 **Remotely Save**插件, 只实现笔记同步,不同步设置,插件主题等.避免冲突等各类问题( 在移动端禁用Git插件 ) 当然移动端本身的局限性,比如字体,网络耗电等,设置,插件主题等这些内容是否同步并不是那么紧要. 而且 Obsidian 有大量的插件 不支持 移动端 另外为了桌面端之间同步顺畅, 将一些不必要的文件,如 日志文件 和 编辑器workspace 的设置等 排除Git外, 在笔记仓库 根目录增加 `.gitignore` 文件 内容:
|
||||
|
||||
```
|
||||
.obsidian/*.log
|
||||
.obsidian/workspace
|
||||
.obsidian/workspace.json
|
||||
.obsidian/graph.json
|
||||
.obsidian/plugins/*.log
|
||||
.obsidian/plugins/**/*.mdb
|
||||
.obsidian/plugins/**/*.log
|
||||
|
||||
```
|
||||
|
||||
### **插件推荐**
|
||||
|
||||
Custom Image Auto Uploader For Obsidian ( 目前还没上市场 只能手动安装 ) [https://github.com/haierkeys/obsidian-custom-image-auto-uploader](https://github.com/haierkeys/obsidian-custom-image-auto-uploader) 通过这个插件可以将笔记中的图片上传保存到您的远端服务器、家庭 NAS 或者同步保存在您的云存储上(阿里云 OSS、亚马逊 S3、Cloudflare R2)。
|
||||
@@ -0,0 +1,160 @@
|
||||
2025-10-28 12:00:00 分类:[云计算](https://www.phpwp.cn/article/category/calc)
|
||||
|
||||
云服务器导航,点击直达:[阿里云](https://www.aliyun.com/minisite/goods?userCode=cb3vgkf5),[腾讯云](https://cloud.tencent.com/act/cps/redirect?redirect=2853&cps_key=bb14eb9f876cbac6a078a1fb7f9c896d&from=console),[京东云](https://3.cn/1YX-MxJv),[百度云](https://cloud.baidu.com/campaign/ambassador-product/index.html?ambassadorId=2ac14a4d64c04879b419d2f576cd2e5f),[UCloud](https://www.ucloud.cn/site/active/hk-global.html?cps_code=AozWP2tZ4IKGOtb81GiXNE)。
|
||||
|
||||
OpenCloudOS 8.6 是基于 Linux 的开源服务器操作系统,其防火墙机制与主流的 RHEL/CentOS/Rocky Linux 等系统类似,主要使用 `firewalld` 作为默认的动态防火墙管理工具。以下是关于 OpenCloudOS 8.6 防火墙的详细介绍和常用操作:
|
||||
|
||||
* * *
|
||||
|
||||
### 🔧 1. 默认防火墙服务:`firewalld`
|
||||
|
||||
* **服务名称**:`firewalld`
|
||||
* **配置工具**:`firewall-cmd`(命令行)、`firewall-config`(图形界面,可选)
|
||||
* **区域(Zones)**:支持多种网络区域(如 public、internal、trusted 等),用于灵活控制不同网络接口的安全策略。
|
||||
|
||||
* * *
|
||||
|
||||
### ✅ 常用防火墙操作命令
|
||||
|
||||
#### 🔹 启动、停止、重启 firewalld
|
||||
|
||||
```
|
||||
# 启动防火墙
|
||||
sudo systemctl start firewalld
|
||||
|
||||
# 设置开机自启
|
||||
sudo systemctl enable firewalld
|
||||
|
||||
# 停止防火墙
|
||||
sudo systemctl stop firewalld
|
||||
|
||||
# 禁用开机启动
|
||||
sudo systemctl disable firewalld
|
||||
|
||||
# 查看状态
|
||||
sudo systemctl status firewalld
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
#### 🔹 查看当前防火墙状态和规则
|
||||
|
||||
```
|
||||
# 查看运行状态
|
||||
sudo firewall-cmd --state
|
||||
|
||||
# 查看当前活动区域
|
||||
sudo firewall-cmd --get-active-zones
|
||||
|
||||
# 查看默认区域
|
||||
sudo firewall-cmd --get-default-zone
|
||||
|
||||
# 列出当前区域的规则(临时+永久)
|
||||
sudo firewall-cmd --list-all
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
#### 🔹 开放端口或服务
|
||||
|
||||
```
|
||||
# 临时开放端口(重启后失效)
|
||||
sudo firewall-cmd --add-port=80/tcp
|
||||
|
||||
# 永久开放端口(推荐)
|
||||
sudo firewall-cmd --add-port=80/tcp --permanent
|
||||
|
||||
# 开放某个服务(如 http、https)
|
||||
sudo firewall-cmd --add-service=http --permanent
|
||||
sudo firewall-cmd --add-service=https --permanent
|
||||
|
||||
# 重新加载配置使永久规则生效
|
||||
sudo firewall-cmd --reload
|
||||
```
|
||||
|
||||
> ⚠️ 注意:添加 `--permanent` 参数后必须执行 `--reload` 才能生效。
|
||||
|
||||
* * *
|
||||
|
||||
#### 🔹 删除规则
|
||||
|
||||
```
|
||||
# 删除已开放的端口
|
||||
sudo firewall-cmd --remove-port=80/tcp --permanent
|
||||
|
||||
# 删除服务
|
||||
sudo firewall-cmd --remove-service=http --permanent
|
||||
|
||||
# 重新加载
|
||||
sudo firewall-cmd --reload
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
#### 🔹 更改默认区域
|
||||
|
||||
```
|
||||
# 设置默认区域为 public
|
||||
sudo firewall-cmd --set-default-zone=public
|
||||
|
||||
# 将某个网卡绑定到指定区域
|
||||
sudo firewall-cmd --zone=dmz --change-interface=eth0 --permanent
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
### 🛑 替代方案:`iptables`(传统方式)
|
||||
|
||||
虽然 `firewalld` 是默认工具,但你也可以切换回传统的 `iptables`:
|
||||
|
||||
```
|
||||
# 停止并禁用 firewalld
|
||||
sudo systemctl stop firewalld
|
||||
sudo systemctl disable firewalld
|
||||
|
||||
# 安装 iptables-services
|
||||
sudo dnf install iptables-services -y
|
||||
|
||||
# 启动并启用 iptables
|
||||
sudo systemctl start iptables
|
||||
sudo systemctl enable iptables
|
||||
```
|
||||
|
||||
然后使用 `iptables` 命令进行规则配置。
|
||||
|
||||
* * *
|
||||
|
||||
### 🔐 安全建议
|
||||
|
||||
1. **生产环境不要关闭防火墙**,应通过规则精细控制访问。
|
||||
2. 开放端口时尽量限制 IP 范围(使用 rich rules):```
|
||||
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='22' accept"
|
||||
```
|
||||
|
||||
3. 定期检查开放的端口和服务:```
|
||||
sudo firewall-cmd --list-all
|
||||
ss -tuln | grep LISTEN
|
||||
```
|
||||
|
||||
|
||||
* * *
|
||||
|
||||
### 📚 参考文档
|
||||
|
||||
* OpenCloudOS 官方文档:https://opencloudos.org
|
||||
* firewalld 官方手册:`man firewalld`, `man firewall-cmd`
|
||||
|
||||
* * *
|
||||
|
||||
如果你有具体需求(例如开放 Nginx/MySQL 端口、配置 NAT、多区域管理等),可以告诉我,我可以提供详细配置示例。
|
||||
|
||||
| 服务器 | CPU | 内存 | 磁盘 | 价格 | 购买地址 |
|
||||
| 阿里云 | 2核 | 2GB | 40GB | 99元/年 | [点击查看››](https://www.aliyun.com/minisite/goods?userCode=cb3vgkf5) |
|
||||
| 阿里云 | 2核 | 4GB | 80GB | 199元/年 | [点击查看››](https://www.aliyun.com/minisite/goods?userCode=cb3vgkf5) |
|
||||
| 腾讯云 | 2核 | 2GB | 50GB | 118元/年 | [点击查看››](https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=bb14eb9f876cbac6a078a1fb7f9c896d) |
|
||||
| 腾讯云 | 2核 | 4GB | 60GB | 252元/年 | [点击查看››](https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=bb14eb9f876cbac6a078a1fb7f9c896d) |
|
||||
| 京东云 | 2核 | 2GB | 40GB | 50元/年 | [点击查看››](https://3.cn/1YX-MxJv) |
|
||||
| 百度云 | 2核 | 2GB | 40GB | 59元/年 | [点击查看››](https://cloud.baidu.com/campaign/ambassador-product/index.html?ambassadorId=2ac14a4d64c04879b419d2f576cd2e5f) |
|
||||
| 百度云 | 2核 | 8GB | 40GB | 432元/年 | [点击查看››](https://cloud.baidu.com/campaign/ambassador-product/index.html?ambassadorId=2ac14a4d64c04879b419d2f576cd2e5f) |
|
||||
|
||||
以实际价格为准
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: "OpenWrt旁路由"
|
||||
source: "https://chenbuer.github.io/2024/08/27/OpenWrt%E6%97%81%E8%B7%AF%E7%94%B1/"
|
||||
author:
|
||||
- "[[陈不二]]"
|
||||
published:
|
||||
created: 2025-12-04
|
||||
description: "谈技术也谈风月"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
### 一、ImmortalWRT系统及其安装
|
||||
|
||||
openwrt的一个分支,有好的软件源。
|
||||
|
||||
1. [固件选择器](https://firmware-selector.immortalwrt.org/)
|
||||
2. [写盘工具refus](https://rufus.ie/) ,也可以用winPE
|
||||
3. 安装的软件包
|
||||
- luci-theme-argon(更换主题)
|
||||
- luci-i18n-ttyd-zh-cn(获得terminal)
|
||||
- 上网工具(选择打开其一即可)
|
||||
- luci-app-openclash
|
||||
- luci-i18n-passwall-zh-cn
|
||||
- luci-i18n-homeproxy-zh-cn
|
||||
|
||||
### 二、旁路由设置
|
||||
|
||||
#### 2.2 旁路由原理
|
||||
|
||||
本质是终端的网关设置:设置为主路由就不经过旁路由;设置为旁路由就经过旁路由,在旁路由上可以增加软件包或者一些其他的hook来封装原始数据包。
|
||||
|
||||
旁路由连接到主路由的lan口,这样一个网段内就有两个DHCP服务了。 **关闭主路由的DHCP服务,打开旁路由DHCP服务** ,那么其他接入的终端就从旁路由获取IP信息。DHCP获取到网关是DHCP服务器的IP,也就是旁路由的ip地址。这样,所有终端访问外网的流量先到网关(旁路由),旁路由再到它的网关(主路由),最终到互联网。
|
||||
|
||||
#### 2.2 设置分流规则
|
||||
|
||||
1. 配置规则。
|
||||
网络 → 接口 → 编辑lan → DHCP服务器 → 高级设置 → DHCP选项,添加规则
|
||||
```shell
|
||||
tag:direct,3,10.0.0.1 # 3,指的是设置网关;direct是标签,可以随便写
|
||||
tag:direct,6,10.0.0.1 # 6,指的是设置DNS
|
||||
tag:proxxy,3,10.0.0.2
|
||||
tag:proxxy,6,10.0.0.2
|
||||
```
|
||||
2. 利用规则。
|
||||
网络 → DHCP/DNS → 静态地址分配 → 选择终端,添加标签
|
||||
|
||||
#### 2.3 大部分终端走主路由,少部分终端走旁路由
|
||||
|
||||
设置规则为:
|
||||
|
||||
```shell
|
||||
tag:!proxy,3,10.0.0.1
|
||||
|
||||
tag:!proxy,6,10.0.0.1
|
||||
```
|
||||
|
||||
`!`:不是proxy标签的,网关和dns为主路由(10.0.0.1),标签为proxy的是默认的旁路由(10.0.0.2)。所以,只要指定 `走旁路由的终端` 的标签为proxy。
|
||||
|
||||
#### 2.4 防火墙设置
|
||||
|
||||
一定要把 `网络 → 防火墙 → 区域 → lan-wan(入站、出站、转发)` 的 `IP地址动态伪装` 给选上。不然 **网关为旁路由的终端无法上网** ,即使在旁路由上可以正常访问百度等外网。 和主路由类型有关系:主路由是openwrt的话,不打开也没关系。
|
||||
|
||||
另外,网络 → 防火墙 → 常规设置中的 `丢弃无效数据包` 这个选项不能勾选,不然网关为旁路由的终端不能上网。因为数据包出去的时候经过旁路由,但是响应回来的时候,都不经过旁路由,无法完成握手。
|
||||
|
||||
### 三、相关概念
|
||||
|
||||
1. 固件版本分EXT4和SQUASHFS,他们之间什么联系与区别?还分FACTORY和SYSUPGRADE,他们之间又是什么关系?
|
||||
> SYSUPGRADE用于保留设置的升级,提供的是增量更新;FACTORY是完整映像,用于首次刷机。SQUASHFS和EXT4都是文件系统,SQUASHFS有一个layout层,可以恢复出厂设置。
|
||||
|
||||
### 十、TODO:
|
||||
|
||||
1. 什么是layout层?
|
||||
2. 用refus写入的系统只占用了很小的磁盘?为什么没有使用全部的磁盘空间?要是自己mount分区,是mount到哪个分区?
|
||||
3. 什么是动态伪装?
|
||||
|
||||
[▲](https://chenbuer.github.io/2024/08/27/OpenWrt%E6%97%81%E8%B7%AF%E7%94%B1/#)
|
||||
@@ -0,0 +1,234 @@
|
||||
---
|
||||
created: 2025-08-30T11:45
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
para信息组织法
|
||||
|
||||
PARA 信息组织法 — 如何整理我的数字信息
|
||||
|
||||
[OS](https://pkmer.cn/authors/os)
|
||||
|
||||
于 2023-06-01 17:41 发布
|
||||
|
||||
分享
|
||||
|
||||
* * *
|
||||
|
||||
插件ID:para%E4%BF%A1%E6%81%AF%E7%BB%84%E7%BB%87%E6%B3%95-%E5%A6%82%E4%BD%95%E6%95%B4%E7%90%86%E6%88%91%E7%9A%84%E6%95%B0%E5%AD%97%E4%BF%A1%E6%81%AF para%E4%BF%A1%E6%81%AF%E7%BB%84%E7%BB%87%E6%B3%95-%E5%A6%82%E4%BD%95%E6%95%B4%E7%90%86%E6%88%91%E7%9A%84%E6%95%B0%E5%AD%97%E4%BF%A1%E6%81%AF para%E4%BF%A1%E6%81%AF%E7%BB%84%E7%BB%87%E6%B3%95 %E5%A6%82%E4%BD%95%E6%95%B4%E7%90%86%E6%88%91%E7%9A%84%E6%95%B0%E5%AD%97%E4%BF%A1%E6%81%AF:PARA 方法论 — 如何整理我的数字信息
|
||||
|
||||
多年来,我们一直在苦苦寻找一个可以满足所有需求的数字信息整理系统。直到我们偶然发现了 P.A.R.A. 数字信息整理方法,才能找到一个完美的体系。
|
||||
|
||||
在追求提升生产力的过程中,我们花费了很多时间思考如何最佳地组织我的数字笔记或者数字内容。多年来,我一直为找不到一个适合我的组织系统而苦恼。我读了很多关于这个主题的书籍和文章,尝试着使用各种不同的系统,但都无法满足我所有的需求。一个完美的组织系统需要具备以下特点:
|
||||
|
||||
* 通用性——包含来自任何来源的任何种类的信息;
|
||||
* 灵活性——能够适应现在或将来承担的任何项目或活动;
|
||||
* 简单的——需要尽可能少的维护、编目、标注或重新组织;
|
||||
* 跨平台化——能够与我使用的各种不同应用程序兼容,成为我的生产力系统的一部分;
|
||||
* 目标导向——以有助于推进我的工作和项目为结构;
|
||||
* 模块化——能够既可以缩小视野,查看大局,也可以放大视野,查看细节;
|
||||
* 可复用——不需要额外的开销时间,而是利用已经执行的工作。
|
||||
|
||||
直到我们偶然发现了 [Tiago Forte](https://fortelabs.co/?ref=lucapallotta.com) 的 P.A.R.A. 数字信息整理方法,我才能找到一个完美适合我的系统。P.A.R.A.代表的是项目(Projects)— 领域(Areas)— 资源(Resources)— 归档(Archives),这是该系统下所有信息分类的四个顶级类别。
|
||||
|
||||
在学习和实践该系统的过程中,我自然而然地为自己写下了使用该系统的总结笔记。我认为这些笔记可能对其他试图“数字化组织”的人也有所帮助,因此我决定整理并分享它们。我还包括了该系统的创造者的博客链接,如果你想深入了解该主题,这会有所帮助。
|
||||
|
||||
P.A.R.A.体系概述
|
||||
------------
|
||||
|
||||
四个主要类别(所有信息都被组织放入这些类别中,按照可操作性进行排序)
|
||||
|
||||
1. 项目(Projects):一系列任务与截止日期联系在一起,以实现一个目标
|
||||
2. 领域(Areas):需要在一段时间内活跃,并维护状态的事务空间
|
||||
3. 资源(Resource):持续感兴趣的主题或话题
|
||||
4. 归档:来自其他三个类别的非活动/完结项目
|
||||
|
||||
* 项目与领域
|
||||
* 项目(Projects) → 通过截止日期实现目标,具有明确的目标以及时间范围,是最小执行单位
|
||||
* 领域 → 要长期维持的标准,日常需要精进、付出的领域(简单说,你需要为此负责)
|
||||
* 项目总是属于领域
|
||||
* 将你的责任领域细分为明确的项目,可以使你
|
||||
* 知道你的承诺范围
|
||||
* 将你当前的工作与长期目标联系起来
|
||||
* 知道你是否朝着你的目标取得了进展
|
||||
* 将项目和领域分开而不是使用领域作为你的层次结构的顶层的原因
|
||||
* 将非常少的可操作信息与大量的不可操作信息分离是重要的
|
||||
* 可以减少视觉混乱
|
||||
* 将项目存储在一个地方很重要
|
||||
* 将项目与其特定目标联系而不是与所属领域相关联更为重要
|
||||
|
||||
> **举例**
|
||||
>
|
||||
> * 坚持长跑是一个项目,而个人身体健康是一个领域
|
||||
> * 学完一门课程是一个项目,而写作是一个领域
|
||||
> * 统计自己日常花销是一个项目,而财务是一个领域
|
||||
> * 五一旅游是一个项目,而旅游是一个区域
|
||||
> * 计划年会是一个项目,而策划是一个领域
|
||||
|
||||

|
||||
|
||||
* 领域与资源
|
||||
* 请记住,领域也称作负责领域 - 负责的事情与仅仅感兴趣的事情/话题之间有着非常明确的界限和区别
|
||||
* 负责领域包括:
|
||||
* 在生活中承担的角色和身份(配偶,母亲/父亲,Teamleader,研究小组成员,公司某个部门的员工)
|
||||
* 所在的负责标准(产品开发,运营,法律)
|
||||
* 需要持续关注一段时间的事情(运动,财务,公寓,宠物)
|
||||
* 资源包括:
|
||||
* 兴趣爱好(网页设计,群资金筹款,木工,飞盘,高尔夫,野生动物,黑客)
|
||||
* 主题(心理学,政治,领导力,课外活动)
|
||||
* 资产(股票,照片,图片素材链接,优质的文章,优秀的市场推广文件,产品 ,代码片段)
|
||||
* 另一个有用的指导原则是把**个人相关**的信息放在领域中,将**通用信息**放在资源中,这样可以在不必仔细查找任何个人信息的情况下共享来自资源的笔记。
|
||||
* 你可以通过在领域笔记中插入指向资源笔记的链接来连接两个类别。
|
||||
|
||||
> **小诀窍**
|
||||
>
|
||||
> * 不要将兴趣爱好和梦想与项目、目标混淆
|
||||
> * 没有相应目标的项目是“兴趣爱好”
|
||||
> * 没有相应项目的目标是“幻想””梦想“
|
||||
> * 将项目列表定义为一个特定工具以外的东西,并将其复制到你使用的每个工具中,而不是寻找“控制一切的工具”。
|
||||
> * 这种方法既具有中心化的一致性,又具备去中心化的灵活性。
|
||||
|
||||
P.A.R.A. 的三个核心原则
|
||||
----------------
|
||||
|
||||
* 原则 1:数字“4”的魔力
|
||||
* 层次结构应有四个类别(项目、领域、资源、**归档**)
|
||||
* 层次结构深度不超过四层(应用 → 堆栈 → 笔记本 → 笔记)
|
||||
* 避免组织结构过度设计的两个主要问题:过多的分类和过多的层次结构
|
||||
* 原则 2:完美地反映你的任务管理和项目管理体系
|
||||
* 这使你可以利用不同应用程序的优势,而不必不断寻找适合你生产力系统的理想应用程序
|
||||
* 原则 3:将可操作项与不可操作项分开
|
||||
* 这允许逐步披露 - 仅在用户需要的那一刻显示用户所需的信息,以减少认知负担
|
||||
|
||||
日常的维护——四个类别的流转关系
|
||||
----------------
|
||||
|
||||
P.A.R.A. 是一个动态的系统(信息在四个类别之间流动)。同一条信息(文本行、图像、完整笔记或整个笔记本)在任何两个主要类别之间流动的原因是不同的。
|
||||
|
||||

|
||||
|
||||
* 从项目…
|
||||
* 到领域:项目可能会成为长期的负责领域(比如:我学习了一门变成语言,后来他成为了我兼职工作)
|
||||
* 到资源:扫描项目期间生成的“中间工作”(头脑风暴、笔记、背景研究、图表、采访笔记等),这些工作可能对未来的项目有用。
|
||||
* 到存档:将已完成或不活动的项目,移至存档以供参考。
|
||||
* 从领域…
|
||||
* 到项目:你收集的信息可能对你开始的一个新项目有用。
|
||||
* 到资源:只与你相关的笔记,也许对其他项目,未来也有价值。
|
||||
* 到存档:存档不再活跃的领域(这个适用到任何分类)。
|
||||
* 从资源…
|
||||
* 到项目:兴趣可以变成一个成熟项目(是资源笔记本的主要用例之一)
|
||||
* 到领域:当你意识到资源笔记中的一些信息可能适用于你生活中的某个责任领域。
|
||||
* 到存档:如果你对一个主题逐渐失去兴趣,可以将信息存档以避免在工作空间中占用空间(不要删除它,以防兴趣再次活跃)。
|
||||
* 从存档…
|
||||
* 到项目:重新启动一个非活动项目,或从过去的项目中转移有用信息以用于当前和未来的项目(保持已归档项目的主要原因之一)。
|
||||
* 到领域:当你很久以前收集的信息变得对你新的职责负责时。
|
||||
* 到资源:当过去的项目成为一种兴趣时(将相关的笔记从归档的项目移至新的资源部分)
|
||||
|
||||
实时组织你的知识与信息
|
||||
-----------
|
||||
|
||||
一旦你开始定期使用此系统,你将会与这四个类别进行频繁互动,以至于你会开始注意到各种小的优化和更改,以使信息更易于被你未来的自己发现。所以针对这种实时,松散的更新维护节奏,我们给出如下建议:
|
||||
|
||||
* 当契机出现时,通过契机去推动执行组织工作,而不是死板地按计划执行,或者“只是因为这样做”。靠任务和内外界的实际需求,去驱动事情,远比为了学习而学习更有效。
|
||||
* 不要按照严格的时间表,(每天、每周或每月)安排重新组织工作,工作和生活很难分开,很多事情会突发多变,我们更应该让组织和维护变成日常的小事情,而不是像学生时代,有专门的课程和时间安排计划。
|
||||
* 在进行实际操作时,要注意到渐进式改进,将组织结构更改分批进行小规模更改,而不是在专门的努力中进行大规模更改。或者说应该先从小事做起,形成一定规律和流程后,辐射到其他的管理和组织上。
|
||||
* “组织事物”代表了一项耗费时间的附加工作,没有明显的回报或影响。
|
||||
* 所以正赶着截止日期,所以在项目进行期间无法进行组织工作,请不要慌张。
|
||||
* 在项目完成之后也无法进行组织工作,因为要开始下一个项目,请不要慌张。
|
||||
* 因为额外的工作一次次被推迟,到达崩盘点,所有知识系统开始瘫痪,请不要慌张。
|
||||
* 这种瘫痪被归咎于“生产力缺失”,而不是组织形式的问题。
|
||||
* 相反,利用查阅笔记的时间,将注意到的更适合放在其他地方的笔记也移动一下——通过简单的小动作培养习惯形成正向反馈和激励。
|
||||
* 不要担心将笔记从一个类别流动到另一个类别时的需要完美,严丝合缝。
|
||||
* 某种意义上没有“完成”的概念,所以不要纠结,有些归档的内容,并非真的全部完成。
|
||||
* 始终可以使用搜索作为备用工具,查找你错过或放错的任何内容。
|
||||
|
||||
建议的设置指南
|
||||
-------
|
||||
|
||||
* 5 步 P.A.R.A.设置流程:
|
||||
* 第一步:将现有文件移动到名为“Archive \[date\]”(今天的日期)的新文件夹中。
|
||||
* 第二步:为当前每个项目创建文件夹。
|
||||
* 第三步:将所有项目文件夹移动到名为“Projects”的新文件夹中。
|
||||
* 第四步:创建一个新的“Archives”文件夹,并将现有文件夹移动到其中。
|
||||
* 第五步:只有在需要时才创建新的文件夹。
|
||||
* 跨平台的一致性:
|
||||
* 对于所存储的任何平台,执行上述流程。
|
||||
* 记得使用相同的项目和领域标题在不同平台上保持一致和易于使用。
|
||||
* 考虑保存某些东西时,可以多问几个为什么:
|
||||
* 如果将来有所帮助,这是可以启发或帮助我的东西吗?
|
||||
* 这可能是未来项目的有用来源、构建块或工具吗?
|
||||
* 这是值得回顾一段时间的独特、个人化或辛苦得来的知识吗?
|
||||
* 当我需要它时,这是我不太可能再次找到的东西吗?
|
||||
* 如何保存某一信息:
|
||||
* 默认情况下,在数字笔记应用程序中保存信息。
|
||||
* 有一些例外:
|
||||
* 敏感信息:笔记应用程序没有很好的安全性,因此像密码、医疗记录或金融数据等东西应该在其他地方保存。
|
||||
* 大型或专业化的文件:笔记应用程序无法很好地处理大型文件,因此应将它们保存在专用应用程序(如云存储)中。
|
||||
|
||||
定义项目清单
|
||||
------
|
||||
|
||||
项目清单头脑风暴是一种分步练习,可以帮助你正确地识别工作和生活中的每一个项目。
|
||||
|
||||
在这个背景下,“项目”被定义为:“任何需要多次工作会议才能完成的结果”。
|
||||
|
||||
* 项目清单头脑风暴程序:
|
||||
1. 大脑储备
|
||||
* 日历
|
||||
* 待办事项清单
|
||||
* 议程
|
||||
* 公文包/钱包
|
||||
* 物理环境
|
||||
* 计算机
|
||||
* 过程或程序
|
||||
* 创意机会
|
||||
* 等等
|
||||
2. 组织和完善列表
|
||||
* 删除任何明显不是项目的内容。
|
||||
* 合并与同一结果相关的项目。
|
||||
* 如果可以通过日历条目替换项目,则将其添加到你的日历中。
|
||||
* 将“某时/可能”项目移到列表底部。
|
||||
3. 定义每个项目的期望结果
|
||||
* 将期望结果以现在时描述,以让自己向前推进时间,当你描述的结果已经变成现实时。(例如,项目:安排医生预约,结果:背痛已经消失了,我可以舒适地入睡整晚)
|
||||
* 添加日期
|
||||
* 列表中的每个项目都需要具有特定的截止日期或时间框架,不留任何混淆的余地(如“2017 年 6 月 30 日前”,“2017 年底”或“第三季度结束”)。
|
||||
* 这是它是否实际上是一个项目的真正测试。
|
||||
* 即使截止日期似乎是随意的,它也提醒你检查进度并重新评估方法。
|
||||
* 如果没有真正的截止日期,请添加目标完成日期。
|
||||
* 使用动作动词
|
||||
* 我们正在寻找描述“完成”的动词:完成、提交、交付、完成、发送、澄清、组织、更新、实施、解决、提交、重新组织、设计、发布或完成。
|
||||
* 如果你使用类似于管理、监督、确保或最大化的动词,那么它可能是一个正在进行的职责领域,而不是一个项目。
|
||||
* 必须在不久的将来发生一些事情,以便你可以将该项目标记为“完成”。
|
||||
4. 通过项目优先排序列表
|
||||
* 按任务优先顺序排序不起作用,因为优先级在你的一天和一周中不断变化(为此耗费时间进行任务优先排序是浪费的)。
|
||||
* 项目进展较慢,并且即使有紧急情况,优先级也不会改变,因此在一周的过程中不大可能改变。
|
||||
* 将项目列表从本周的最重要到最不重要进行重新排列。
|
||||
* 重新设置此列表非常简单,只需将项目上移或下移即可。
|
||||
* 根据每个项目应占用的思维带宽数量,直观判断本周任务清单的优先级,并相应地对项目清单进行排序。
|
||||
5. 评估你的项目列表
|
||||
* 从宏观角度查看整个列表,以查看它是否准确地代表了你当前的优先事项、兴趣、价值和长期目标。
|
||||
* 寻找有太多或太少项目的领域。
|
||||
* 查找对你重要的结果,但没有针对它们的项目。
|
||||
* 查找你在没有明确结果或目标的情况下花费时间或关注的地方。
|
||||
* 对于任何不清楚的项目,请退后一步并询问“我真正想要在这里实现什么?”或“这与什么更大的目标相关?”
|
||||
* 面向整个清单,你应该取消、推迟、重新谈判或澄清哪些项目?
|
||||
* 无论何时你感到缺乏清晰度,不知道要集中精力在哪里,你都可以运行此检查清单来收集和优先考虑你的所有承诺。
|
||||
* 更好的办法是,你可以将这种练习变成“每周审查”——与自己安排的例行约会,以反思本周并更新你的项目列表(如果你在一个更加平静和平衡的角度进行审查,远离工作周的混乱,你将发现在整个工作周中更容易保持平衡)。
|
||||
|
||||
一些小疑问
|
||||
-----
|
||||
|
||||
* **问**:做任务管理时,任务的粒度应该怎样确定?
|
||||
* **答**:需要管理的不仅仅是任务,如果只用任务一个笼统的概念,它的粒度可大可小,大任务可能由许许多多子任务共同组成,需要完成每个子任务才能完成目标,而子任务可能是一个独立的原子动作,或许只需一分钟就可以完成。因此,为了有序且结构化的进行事务管理,还需要引入项目和领域两个概念。从范围由小到大的顺序,应该是任务=>项目=>领域。
|
||||
* **问**:对于一些可以拆分成多个子任务的复杂任务来说,应该怎么管理才合理?
|
||||
* **答**:有了上一问题的答案,这个问题自然有了答案的标准。对于复杂任务,应该将它定义为由多个任务组成的项目。任务应该尽可能贴近一次操作或者多次重复操作就能完成的粒度,比如打一个电话,背 100 个单词,洗一堆衣服,开一个例会等等。
|
||||
|
||||
参考
|
||||
--
|
||||
|
||||
* [The PARA Method: How I Organize my Digital Information](https://www.lucapallotta.com/para/)
|
||||
|
||||
> **讨论**
|
||||
>
|
||||
> 若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
|
||||
|
||||
知识管理基础构建第二大脑-入门指南PARA-几分钟组织你的个人知识系统PARA信息组织法-如何整理我的数字信息PARA信息组织法
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Pocket
|
||||
source: https://getpocket.com/zh/home
|
||||
author:
|
||||
- "[[Pocket]]"
|
||||
published:
|
||||
created: 2025-08-09
|
||||
description:
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
### Why is Pocket shutting down?
|
||||
|
||||
Pocket has helped millions save articles and discover stories worth reading. But the way people save and consume content on the web has evolved, so we’re channeling our resources into projects that better match browsing habits today. Discovery also continues to evolve; Pocket helped shape the curated content recommendations you already see in Firefox, and that experience will keep getting better. Meanwhile, new features like Tab Groups and enhanced bookmarks now provide built-in ways to manage reading lists easily.
|
||||
|
||||
### Investing in the future
|
||||
|
||||
Firefox is the only major browser not backed by a billionaire and our independence shapes everything we build. This independence allows us to prioritize building products and tools, which shape the future of the internet for the better. And it means we have to be intentional about where we invest our time and resources so we can make the biggest impact.
|
||||
|
||||
### Pocket’s Heritage
|
||||
|
||||
What began as a read-it-later app evolved into something much bigger. After Mozilla acquired Pocket in 2017, we invested in building content curation and recommendation capabilities so people everywhere can discover and access high quality web content.
|
||||
|
||||
In the past 8 years, we’ve expanded high-quality content recommendations to more than a dozen countries and five languages, connecting tens of millions of people each month with articles worthy of their time and attention.
|
||||
|
||||
### Mozilla’s commitment to high-quality content recommendations
|
||||
|
||||
While Pocket is shutting down, Mozilla continues with our commitment to high-quality content recommendations in Firefox. We take an “algotorial” approach to curating the best of the web for the millions of users who make Firefox their window to the internet. We use machine learning algorithms to scour the internet for high quality content that will appeal to Firefox’s large and diverse user base, while relying on a human editorial team to provide oversight to ensure that the recommendations on Firefox New Tab are trustworthy, engaging, and high quality.
|
||||
|
||||
## What happens next?
|
||||
|
||||
#### Saves Export
|
||||
|
||||
- You can [export](https://support.mozilla.org/kb/exporting-your-pocket-list) saves anytime until October 8, 2025, after which all user data will be permanently deleted.
|
||||
- For account support and enquiries, please visit the [Pocket support page.](https://support.mozilla.org/products/pocket)
|
||||
|
||||
#### Premium User Subscriptions
|
||||
|
||||
- Premium monthly subscriptions will be cancelled automatically before their next billing cycle.
|
||||
- Premium annual subscriptions will be cancelled on July 8, and users will receive a prorated refund automatically. The refund will be based on how much time is left in their subscription after July 8, 2025.
|
||||
- We’ve arranged refunds to users’ original payment method based on their subscription type.
|
||||
|
||||
[Additional details](https://support.mozilla.org/en-US/kb/future-of-pocket)
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
title: STAR法则详解及举例分析:你真的了解STAR法则吗?-BOSS直聘
|
||||
source: https://www.zhipin.com/article/75.html
|
||||
author:
|
||||
- "[[Allen学长· 2020-11-10]]"
|
||||
- "[[York学长· 2020-11-10]]"
|
||||
- "[[2023-12-29]]"
|
||||
- "[[2023-12-08]]"
|
||||
- "[[2023-08-10]]"
|
||||
- "[[2023-03-02]]"
|
||||
published:
|
||||
created: 2025-09-06
|
||||
description: STAR法则详解及举例分析:你真的了解STAR法则吗?,你是否在面试中,面对面试官问起之前的经历很难给出有条理的答案?一紧张就有些语无伦次,逻辑混乱?用 STAR 法则回答面试官的提问会避免上述情况,让你能思路清晰地向面试官证明你有经验、有能力胜任应聘的工
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-06T11:12
|
||||
---
|
||||
## STAR法则详解及举例分析:你真的了解STAR法则吗?
|
||||
|
||||
你是否在面试中,面对面试官问起之前的经历很难给出有条理的答案?一紧张就有些语无伦次,逻辑混乱?用 STAR 法则回答面试官的提问会避免上述情况,让你能思路清晰地向面试官证明你有经验、有能力胜任应聘的工作。今天学长就来安利一下这个被证明成功和有效,且倍受 500 强企业HR推崇的 STAR 法则,以及究竟如何在实战中使用这个技巧回答面试问题。
|
||||
|
||||
什么是行为面试问题?
|
||||
|
||||
STAR 法则非常适用于回答行为面试中的问题。行为面试的问题主要是为了了解求职者在与工作相关的情境中会如何表现,进而判断求职者是否适合该招聘岗位。举几个例子:
|
||||
|
||||
1\. 讲讲你实习过程中解决的一个大问题。
|
||||
|
||||
2\. 举一个你意见与大家不同,最终成功说服大家的例子。
|
||||
|
||||
3\. 如果你的计划被打乱,你会怎么做?
|
||||
|
||||
这类问题的特征明显,聚焦在求职者过去的经历提问,而且通常会要求举例说明,而不是泛泛的让求职者聊一聊前一段工作/实习做了什么。
|
||||
|
||||
显而易见,这类问题的出发点:面试官主通过了解求职者过去的行为,来预估其未来可能发生的表现。通过问这些问题,还可以了解求职者的性格和具备的能力,包括解决问题的能力、分析能力、创造力、坚持的能力、写作技能、演讲能力、团队协作能力、说服力、分析能力等。
|
||||
|
||||
有些面试官会用 STAR 法则来组织他们的问题。相对地,求职者也可以用 STAR 法则来应对行行为问题。
|
||||
|
||||
==什么是STAR法则?==
|
||||
|
||||
STAR 法则是四个关键概念的缩写,每一个概念都是面试者回答行为面试问题的一个步骤。通过四个步骤,求职者就能给出一个全面且有逻辑的答案。具体拆分开看:
|
||||
|
||||
SITUATION: 情境,即描述背景,你在当时所处的环境或者面临的挑战。比如你当时要做一个从来没有接触过的项目,公司没有成功的先例可以参考;或者在一次团队合作中与同事出现了意见分歧等等…尽量与工作相关,描述地尽可能详细。
|
||||
|
||||
TASK: 任务,指描述你当时的任务,或在当时环境下你所承担的职责。比如你是这个项目的组织者、策划者,需要带领团队探索未知。或者你需要解决与同事之间的分歧,试图说服他听取你的意见等;或者是达成销售目标…
|
||||
|
||||
ACTION: 行动,即表述你和你的团队如何克服挑战。重点关注’你‘做了什么,而不是去讲你的团队,你的同事做了什么。
|
||||
|
||||
RESULT: 结果,解释所采取的行动产生了什么结果,从中学到了什么。
|
||||
|
||||
如何使用STAR法则来回答行为面试题?
|
||||
|
||||
你并不知道面试官会可能会准备什么问题,所以你可以准备几个你过去工作/实习经历中印象深刻的场景,如果没有工作/实习经历,可以去思考在校园经历中是否有能证明你能力的科研项目、学生工作等经历。
|
||||
|
||||
列出这份工作需要的技能和要求。然后用你的经历中可能表现出的优秀特质去和你列出的岗位的要求去匹配,看能否尽可能多地配对。无论你选择什么样的例子,都要确保它们与你的面试工作尽可能紧密相连。
|
||||
|
||||
当然在准备时也可以看看常见的行为描述型面试问题,试着结合自身经历用 STAR 法则来回答每一个问题。知名外企宝洁(P&G)公司有一套经典的行为面试问题,外界称之为“宝洁八大问”,可以用这 8 个问题来训练。可以参考《宝洁八大问:绝大多数面试都用得到的8道题》。
|
||||
|
||||
具体的回答方式我们来看两个例子:
|
||||
|
||||
【范例一】
|
||||
|
||||
面试提问:举一个你必须在很短时间内搞定工作/任务的例子,说说你是怎么解决的。
|
||||
|
||||
参考回答:
|
||||
|
||||
虽然我平时喜欢分阶段划分我的工作任务,然后一块一块地完成,但我也可以在很短的时间内高质量地完成任务。
|
||||
|
||||
之前我的一个同事在他的项目即将交付的前几天离职了,这个项目没有其他人了解(Situation)。我被要求负责完成这个项目,那时只剩下3天时间(Task)。我带着两个实习生成立了一个小组并给他们分派工作,我们用熬了一个通宵(Action),用了不到2天就完干完了这个项目。我非常相信我有能力在很短的时间内完成工作(Result)。
|
||||
|
||||
【范例二】
|
||||
|
||||
面试提问:当一个团队成员拒绝完成分配的工作时,你是怎么做的?
|
||||
|
||||
参考回答:
|
||||
|
||||
当团队出现冲突时,我总是尽我最大的努力去领导团队。我认为我的沟通能力可以让我成为合格的领导者。
|
||||
|
||||
有一次当我在做一个团队项目时,两个成员有了争论,因为他们对工作量不满意,拒绝完成自己的部分(Situation)。我明白必须要先解决他们的问题,才能让团队运转起来(Task),所以我安排了一次小组会议,听取每个人对分工的看法,听取每个人擅长和想做的部分,重新分配工作,尽可能让所有人满意(Action),最终我们的项目很成功,这件事也让我明白了合理地分工对于团队配和来说非常重要(Result)。
|
||||
|
||||
### 下一篇
|
||||
|
||||
[个人简历怎么写?用好Bullet Points,简历才能一击入魂](https://www.zhipin.com/article/76.html)
|
||||
@@ -0,0 +1,117 @@
|
||||
---
|
||||
created: 2025-09-06T10:53
|
||||
updated: 2025-09-06T11:12
|
||||
---
|
||||

|
||||
|
||||
到目前为止,面试是绝大多数人求职过程中最担心的部分,短短几十分钟,是决定你是否能够获得offer的**关键**。
|
||||
|
||||
如果你提前知道面试官会问什么问题,你又会如何进行准备呢?这个时候,**[STAR面试法](https://zhida.zhihu.com/search?content_id=101289348&content_type=Article&match_order=1&q=STAR%E9%9D%A2%E8%AF%95%E6%B3%95&zhida_source=entity)**就派上用场了。
|
||||
|
||||

|
||||
|
||||
**01 什么是STAR面试法**
|
||||
-----------------
|
||||
|
||||
STAR面试技巧是一种在面试中回答[行为问题](https://zhida.zhihu.com/search?content_id=101289348&content_type=Article&match_order=1&q=%E8%A1%8C%E4%B8%BA%E9%97%AE%E9%A2%98&zhida_source=entity)的防止失败的方法。通过使用STAR方法,你可以向面试官提供他想要得到的答案。
|
||||
|
||||
其中,“STAR”是**[SITUATION](https://zhida.zhihu.com/search?content_id=101289348&content_type=Article&match_order=1&q=SITUATION&zhida_source=entity)(背景)、[TASK](https://zhida.zhihu.com/search?content_id=101289348&content_type=Article&match_order=1&q=TASK&zhida_source=entity)(任务)、[ACTION](https://zhida.zhihu.com/search?content_id=101289348&content_type=Article&match_order=1&q=ACTION&zhida_source=entity)(行动)和[RESULT](https://zhida.zhihu.com/search?content_id=101289348&content_type=Article&match_order=1&q=RESULT&zhida_source=entity)(结果)**四个英文单词的首字母组合。
|
||||
|
||||
通过使用这四个步骤构建每个面试问题的答案,你肯定会在面试官心里留下一个**好印象**。
|
||||
|
||||

|
||||
|
||||
**02 为什么使用STAR面试法**
|
||||
-------------------
|
||||
|
||||
面试是招聘的**重要一环**。如果你马上给面试官留下深刻印象,那么你可能会得到一份新工作。失败的话,就只能被送出门外。
|
||||
|
||||
很多求职者(甚至包括毕业了多年的人)最大的错误之一,就是不能为面试问题提供**清晰简洁的**答案。
|
||||
|
||||
如果毫无准备(一般来说,这是我们天性的倾向),那么你将不能让面试官清楚地了解你的能力。
|
||||
|
||||
通过使用STAR技术,你将获得逐步指导,以提供**可衡量、具体和有影响力**的面试答案,从而给招聘经理留下积极的印象。
|
||||
|
||||

|
||||
|
||||
**03 什么时候使用STAR面试法**
|
||||
--------------------
|
||||
|
||||
面试问题可以分为两类:历史问题和行为问题。
|
||||
|
||||
**1 历史问题**
|
||||
|
||||
在面试中,历史问题通常是第一位的,包括你**过往**的工作,教育和经验等问题。在询问历史问题时,面试官通常会先从你最近的职位开始。然后,会根据时间顺序往后回溯你的经历。
|
||||
|
||||
在回答历史问题时,重要的是积极地谈论你的经历,包括你的工作职责和取得的成绩。在解释你过去的角色时,请尽可能多地使用**排名、数字和特定故事**。
|
||||
|
||||
**2 行为问题**
|
||||
|
||||
按时间顺序审查你的工作经验后,是时候提出行为问题了。行为问题询问的是你在**某些情况下的行为**。
|
||||
|
||||
一些最常见的行为问题是“你有什么优势?”,“你的弱点是什么?”。其他行为问题包括“如何处理挑战”,“告诉我你在什么情况下不会与同事妥协”。?
|
||||
|
||||
当被问到行为问题时,就是使用STAR面试法的时候了。
|
||||
|
||||

|
||||
|
||||
**04 如何使用STAR法准备面试**
|
||||
--------------------
|
||||
|
||||
虽然你无法预测在面试过程中会遇到的问题,但提前准备和练习STAR法,可以让你自信地回答任何行为问题。
|
||||
|
||||
先来看看STAR法包含的四个步骤。这里用一个常见的面试问题来举例:“**你能描述工作中的遇到的压力,以及你是怎么处理的吗?**”
|
||||
|
||||
**1 背景**
|
||||
|
||||
在回答行为问题时,首先要解释你**所处的具体情况**。
|
||||
|
||||
就像你要讲一个故事,在描述情况时要用大量的细节。当你说话时,试着解决一些这些讲故事的原则:
|
||||
|
||||
* **WHO**:都有谁参与其中,包括TA(们)的职称
|
||||
* **WHAT**:情况如何,例如你正在做的那个项目
|
||||
* **WHERE**:出现这种情况的地方,例如你工作的公司
|
||||
* **HOW**:你如何解决和/或克服这种情况
|
||||
|
||||
下面是我们如何开始使用这些讲故事的原则来回答上面的问题(如上所述):
|
||||
|
||||
“2018年,我在ABC建筑公司担任初级项目经理。我们进入一个新的购物中心建设6个月,客户越来越生气,因为我们的工作进度落后了,并且客户没有收到最新的进度反馈。最重要的是,负责该项目的高级项目经理不得不提早离开休产假,导致我们的团队没有人负责。“
|
||||
|
||||
**2 任务**
|
||||
|
||||
下一步是描述你的**具体任务或职责**。
|
||||
|
||||
“我曾与高级项目经理一起训练了几个月,负责更新我们在MS Project上的项目状态,以及记录会议纪要和跟进行动项目。”
|
||||
|
||||
**3 行动**
|
||||
|
||||
在描述了特定任务之后,就可以描述你**后续采取的行动**了。
|
||||
|
||||
“在高级经理不得不离开之后,团队的压力越来越大,我认为是时候负起责任了。第一步是安排与客户的会议,以确定可交付成果的优先顺序,分配任务,并创建一个新的、现实的时间表。在更新MS Project中的项目状态后,我与客户开会,向他们提供项目所在位置的更新信息。”
|
||||
|
||||
**4 结果**
|
||||
|
||||
要完成STAR面试响应技巧,请解释你从行动中获得的结果。这些结果应该显示你处理情况获得的**积极结果**。
|
||||
|
||||
“尽管客户因为工作被推后了而感到不快,但是他们很高兴有了一个新的时间表,并且愿意配合我们完成。在接下来的三个月里,我领导了这个项目,并且能够让每个人每天和每周都参加会议。最后,我们比原计划提前几周完成了扩建。”
|
||||
|
||||

|
||||
|
||||
**05 STAR面试法的常见应用错误**
|
||||
---------------------
|
||||
|
||||
使用STAR面试响应技术时,请避免以下错误。
|
||||
|
||||
**1 专注于消极**
|
||||
|
||||
使用STAR方法时,积极回答每个问题非常重要。**避免**使用结果负面的示例。你也不应该对同事,领导或客户进行负面评论。
|
||||
|
||||
**2 没有使用足够的细节**
|
||||
|
||||
STAR技术**完全是针对细节的**。在回答行为问题时,假装你在讲故事或写书,包括详细信息,名称,编号和细节。
|
||||
|
||||
**3 忘记结果**
|
||||
|
||||
在回答行为问题时,许多人忘记谈论结果。结果是STAR技术中最重要的部分。你不应该只是解释你的行为,你需要说出行为带来的**积极结果**。
|
||||
|
||||

|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
title: "Syncthing 由「忽略模式」导致的同步异常 - Keenwon's Blog"
|
||||
source: "https://keenwon.com/syncthing-error-caused-by-ignoring-mode/"
|
||||
author:
|
||||
published:
|
||||
created: 2026-01-12
|
||||
description: "keenwon's blog"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
[**Keenwon's Blog**](https://keenwon.com/)
|
||||
|
||||
- [Home](https://keenwon.com/)
|
||||
- [Github](https://github.com/keenwon)
|
||||
- [Findit](https://keenwon.com/1436/)
|
||||
- [jqPaginator](https://jqpaginator.keenwon.com/)
|
||||
- [About](https://keenwon.com/about/)
|
||||
|
||||
上周末遇到一个 Syncthing 同步的问题。在家里的台式机上,删除了一些没用的文件,大概 100MB,但是同步给笔记本的进度一直卡在 95% 左右。两台设备是通过海外的「中继」连接的,所以当时单纯以为是速度问题。
|
||||
|
||||
但周一拿到笔记本之后,发现实际上是同步失败了,大概长这样(图是 [网上](https://forum.syncthing.net/t/folder-and-files-not-deleted-even-with-d-ignore-patterns-solved/18262) 找的):
|
||||
|
||||

|
||||
|
||||
异常信息是:
|
||||
|
||||
```bash
|
||||
delete dir: directory has been deleted on a remote device but contains ignored files (see ignore documentation for (?d) prefix)
|
||||
```
|
||||
|
||||
查看了下 [忽略模式](https://docs.syncthing.net/v1.26.0/users/ignoring) 的文档,发现产生这个问题的原因是:假设有两台设备,windows 和 mac,同步的文件目录结构如下:
|
||||
|
||||
```bash
|
||||
.
|
||||
├── a
|
||||
│ ├── 1.txt
|
||||
│ └── 2.txt
|
||||
├── b
|
||||
└── c
|
||||
```
|
||||
|
||||
在使用过程中,mac 设备很容易产生 `.DS_Store` 文件,目录成了:
|
||||
|
||||
```bash
|
||||
.
|
||||
├── a
|
||||
│ ├── .DS_Store
|
||||
│ ├── 1.txt
|
||||
│ └── 2.txt
|
||||
├── b
|
||||
└── c
|
||||
```
|
||||
|
||||
**因为 `.DS_Store` 文件不需要同步给 windows,所以当 mac 忽略 `.DS_Store` 的同时,windows 删除了 `a` 目录,mac 端就会报错,同步失败。**
|
||||
|
||||
原因其实也很简单,对于 Syncthing 来说,它只同步了 `a/1.txt` 和 `b/1.txt` ,当 windows 删除 `a` 目录时,它知道 mac 侧有未纳入同步的文件 `.DS_Store` ,所以就不能直接删目录。
|
||||
|
||||
这种情况是很常见的,一些工具经常在本地生成临时文件,针对这种情况,Syncthing 支持在定义忽略文件时,通过 `(?d)` 前缀来声明,该文件不影响目录的删除。
|
||||
|
||||
```bash
|
||||
// Mac
|
||||
(?d)(?i).DS_Store
|
||||
(?d).project
|
||||
|
||||
// Windows
|
||||
(?d)(?i)Thumbs.db
|
||||
(?d)(?i)ehthumbs.db
|
||||
(?d)(?i)Desktop.ini
|
||||
//群晖
|
||||
|
||||
(?d)(?i)@eaDir
|
||||
|
||||
|
||||
```
|
||||
|
||||
赞赏
|
||||
|
||||

|
||||
|
||||
微信
|
||||
|
||||

|
||||
|
||||
本作品采用 [知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh) 进行许可
|
||||
@@ -0,0 +1,612 @@
|
||||
---
|
||||
title: "Syncthing部署指南:从单机到集群的完整方案"
|
||||
source: "https://blog.csdn.net/gitblog_00316/article/details/151805979?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-151805979-blog-139509646.235^v43^pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.2&utm_relevant_index=3"
|
||||
author:
|
||||
- "[[gitblog_00316]]"
|
||||
published: 2025-09-18
|
||||
created: 2025-12-28
|
||||
description: "文章浏览阅读1k次,点赞27次,收藏18次。你是否正面临跨设备文件同步的困境?企业数据共享效率低下、个人设备间文件传输繁琐、第三方云存储隐私安全隐患等问题,正在消耗团队协作效率与个人时间成本。Syncthing作为一款开源的连续文件同步工具,采用P2P(Peer-to-Peer,对等网络)架构,无需中心服务器即可实现设备间直接数据传输,彻底解决传统同步方案的延迟、隐私与带宽瓶颈。本文将系统讲解从单机部署到企业级集群的全流程方案,帮助你构建安..._syncthing"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
[【免费下载链接】syncthing Open Source Continuous File Synchronization 项目地址: https://gitcode.com/GitHub\_Trending/sy/syncthing](https://link.gitcode.com/i/5f575fd0cc976a830d413e91a8c167c1?uuid_tt_dd=10_19961338620-1750918419895-830026&isLogin=9&from_id=151805979 "【免费下载链接】syncthing")
|
||||
|
||||
### 引言:告别云存储依赖的文件同步革命
|
||||
|
||||
你是否正面临跨设备文件同步的困境?企业数据共享效率低下、个人设备间文件传输繁琐、第三方云存储隐私安全隐患等问题,正在消耗团队协作效率与个人时间成本。Syncthing作为一款开源的连续文件同步工具,采用P2P(Peer-to-Peer,对等网络)架构,无需中心服务器即可实现设备间直接数据传输,彻底解决传统同步方案的延迟、隐私与带宽瓶颈。本文将系统讲解从单机部署到企业级集群的全流程方案,帮助你构建安全、高效、自主可控的文件同步系统。
|
||||
|
||||
读完本文你将掌握:
|
||||
|
||||
- 3种主流部署方式(Docker容器/系统服务/源码编译)的实操配置
|
||||
- 文件夹类型与同步模式的深度优化策略
|
||||
- 多设备集群的权限控制与冲突解决机制
|
||||
- 企业级监控告警与性能调优方案
|
||||
- 常见故障排查与数据恢复最佳实践
|
||||
|
||||
### 一、单机部署:3种主流方式的对比与实操
|
||||
|
||||
#### 1.1 Docker容器化部署(推荐新手)
|
||||
|
||||
Docker部署具有环境隔离、版本控制、快速启停的优势,适合开发测试环境与边缘计算节点。Syncthing官方镜像已针对多架构优化,支持x86/ARM设备(如树莓派)。
|
||||
|
||||
**基础运行命令** :
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
|
||||
--name syncthing \
|
||||
|
||||
--hostname=home-server \
|
||||
|
||||
-p 8384:8384 \ # Web管理界面
|
||||
|
||||
-p 22000:22000/tcp \ # TCP文件传输
|
||||
|
||||
-p 22000:22000/udp \ # QUIC协议支持
|
||||
|
||||
-p 21027:21027/udp \ # 本地发现广播
|
||||
|
||||
-v /data/syncthing:/var/syncthing \ # 数据持久化
|
||||
|
||||
-e PUID=1000 -e PGID=1000 \ # 权限控制
|
||||
|
||||
syncthing/syncthing:latest
|
||||
bash
|
||||
```
|
||||
|
||||
**高级配置(docker-compose.yml)** :
|
||||
|
||||
```yaml
|
||||
version: "3.8"
|
||||
services:
|
||||
syncthing:
|
||||
image: syncthing/syncthing:latest
|
||||
container_name: syncthing
|
||||
hostname: office-server
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- UMASK=002 # 文件权限掩码
|
||||
- STGUIADDRESS=0.0.0.0:8384 # 管理界面绑定地址
|
||||
volumes:
|
||||
- /data/syncthing:/var/syncthing
|
||||
- /etc/localtime:/etc/localtime:ro # 时区同步
|
||||
ports:
|
||||
- 8384:8384
|
||||
- 22000:22000/tcp
|
||||
- 22000:22000/udp
|
||||
- 21027:21027/udp
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: curl -fkLsS -m 2 http://127.0.0.1:8384/rest/noauth/health | grep -o OK || exit 1
|
||||
interval: 1m
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
yaml
|
||||
```
|
||||
|
||||
> **安全最佳实践** :生产环境需设置 `STGUIADDRESS=127.0.0.1:8384` 并通过SSH隧道访问管理界面,或启用HTTPS与强密码认证。
|
||||
|
||||
#### 1.2 系统服务部署(推荐生产环境)
|
||||
|
||||
Linux系统 通过 systemd实现服务化部署,可获得开机自启、进程守护、资源控制等企业级特性。Syncthing提供官方systemd服务模板,支持多用户隔离部署。
|
||||
|
||||
**部署步骤** :
|
||||
|
||||
1. **服务文件安装** :
|
||||
```bash
|
||||
# 克隆仓库
|
||||
|
||||
cd syncthing
|
||||
|
||||
|
||||
|
||||
# 安装系统级服务模板
|
||||
|
||||
sudo cp etc/linux-systemd/system/syncthing@.service /etc/systemd/system/
|
||||
|
||||
|
||||
|
||||
# 重载systemd管理器
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
bash
|
||||
```
|
||||
1. **创建专用用户** :
|
||||
```bash
|
||||
sudo useradd -r -m -d /var/lib/syncthing syncthing
|
||||
bash
|
||||
```
|
||||
1. **服务管理** :
|
||||
```bash
|
||||
# 启动服务(替换<USER>为实际用户名)
|
||||
|
||||
sudo systemctl start syncthing@syncthing
|
||||
|
||||
|
||||
|
||||
# 设置开机自启
|
||||
|
||||
sudo systemctl enable syncthing@syncthing
|
||||
|
||||
|
||||
|
||||
# 查看状态与日志
|
||||
|
||||
sudo systemctl status syncthing@syncthing
|
||||
|
||||
journalctl -u syncthing@syncthing -f --output=cat
|
||||
bash
|
||||
```
|
||||
|
||||
**服务文件解析** :
|
||||
|
||||
```bash
|
||||
[Unit]
|
||||
Description=Syncthing - Open Source Continuous File Synchronization for %I
|
||||
Documentation=man:syncthing(1)
|
||||
After=network.target
|
||||
StartLimitIntervalSec=60
|
||||
StartLimitBurst=4
|
||||
|
||||
[Service]
|
||||
User=%i
|
||||
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart
|
||||
Restart=on-failure
|
||||
RestartSec=1
|
||||
SuccessExitStatus=3 4 # 正确处理重启退出码
|
||||
|
||||
# 安全强化配置
|
||||
ProtectSystem=full
|
||||
PrivateTmp=true
|
||||
SystemCallArchitectures=native
|
||||
MemoryDenyWriteExecute=true
|
||||
NoNewPrivileges=true
|
||||
ini
|
||||
```
|
||||
|
||||
#### 1.3 源码编译部署(开发者选项)
|
||||
|
||||
适合需要自定义功能或测试最新特性的场景。Syncthing使用Go语言开发,编译过程简洁高效,支持交叉编译至多种平台。
|
||||
|
||||
**编译环境准备** :
|
||||
|
||||
```bash
|
||||
# 安装Go环境(要求Go 1.20+)
|
||||
|
||||
sudo apt install -y golang git build-essential
|
||||
|
||||
|
||||
|
||||
# 设置Go环境变量
|
||||
|
||||
export GOPATH=$HOME/go
|
||||
|
||||
export PATH=$PATH:$GOPATH/bin
|
||||
bash
|
||||
```
|
||||
|
||||
**编译与安装** :
|
||||
|
||||
```bash
|
||||
# 获取源码
|
||||
|
||||
cd syncthing
|
||||
|
||||
|
||||
|
||||
# 编译二进制文件
|
||||
|
||||
go run build.go -no-upgrade
|
||||
|
||||
|
||||
|
||||
# 安装到系统路径
|
||||
|
||||
sudo cp bin/syncthing /usr/local/bin/
|
||||
|
||||
sudo chmod +x /usr/local/bin/syncthing
|
||||
|
||||
|
||||
|
||||
# 验证安装
|
||||
|
||||
syncthing --version
|
||||
bash
|
||||
```
|
||||
|
||||
> **交叉编译示例** :构建ARM架构二进制
|
||||
>
|
||||
> ```bash
|
||||
> GOOS=linux GOARCH=arm GOARM=7 go run build.go -no-upgrade
|
||||
> bash
|
||||
> ```
|
||||
|
||||
### 二、核心配置:文件夹类型与同步策略深度解析
|
||||
|
||||
#### 2.1 文件夹类型选择指南
|
||||
|
||||
Syncthing提供多种文件夹类型,需根据实际场景选择:
|
||||
|
||||
| 类型 | 中文名称 | 适用场景 | 核心特性 | 冲突处理 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Send & Receive | 双向同步 | 个人设备间 | 全量读写,自动合并变更 | 自动生成冲突文件 |
|
||||
| Send Only | 仅发送 | 服务器→客户端 | 本地修改推送到远程,忽略远程变更 | 远程修改不会覆盖本地 |
|
||||
| Receive Only | 仅接收 | 客户端→服务器 | 接受远程变更,本地修改需手动确认 | 本地修改标记为"需要同步" |
|
||||
| Receive Encrypted | 加密接收 | 不可信环境 | 远程加密传输,本地解密存储 | 依赖加密令牌验证 |
|
||||
|
||||
**代码层面的文件夹配置结构** (源自 `folderconfiguration.go` ):
|
||||
|
||||
```bash
|
||||
type FolderConfiguration struct {
|
||||
|
||||
ID string \`json:"id"\` // 文件夹唯一标识
|
||||
|
||||
Label string \`json:"label"\` // 显示名称
|
||||
|
||||
Path string \`json:"path"\` // 本地路径
|
||||
|
||||
Type FolderType \`json:"type"\` // 文件夹类型
|
||||
|
||||
Devices []FolderDeviceConfiguration \`json:"devices"\` // 关联设备列表
|
||||
|
||||
RescanIntervalS int \`json:"rescanIntervalS"\` // 自动扫描间隔(秒)
|
||||
|
||||
FSWatcherEnabled bool \`json:"fsWatcherEnabled"\` // 文件系统监控开关
|
||||
|
||||
// ... 更多配置项
|
||||
|
||||
}
|
||||
go
|
||||
```
|
||||
|
||||
#### 2.2 高级同步策略配置
|
||||
|
||||
**冲突处理机制** : 当多设备同时修改同一文件时,Syncthing会保留所有版本并添加冲突标记。冲突文件名格式为: `原始文件名.冲突-<设备名>-<时间戳>.<扩展名>`
|
||||
|
||||
可通过 `maxConflicts` 参数控制保留的冲突文件数量(默认10个):
|
||||
|
||||
```json
|
||||
{
|
||||
"maxConflicts": 5, // 保留最近5个冲突文件
|
||||
"ignoreDelete": false // 是否忽略删除操作同步
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
**性能优化参数** :
|
||||
|
||||
```json
|
||||
{
|
||||
"hashers": 2, // 哈希计算并行数(建议=CPU核心数)
|
||||
"copiers": 4, // 文件复制并行数
|
||||
"pullerMaxPendingKiB": 51200, // 拉取队列大小(50MiB)
|
||||
"maxConcurrentWrites": 16, // 并发写入数
|
||||
"blockPullOrder": "standard" // 块拉取顺序(standard/random)
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
**存储优化配置** :
|
||||
|
||||
```json
|
||||
{
|
||||
"minDiskFree": "5%", // 最小可用空间(支持百分比或绝对大小)
|
||||
"disableSparseFiles": false, // 是否禁用稀疏文件
|
||||
"copyRangeMethod": "standard" // 文件复制方式(standard/atomic)
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
### 三、多设备集群:构建企业级同步网络
|
||||
|
||||
#### 3.1 设备发现与连接建立
|
||||
|
||||
Syncthing支持多种设备发现机制,确保在不同网络环境下的可靠连接:
|
||||
|
||||

|
||||
|
||||
**设备添加流程** :
|
||||
|
||||
1. 在设备A的Web界面获取设备ID(Settings → Device ID)
|
||||
2. 在设备B添加远程设备(Add Remote Device)
|
||||
3. 输入设备ID、名称并选择共享文件夹
|
||||
4. 设备A确认授权请求
|
||||
5. 自动建立加密连接开始同步
|
||||
|
||||
**设备ID安全机制** : 每个设备ID对应一个RSA密钥对(2048位),用于身份验证与数据加密。可通过以下命令查看详细信息:
|
||||
|
||||
```bash
|
||||
syncthing generate --device-id
|
||||
bash
|
||||
```
|
||||
|
||||
#### 3.2 权限控制与访问管理
|
||||
|
||||
**文件夹权限粒度** : Syncthing通过设备级别的文件夹共享控制实现细粒度权限管理:
|
||||
|
||||
- 只读权限:设置文件夹类型为"Receive Only"
|
||||
- 读写权限:设置为"Send & Receive"
|
||||
- 加密访问:使用"Receive Encrypted"类型并配置加密密码
|
||||
|
||||
**配置示例** :仅允许特定设备写入
|
||||
|
||||
```json
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"id": "documents",
|
||||
"type": "Send & Receive",
|
||||
"devices": [
|
||||
{
|
||||
"deviceID": "ABC123..." // 管理员设备(读写权限)
|
||||
},
|
||||
{
|
||||
"deviceID": "DEF456..." // 普通设备(需设置为Receive Only)
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
**高级访问控制** : 通过API实现自动化权限管理,例如使用API密钥认证:
|
||||
|
||||
```bash
|
||||
# 获取API密钥
|
||||
|
||||
curl -X GET http://localhost:8384/rest/system/config \
|
||||
|
||||
-H "X-API-Key: YOUR_API_KEY" | jq .gui.apiKey
|
||||
|
||||
|
||||
|
||||
# 添加设备
|
||||
|
||||
curl -X POST http://localhost:8384/rest/config/devices \
|
||||
|
||||
-H "X-API-Key: YOUR_API_KEY" \
|
||||
|
||||
-H "Content-Type: application/json" \
|
||||
|
||||
-d '{"deviceID":"GHI789...","name":"NewDevice"}'
|
||||
bash
|
||||
```
|
||||
|
||||
### 四、监控与维护:企业级运维方案
|
||||
|
||||
#### 4.1 指标监控与告警
|
||||
|
||||
Syncthing内置Prometheus指标导出功能,可与Grafana等监控系统无缝集成:
|
||||
|
||||
**启用监控** : 在配置文件中添加:
|
||||
|
||||
```json
|
||||
{
|
||||
"options": {
|
||||
"metricsEnabled": true,
|
||||
"metricsListenAddress": ":9090"
|
||||
}
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
**核心监控指标** : | 指标名称 | 类型 | 描述 | 告警阈值建议 | |----------|------|------|--------------| | syncthing\_folder\_files | Gauge | 同步文件总数 | - | | syncthing\_folder\_out\_of\_sync\_files | Gauge | 未同步文件数 | >0持续5分钟 | | syncthing\_device\_connections | Gauge | 活跃连接数 | <预期设备数 | | syncthing\_device\_pending\_bytes | Gauge | 待同步字节数 | >1GB | | syncthing\_rest\_api\_duration\_seconds | Histogram | API响应时间 | P95>1s |
|
||||
|
||||
**Grafana仪表盘配置** :
|
||||
|
||||
1. 添加Prometheus数据源,URL填写 `http://syncthing-host:9090`
|
||||
2. 导入Syncthing官方仪表盘(ID: 17757)
|
||||
3. 配置告警规则(如设备离线、同步延迟)
|
||||
|
||||
#### 4.2 数据备份与恢复
|
||||
|
||||
**配置文件备份** : Syncthing配置存储在以下路径,建议定期备份:
|
||||
|
||||
- Linux: `~/.config/syncthing/config.xml`
|
||||
- Windows: `%APPDATA%\Syncthing\config.xml`
|
||||
- macOS: `~/Library/Application Support/Syncthing/config.xml`
|
||||
|
||||
**自动化备份脚本** :
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_DIR="/var/backups/syncthing"
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
CONFIG_PATH=$(su - syncthing -c "echo \$HOME/.config/syncthing/config.xml")
|
||||
|
||||
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
cp $CONFIG_PATH $BACKUP_DIR/config-$TIMESTAMP.xml
|
||||
|
||||
|
||||
|
||||
# 保留最近30天备份
|
||||
|
||||
find $BACKUP_DIR -name "config-*.xml" -mtime +30 -delete
|
||||
bash
|
||||
```
|
||||
|
||||
**数据恢复流程** :
|
||||
|
||||
1. 在新设备部署相同版本的Syncthing
|
||||
2. 停止服务: `systemctl stop syncthing@syncthing`
|
||||
3. 恢复配置文件到对应目录
|
||||
4. 启动服务并验证设备连接与文件夹状态
|
||||
|
||||
### 五、性能调优:突破同步效率瓶颈
|
||||
|
||||
#### 5.1 网络优化
|
||||
|
||||
**协议选择** :
|
||||
|
||||
- 局域网环境:优先使用TCP协议(低延迟高吞吐量)
|
||||
- 广域网环境:启用QUIC协议(抗丢包能力强)
|
||||
- 配置示例:
|
||||
```json
|
||||
{
|
||||
"options": {
|
||||
"connections": {
|
||||
"quicEnabled": true,
|
||||
"tcpEnabled": true,
|
||||
"relaysEnabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
**带宽控制** : 针对不同网络环境设置精细化带宽限制:
|
||||
|
||||
```json
|
||||
{
|
||||
"options": {
|
||||
"maxRecvKbps": 0, // 接收带宽不限速(0表示禁用限制)
|
||||
"maxSendKbps": 5120, // 发送带宽限制为5Mbps
|
||||
"limitBandwidthInLan": false // 局域网内不限速
|
||||
}
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
#### 5.2 存储优化
|
||||
|
||||
**文件系统选择** :
|
||||
|
||||
- 推荐使用EXT4/XFS文件系统(支持文件属性同步)
|
||||
- 避免使用FAT32/exFAT(不支持权限与符号链接)
|
||||
- NTFS需启用"ignorePerms": true配置
|
||||
|
||||
**块大小优化** : 根据文件类型调整块大小(默认128KB):
|
||||
|
||||
- 小文件密集型(文档/代码):64KB
|
||||
- 大文件场景(视频/备份):512KB~2MB
|
||||
```json
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"id": "videos",
|
||||
"blockSize": 2048 // 2MB块大小
|
||||
}
|
||||
]
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
### 六、故障排查:常见问题与解决方案
|
||||
|
||||
#### 6.1 连接问题诊断流程
|
||||
|
||||

|
||||
|
||||
**典型问题解决** :
|
||||
|
||||
1. **本地发现失败** :
|
||||
```bash
|
||||
# 检查组播支持
|
||||
|
||||
sudo apt install -y smcroute
|
||||
|
||||
smcroutectl show groups
|
||||
|
||||
|
||||
|
||||
# 验证端口占用
|
||||
|
||||
netstat -tulpn | grep 21027
|
||||
bash
|
||||
```
|
||||
1. **中继连接频繁断开** :
|
||||
```json
|
||||
{
|
||||
"options": {
|
||||
"relayReconnectIntervalS": 300, // 延长重连间隔
|
||||
"relayServer": "dynamic+https://relays.syncthing.net/endpoint" // 使用官方中继池
|
||||
}
|
||||
}
|
||||
json
|
||||
```
|
||||
|
||||
#### 6.2 数据一致性问题
|
||||
|
||||
**文件夹标记文件丢失** : 当提示"folder marker missing"错误时,需重建标记文件:
|
||||
|
||||
```bash
|
||||
# 进入文件夹路径
|
||||
|
||||
cd /path/to/folder
|
||||
|
||||
|
||||
|
||||
# 创建标记目录
|
||||
|
||||
mkdir .stfolder
|
||||
|
||||
|
||||
|
||||
# 添加标识文件(防止误删除)
|
||||
|
||||
echo "Syncthing folder marker" > .stfolder/syncthing-folder-marker.txt
|
||||
bash
|
||||
```
|
||||
|
||||
**同步冲突文件清理** : 使用定时任务自动清理过期冲突文件:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# 清理30天前的冲突文件
|
||||
|
||||
find /data/syncthing -name "*.sync-conflict-*" -mtime +30 -delete
|
||||
bash
|
||||
```
|
||||
|
||||
### 七、总结与展望
|
||||
|
||||
Syncthing凭借其开源架构、安全设计与跨平台特性,已成为企业与个人构建私有同步系统的理想选择。通过本文介绍的部署策略、配置优化与运维方案,你可以构建从单节点到大规模集群的完整解决方案。
|
||||
|
||||
**未来展望** :
|
||||
|
||||
- 性能提升:块级同步算法优化与并行处理增强
|
||||
- 安全强化:量子 resistant 加密算法支持
|
||||
- 功能扩展:集成分布式文件系统与版本控制
|
||||
- 管理增强:更完善的API与自动化运维工具链
|
||||
|
||||
建议定期关注项目更新日志,及时获取新特性与安全补丁。通过社区论坛与Issue跟踪系统参与贡献,共同推动Syncthing生态发展。
|
||||
|
||||
### 附录:资源与工具链
|
||||
|
||||
1. **官方文档** :
|
||||
- 快速入门指南:https://docs.syncthing.net/intro/getting-started.html
|
||||
- 配置参考:https://docs.syncthing.net/users/config.html
|
||||
2. **第三方工具** :
|
||||
- SyncTrayzor(Windows系统托盘工具)
|
||||
- Syncthing-GTK(跨平台GUI客户端)
|
||||
- syncthing-inotify(高级文件系统监控)
|
||||
3. **社区支持** :
|
||||
- 论坛:https://forum.syncthing.net/
|
||||
- GitHub Issue:https://github.com/syncthing/syncthing/issues
|
||||
- Matrix聊天:#syncthing:matrix.org
|
||||
|
||||
---
|
||||
|
||||
**部署检查清单** :
|
||||
|
||||
- 已选择合适的部署方式(Docker/系统服务/源码)
|
||||
- 配置文件已备份并设置定期备份任务
|
||||
- 防火墙规则开放必要端口(8384/22000/21027)
|
||||
- 启用了HTTPS与强密码认证
|
||||
- 关键文件夹已配置合适的同步模式
|
||||
- 监控系统已部署并设置告警阈值
|
||||
- 测试了数据恢复流程确保可用性
|
||||
|
||||
[【免费下载链接】syncthing Open Source Continuous File Synchronization 项目地址: https://gitcode.com/GitHub\_Trending/sy/syncthing](https://link.gitcode.com/i/0734973a3b509f8d893b884ab93ca9c3?uuid_tt_dd=10_19961338620-1750918419895-830026&isLogin=9&from_id=151805979 "【免费下载链接】syncthing")
|
||||
|
||||
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
Ubuntu系统下安装Docker并结合cpolar实现内网穿透的完整步骤,涵盖环境准备、软件安装、配置验证等全流程,适配Ubuntu 18.04/20.04/22.04等主流版本。
|
||||
|
||||
### 一、前置准备:更新系统并安装依赖
|
||||
|
||||
首先确保系统包索引最新,并安装Docker和cpolar所需的基础依赖:
|
||||
|
||||
```null
|
||||
# 更新系统包sudo apt update && sudo apt upgrade -y # 安装Docker依赖的工具sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 安装cpolar依赖的工具(如必要)sudo apt install -y wget gnupg2
|
||||
```
|
||||
|
||||
### 二、安装Docker(官方推荐方式)
|
||||
|
||||
#### 1\. 添加Docker官方GPG密钥
|
||||
|
||||
```null
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
```
|
||||
|
||||
#### 2\. 添加Docker官方软件源
|
||||
|
||||
```null
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
```
|
||||
|
||||
#### 3\. 安装Docker Engine
|
||||
|
||||
```null
|
||||
# 更新包索引(加载新添加的Docker源)sudo apt update # 安装Docker核心组件sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
```
|
||||
|
||||
#### 4\. 验证Docker安装并配置免sudo(可选)
|
||||
|
||||
```null
|
||||
# 验证Docker是否运行sudo systemctl status docker # 设为开机自启sudo systemctl enable docker # 添加当前用户到docker组(避免每次执行docker命令输sudo)sudo usermod -aG docker $USER # 生效组配置(需重新登录或执行以下命令)newgrp docker # 验证免sudo执行docker --versiondocker run hello-world # 运行测试容器,成功则安装完成
|
||||
```
|
||||
|
||||
### 三、安装cpolar内网穿透工具
|
||||
|
||||
cpolar支持一键安装脚本,也可手动安装,以下是官方一键安装方式:
|
||||
|
||||
#### 1\. 下载并安装cpolar
|
||||
|
||||
```null
|
||||
# 下载cpolar安装脚本并执行curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
|
||||
```
|
||||
|
||||
#### 2\. 验证cpolar安装
|
||||
|
||||
```null
|
||||
# 查看cpolar版本cpolar version # 启动cpolar服务并设为开机自启sudo systemctl enable cpolarsudo systemctl start cpolar # 验证cpolar服务状态sudo systemctl status cpolar
|
||||
```
|
||||
|
||||
#### 3\. 配置cpolar认证(必须)
|
||||
|
||||
cpolar需要账号认证才能使用,步骤如下:
|
||||
|
||||
1. 访问cpolar官网注册账号:[https://www.cpolar.com/](https://www.cpolar.com/)
|
||||
2. 登录后在「仪表盘」→「验证」页面复制你的「认证令牌」
|
||||
3. 在Ubuntu终端执行以下命令配置令牌:
|
||||
|
||||
```null
|
||||
# 替换为你的实际令牌cpolar authtoken <你的cpolar认证令牌> # 重启cpolar服务使配置生效sudo systemctl restart cpolar
|
||||
```
|
||||
|
||||
### 四、使用cpolar穿透Docker服务(示例)
|
||||
|
||||
以穿透Docker中运行的Web服务(如Nginx,端口80)为例,演示内网穿透配置:
|
||||
|
||||
#### 1\. 先启动一个Docker Web容器(测试用)
|
||||
|
||||
```null
|
||||
# 拉取Nginx镜像并运行,映射主机80端口docker run -d --name test-nginx -p 80:80 nginx
|
||||
```
|
||||
|
||||
#### 2\. 配置cpolar穿透规则
|
||||
|
||||
cpolar支持临时穿透(会话结束失效)和持久穿透(需配置文件),以下是两种方式:
|
||||
|
||||
##### 方式1:临时穿透(快速测试)
|
||||
|
||||
```null
|
||||
# 穿透本地80端口,生成临时公网地址(http+https)cpolar http 80
|
||||
```
|
||||
|
||||
执行后终端会输出类似以下内容,复制`https://xxx.cpolar.io`即可公网访问Docker的Nginx服务:
|
||||
|
||||
```null
|
||||
Forwarding http://xxx.cpolar.io -> http://localhost:80Forwarding https://xxx.cpolar.io -> http://localhost:80
|
||||
```
|
||||
|
||||
##### 方式2:持久穿透(配置文件)
|
||||
|
||||
临时穿透关闭终端后失效,通过配置文件可实现持久化:
|
||||
|
||||
```null
|
||||
# 编辑cpolar配置文件sudo nano /usr/local/etc/cpolar/cpolar.yml
|
||||
```
|
||||
|
||||
在配置文件中添加自定义穿透规则(示例:穿透80端口,名称为docker-nginx):
|
||||
|
||||
```null
|
||||
authtoken: <你的cpolar认证令牌> # 已配置可忽略tunnels: docker-nginx: proto: http addr: 80 region: cn_vip # 可选:cn_vip(国内)、us(美国)、hk(香港)
|
||||
```
|
||||
|
||||
保存并退出(Ctrl+O → 回车 → Ctrl+X),重启cpolar:
|
||||
|
||||
```null
|
||||
sudo systemctl restart cpolar
|
||||
```
|
||||
|
||||
#### 3\. 查看穿透地址
|
||||
|
||||
访问cpolar仪表盘([https://dashboard.cpolar.com/),在「隧道管理」→「在线隧道」中可查看你的持久化公网地址,无需保持终端开启。](https://dashboard.cpolar.com/%EF%BC%89%EF%BC%8C%E5%9C%A8%E3%80%8C%E9%9A%A7%E9%81%93%E7%AE%A1%E7%90%86%E3%80%8D%E2%86%92%E3%80%8C%E5%9C%A8%E7%BA%BF%E9%9A%A7%E9%81%93%E3%80%8D%E4%B8%AD%E5%8F%AF%E6%9F%A5%E7%9C%8B%E4%BD%A0%E7%9A%84%E6%8C%81%E4%B9%85%E5%8C%96%E5%85%AC%E7%BD%91%E5%9C%B0%E5%9D%80%EF%BC%8C%E6%97%A0%E9%9C%80%E4%BF%9D%E6%8C%81%E7%BB%88%E7%AB%AF%E5%BC%80%E5%90%AF%E3%80%82)
|
||||
|
||||
### 五、常见问题解决
|
||||
|
||||
1. **Docker启动失败**:
|
||||
|
||||
* 检查是否有其他服务占用Docker端口:`sudo lsof -i :2375`
|
||||
* 重启Docker服务:`sudo systemctl restart docker`
|
||||
2. **cpolar穿透后无法访问**:
|
||||
|
||||
* 检查Ubuntu防火墙是否放行端口:`sudo ufw allow 80`
|
||||
* 验证本地服务是否正常:`curl http://localhost:80`
|
||||
* 确认cpolar隧道配置的端口与Docker映射端口一致
|
||||
3. **cpolar认证失败**:
|
||||
|
||||
* 重新配置令牌:`cpolar authtoken <新令牌>`
|
||||
* 检查网络是否能访问cpolar服务器:`ping api.cpolar.com`
|
||||
|
||||
### 六、总结
|
||||
|
||||
1. 完成Docker安装后,可通过`docker run`启动任意服务并映射端口;
|
||||
2. cpolar通过简单命令或配置文件即可将本地Docker服务暴露到公网;
|
||||
3. 持久化配置需修改`cpolar.yml`并重启服务,公网地址可在cpolar仪表盘查看。
|
||||
|
||||
如果需要穿透其他Docker服务(如MySQL、Redis),只需将cpolar的`addr`改为对应映射端口(如3306、6379),并将`proto`改为`tcp`(非HTTP服务需用TCP穿透),例如:
|
||||
|
||||
```null
|
||||
# TCP穿透Docker的MySQL(3306端口)cpolar tcp 3306
|
||||
```
|
||||
@@ -0,0 +1,538 @@
|
||||
---
|
||||
title: Use MCP servers in VS Code
|
||||
source: https://code.visualstudio.com/docs/copilot/customization/mcp-servers#_use-mcp-tools-in-agent-mode
|
||||
author:
|
||||
- "[[Microsoft]]"
|
||||
published: 2021-11-03
|
||||
created: 2025-09-11
|
||||
description: Learn how to configure and use Model Context Protocol (MCP) servers with GitHub Copilot in Visual Studio Code.
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-11T21:50
|
||||
---
|
||||
## 在 VS Code 中使用 MCP 服务器
|
||||
|
||||
模型上下文协议 (MCP) 是一种开放标准,允许 AI 模型通过统一的界面使用外部工具和服务。在 VS Code 中,MCP 服务器为文件作、数据库或与外部 API 交互等任务添加了工具。
|
||||
|
||||
本文将指导你在 Visual Studio Code 中设置 MCP 服务器和使用具有代理模式的工具。
|
||||
|
||||
MCP 如何工作?
|
||||
|
||||
MCP 遵循客户端-服务器架构:
|
||||
|
||||
- **MCP 客户端** (如 VS Code)连接到 MCP 服务器并代表 AI 模型请求作
|
||||
- **MCP 服务器** 提供一种或多种工具,通过定义明确的接口公开特定功能
|
||||
- **模型上下文协议** 定义了客户端和服务器之间通信的消息格式,包括工具发现、调用和响应处理
|
||||
|
||||
例如,文件系统 MCP 服务器可能提供用于读取、写入或搜索文件和目录的工具。GitHub 的 MCP 服务器提供了列出存储库、创建拉取请求或管理问题的工具。MCP 服务器可以在计算机上本地运行或远程托管,VS Code 支持这两种配置。
|
||||
|
||||
通过标准化这种交互,MCP 消除了每个 AI 模型和每个工具之间自定义集成的需要。这使您只需将新的 MCP 服务器添加到您的工作区即可扩展 AI 助手的功能。了解有关 [模型上下文协议规范](https://modelcontextprotocol.io/) 的更多信息。
|
||||
|
||||
VS Code 中支持的 MCP 功能
|
||||
|
||||
VS Code 支持以下 MCP 功能:
|
||||
|
||||
- MCP 服务器传输:本地标准输入/输出 ()、HTTP 流 () 和服务器发送的事件(旧版支持)。 `stdio` `http` `sse`
|
||||
- [MCP 功能](https://modelcontextprotocol.io/specification/2025-03-26#features) :工具、提示、资源、引出、采样和身份验证。
|
||||
- VS Code 使用 ( [spec](https://modelcontextprotocol.io/docs/concepts/roots) ) 为服务器提供当前工作区文件夹。 `roots`
|
||||
|
||||
注意
|
||||
|
||||
从 VS Code 1.102 开始,VS Code 中的 MCP 支持已正式发布。
|
||||
|
||||
## 先决条件
|
||||
|
||||
- 安装最新版本的 [Visual Studio Code](https://code.visualstudio.com/download)
|
||||
- 访问 [Copilot](https://code.visualstudio.com/docs/copilot/setup)
|
||||
|
||||
## 在 VS Code 中启用 MCP 支持
|
||||
|
||||
您可以使用 VS Code 中的 MCP 支持 [已启用聊天.mcp.enabled](https://code.visualstudio.com/docs/copilot/customization/chat.mcp.enabled) 设置。默认情况下,MCP 支持处于启用状态。
|
||||
|
||||
### 集中管理 MCP 支持
|
||||
|
||||
您可以通过两种方式集中管理组织中的 MCP 支持:
|
||||
|
||||
- **设备管理** :通过组策略或配置文件集中启用或禁用组织中的 MCP 支持。详细了解如何 [使用设备管理管理 VS Code 设置](https://code.visualstudio.com/docs/setup/enterprise#_centrally-manage-vs-code-settings) 。
|
||||
- **GitHub Copilot 策略** :使用 GitHub Copilot 策略控制组织中 MCP 服务器的可用性。在 GitHub Copilot 文档中详细了解管理 [企业中 Copilot 的策略和功能](https://docs.github.com/en/enterprise-cloud@latest/copilot/how-tos/administer/enterprises/managing-policies-and-features-for-copilot-in-your-enterprise) 。
|
||||
|
||||
## 添加 MCP 服务器
|
||||
|
||||
谨慎
|
||||
|
||||
MCP 服务器可以在您的计算机上运行任意代码。仅添加来自受信任来源的服务器,并在启动之前查看发布者和服务器配置。首次启动 MCP 服务器时,VS Code 会提示您确认您 [信任 MCP 服务器](https://code.visualstudio.com/docs/copilot/customization/#_mcp-server-trust) 。阅读有关在 VS Code 中使用 AI 的安全 [文档](https://code.visualstudio.com/docs/copilot/security) ,了解其含义。
|
||||
|
||||
在 VS Code 中添加 MCP 服务器有多个选项:
|
||||
|
||||
直接从 Web 安装 MCP 服务器
|
||||
|
||||
网站可以提供直接在 VS Code 中安装 MCP 服务器的链接,从而轻松添加服务器,而无需手动配置服务器。
|
||||
|
||||
例如,要从 [MCP 服务器的精选列表中](https://code.visualstudio.com/mcp) 安装 MCP 服务器:
|
||||
|
||||
1. 打开“扩展”视图,然后在搜索栏中输入。 `@mcp`
|
||||
2. 选择浏览 **MCP 服务器以** 在浏览器中打开 MCP 服务器列表。 或者,从命令面板运行 **MCP:浏览服务器** 命令。
|
||||
3. 选择“在任何 MCP 服务器上 **安装”** ,这将打开 VS Code 并显示服务器详细信息页。
|
||||
4. 在服务器详细信息页上选择 **“安装”** ,将 MCP 服务器添加到 VS Code 实例。
|
||||
MCP 服务器安装在您的用户配置中,可以在任何工作区中使用。
|
||||
将 MCP 服务器添加到工作区
|
||||
|
||||
要为特定工作区配置 MCP 服务器,您可以在工作区文件夹中创建一个文件。然后,项目团队成员可以使用相同的服务器配置。`.vscode/mcp.json`
|
||||
|
||||
重要
|
||||
|
||||
确保避免使用输入变量或环境文件对敏感信息(如 API 密钥和其他凭据)进行硬编码。
|
||||
|
||||
要将 MCP 服务器添加到工作区,请执行以下作:
|
||||
|
||||
1. 在工作区中创建一个文件。`.vscode/mcp.json`
|
||||
2. 选择“ **添加服务器** ”按钮,为新服务器添加模板。VS Code 为 MCP 服务器配置文件提供 IntelliSense。
|
||||
以下示例演示如何配置 GitHub 远程 MCP 服务器。详细了解 [VS Code 中的 MCP 配置格式](https://code.visualstudio.com/docs/copilot/customization/#_configuration-format) 。
|
||||
JSON
|
||||
```json
|
||||
{
|
||||
"servers": {
|
||||
"github-mcp": {
|
||||
"type": "http",
|
||||
"url": "https://api.githubcopilot.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
3. 或者,从命令面板中运行 **MCP:添加服务器** 命令,选择要添加的 MCP 服务器类型并提供服务器信息。接下来,选择 **“工作区设置** ”以在工作区中创建文件(如果该文件尚不存在)。`.vscode/mcp.json`
|
||||
将 MCP 服务器添加到您的用户配置中
|
||||
|
||||
要为所有工作区配置 MCP 服务器,您可以将服务器配置添加到用户配置中。这允许您在多个项目中重复使用相同的服务器配置。
|
||||
|
||||
要将 MCP 添加到您的用户配置中,请运行 **MCP:打开用户配置** 命令,这将在您的用户配置文件中打开该文件。如果该文件不存在,VS Code 会为您创建该文件。 `mcp.json`
|
||||
|
||||
或者,使用命令面板中的 **MCP:添加服务器** 命令,提供服务器信息,然后选择 **全局** 将服务器配置添加到配置文件中。
|
||||
|
||||
当您使用多个 VS Code [配置文件](https://code.visualstudio.com/docs/configure/profiles) 时,这允许您根据活动配置文件在不同的 MCP 服务器配置之间切换。例如, [Playwright MCP 服务器](https://github.com/microsoft/playwright-mcp) 可以在 Web 开发配置文件中配置,但不能在 Python 开发配置文件中配置。
|
||||
|
||||
MCP 服务器在配置的位置执行。如果您连接到 [远程](https://code.visualstudio.com/docs/remote/remote-overview) 计算机并希望服务器在远程计算机上运行,则应在远程设置( **MCP:打开远程用户配置** )或工作区的设置中定义它。在用户设置中定义的 MCP 服务器始终在本地执行。
|
||||
|
||||
将 MCP 服务器添加到开发容器
|
||||
|
||||
可以通过该文件在开发容器中配置 MCP 服务器。这允许您将 MCP 服务器配置作为容器化开发环境的一部分。 `devcontainer.json`
|
||||
|
||||
要在开发容器中配置 MCP 服务器,请将服务器配置添加到以下部分: `customizations.vscode.mcp`
|
||||
|
||||
JSON
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
"image": "mcr.microsoft.com/devcontainers/typescript-node:latest",
|
||||
|
||||
"customizations": {
|
||||
|
||||
"vscode": {
|
||||
|
||||
"mcp": {
|
||||
|
||||
"servers": {
|
||||
|
||||
"playwright": {
|
||||
|
||||
"command": "npx",
|
||||
|
||||
"args": ["-y", "@microsoft/mcp-server-playwright"]
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
创建开发容器后,VS Code 会自动将 MCP 服务器配置写入远程文件,使其在容器化开发环境中可用。 `mcp.json`
|
||||
|
||||
自动发现 MCP 服务器
|
||||
|
||||
VS Code 可以自动检测并重用您在其他工具(例如 Claude Desktop)中定义的 MCP 服务器。
|
||||
|
||||
使用 [chat.mcp.discovery.enabled](https://code.visualstudio.com/docs/copilot/customization/chat.mcp.discovery.enabled) 设置。
|
||||
|
||||
当 VS Code 首次启动 MCP 服务器时,它会发现服务器的功能和工具。然后,您可以在 [代理模式下使用这些工具](https://code.visualstudio.com/docs/copilot/customization/#_use-mcp-tools-in-agent-mode) 。VS Code 缓存 MCP 服务器的工具列表。要清除缓存的工具,请使用命令面板中的 **MCP:重置缓存工具** 命令。
|
||||
|
||||
## 查看已安装的 MCP 服务器
|
||||
|
||||
要查看和管理已配置的 MCP 服务器列表,请执行以下作:
|
||||
|
||||
- 从命令面板运行 **MCP:显示已安装的服务器** 命令以打开 MCP 服务器视图。
|
||||
或者,直接打开扩展视图 ( ⇧⌘X ) 中的 **MCP 服务器 - 已安装** 部分。
|
||||

|
||||
- 从命令面板中运行 **MCP:列出服务器** 命令以查看已安装的 MCP 服务器的列表。
|
||||
|
||||
## 在代理模式下使用 MCP 工具
|
||||
|
||||
添加 MCP 服务器后,您可以在代理模式下使用它提供的工具。
|
||||
|
||||
要在代理模式下使用 MCP 工具:
|
||||
|
||||
1. 打开 **聊天** 视图 ( ⌃⌘I ),然后从下拉列表中选择 **代理** 模式。
|
||||

|
||||
2. 选择 **“工具”** 按钮以查看可用工具的列表。
|
||||
(可选)选择或取消选择要使用的工具。您可以通过在搜索框中键入内容来搜索工具。
|
||||

|
||||
重要
|
||||
一个聊天请求一次最多可以启用 128 个工具。如果选择的工具超过 128 个,请通过在工具选取器中取消选择某些工具来减少工具数量,或确保启用虚拟工具 ( [github.copilot.chat.virtualTools.threshold](https://code.visualstudio.com/docs/copilot/customization/github.copilot.chat.virtualTools.threshold)).
|
||||
3. 在聊天输入框中输入提示,并注意如何根据需要自动调用工具。例如,安装 [GitHub MCP 服务器](https://github.com/github/github-mcp-server) 并询问“列出我的 GitHub 问题”。
|
||||

|
||||
提示
|
||||
您还可以通过键入后跟工具名称来直接在提示中引用工具。您可以在所有聊天模式(询问、编辑和代理模式)中执行此作。 `#`
|
||||
4. 出现提示时,请在确认之前仔细查看工具调用详细信息。
|
||||
谨慎
|
||||
MCP 工具可能会在您的计算机上本地运行,并可以执行修改文件或数据的作。始终确保您了解该工具作的含义。
|
||||
使用 **“继续”** 按钮下拉选项自动确认当前会话、工作区或所有未来调用的特定工具。
|
||||

|
||||
5. (可选)在运行工具之前验证和编辑工具输入参数。
|
||||

|
||||
|
||||
## 使用 MCP 资源
|
||||
|
||||
除了工具之外,MCP 服务器还可以提供资源,您可以将其用作聊天提示中的上下文。例如,文件系统 MCP 服务器可能提供对文件和目录的访问,或者数据库 MCP 服务器可能提供对数据库表的访问。
|
||||
|
||||
要将资源从 MCP 服务器添加到聊天提示中:
|
||||
|
||||
1. 在聊天视图中,选择添加 **上下文** > **MCP 资源**
|
||||
2. 从列表中选择资源类型,并提供可选的资源输入参数。
|
||||

|
||||
|
||||
To view the list of available resources for an MCP server, use the **MCP: Browse Resources** command or use the **MCP: List Servers** > **Browse Resources** command to view resources for a specific server.
|
||||
|
||||
MCP tools can return resources as part of their response. You can view or save these resources to your workspace by selecting **Save** or by dragging and dropping the resource to the Explorer view.
|
||||
|
||||
## Use MCP prompts
|
||||
|
||||
MCP servers can provide preconfigured prompts for common tasks, so you don't have to type an elaborate chat prompt. You can directly invoke these prompts in the chat input box by typing followed by the prompt name, formatted as . Optionally, the prompt might ask you for extra input parameters.`/` `mcp.servername.promptname`
|
||||
|
||||

|
||||
|
||||
## Use MCP elicitations
|
||||
|
||||
MCP servers can request extra input from you through elicitations. When an MCP server needs more information to complete a task, it can prompt you for specific details, such as confirmations, configuration values, or other parameters required for the operation.
|
||||
|
||||
When an MCP server sends an elicitation request, VS Code presents you with a dialog or input field where you can provide the requested information. This allows MCP servers to gather necessary data dynamically without requiring all configuration to be set up in advance.
|
||||
|
||||
As you add more MCP servers, the list of tools can become long. This can make it tedious to manage individual tools, for example when you want to define a [reusable prompt file](https://code.visualstudio.com/docs/copilot/customization/prompt-files) or a [custom chat mode](https://code.visualstudio.com/docs/copilot/customization/custom-chat-modes).
|
||||
|
||||
To help you manage tools, you can group related tools into a tool set. A tool set is a collection of individual tools that you can refer to as a single entity. A tool set can contain built-in tools, MCP tools, or tools provided by extensions.
|
||||
|
||||
Learn more about how to [create and use tool sets in VS Code](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode#_define-tool-sets).
|
||||
|
||||
## Manage MCP servers
|
||||
|
||||
You can perform various actions on the installed MCP servers, such as starting or stopping a server, viewing the server logs, uninstalling the server, and more.
|
||||
|
||||
To perform these actions on an MCP server, use either of these options:
|
||||
|
||||
- Right-click on the server in the **MCP SERVERS - INSTALLED** section or select the gear icon
|
||||

|
||||
- Open the configuration file and access the actions inline in the editor (lenses) `mcp.json`
|
||||

|
||||
Use the **MCP: Open User Configuration** or **MCP: Open Workspace Folder Configuration** commands to access the MCP server configuration.
|
||||
- Run the **MCP: List Servers** command from the Command Palette and select a server
|
||||

|
||||
|
||||
### Automatically start MCP servers
|
||||
|
||||
When you add an MCP server or change its configuration, VS Code needs to (re)start the server to discover the tools it provides.
|
||||
|
||||
You can configure VS Code to automatically restart the MCP server when configuration changes are detected by using the [chat.mcp.autostart](https://code.visualstudio.com/docs/copilot/customization/chat.mcp.autostart) setting (Experimental).
|
||||
|
||||
Alternatively, manually restart the MCP server from the Chat view, or by selecting the restart action from the [MCP server list](https://code.visualstudio.com/docs/copilot/customization/#_manage-mcp-servers).
|
||||
|
||||

|
||||
|
||||
### Command-line configuration
|
||||
|
||||
You can also use the VS Code command-line interface to add an MCP server to your user profile or to a workspace.
|
||||
|
||||
To add an MCP server to your user profile, use the command line option, and provide the JSON server configuration in the form .`--add-mcp` `{\"name\":\"server-name\",\"command\":...}`
|
||||
|
||||
Bash
|
||||
|
||||
```bash
|
||||
code --add-mcp "{\"name\":\"my-server\",\"command\": \"uvx\",\"args\": [\"mcp-server-fetch\"]}"
|
||||
```
|
||||
|
||||
### URL handler
|
||||
|
||||
VS Code also includes a URL handler that you can use to install an MCP server. To form the URL, construct an object in the same format as you would provide to , and then create the link by using the following logic:`obj` `--add-mcp`
|
||||
|
||||
TypeScript
|
||||
|
||||
```typescript
|
||||
// For Insiders, use \`vscode-insiders\` instead of \`code\`
|
||||
|
||||
const link = \`vscode:mcp/install?${encodeURIComponent(JSON.stringify(obj))}\`;
|
||||
```
|
||||
|
||||
This link can be used in a browser, or opened on the command line, for example via on Linux.`xdg-open $LINK`
|
||||
|
||||
## Find MCP servers
|
||||
|
||||
MCP is still a relatively new standard, and the ecosystem is rapidly evolving. As more developers adopt MCP, you can expect to see an increasing number of servers and tools available for integration with your projects.
|
||||
|
||||
The [curated list of MCP servers](https://code.visualstudio.com/mcp) on the VS Code website is a great starting point. Choose from different categories and directly install MCP servers in VS Code.
|
||||
|
||||
MCP's [official server repository](https://github.com/modelcontextprotocol/servers) provides official, and community-contributed servers that showcase MCP's versatility. You can explore servers for various functionalities, such as file system operations, database interactions, and web services.
|
||||
|
||||
VS Code extensions can also contribute MCP servers and configure them as part of the extension's installation process. Check the [Visual Studio Marketplace](https://marketplace.visualstudio.com/VSCode) for extensions that provide MCP server support.
|
||||
|
||||
## MCP server trust
|
||||
|
||||
MCP servers can run arbitrary code on your machine. Only add servers from trusted sources, and review the publisher and server configuration before starting it. Read the [Security documentation](https://code.visualstudio.com/docs/copilot/security) for using AI in VS Code to understand the implications.
|
||||
|
||||
When you add an MCP server to your workspace or change its configuration, you need to confirm that you trust the server and its capabilities before starting it. VS Code shows a dialog to confirm that you trust the server when you start a server for the first time. Select the link to MCP server in the dialog to review the MCP server configuration in a separate window.
|
||||
|
||||

|
||||
|
||||
If you don't trust the server, it is not started, and chat requests continue without using the tools provided by the server.
|
||||
|
||||
You can reset trust for your MCP servers by running the **MCP: Reset Trust** command from the Command Palette.
|
||||
|
||||
Note
|
||||
|
||||
If you start the MCP server directly from the file, you are not prompted to trust the server configuration.`mcp.json`
|
||||
|
||||
## Synchronize MCP servers across devices
|
||||
|
||||
With [Settings Sync](https://code.visualstudio.com/docs/configure/settings-sync) enabled, you can synchronize settings and configurations across devices, including MCP server configurations. This allows you to maintain a consistent development environment and access the same MCP servers on all your devices.
|
||||
|
||||
To enable MCP server synchronization with Settings Sync, run the **Settings Sync: Configure** command from the Command Palette, and ensure that **MCP Servers** is included in the list of synchronized configurations.
|
||||
|
||||
## Configuration format
|
||||
|
||||
MCP servers are configured using a JSON file () that defines two main sections: server definitions and optional input variables for sensitive data.`mcp.json`
|
||||
|
||||
MCP servers can connect using different transport methods. Choose the appropriate configuration based on how your server communicates.
|
||||
|
||||
### Configuration structure
|
||||
|
||||
The configuration file has two main sections:
|
||||
|
||||
- **`"servers": {}`** - Contains the list of MCP servers and their configurations
|
||||
- **`"inputs": []`** - Optional placeholders for sensitive information like API keys
|
||||
|
||||
You can use [predefined variables](https://code.visualstudio.com/docs/reference/variables-reference) in the server configuration, for example to refer to the workspace folder ().`${workspaceFolder}`
|
||||
|
||||
### Standard I/O (stdio) servers
|
||||
|
||||
Use this configuration for servers that communicate through standard input and output streams. This is the most common type for locally-run MCP servers.
|
||||
|
||||
| Field | Required | Description | Examples |
|
||||
| --- | --- | --- | --- |
|
||||
| `type` | Yes | Server connection type | `"stdio"` |
|
||||
| `command` | Yes | Command to start the server executable. Must be available on your system path or contain its full path. | `"npx"`, , , `"node"` `"python"` `"docker"` |
|
||||
| `args` | No | Array of arguments passed to the command | `["server.py", "--port", "3000"]` |
|
||||
| `env` | No | Environment variables for the server | `{"API_KEY": "${input:api-key}"}` |
|
||||
| `envFile` | No | Path to an environment file to load more variables | `"${workspaceFolder}/.env"` |
|
||||
|
||||
Note
|
||||
|
||||
When using Docker with stdio servers, don't use the detach option (). The server must run in the foreground to communicate with VS Code.`-d`
|
||||
|
||||
Example local server configuration
|
||||
|
||||
This example shows the minimal configuration for a basic, local MCP server using :`npx`
|
||||
|
||||
JSON
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
"servers": {
|
||||
|
||||
"memory": {
|
||||
|
||||
"command": "npx",
|
||||
|
||||
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### HTTP and Server-Sent Events (SSE) servers
|
||||
|
||||
Use this configuration for servers that communicate over HTTP. VS Code first tries the HTTP Stream transport and falls back to SSE if HTTP is not supported.
|
||||
|
||||
| Field | Required | Description | Examples |
|
||||
| --- | --- | --- | --- |
|
||||
| `type` | Yes | Server connection type | `"http"`, `"sse"` |
|
||||
| `url` | Yes | URL of the server | `"http://localhost:3000"`, `"https://api.example.com/mcp"` |
|
||||
| `headers` | No | HTTP headers for authentication or configuration | `{"Authorization": "Bearer ${input:api-token}"}` |
|
||||
|
||||
Example remote server configuration
|
||||
|
||||
This example shows the minimal configuration for a remote MCP server without authentication:
|
||||
|
||||
JSON
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
"servers": {
|
||||
|
||||
"context7": {
|
||||
|
||||
"type": "http",
|
||||
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### Input variables for sensitive data
|
||||
|
||||
Input variables let you define placeholders for configuration values, avoiding the need to hardcode sensitive information like API keys or passwords directly in the server configuration.
|
||||
|
||||
When you reference an input variable using , VS Code prompts you for the value when the server starts for the first time. The value is then securely stored for subsequent use. Learn more about [input variables](https://code.visualstudio.com/docs/reference/variables-reference#_input-variables) in VS Code.`${input:variable-id}`
|
||||
|
||||
**Input variable properties:**
|
||||
|
||||
| Field | Required | Description | Example |
|
||||
| --- | --- | --- | --- |
|
||||
| `type` | Yes | Type of input prompt | `"promptString"` |
|
||||
| `id` | Yes | Unique identifier to reference in server config | `"api-key"`, `"database-url"` |
|
||||
| `description` | Yes | User-friendly prompt text | `"GitHub Personal Access Token"` |
|
||||
| `password` | No | Hide typed input (default: false) | `true` for API keys and passwords |
|
||||
|
||||
Example server configuration with input variables
|
||||
|
||||
This example configures a local server that requires an API key:
|
||||
|
||||
JSON
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
"inputs": [
|
||||
|
||||
{
|
||||
|
||||
"type": "promptString",
|
||||
|
||||
"id": "perplexity-key",
|
||||
|
||||
"description": "Perplexity API Key",
|
||||
|
||||
"password": true
|
||||
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
"servers": {
|
||||
|
||||
"perplexity": {
|
||||
|
||||
"type": "stdio",
|
||||
|
||||
"command": "npx",
|
||||
|
||||
"args": ["-y", "server-perplexity-ask"],
|
||||
|
||||
"env": {
|
||||
|
||||
"PERPLEXITY_API_KEY": "${input:perplexity-key}"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### Server naming conventions
|
||||
|
||||
When defining MCP servers, follow these naming conventions for the server name:
|
||||
|
||||
- Use camelCase for the server name, such as "uiTesting" or "githubIntegration"
|
||||
- Avoid using whitespace or special characters
|
||||
- Use a unique name for each server to avoid conflicts
|
||||
- Use a descriptive name that reflects the server's functionality or brand, such as "github" or "database"
|
||||
|
||||
## Troubleshoot and debug MCP servers
|
||||
|
||||
### MCP output log
|
||||
|
||||
When VS Code encounters an issue with an MCP server, it shows an error indicator in the Chat view.
|
||||
|
||||

|
||||
|
||||
Select the error notification in the Chat view, and then select the **Show Output** option to view the server logs. Alternatively, run **MCP: List Servers** from the Command Palette, select the server, and then choose **Show Output**.
|
||||
|
||||

|
||||
|
||||
### Debug an MCP server
|
||||
|
||||
You can enable *development mode* for MCP servers by adding a key to the MCP server configuration. This is an object with two properties:`dev`
|
||||
|
||||
- `watch`: A file glob pattern to watch for files change that will restart the MCP server.
|
||||
- `debug`: Enables you to set up a debugger with the MCP server.
|
||||
|
||||
JSON
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
"servers": {
|
||||
|
||||
"gistpad": {
|
||||
|
||||
"command": "node",
|
||||
|
||||
"args": ["build/index.js"],
|
||||
|
||||
"dev": {
|
||||
|
||||
"watch": "build/**/*.js",
|
||||
|
||||
"debug": { "type": "node" }
|
||||
|
||||
},
|
||||
```
|
||||
|
||||
Note
|
||||
|
||||
We currently only support debugging Node.js and Python servers launched with and respectively.`node` `python`
|
||||
|
||||
## Frequently asked questions
|
||||
|
||||
### Can I control which MCP tools are used?
|
||||
|
||||
- Select the **Tools** button in the Chat view when in agent mode, and toggle specific tools on/off as needed.
|
||||
- Add specific tools to your prompt by using the **Add Context** button or by typing .`#`
|
||||
- For more advanced control, you can use to fine-tune tool usage.`.github/copilot-instructions.md`
|
||||
|
||||
### The MCP server is not starting when using Docker
|
||||
|
||||
Verify that the command arguments are correct and that the container is not running in detached mode ( option). You can also check the MCP server output for any error messages (see [Troubleshooting](https://code.visualstudio.com/docs/copilot/customization/#_troubleshoot-and-debug-mcp-servers)).`-d`
|
||||
|
||||
A chat request can have a maximum of 128 tools enabled at a time due to model constraints. If you have more than 128 tools selected, reduce the number of tools by deselecting some tools or whole servers in the tools picker in the Chat view, or ensure that virtual tools are enabled ([github.copilot.chat.virtualTools.threshold](https://code.visualstudio.com/docs/copilot/customization/github.copilot.chat.virtualTools.threshold)).
|
||||
|
||||

|
||||
|
||||
- [VS Code curated list of MCP servers](https://code.visualstudio.com/mcp)
|
||||
- [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
|
||||
- [Model Context Protocol Server repository](https://github.com/modelcontextprotocol/servers)
|
||||
- [Use agent mode in Visual Studio Code](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode)
|
||||
@@ -0,0 +1,519 @@
|
||||
---
|
||||
created: 2025-09-11T21:45
|
||||
updated: 2025-09-11T21:50
|
||||
---
|
||||
Model Context Protocol (MCP) is an open standard that lets AI models use external tools and services through a unified interface. In VS Code, MCP servers add tools for tasks like file operations, databases, or interacting with external APIs.
|
||||
|
||||
This article guides you through setting up MCP servers and using tools with agent mode in Visual Studio Code.
|
||||
|
||||
How does MCP work?
|
||||
|
||||
MCP follows a client-server architecture:
|
||||
|
||||
* **MCP clients** (like VS Code) connect to MCP servers and request actions on behalf of the AI model
|
||||
* **MCP servers** provide one or more tools that expose specific functionalities through a well-defined interface
|
||||
* **Model Context Protocol** defines the message format for communication between clients and servers, including tool discovery, invocation, and response handling
|
||||
|
||||
For example, a file system MCP server might provide tools for reading, writing, or searching files and directories. GitHub's MCP server offers tools to list repositories, create pull requests, or manage issues. MCP servers can run locally on your machine or be hosted remotely, and VS Code supports both configurations.
|
||||
|
||||
By standardizing this interaction, MCP eliminates the need for custom integrations between each AI model and each tool. This allows you to extend your AI assistant's capabilities by simply adding new MCP servers to your workspace. Learn more about the [Model Context Protocol specification](https://modelcontextprotocol.io/).
|
||||
|
||||
Supported MCP capabilities in VS Code
|
||||
|
||||
VS Code supports the following MCP capabilities:
|
||||
|
||||
* MCP Server transport: local standard input/output (`stdio`), HTTP Stream (`http`), and server-sent events (`sse`, legacy support).
|
||||
* [MCP features](https://modelcontextprotocol.io/specification/2025-03-26#features): tools, prompts, resources, elicitation, sampling, and authentication.
|
||||
* VS Code provides servers with the current workspace folders using `roots` ([spec](https://modelcontextprotocol.io/docs/concepts/roots)).
|
||||
|
||||
Note
|
||||
|
||||
MCP support in VS Code is generally available starting from VS Code 1.102.
|
||||
|
||||
[Prerequisites](#_prerequisites)
|
||||
--------------------------------
|
||||
|
||||
* Install the latest version of [Visual Studio Code](https://code.visualstudio.com/download)
|
||||
* Access to [Copilot](https://code.visualstudio.com/docs/copilot/setup)
|
||||
|
||||
[Enable MCP support in VS Code](#_enable-mcp-support-in-vs-code)
|
||||
----------------------------------------------------------------
|
||||
|
||||
You can enable or disable MCP support in VS Code with the [chat.mcp.enabled](vscode://settings/chat.mcp.enabled) setting. By default, MCP support is enabled.
|
||||
|
||||
### [Centrally manage MCP support](#_centrally-manage-mcp-support)
|
||||
|
||||
You have two options to centrally manage MCP support in your organization:
|
||||
|
||||
* **Device management**: Centrally enable or disable MCP support in your organization via group policies or configuration profiles. Learn more about [managing VS Code settings with device management](https://code.visualstudio.com/docs/setup/enterprise#_centrally-manage-vs-code-settings).
|
||||
|
||||
* **GitHub Copilot policy**: Control the availability of MCP servers in your organization with a GitHub Copilot policy. Learn more about [Managing policies and features for Copilot in your enterprise](https://docs.github.com/en/enterprise-cloud@latest/copilot/how-tos/administer/enterprises/managing-policies-and-features-for-copilot-in-your-enterprise) in the GitHub Copilot documentation.
|
||||
|
||||
|
||||
[Add an MCP server](#_add-an-mcp-server)
|
||||
----------------------------------------
|
||||
|
||||
Caution
|
||||
|
||||
MCP servers can run arbitrary code on your machine. Only add servers from trusted sources, and review the publisher and server configuration before starting it. VS Code prompts you to confirm that you [trust the MCP server](#_mcp-server-trust) when you start an MCP server for the first time. Read the [Security documentation](https://code.visualstudio.com/docs/copilot/security) for using AI in VS Code to understand the implications.
|
||||
|
||||
You have multiple options to add an MCP server in VS Code:
|
||||
|
||||
Install an MCP server directly from the web
|
||||
|
||||
Websites can provide a link to directly install an MCP server in VS Code, making it easy to add servers without manually configuring them.
|
||||
|
||||
For example, to install an MCP server from the [curated list of MCP servers](https://code.visualstudio.com/mcp):
|
||||
|
||||
1. Open the Extensions view and enter `@mcp` in the search bar.
|
||||
|
||||
2. Select **Browse MCP Servers** to open the list of MCP servers in your browser. Alternatively, run the **MCP: Browse Servers** command from the Command Palette.
|
||||
|
||||
3. Select **Install** on any MCP server, which opens VS Code and shows the server details page.
|
||||
|
||||
4. Select **Install** on the server details page to add the MCP server to your VS Code instance.
|
||||
|
||||
The MCP server is installed in your user configuration and can be used in any workspace.
|
||||
|
||||
|
||||
Add an MCP server to your workspace
|
||||
|
||||
To configure an MCP server for a specific workspace, you can create a `.vscode/mcp.json` file in your workspace folder. Project team members can then use the same server configuration.
|
||||
|
||||
Important
|
||||
|
||||
Make sure to avoid hardcoding sensitive information like API keys and other credentials by using input variables or environment files.
|
||||
|
||||
To add an MCP server to your workspace:
|
||||
|
||||
1. Create a `.vscode/mcp.json` file in your workspace.
|
||||
|
||||
2. Select the **Add Server** button to add a template for a new server. VS Code provides IntelliSense for the MCP server configuration file.
|
||||
|
||||
The following example shows how to configure the GitHub remote MCP server. Learn more about the [MCP configuration format in VS Code](#_configuration-format).
|
||||
|
||||
```
|
||||
{
|
||||
"servers": {
|
||||
"github-mcp": {
|
||||
"type": "http",
|
||||
"url": "https://api.githubcopilot.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
3. Alternatively, run the **MCP: Add Server** command from the Command Palette, choose the type of MCP server to add and provide the server information. Next, select **Workspace Settings** to create the `.vscode/mcp.json` file in your workspace if it doesn't already exist.
|
||||
|
||||
|
||||
Add an MCP server to your user configuration
|
||||
|
||||
To configure an MCP server for all your workspaces, you can add the server configuration to your user configuration. This allows you to reuse the same server configuration across multiple projects.
|
||||
|
||||
To add an MCP to your user configuration, run the **MCP: Open User Configuration** command, which opens the `mcp.json` file in your user profile. If the file does not exist, VS Code creates it for you.
|
||||
|
||||
Alternatively, use the **MCP: Add Server** command from the Command Palette, provide the server information, and then select **Global** to add the server configuration to your profile.
|
||||
|
||||
When you use multiple VS Code [profiles](https://code.visualstudio.com/docs/configure/profiles), this allows you to switch between different MCP server configurations based on your active profile. For example, the [Playwright MCP server](https://github.com/microsoft/playwright-mcp) could be configured in a web development profile, but not in a Python development profile.
|
||||
|
||||
MCP servers are executed wherever they're configured. If you're connected to a [remote](https://code.visualstudio.com/docs/remote/remote-overview) and want a server to run on the remote machine, it should be defined in your remote settings (**MCP: Open Remote User Configuration**) or in the workspace's settings. MCP servers defined in your user settings are always executed locally.
|
||||
|
||||
Add an MCP server to a dev container
|
||||
|
||||
MCP servers can be configured in Dev Containers through the `devcontainer.json` file. This allows you to include MCP server configurations as part of your containerized development environment.
|
||||
|
||||
To configure MCP servers in a Dev Container, add the server configuration to the `customizations.vscode.mcp` section:
|
||||
|
||||
```
|
||||
{
|
||||
"image": "mcr.microsoft.com/devcontainers/typescript-node:latest",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"mcp": {
|
||||
"servers": {
|
||||
"playwright": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@microsoft/mcp-server-playwright"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
When the Dev Container is created, VS Code automatically writes the MCP server configurations to the remote `mcp.json` file, making them available in your containerized development environment.
|
||||
|
||||
Automatically discover MCP servers
|
||||
|
||||
VS Code can automatically detect and reuse MCP servers that you defined in other tools, such as Claude Desktop.
|
||||
|
||||
Enable autodiscovery with the [chat.mcp.discovery.enabled](vscode://settings/chat.mcp.discovery.enabled) setting.
|
||||
|
||||
When VS Code starts the MCP server for the first time, it discovers the server's capabilities and tools. You can then [use these tools in agent mode](#_use-mcp-tools-in-agent-mode). VS Code caches the list of tools for an MCP server. To clear the cached tools, use the **MCP: Reset Cached Tools** command in the Command Palette.
|
||||
|
||||
[View installed MCP servers](#_view-installed-mcp-servers)
|
||||
----------------------------------------------------------
|
||||
|
||||
To view and manage the list of configured MCP servers:
|
||||
|
||||
* Run the **MCP: Show Installed Servers** command from the Command Palette to open the MCP Servers view.
|
||||
|
||||
Alternatively, directly open the **MCP SERVERS - INSTALLED** section in the Extensions view (⇧⌘X).
|
||||
|
||||

|
||||
|
||||
* Run the **MCP: List Servers** command from the Command Palette to view the list of installed MCP servers.
|
||||
|
||||
|
||||
Once you have added an MCP server, you can use the tools it provides in agent mode.
|
||||
|
||||
To use MCP tools in agent mode:
|
||||
|
||||
1. Open the **Chat** view (⌃⌘I), and select **Agent** mode from the dropdown.
|
||||
|
||||

|
||||
|
||||
2. Select the **Tools** button to view the list of available tools.
|
||||
|
||||
Optionally, select or deselect the tools you want to use. You can search tools by typing in the search box.
|
||||
|
||||

|
||||
|
||||
Important
|
||||
|
||||
A chat request can have a maximum of 128 tools enabled at a time. If you have more than 128 tools selected, reduce the number of tools by deselecting some tools in the tools picker, or ensure that virtual tools are enabled ([github.copilot.chat.virtualTools.threshold](vscode://settings/github.copilot.chat.virtualTools.threshold)).
|
||||
|
||||
3. Enter a prompt in the chat input box and notice how tools are automatically invoked as needed. For example, install the [GitHub MCP server](https://github.com/github/github-mcp-server) and ask "List my GitHub issues".
|
||||
|
||||

|
||||
|
||||
Tip
|
||||
|
||||
You can also directly reference a tool in your prompt by typing `#` followed by the tool name. You can do this in all chat modes (ask, edit, and agent mode).
|
||||
|
||||
4. When prompted, carefully review the tool invocation details before confirming.
|
||||
|
||||
Caution
|
||||
|
||||
MCP tools might run locally on your machine and could perform actions that modify files or data. Always ensure you understand the implications of the tool's actions.
|
||||
|
||||
Use the **Continue** button dropdown options to automatically confirm the specific tool for the current session, workspace, or all future invocations.
|
||||
|
||||

|
||||
|
||||
5. Optionally, verify and edit the tool input parameters before running the tool.
|
||||
|
||||

|
||||
|
||||
|
||||
[Use MCP resources](#_use-mcp-resources)
|
||||
----------------------------------------
|
||||
|
||||
In addition to tools, MCP servers can also provide resources that you can use as context in your chat prompts. For example, a file system MCP server might provide access to files and directories, or a database MCP server might provide access to database tables.
|
||||
|
||||
To add a resource from an MCP server to your chat prompt:
|
||||
|
||||
1. In the Chat view, select **Add Context** > **MCP Resources**
|
||||
|
||||
2. Select a resource type from the list and provide optional resource input parameters.
|
||||
|
||||

|
||||
|
||||
|
||||
To view the list of available resources for an MCP server, use the **MCP: Browse Resources** command or use the **MCP: List Servers** > **Browse Resources** command to view resources for a specific server.
|
||||
|
||||
MCP tools can return resources as part of their response. You can view or save these resources to your workspace by selecting **Save** or by dragging and dropping the resource to the Explorer view.
|
||||
|
||||
[Use MCP prompts](#_use-mcp-prompts)
|
||||
------------------------------------
|
||||
|
||||
MCP servers can provide preconfigured prompts for common tasks, so you don't have to type an elaborate chat prompt. You can directly invoke these prompts in the chat input box by typing `/` followed by the prompt name, formatted as `mcp.servername.promptname`. Optionally, the prompt might ask you for extra input parameters.
|
||||
|
||||

|
||||
|
||||
[Use MCP elicitations](#_use-mcp-elicitations)
|
||||
----------------------------------------------
|
||||
|
||||
MCP servers can request extra input from you through elicitations. When an MCP server needs more information to complete a task, it can prompt you for specific details, such as confirmations, configuration values, or other parameters required for the operation.
|
||||
|
||||
When an MCP server sends an elicitation request, VS Code presents you with a dialog or input field where you can provide the requested information. This allows MCP servers to gather necessary data dynamically without requiring all configuration to be set up in advance.
|
||||
|
||||
As you add more MCP servers, the list of tools can become long. This can make it tedious to manage individual tools, for example when you want to define a [reusable prompt file](https://code.visualstudio.com/docs/copilot/customization/prompt-files) or a [custom chat mode](https://code.visualstudio.com/docs/copilot/customization/custom-chat-modes).
|
||||
|
||||
To help you manage tools, you can group related tools into a tool set. A tool set is a collection of individual tools that you can refer to as a single entity. A tool set can contain built-in tools, MCP tools, or tools provided by extensions.
|
||||
|
||||
Learn more about how to [create and use tool sets in VS Code](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode#_define-tool-sets).
|
||||
|
||||
[Manage MCP servers](#_manage-mcp-servers)
|
||||
------------------------------------------
|
||||
|
||||
You can perform various actions on the installed MCP servers, such as starting or stopping a server, viewing the server logs, uninstalling the server, and more.
|
||||
|
||||
To perform these actions on an MCP server, use either of these options:
|
||||
|
||||
* Right-click on the server in the **MCP SERVERS - INSTALLED** section or select the gear icon
|
||||
|
||||

|
||||
|
||||
* Open the `mcp.json` configuration file and access the actions inline in the editor (lenses)
|
||||
|
||||

|
||||
|
||||
Use the **MCP: Open User Configuration** or **MCP: Open Workspace Folder Configuration** commands to access the MCP server configuration.
|
||||
|
||||
* Run the **MCP: List Servers** command from the Command Palette and select a server
|
||||
|
||||

|
||||
|
||||
|
||||
### [Automatically start MCP servers](#_automatically-start-mcp-servers)
|
||||
|
||||
When you add an MCP server or change its configuration, VS Code needs to (re)start the server to discover the tools it provides.
|
||||
|
||||
You can configure VS Code to automatically restart the MCP server when configuration changes are detected by using the [chat.mcp.autostart](vscode://settings/chat.mcp.autostart) setting (Experimental).
|
||||
|
||||
Alternatively, manually restart the MCP server from the Chat view, or by selecting the restart action from the [MCP server list](#_manage-mcp-servers).
|
||||
|
||||

|
||||
|
||||
### [Command-line configuration](#_commandline-configuration)
|
||||
|
||||
You can also use the VS Code command-line interface to add an MCP server to your user profile or to a workspace.
|
||||
|
||||
To add an MCP server to your user profile, use the `--add-mcp` command line option, and provide the JSON server configuration in the form `{\"name\":\"server-name\",\"command\":...}`.
|
||||
|
||||
```
|
||||
code --add-mcp "{\"name\":\"my-server\",\"command\": \"uvx\",\"args\": [\"mcp-server-fetch\"]}"
|
||||
```
|
||||
|
||||
### [URL handler](#_url-handler)
|
||||
|
||||
VS Code also includes a URL handler that you can use to install an MCP server. To form the URL, construct an `obj` object in the same format as you would provide to `--add-mcp`, and then create the link by using the following logic:
|
||||
|
||||
```
|
||||
// For Insiders, use `vscode-insiders` instead of `code`
|
||||
const link = `vscode:mcp/install?${encodeURIComponent(JSON.stringify(obj))}`;
|
||||
```
|
||||
|
||||
This link can be used in a browser, or opened on the command line, for example via `xdg-open $LINK` on Linux.
|
||||
|
||||
[Find MCP servers](#_find-mcp-servers)
|
||||
--------------------------------------
|
||||
|
||||
MCP is still a relatively new standard, and the ecosystem is rapidly evolving. As more developers adopt MCP, you can expect to see an increasing number of servers and tools available for integration with your projects.
|
||||
|
||||
The [curated list of MCP servers](https://code.visualstudio.com/mcp) on the VS Code website is a great starting point. Choose from different categories and directly install MCP servers in VS Code.
|
||||
|
||||
MCP's [official server repository](https://github.com/modelcontextprotocol/servers) provides official, and community-contributed servers that showcase MCP's versatility. You can explore servers for various functionalities, such as file system operations, database interactions, and web services.
|
||||
|
||||
VS Code extensions can also contribute MCP servers and configure them as part of the extension's installation process. Check the [Visual Studio Marketplace](https://marketplace.visualstudio.com/VSCode) for extensions that provide MCP server support.
|
||||
|
||||
[MCP server trust](#_mcp-server-trust)
|
||||
--------------------------------------
|
||||
|
||||
MCP servers can run arbitrary code on your machine. Only add servers from trusted sources, and review the publisher and server configuration before starting it. Read the [Security documentation](https://code.visualstudio.com/docs/copilot/security) for using AI in VS Code to understand the implications.
|
||||
|
||||
When you add an MCP server to your workspace or change its configuration, you need to confirm that you trust the server and its capabilities before starting it. VS Code shows a dialog to confirm that you trust the server when you start a server for the first time. Select the link to MCP server in the dialog to review the MCP server configuration in a separate window.
|
||||
|
||||

|
||||
|
||||
If you don't trust the server, it is not started, and chat requests continue without using the tools provided by the server.
|
||||
|
||||
You can reset trust for your MCP servers by running the **MCP: Reset Trust** command from the Command Palette.
|
||||
|
||||
Note
|
||||
|
||||
If you start the MCP server directly from the `mcp.json` file, you are not prompted to trust the server configuration.
|
||||
|
||||
[Synchronize MCP servers across devices](#_synchronize-mcp-servers-across-devices)
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
With [Settings Sync](https://code.visualstudio.com/docs/configure/settings-sync) enabled, you can synchronize settings and configurations across devices, including MCP server configurations. This allows you to maintain a consistent development environment and access the same MCP servers on all your devices.
|
||||
|
||||
To enable MCP server synchronization with Settings Sync, run the **Settings Sync: Configure** command from the Command Palette, and ensure that **MCP Servers** is included in the list of synchronized configurations.
|
||||
|
||||
[Configuration format](#_configuration-format)
|
||||
----------------------------------------------
|
||||
|
||||
MCP servers are configured using a JSON file (`mcp.json`) that defines two main sections: server definitions and optional input variables for sensitive data.
|
||||
|
||||
MCP servers can connect using different transport methods. Choose the appropriate configuration based on how your server communicates.
|
||||
|
||||
### [Configuration structure](#_configuration-structure)
|
||||
|
||||
The configuration file has two main sections:
|
||||
|
||||
* **`"servers": {}`** - Contains the list of MCP servers and their configurations
|
||||
* **`"inputs": []`** - Optional placeholders for sensitive information like API keys
|
||||
|
||||
You can use [predefined variables](https://code.visualstudio.com/docs/reference/variables-reference) in the server configuration, for example to refer to the workspace folder (`${workspaceFolder}`).
|
||||
|
||||
### [Standard I/O (stdio) servers](#_standard-io-stdio-servers)
|
||||
|
||||
Use this configuration for servers that communicate through standard input and output streams. This is the most common type for locally-run MCP servers.
|
||||
|
||||
| Field | Required | Description | Examples |
|
||||
| --- | --- | --- | --- |
|
||||
| `type` | Yes | Server connection type | `"stdio"` |
|
||||
| `command` | Yes | Command to start the server executable. Must be available on your system path or contain its full path. | `"npx"`, `"node"`, `"python"`, `"docker"` |
|
||||
| `args` | No | Array of arguments passed to the command | `["server.py", "--port", "3000"]` |
|
||||
| `env` | No | Environment variables for the server | `{"API_KEY": "${input:api-key}"}` |
|
||||
| `envFile` | No | Path to an environment file to load more variables | `"${workspaceFolder}/.env"` |
|
||||
|
||||
Note
|
||||
|
||||
When using Docker with stdio servers, don't use the detach option (`-d`). The server must run in the foreground to communicate with VS Code.
|
||||
|
||||
Example local server configuration
|
||||
|
||||
This example shows the minimal configuration for a basic, local MCP server using `npx`:
|
||||
|
||||
```
|
||||
{
|
||||
"servers": {
|
||||
"memory": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### [HTTP and Server-Sent Events (SSE) servers](#_http-and-serversent-events-sse-servers)
|
||||
|
||||
Use this configuration for servers that communicate over HTTP. VS Code first tries the HTTP Stream transport and falls back to SSE if HTTP is not supported.
|
||||
|
||||
| Field | Required | Description | Examples |
|
||||
| --- | --- | --- | --- |
|
||||
| `type` | Yes | Server connection type | `"http"`, `"sse"` |
|
||||
| `url` | Yes | URL of the server | `"http://localhost:3000"`, `"https://api.example.com/mcp"` |
|
||||
| `headers` | No | HTTP headers for authentication or configuration | `{"Authorization": "Bearer ${input:api-token}"}` |
|
||||
|
||||
Example remote server configuration
|
||||
|
||||
This example shows the minimal configuration for a remote MCP server without authentication:
|
||||
|
||||
```
|
||||
{
|
||||
"servers": {
|
||||
"context7": {
|
||||
"type": "http",
|
||||
"url": "https://mcp.context7.com/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### [Input variables for sensitive data](#_input-variables-for-sensitive-data)
|
||||
|
||||
Input variables let you define placeholders for configuration values, avoiding the need to hardcode sensitive information like API keys or passwords directly in the server configuration.
|
||||
|
||||
When you reference an input variable using `${input:variable-id}`, VS Code prompts you for the value when the server starts for the first time. The value is then securely stored for subsequent use. Learn more about [input variables](https://code.visualstudio.com/docs/reference/variables-reference#_input-variables) in VS Code.
|
||||
|
||||
**Input variable properties:**
|
||||
|
||||
| Field | Required | Description | Example |
|
||||
| --- | --- | --- | --- |
|
||||
| `type` | Yes | Type of input prompt | `"promptString"` |
|
||||
| `id` | Yes | Unique identifier to reference in server config | `"api-key"`, `"database-url"` |
|
||||
| `description` | Yes | User-friendly prompt text | `"GitHub Personal Access Token"` |
|
||||
| `password` | No | Hide typed input (default: false) | `true` for API keys and passwords |
|
||||
|
||||
Example server configuration with input variables
|
||||
|
||||
This example configures a local server that requires an API key:
|
||||
|
||||
```
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"type": "promptString",
|
||||
"id": "perplexity-key",
|
||||
"description": "Perplexity API Key",
|
||||
"password": true
|
||||
}
|
||||
],
|
||||
"servers": {
|
||||
"perplexity": {
|
||||
"type": "stdio",
|
||||
"command": "npx",
|
||||
"args": ["-y", "server-perplexity-ask"],
|
||||
"env": {
|
||||
"PERPLEXITY_API_KEY": "${input:perplexity-key}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### [Server naming conventions](#_server-naming-conventions)
|
||||
|
||||
When defining MCP servers, follow these naming conventions for the server name:
|
||||
|
||||
* Use camelCase for the server name, such as "uiTesting" or "githubIntegration"
|
||||
* Avoid using whitespace or special characters
|
||||
* Use a unique name for each server to avoid conflicts
|
||||
* Use a descriptive name that reflects the server's functionality or brand, such as "github" or "database"
|
||||
|
||||
[Troubleshoot and debug MCP servers](#_troubleshoot-and-debug-mcp-servers)
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
### [MCP output log](#_mcp-output-log)
|
||||
|
||||
When VS Code encounters an issue with an MCP server, it shows an error indicator in the Chat view.
|
||||
|
||||

|
||||
|
||||
Select the error notification in the Chat view, and then select the **Show Output** option to view the server logs. Alternatively, run **MCP: List Servers** from the Command Palette, select the server, and then choose **Show Output**.
|
||||
|
||||

|
||||
|
||||
### [Debug an MCP server](#_debug-an-mcp-server)
|
||||
|
||||
You can enable _development mode_ for MCP servers by adding a `dev` key to the MCP server configuration. This is an object with two properties:
|
||||
|
||||
* `watch`: A file glob pattern to watch for files change that will restart the MCP server.
|
||||
* `debug`: Enables you to set up a debugger with the MCP server.
|
||||
|
||||
```
|
||||
{
|
||||
"servers": {
|
||||
"gistpad": {
|
||||
"command": "node",
|
||||
"args": ["build/index.js"],
|
||||
"dev": {
|
||||
"watch": "build/**/*.js",
|
||||
"debug": { "type": "node" }
|
||||
},
|
||||
```
|
||||
|
||||
Note
|
||||
|
||||
We currently only support debugging Node.js and Python servers launched with `node` and `python` respectively.
|
||||
|
||||
[Frequently asked questions](#_frequently-asked-questions)
|
||||
----------------------------------------------------------
|
||||
|
||||
### [Can I control which MCP tools are used?](#_can-i-control-which-mcp-tools-are-used)
|
||||
|
||||
* Select the **Tools** button in the Chat view when in agent mode, and toggle specific tools on/off as needed.
|
||||
* Add specific tools to your prompt by using the **Add Context** button or by typing `#`.
|
||||
* For more advanced control, you can use `.github/copilot-instructions.md` to fine-tune tool usage.
|
||||
|
||||
### [The MCP server is not starting when using Docker](#_the-mcp-server-is-not-starting-when-using-docker)
|
||||
|
||||
Verify that the command arguments are correct and that the container is not running in detached mode (`-d` option). You can also check the MCP server output for any error messages (see [Troubleshooting](#_troubleshoot-and-debug-mcp-servers)).
|
||||
|
||||
### [I'm getting an error that says "Cannot have more than 128 tools per request."](#_im-getting-an-error-that-says-cannot-have-more-than-128-tools-per-request)
|
||||
|
||||
A chat request can have a maximum of 128 tools enabled at a time due to model constraints. If you have more than 128 tools selected, reduce the number of tools by deselecting some tools or whole servers in the tools picker in the Chat view, or ensure that virtual tools are enabled ([github.copilot.chat.virtualTools.threshold](vscode://settings/github.copilot.chat.virtualTools.threshold)).
|
||||
|
||||

|
||||
|
||||
* [VS Code curated list of MCP servers](https://code.visualstudio.com/mcp)
|
||||
* [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
|
||||
* [Model Context Protocol Server repository](https://github.com/modelcontextprotocol/servers)
|
||||
* [Use agent mode in Visual Studio Code](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode)
|
||||
|
||||
08/07/2025
|
||||
@@ -0,0 +1,41 @@
|
||||
最新推荐文章于 2025-06-19 15:20:11 发布
|
||||
|
||||
转载 于 2020-12-14 15:50:58 发布 · 1.6w 阅读
|
||||
|
||||
· 
|
||||
4
|
||||
|
||||
· 
|
||||
10 ·
|
||||
|
||||
schtasks 命令 ,用途广泛,使用高效,不仅能为本地 计算 机添加任务计划,而且还能通过某台计算机的操作,运行另外一台计算机的程序。可定时、定日、定月、定周、定年等让本机或局域网电脑启动软件。
|
||||
|
||||
查看计划任务
|
||||
|
||||
```
|
||||
schtasks
|
||||
schtasks /query
|
||||
```
|
||||
|
||||
视图模式详细 信息
|
||||
|
||||
```
|
||||
schtasks /query /v
|
||||
schtasks /query /v /fo list
|
||||
```
|
||||
|
||||
逗号分隔列表
|
||||
|
||||
```
|
||||
schtasks /query /v /fo csv
|
||||
```
|
||||
|
||||
逗号分隔列表,不显示标题
|
||||
|
||||
```
|
||||
schtasks /query /v /fo csv /nh
|
||||
schtasks /query /v /fo /nh
|
||||
schtasks /query /v /fo csv /nh
|
||||
C:\\>schtasks /query /s 169.254.100.225 /u administrator /p windows
|
||||
INFO: There are no scheduled tasks present in the system.
|
||||
```
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
created: 2025-08-30T11:45
|
||||
updated: 2025-09-22T13:27
|
||||
---
|
||||
为什么不直接使用Windows版[iCloud](https://zhida.zhihu.com/search?content_id=218759271&content_type=Article&match_order=1&q=iCloud&zhida_source=entity)进行手机和PC跟iPhone的数据同步? 因为iCloud在pc上很容易文件冲突,自动生成了很多后缀为(1)(2)(3)之类重复文件,要么就是电脑编辑的时候提示文件被外部修改,部分数据丢失,本文就为解决此类问题。
|
||||
|
||||
使用FreeFileSync中转同步方案原理图
|
||||
|
||||

|
||||
|
||||
原理说明:将Windows本地文件夹,先同步到本地的iCloud同步文件夹,避免直接编辑iCloud文件引起冲突,然后利用iCloud同步到多个苹果设备。
|
||||
|
||||
以我常用的[Obsidian](https://zhida.zhihu.com/search?content_id=218759271&content_type=Article&match_order=1&q=Obsidian&zhida_source=entity)或[Logseq](https://zhida.zhihu.com/search?content_id=218759271&content_type=Article&match_order=1&q=Logseq&zhida_source=entity)笔记为例实现手机和pc客户端数据同步。 1、首先,我在手机上下载安装Logseq后,点击创建新的文件库,输入名称例如叫mynote,然后开启iCloud cync,创建成功后即可在手机的iCloud文件-Logseq里面找到mynote文件夹。
|
||||
|
||||
2、pc安装iCloud,登录iCloud,购买iCloud云盘,其他不需要的可以不勾选。安装后即可在看到生成的iCloud本地同步文件夹。
|
||||
|
||||

|
||||
|
||||
打开Logseq文件夹,找到里面的mynote就是我们需要同步的文件夹。
|
||||
|
||||
3、下载安装freefilesync免费同步软件[https://freefilesync.org/](https://link.zhihu.com/?target=https%3A//freefilesync.org/) 双击那个绿色的图标登录
|
||||
|
||||

|
||||
|
||||
新建一个同步方案 左侧选择一个本地文件夹比如名字叫biji 右侧选择iCloud创建好的软件同步文件夹,比如刚刚的mynote 点击上方的设置按钮,可以设置同步规则。
|
||||
|
||||

|
||||
|
||||
双向同步是,任意一侧修改,两侧都自动同步。 镜像同步是,以左侧为准,全部同步到右侧。 可以根据自己情况选择,因为我手机也需要编辑笔记所以我自己选择的是双向同步。
|
||||
|
||||
点击比较,会显示两侧的差异列表。 右键可以选择需要排除掉的一些文件夹不参与同步,比如系统配置文件夹。
|
||||
|
||||

|
||||
|
||||
设置好以后,点击双向同步即可手动同步完成。
|
||||
|
||||
3、设置自动同步。刚刚的配置设置好以后,另存为为批处理作业文件。 注意勾选关闭同步提醒,避免频繁弹窗。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
双击打开红色的另外一个软件realtimesync,打开选择刚刚创建的批处理作业文件。
|
||||
|
||||

|
||||
|
||||
点击开始,就在右下角自动运行同步了。
|
||||
|
||||
4、设置开机自启动realtimesync。打开上面的realtimesync,文件-另存为.ffs\_real文件。
|
||||
|
||||

|
||||
|
||||
再电脑全部文件里面,搜索启动,就找到启动文件夹了,打开启动文件夹,将这个.ffs\_real文件放进去,就可以开机自动启动了。
|
||||
|
||||
完毕。
|
||||
@@ -0,0 +1,54 @@
|
||||

|
||||
|
||||
近期搞到了 Synology Nas 來玩,但又苦於硬碟過小無法將 Google drive 的資料同步回 Nas,山不轉路轉想到了可以用 rclone 的功能來偷雞。
|
||||
|
||||
這裡就不贅述如何在 Nas 上安裝 Docker 的方法了,畢竟套件管理中心點一點就可以安裝完成的東西也沒有什麼好講的了吧 …?
|
||||
|
||||
由於本人對於 docker command 操作蠻熟的,所以操作 Docker 的步驟都使用 ssh 為主
|
||||
|
||||
1. 建立一個 ubuntu```
|
||||
sudo -i
|
||||
docker run --rm -it ubuntu bash
|
||||
```
|
||||
|
||||
2. 下載 rclone 並安裝```
|
||||
apt update -y
|
||||
apt install curl unzip -y
|
||||
curl [https://rclone.org/install.sh](https://rclone.org/install.sh) | bash
|
||||
```
|
||||
|
||||
3. 登入 Google drive 產生 config,並將 stdout 的設定儲存成 `rclone.conf` 後放在 Nas 上```
|
||||
rclone config
|
||||
```
|
||||
|
||||
4. 離開 container 且將想要掛載的儲存空間設定為允許```
|
||||
sudo mount --make-shared "/volume2"
|
||||
```
|
||||
|
||||
5. 接著就可以藉由別人封裝好的 image 來掛載資料夾囉```
|
||||
docker run -d --name rclone-gd-mount --restart=always \\
|
||||
--cap-add SYS\_ADMIN \\
|
||||
--device /dev/fuse \\
|
||||
--security-opt apparmor:unconfined \\
|
||||
-e ConfigName="rclone.conf" \\
|
||||
-e RemotePath="gd-mount:" \\
|
||||
-e MountCommands="--allow-other --allow-non-empty --read-only --dir-cache-time 2h --buffer-size 32M --poll-interval 5m --tpslimit 2" \\
|
||||
-v "/volume1/docker/rclone-gd-mount":/config \\
|
||||
-v "/volume2/rclone-gd-mount":/mnt/mediaefs:shared \\
|
||||
mumiehub/rclone-mount
|
||||
```
|
||||
|
||||
6. 大功告成 !!
|
||||

|
||||
|
||||
|
||||
參考資料:
|
||||
|
||||
1. [rclone mount on Synology NAS with Docker](https://bitbucket.org/fusebit/plex-and-google-drive/wiki/rclone%20mount%20on%20Synology%20NAS%20with%20Docker)
|
||||
2. [\[筆記\]將Google Drive掛載到NAS上(用rclone)](https://ak77now.pixnet.net/blog/post/45722625)
|
||||
|
||||
|
||||
|
||||
* * *
|
||||
|
||||
[這裡的資訊對您有用嗎?歡迎斗內給我](https://cart.cashier.ecpay.com.tw/qp/fPM6)
|
||||
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 433 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 434 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 49 KiB |
@@ -0,0 +1,27 @@
|
||||
最新推荐文章于 2026-03-06 00:34:37 发布
|
||||
|
||||
原创 于 2021-04-21 12:40:31 发布 · 1.6w 阅读
|
||||
|
||||
· 
|
||||
4
|
||||
|
||||
· 
|
||||
12 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
背景: 经常需要 查询 到本机/本网络所在的 IP 地址。比如把本机的外网 IP 加到某个服务的白名单中。
|
||||
|
||||
方案:除了在百度上输入IP搜索得到本机IP地址外, 也可以使用 命令 行快捷 curl 访问能够返回 IP 地址的 网址。 以下网址可以使用:
|
||||
|
||||
国内/海外都可以访问的地址:
|
||||
|
||||
国内可以访问的地址:
|
||||
|
||||
```null
|
||||
curl myip.ipip.net
|
||||
```
|
||||
|
||||
海外(只能从国外访问):
|
||||
@@ -0,0 +1,27 @@
|
||||
最新推荐文章于 2026-03-06 00:34:37 发布
|
||||
|
||||
原创 于 2021-04-21 12:40:31 发布 · 1.6w 阅读
|
||||
|
||||
· 
|
||||
4
|
||||
|
||||
· 
|
||||
12 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
背景: 经常需要 查询 到本机/本网络所在的 IP 地址。比如把本机的外网 IP 加到某个服务的白名单中。
|
||||
|
||||
方案:除了在百度上输入IP搜索得到本机IP地址外, 也可以使用 命令 行快捷 curl 访问能够返回 IP 地址的 网址。 以下网址可以使用:
|
||||
|
||||
国内/海外都可以访问的地址:
|
||||
|
||||
国内可以访问的地址:
|
||||
|
||||
```null
|
||||
curl myip.ipip.net
|
||||
```
|
||||
|
||||
海外(只能从国外访问):
|
||||
@@ -0,0 +1,106 @@
|
||||
很多用户完成域名解析设置后,发现无法立即访问,进而怀疑设置失败。事实上,域名解析并非即时生效,生效时间受多种因素影响,从几分钟到48小时不等。本文,国科云将详细拆解解析生效时间、延迟原因、加速方法及常见问题,帮助用户掌握核心逻辑,快速解决相关难题。
|
||||
|
||||
一、几种主要场景的解析生效时间
|
||||
---------------
|
||||
|
||||
域名解析生效时间不固定,受操作场景、解析类型及网络环境影响,以下是四种常见场景的具体生效范围,方便用户合理安排操作。
|
||||
|
||||
(一)新增域名解析记录
|
||||
|
||||
新增解析指为未配置过解析的域名,首次添加A记录、CNAME记录等,将域名与服务器IP或其他域名绑定。因无需覆盖旧缓存,仅需同步解析信息,生效时间较短。
|
||||
|
||||
常规情况下,生效时间为10分钟至2小时,多数用户30分钟内可验证生效;优质DNS服务商最快5分钟生效。若为国家顶级域名(.cn等)或解析目标在海外,生效时间可能延长至24小时,受同步机制和跨境网络影响。
|
||||
|
||||
(二)主域名下设置新的子域名解析
|
||||
|
||||
已有解析、新增子域名(如在example.com下新增blog.example.com),生效时间与首次解析类似。主域名虽可能有缓存,但子域名是全新记录,缓存干扰小,只需等待各级DNS同步即可。
|
||||
|
||||
(三)修改已有解析记录
|
||||
|
||||
修改已有解析(如更换A记录IP、调整MX优先级),受旧缓存影响最大,易出现“设置无误却不生效”的情况。
|
||||
|
||||
生效时间取决于TTL值(生存时间):TTL为300秒(5分钟)时,生效需5-30分钟;TTL为3600秒(1小时)时,需1-2小时;TTL为86400秒(24小时)时,可能需24-48小时。若配置错误,会导致无法生效或无限延迟。
|
||||
|
||||
(四)修改DNS服务器
|
||||
|
||||
修改DNS服务器指更换域名权威DNS服务商,需要等待全球各地的递归DNS服务器更新其缓存中关于该域名由谁负责解析的“委任信息”,生效时间最长。
|
||||
|
||||
常规生效时间为24-48小时,这是因为顶级域服务器中NS记录缓存更新较慢,部分地区运营商缓存更新慢,时间可能更长。需注意,修改后原解析记录失效,建议等待24小时再重新配置,避免解析冲突。
|
||||
|
||||
二、域名解析不是即时生效的原因剖析
|
||||
-----------------
|
||||
|
||||
解析无法即时生效,核心是DNS系统架构、缓存机制及网络特性决定的,具体可分为4点:
|
||||
|
||||
(一)DNS系统的分布式架构与信息传递延迟
|
||||
|
||||
DNS是全球分布式数据库,由根服务器、顶级域服务器、权威服务器、本地DNS服务器构成层级架构。根服务器仅13组,顶级域服务器管理域名后缀,权威服务器存储解析记录,本地DNS对接用户设备。
|
||||
|
||||
当您修改解析后,信息会立即在权威服务器上生效。但全球各地的本地DNS服务器需要等待其缓存过期后,才会来权威服务器获取最新的记录。这个“等待-重新获取”的过程,导致了用户感知的生效延迟。跨地域、跨运营商的网络延迟,会进一步影响这个过程的快慢。
|
||||
|
||||
(二)DNS缓存的“保质期”效应
|
||||
|
||||
为提升效率、减少带宽消耗,各级DNS服务器会缓存解析记录,缓存时间由TTL值决定。首次查询后,本地DNS会缓存结果,后续查询直接返回,无需重复查询。
|
||||
|
||||
修改解析后,新信息需等待旧缓存过期才能被获取。例如TTL为24小时,即使权威服务器已更新,本地DNS仍会在24小时内向用户返回旧结果,直到缓存失效后才会查询新记录,这是导致延迟的最主要原因。
|
||||
|
||||
(三)域名状态与基本配置验证
|
||||
|
||||
解析设置后,DNS服务商会进行基本的格式检查,如IP地址格式是否正确、主机记录是否合法等。这个过程是瞬时的,如果格式错误,系统会立刻提示,这属于配置失败而非生效延迟。此外,国内域名需完成实名认证,未认证会暂停解析服务,这也会导致解析无法生效。
|
||||
|
||||
(四)网络环境与运营商差异
|
||||
|
||||
不同地区、运营商的本地DNS缓存更新策略和速度不同,有的可能严格按照TTL,有的可能会延长缓存时间,这导致偏远地区或某些运营商的用户更新较慢;跨境网络受带宽、路由影响,同步延迟明显。部分地区存在DNS缓存污染,也会导致解析延迟或失败。
|
||||
|
||||
三、如何加速域名解析生效时间
|
||||
--------------
|
||||
|
||||
通过以下5种实用方法,可有效缩短解析生效时间,避免影响服务部署:
|
||||
|
||||
(一)合理设置TTL值
|
||||
|
||||
TTL是核心影响因素,建议设置为300秒(5分钟)或600秒(10分钟),加快旧缓存过期。避免小于60秒,以免增加DNS查询压力;无需频繁修改时,可提高至3600秒提升效率。
|
||||
|
||||
(二)提前清理各级缓存
|
||||
|
||||
分层次清理缓存:设备层面清理浏览器和系统DNS缓存(Windows输入ipconfig/flushdns,Mac输入
|
||||
sudodscacheutil-flushcache);网络层面重启路由器;公共DNS层面更换阿里云223.5.5.5等优质服务器,加快同步。
|
||||
|
||||
(三)选择优质DNS服务商
|
||||
|
||||
优先选择国科云解析、阿里云DNS、腾讯云DNSPod等节点广泛、技术成熟的服务商,其全球分布式节点能快速响应查询请求;避免小众服务商,减少延迟和失败风险。
|
||||
|
||||
(四)确保解析记录配置正确
|
||||
|
||||
仔细核对记录类型、记录值、主机记录,避免拼写错误、多余空格。如搭建网站需配置A记录指向IPv4,误选CNAME会导致验证失败,延长生效时间。
|
||||
|
||||
(五)分时段操作,避开高峰
|
||||
|
||||
高峰时段(工作日9:00-18:00)DNS节点负载高,同步慢;选择凌晨0:00-6:00等低峰时段操作,同步效率更高。修改DNS服务器等耗时操作,避开业务高峰。
|
||||
|
||||
四、域名解析生效时间的常见问题(FAQ)
|
||||
--------------------
|
||||
|
||||
1.解析超过24小时未生效,原因是什么?
|
||||
|
||||
主要有4点:解析配置错误;TTL值过大;域名状态异常(未实名认证、过期、冻结);DNS服务器异常。需核对配置、清理缓存、处理域名状态或更换DNS。
|
||||
|
||||
2.同一域名,不同地区、设备生效时间不同?
|
||||
|
||||
因各地DNS缓存更新速度、设备本地缓存状态不同,且运营商路由有差异,导致生效时间不一致,属于正常现象。
|
||||
|
||||
3.如何验证解析是否生效?
|
||||
|
||||
三种方法:浏览器输入域名能正常访问;ping域名返回IP与解析记录一致;用站长工具等查询解析记录,状态正常且与配置一致。
|
||||
|
||||
4.修改解析后,部分用户能访问、部分不能?
|
||||
|
||||
属于DNS缓存不一致,已访问用户的本地DNS已同步新记录,未访问用户仍缓存旧记录,需等待过期或手动清理缓存、更换公共DNS。
|
||||
|
||||
5.主域名正常,子域名无法访问?
|
||||
|
||||
核对子域名解析配置,修改TTL值并清理缓存;排查子域名指向的服务器状态及防火墙端口,确保服务器正常运行。
|
||||
|
||||
6.修改DNS服务器后,多久可配置新解析?
|
||||
|
||||
建议等待24小时,待全球DNS同步完成后再配置,避免新旧DNS冲突导致解析失败。
|
||||
@@ -0,0 +1,103 @@
|
||||
发布日期:2024-11-24 分类:[技术百科](https://www.sysgeek.cn/tech/) 阅读(2W+) 评论(0) __赞(22)
|
||||
|
||||

|
||||
|
||||
无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文件系统格式」之后才能正常使用。
|
||||
|
||||
对广大 Windows 用户而言,主要有三种选择:FAT32、exFAT 和 NTFS。它们都是微软为 Windows 系统开发的文件系统。
|
||||
|
||||
* FAT32 曾因其广泛的兼容性而备受欢迎,但由于它在**单个文件大小**和**分区容量上限**方面的限制,如今已很难满足现代使用需求,因此我们首先将它排除在外。
|
||||
* 这样就只剩下了 exFAT 和 NTFS 这两个更先进的文件系统。那么,我们该如何选择呢?
|
||||
|
||||
兼容性比较:如何选择合适的文件系统
|
||||
-----------------
|
||||
|
||||

|
||||
|
||||
在选择文件系统时,**兼容性**无疑是最关键的考虑因素。如果你的操作系统都无法识别某个文件系统格式,那么存储在其中的文件也将无法访问,一切不都白瞎了。
|
||||
|
||||
虽然 exFAT 和 NTFS 都出自微软之手,但它们的设计目标和适用场景截然不同。让我们来看看它们在不同平台上的兼容性表现:
|
||||
|
||||
| **特性** | **exFAT** | **NTFS** | **说明** |
|
||||
| --- | --- | --- | --- |
|
||||
| **Windows** | 所有版本完美支持 | 所有版本完美支持 | |
|
||||
| **macOS** | 较新版本均可读写 | 默认只读,需额外配置才能写入 | exFAT 在 macOS 上的读写体验更顺畅 |
|
||||
| **Linux** | Linux 5.7 及以上版本原生支持,旧版本需安装额外驱动 | 仅支持基础的只读功能 | exFAT 在 Linux 上的兼容性更好 |
|
||||
| **移动设备** | 广泛支持(U 盘、SD 卡等) | 部分支持 | exFAT 是移动设备的首选文件系统 |
|
||||
| **游戏主机** | 广泛支持(PS、Xbox 等) | Xbox One 和 Xbox Series X/S 支持 | |
|
||||
|
||||
* exFAT 的设计初衷就是为了填补 FAT32 和 NTFS 之间的空白,特别适合跨设备传输数据。它在 macOS、Android、iOS 以及主流游戏主机(如 PS 和 Xbox)上都能无缝兼容。
|
||||
* NTFS 在 Windows 系统中表现优异,但在其他平台上的支持较为有限。虽然 macOS 可以通过第三方工具实现 NTFS 写入,但过程繁琐,用户体验也不理想。
|
||||
|
||||
存储容量:两种格式均远超日常需求
|
||||
----------------
|
||||
|
||||

|
||||
|
||||
与早期 32 位文件系统 **4 GB 单文件大小**和 **8 TB 分区容量**的限制相比,exFAT 和 NTFS 这两款现代文件系统在文件和分区大小的支持上有了巨大飞跃。让我们通过具体数据来对比一下:
|
||||
|
||||
| **特性** | **exFAT** | **NTFS** | **说明** |
|
||||
| --- | --- | --- | --- |
|
||||
| **单文件上限** | 128 PB | 与簇大小相关(理论上可达 16 EB) | exFAT 在单文件大小支持上有明显优势 |
|
||||
| **分区上限** | 128 PB | 16 TB(4 KB 簇)~ 8 PB(2048 KB 簇) | exFAT 在分区容量上限方面同样占优 |
|
||||
| **簇大小** | 灵活 | 固定或可配置 | exFAT 的簇大小更加灵活,可以根据存储需求进行调整优化 |
|
||||
| **碎片化** | 较少 | 可能存在碎片化问题 | exFAT 的文件分配方式有助于减少碎片化 |
|
||||
|
||||
从对比中可以看出,这两种文件系统的存储上限远远超出了目前的硬件水平。考虑到市面上的硬盘容量还远没达到这些上限,无论你选择哪种文件系统,**存储容量**都不会成为使用中的瓶颈。
|
||||
|
||||
功能对比:NTFS 功能丰富,exFAT 轻便实用
|
||||
-------------------------
|
||||
|
||||

|
||||
|
||||
### NTFS:现代化的全能选手
|
||||
|
||||
作为一款更现代的文件系统,NTFS 提供了许多高级功能,例如文件权限精细管理、卷影副本自动备份、EFS 文件加密、磁盘配额控制、日志记录、崩溃恢复以及硬链接支持等。
|
||||
|
||||
这些功能让 NTFS 成为了系统引导分区的理想选择,尤其适合作为电脑内部硬盘的文件系统。不过,它相对复杂的结构和功能,让它在便携存储设备上的表现不如 exFAT 轻便高效。
|
||||
|
||||
### exFAT:轻量化的便携首选
|
||||
|
||||
相比之下,exFAT 的设计更加简洁,虽然仅支持基础的数据恢复和误删文件恢复功能,但它胜在轻便。exFAT 是 SDXC 卡(32 GB 以上)的官方标配,特别适合 U 盘、存储卡等便携设备的使用。
|
||||
|
||||
性能表现:各有所长
|
||||
---------
|
||||
|
||||

|
||||
|
||||
在文件传输速度和性能方面,exFAT 和 NTFS 各有其独特的优势:
|
||||
|
||||
| **特性** | **exFAT** | **NTFS** | **说明** |
|
||||
| --- | --- | --- | --- |
|
||||
| **大文件** | 速度出色 | 速度较慢 | exFAT 在处理大文件(如高清视频、大型 ISO 镜像文件)时更具优势 |
|
||||
| **小文件** | 速度较慢 | 速度较快 | NTFS 在处理大量小文件(如文档、图片)时效率更高 |
|
||||
| **随机读写** | 优于 NTFS | 一般 | exFAT 在闪存设备上的随机读写性能表现更好,适合频繁的小文件读写操作 |
|
||||
|
||||
* exFAT 在处理大文件时速度表现出色,特别适用于需要传输高清视频、大型镜像文件的场景。此外,它在闪存设备(如 U 盘、SD 卡)上的随机读写性能也优于 NTFS,适合频繁的小文件读写。
|
||||
* NTFS 在处理大量小文件时效率更高,在文档、图片等多文件操作时具有优势。
|
||||
|
||||
存储类型选择
|
||||
------
|
||||
|
||||

|
||||
|
||||
| **存储类型** | **NTFS** | **exFAT** | **适用场景** | **优势** | **劣势** |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| **内部存储设备** | ✅ | ❌ | Windows 系统盘、数据盘 | 与系统集成度高,性能优异,安全性好 | 跨平台兼容性差 |
|
||||
| **外部存储设备** | ✅ | ✅ | Windows 系统、Xbox | 兼容性好,性能较好 | NTFS 随机读写性能一般 |
|
||||
| **移动 SSD** | ❌ | ✅ | 跨平台使用,频繁读写 | 随机读写性能优异,兼容性好 | 功能相对简单 |
|
||||
| **U 盘** | ❌ | ✅ | 跨平台使用,小容量存储 | 兼容性好,轻量级 | 功能相对简单 |
|
||||
|
||||
* NTFS 适合作为 Windows 系统盘以及主要在 Windows 环境下使用的外部存储设备。它的优势在于与 Windows 系统的深度集成,性能强,安全性高。不过它的跨平台兼容性较差,在 macOS 和 Linux 上支持有限。
|
||||
* exFAT 更适合跨平台使用,尤其是需要频繁读写的移动 SSD 和 U 盘。它在随机读写性能和跨平台兼容性方面表现出色,但功能相对简单,缺少一些高级特性。
|
||||
|
||||
### 选择建议
|
||||
|
||||
* **Windows 系统硬盘**:无条件选择 NTFS。
|
||||
* **外部硬盘:**
|
||||
* **主要用于 Windows 系统或 Xbox**:NTFS 是理想选择。
|
||||
* **需要跨平台兼容性(如 macOS、Linux)**:选择 exFAT,尤其适用于闪存盘和移动 SSD。
|
||||
* **存储大量高清视频或其他大文件**:exFAT 是更好的选择,处理大文件时性能更好。
|
||||
* **移动设备(U盘、SD 卡)**:exFAT 是最佳选择,凭借其出色的跨平台兼容性和随机读写性能,特别适合频繁数据交换和多设备使用的场景。
|
||||
|
||||
如果你是 macOS 用户,在外接存储设备上建议选择 exFAT,或者使用 APFS(Apple 文件系统)。APFS 是 macOS 专属的文件系统,针对性能和兼容性做了优化。
|
||||
@@ -0,0 +1,105 @@
|
||||
看到too many open files可能想到fs.file\-max参数,其实还受下面参数影响:
|
||||
|
||||
fs.inotify.max\_queued\_events:表示调用inotify\_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN\_Q\_OVERFLOW事件。
|
||||
|
||||
fs.inotify.max\_user\_instances:表示每一个real user ID可创建的inotify instatnces的数量上限,默认128.
|
||||
|
||||
fs.inotify.max\_user\_watches:表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)
|
||||
|
||||
建议修改系统默认参数,方法如下(vi /etc/sysctl.conf):
|
||||
|
||||
fs.inotify.max\_user\_instances=8192
|
||||
|
||||
注意: max\_queued\_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。如果你在日志中看到Event Queue Overflow,说明max\_queued\_events太小需要调整参数后再次使用。
|
||||
|
||||
**关于重启inotify配置max\_user\_watches无效被恢复默认值8192的正确修改方法**
|
||||
|
||||
一般网上修改方法就是直接修改文件:
|
||||
|
||||
/proc/sys/fs/inotify/max\_user\_watches
|
||||
|
||||
或者修改方法:
|
||||
|
||||
sysctl -w fs.inotify.max\_user\_watches="99999999"
|
||||
|
||||
但是这些修改后,Linux系统重启inotify配置max\_user\_watches无效被恢复默认值8192,这个可能很多的新手不是很明白,这个不详细讲解,有空大家去了解下:sysctl
|
||||
|
||||
Linux系统重启inotify配置max\_user\_watches无效被恢复默认值8192的正确修改方法为:
|
||||
|
||||
vim /etc/sysctl.conf
|
||||
|
||||
注意添加的内容:
|
||||
|
||||
fs.inotify.max\_user\_watches=99999999(你想设置的值)
|
||||
|
||||
haole ,好了,很简单。。
|
||||
|
||||
**在Linux中打开了太多文件(Too many open files)的解决方法**
|
||||
|
||||
|
||||
回答一、
|
||||
|
||||
\[root@lxadmin nginx\]# cat /proc/sys/fs/file-max
|
||||
8192
|
||||
文件系统最大可打开文件数
|
||||
\[root@lxadmin nginx\]# ulimit -n
|
||||
1024
|
||||
程序限制只能打开1024个文件
|
||||
使用\[root@lxadmin nginx\]# ulimit -n 8192调整一下
|
||||
或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=xxx无效)
|
||||
|
||||
ulimit -n 8192
|
||||
|
||||
回答二、
|
||||
|
||||
Linux内核有时会报告“Too many open files”,起因是file-max默认值(8096)太小。要解决这个问题,可以root身份执行下列命令(或将它们加入/etc/rcS.d/\*下的init脚本。)
|
||||
|
||||
\# echo "65536" > /proc/sys/fs/file-max # 适用于2.2和2.4版内核
|
||||
\# echo "131072" > /proc/sys/fs/inode-max # 仅适用于2.2版内核
|
||||
|
||||
回答三、
|
||||
|
||||
办法是修改操作系统的打开文件数量限制,方法如下:
|
||||
|
||||
1\. 按照最大打开文件数量的需求设置系统, 并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。
|
||||
\# cat /proc/sys/fs/file-max
|
||||
如果设置值太小, 修改文件/etc/sysctl.conf的变量到合适的值。 这样会在每次重启之后生效。 如果设置值够大,跳过下步。
|
||||
\# echo 2048 > /proc/sys/fs/file-max
|
||||
编辑文件/etc/sysctl.conf,插入下行。
|
||||
fs.file-max = 8192
|
||||
|
||||
2\. 在/etc/security/limits.conf文件中设置最大打开文件数, 下面是一行提示:
|
||||
#
|
||||
添加如下这行。
|
||||
\* - nofile 8192
|
||||
|
||||
这行设置了每个用户的默认打开文件数为2048。 注意"nofile"项有两个可能的限制措施。就是项下的hard和soft。 要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用"-"字符设定, 则hard和soft设定会同时被设定。
|
||||
硬限制表明soft限制中所能设定的最大值。 soft限制指的是当前系统生效的设置值。 hard限制值可以被普通用户降低。但是不能增加。 soft限制不能设置的比hard限制更高。 只有root用户才能够增加hard限制值。
|
||||
当增加文件限制描述,可以简单的把当前值双倍。 例子如下, 如果你要提高默认值1024, 最好提高到2048, 如果还要继续增加, 就需要设置成4096。
|
||||
|
||||
另外一种情况是在创建索引的时候,也有两种可能,一种是 合并因子太小,导致创建文件数量超过操作系统限制,这时可以修改合并因子,也可以修改操作系统的打开文件数限制;另外一种是合并因子受虚拟机内存的限制,无法调整到更大,而 需要索引的doc 数量又非常的大,这个时候就只能通过修改操作系统的打开文件数限制来解决了。
|
||||
|
||||
在此基础上,我还修改了以下一个配置文件
|
||||
vi /etc/sysctl.conf
|
||||
添加:
|
||||
\# Decrease the time default value for tcp\_fin\_timeout connection
|
||||
net.ipv4.tcp\_fin\_timeout = 30
|
||||
\# Decrease the time default value for tcp\_keepalive\_time connection
|
||||
net.ipv4.tcp\_keepalive\_time = 1800
|
||||
\# Turn off tcp\_window\_scaling
|
||||
net.ipv4.tcp\_window\_scaling = 0
|
||||
\# Turn off the tcp\_sack
|
||||
net.ipv4.tcp\_sack = 0
|
||||
#Turn off tcp\_timestam[ps](http://www.111cn.net/fw/photo.html)
|
||||
net.ipv4.tcp\_timestamps = 0
|
||||
然后 service network restart,这些都和TCP sockets有关的优化。
|
||||
|
||||
另外需要在 /etc/rc.d/rc.local里添加已使得重启的时候生效。
|
||||
echo "30">/proc/sys/net/ipv4/tcp\_fin\_timeout
|
||||
echo "1800">/proc/sys/net/ipv4/tcp\_keepalive\_time
|
||||
echo "0">/proc/sys/net/ipv4/tcp\_window\_scaling
|
||||
echo "0">/proc/sys/net/ipv4/tcp\_sack
|
||||
echo "0">/proc/sys/net/ipv4/tcp\_timestamps
|
||||
因为不是所有的程序都在root下跑的,所有linux有对hard 与soft open files 的区分,普通用户受hard的限制,无论ulimit -n $数值调到多高,都跑不到 /etc/security/limits.conf里nofile的值.
|
||||
|
||||
这样的优化后 lsof -p $java\_pid|wc -l可以跑到4千以上都不会抛出too many open files。
|
||||
@@ -0,0 +1,308 @@
|
||||
---
|
||||
title: "iptables和firewalld的介绍与区别_iptables和firewalld的区别-CSDN博客"
|
||||
source: "https://blog.csdn.net/Bilise/article/details/105372667"
|
||||
author:
|
||||
- "[[成就一亿技术人!]]"
|
||||
- "[[hope_wisdom 发出的红包]]"
|
||||
published:
|
||||
created: 2025-11-26
|
||||
description: "文章浏览阅读2.1w次,点赞29次,收藏114次。本文深入解析iptables和firewalld两种Linux防火墙的工作原理、配置方法及其主要区别。涵盖iptables的基础概念、规则表和链的结构、命令操作,以及firewalld的动态规则管理、服务和端口管理特性。"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
本文深入解析iptables和firewalld两种Linux防火墙的工作原理、配置方法及其主要区别。涵盖iptables的基础概念、规则表和链的结构、命令操作,以及firewalld的动态规则管理、服务和端口管理特性。
|
||||
|
||||
### 一、iptables
|
||||
|
||||
**iptables简介**
|
||||
|
||||
netfilter/iptables(简称为iptables)组成 Linux 平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包 [重定向](https://so.csdn.net/so/search?q=%E9%87%8D%E5%AE%9A%E5%90%91&spm=1001.2101.3001.7020) 和网络地址转换(NAT)等功能。
|
||||
|
||||
**iptables基础**
|
||||
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果 数据包 头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。
|
||||
|
||||
**iptables和netfilter的关系:**
|
||||
|
||||
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
|
||||
|
||||
**iptables传输数据包的过程**
|
||||
|
||||
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
|
||||
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
|
||||
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
|
||||
|
||||
**iptables的规则表和链:**
|
||||
|
||||
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、 mangle 表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
|
||||
|
||||
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
|
||||
|
||||
Iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链。现在REHL5成了四张表五个链了,不过多出来的那个表用的也不太多,所以基本还是和以前一样。下面罗列一下这四张表和五个链。注意一定要明白这些表和链的关系及作用。
|
||||
|
||||
**规则表:**
|
||||
|
||||
1.filter表——三个链:INPUT、FORWARD、OUTPUT
|
||||
作用:过滤数据包 内核模块 :iptables\_filter.
|
||||
2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
|
||||
作用:用于网络地址转换(IP、端口) 内核模块:iptable\_nat
|
||||
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
|
||||
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable\_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
|
||||
4.Raw表——两个链:OUTPUT、PREROUTING
|
||||
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable\_raw
|
||||
(这个是REHL4没有的,不过不用怕,用的不多)
|
||||
|
||||
**规则链:**
|
||||
|
||||
1.INPUT——进来的数据包应用此规则链中的策略
|
||||
2.OUTPUT——外出的数据包应用此规则链中的策略
|
||||
3.FORWARD——转发数据包时应用此规则链中的策略
|
||||
4.PREROUTING——对数据包作路由选择前应用此链中的规则
|
||||
(记住!所有的数据包进来的时侯都先由这个链处理)
|
||||
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
|
||||
(所有的数据包出来的时侯都先由这个链处理)
|
||||
|
||||
**规则表之间的优先顺序:**
|
||||
|
||||
Raw——mangle——nat——filter
|
||||
规则链之间的优先顺序(分三种情况):
|
||||
|
||||
第一种情况:入站数据流向
|
||||
|
||||
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
|
||||
|
||||
第二冲情况:转发数据流向
|
||||
|
||||
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
|
||||
|
||||
第三种情况:出站数据流向
|
||||
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
|
||||
|
||||
**管理和设置iptables规则**
|
||||
iptables的基本语法格式
|
||||
|
||||
iptables \[-t 表名\] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
|
||||
说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。
|
||||
|
||||
iptables命令的管理控制选项
|
||||
|
||||
```bash
|
||||
-A 在指定链的末尾添加(append)一条新的规则
|
||||
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
|
||||
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
|
||||
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
|
||||
-L 列出(list)指定链中所有的规则进行查看
|
||||
-E 重命名用户定义的链,不改变链本身
|
||||
-F 清空(flush)
|
||||
-N 新建(new-chain)一条用户自己定义的规则链
|
||||
-X 删除指定表中用户自定义的规则链(delete-chain)
|
||||
-P 设置指定链的默认策略(policy)
|
||||
-Z 将所有表的所有链的字节和数据包计数器清零
|
||||
-n 使用数字形式(numeric)显示输出结果
|
||||
-v 查看规则表详细信息(verbose)的信息
|
||||
-V 查看版本(version)
|
||||
-h 获取帮助(help)
|
||||
|
||||
bash12345678910111213141516
|
||||
```
|
||||
|
||||
**防火墙处理数据包的四种方式**
|
||||
|
||||
ACCEPT 允许数据包通过
|
||||
DROP 直接丢弃数据包,不给任何回应信息
|
||||
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
|
||||
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
|
||||
|
||||
**iptables防火墙规则的保存与恢复**
|
||||
|
||||
iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载
|
||||
|
||||
使用命令iptables-save来保存规则。一般用
|
||||
|
||||
```bash
|
||||
iptables-save > /etc/sysconfig/iptables
|
||||
bash1
|
||||
```
|
||||
|
||||
生成保存规则的文件 /etc/sysconfig/iptables,
|
||||
|
||||
也可以用
|
||||
|
||||
```bash
|
||||
service iptables save
|
||||
bash1
|
||||
```
|
||||
|
||||
它能把规则自动保存在/etc/sysconfig/iptables中。
|
||||
|
||||
当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。
|
||||
|
||||
### 二、firewalld
|
||||
|
||||
**firewall 防火墙服务简述与安装**
|
||||
1、Centos7 默认的防火墙是 firewall ,替代了以前的 iptables
|
||||
2、firewall 使用更加方便、功能也更加强大一些
|
||||
3、firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
|
||||
4、查看 firewall 版本:firewall-cmd --version
|
||||
|
||||
```bash
|
||||
[root@localhost ~]# firewall-cmd --version
|
||||
0.4.4.4
|
||||
bash12
|
||||
```
|
||||
|
||||
firewall 防火墙安装
|
||||
|
||||
1)像使用 iptables 一样,firewall 同样需要安装
|
||||
2)需要注意的是某些系统已经自带了 firewal l的,如果查看版本没有找到,则可以进行 yun 安装
|
||||
3)安装指令: yum install firewalld
|
||||
|
||||
**firewalld 服务基本使用**
|
||||
1、firewall 与 iptables 一样都是服务,所以可以使用 systemctl 服务管理工具来操作
|
||||
|
||||
```bash
|
||||
查看防火墙状态 systemctl status firewalld
|
||||
关闭防火墙,停止 firewall 服务 systemctl stop firewalld
|
||||
开启防火墙,启动 firewall 服务 systemctl start firewalld
|
||||
重启防火墙,重启 firewall 服务 systemctl restart firewalld
|
||||
查看 firewall 服务是否开机启动 systemctl is-enabled firewalld
|
||||
开机时自动启动 firewall 服务 systemctl enable firewalld.service
|
||||
开机时自动禁用 firewall 服务 systemctl disable firewalld.service
|
||||
bash1234567
|
||||
```
|
||||
|
||||
**firewalld-cmd 防护墙命令使用**
|
||||
1、上面所说的 firewall 可以看成整个防火墙服务,而 firewall-cmd 可以看成是其中的一个功能,可用来管理端口
|
||||
|
||||
(1)查看 firewall-cmd 状态,即查看 firewall 防火墙程序是否正在运行: firewall-cmd --state
|
||||
|
||||
\[root@localhost ~\]# firewall-cmd --state
|
||||
running
|
||||
\[root@localhost ~\]#
|
||||
(2)查看已打开的所有端口,firewall-cmd --zone=public --list-ports
|
||||
|
||||
\[root@localhost ~\]# firewall-cmd --zone=public --list-ports
|
||||
6379/tcp 22122/tcp 23000/tcp 8080/tcp 8888/tcp 9502/tcp 6662/tcp 9999/tcp 7002/tcp 6661/tcp 6688/tcp 6667/tcp 6689/tcp 8000/tcp 6663/tcp 9070/tcp 9089/tcp 9988/tcp 9222/tcp 4444/tcp
|
||||
\[root@localhost ~\]#
|
||||
(3)开启指定端口
|
||||
|
||||
1. 开启一个端口:firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent 永久生效,没有此参数重启后失效)
|
||||
2. 重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload
|
||||
```bash
|
||||
[root@localhost ~]# firewall-cmd --zone=public --list-port
|
||||
9876/tcp 8090/tcp 80/tcp 8080/tcp
|
||||
[root@localhost ~]# firewall-cmd --zone=public --add-port=3307/tcp --permanent
|
||||
success
|
||||
[root@localhost ~]# firewall-cmd --reload
|
||||
success
|
||||
[root@localhost ~]# firewall-cmd --zone=public --list-port
|
||||
9876/tcp 8090/tcp 80/tcp 8080/tcp 3307/tcp
|
||||
bash12345678
|
||||
```
|
||||
|
||||
(4)关闭指定端口
|
||||
|
||||
1. 关闭 9876 端口:firewall-cmd --zone=public --remove-port=9898/tcp --permanent(–permanent 表示永久生效,没有此参数重启后失效)
|
||||
2. 重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload
|
||||
```bash
|
||||
[root@localhost ~]# firewall-cmd --zone=public --list-ports
|
||||
9876/tcp 8090/tcp 80/tcp 8080/tcp
|
||||
[root@localhost ~]# firewall-cmd --zone=public --remove-port=9876/tcp --permanent
|
||||
success
|
||||
[root@localhost ~]# firewall-cmd --reload
|
||||
success
|
||||
[root@localhost ~]# firewall-cmd --zone=public --list-ports
|
||||
8090/tcp 80/tcp 8080/tcp
|
||||
bash12345678
|
||||
```
|
||||
|
||||
**public.xml 文件修改防火墙端口**
|
||||
|
||||
- firewall-cmd对端口的操作,如开放端口等信息,都放在在"/etc/firewall/zones/public.xml"中记录所以直接修改此文件也是可以的
|
||||
|
||||
**注意事项**
|
||||
1、如下所示,CentOS 7.2 Linux系统防火墙明明开启了指定的端口,tomcat服务器端口也指定正确,启动没有任何问题,最后从windows浏览器访问的时候,却只有80端口有效,其余的端口全部访问失败
|
||||
|
||||
2、最后原因居然是因为系统是阿里云服务器,而它的后台为了安全,封掉了其它端口的访问,所以即使防火墙修改了也没用,解决办法是登录阿里云服务器后台,修改它的安全组策略即可。这是生产上遇到的问题。
|
||||
|
||||
### 三、iptables和firewalld的区别
|
||||
|
||||
firewalld 与 iptables的比较:
|
||||
|
||||
1,firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;
|
||||
|
||||
2,firewalld使用区域和服务而不是链式规则;
|
||||
|
||||
3,firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制;
|
||||
|
||||
4,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。也就是说,firewalld和iptables一样,它们的作用都用于维护规则,而真正使用规则干活的是内核的netfilter。只不过firewalld和iptables的结果以及使用方法不一样!
|
||||
|
||||
firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。它并不是iptables的替代品,虽然iptables命令仍可用于firewalld,但建议firewalld时仅使用firewalld命令。
|
||||
|
||||
使用方式区别:
|
||||
|
||||
iptables要给http服务添加80端口允许规则,需要在/etc/sysconfig/iptables中添加如下内容:
|
||||
|
||||
\-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
|
||||
|
||||
然后
|
||||
|
||||
systemctl stop iptables
|
||||
|
||||
systemctl restart iptables
|
||||
|
||||
systemctl enable iptables
|
||||
|
||||
firewalld实现同样的功能,可以用下面2种方式:
|
||||
|
||||
1.直接添加服务
|
||||
|
||||
firewall-cmd --permanent --zone=public --add-service=http
|
||||
|
||||
firewall-cmd --reload
|
||||
|
||||
2.添加端口
|
||||
|
||||
firewall-cmd --permanent --zone=public --add-port=80/tcp
|
||||
|
||||
firewall-cmd --reload
|
||||
|
||||
> iptables部分参考:https://www.cnblogs.com/metoy/p/4320813.html
|
||||
> firewalld部分参考:https://blog.csdn.net/wangmx1993328/article/details/80738012
|
||||
> iptables与firewalld的区别参考:https://blog.51cto.com/14390242/2408693
|
||||
|
||||
实付 元
|
||||
|
||||
[使用余额支付](https://blog.csdn.net/Bilise/article/details/)
|
||||
|
||||
点击重新获取
|
||||
|
||||
扫码支付
|
||||
|
||||
钱包余额 0
|
||||
|
||||
抵扣说明:
|
||||
|
||||
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
|
||||
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
|
||||
|
||||
[余额充值](https://i.csdn.net/#/wallet/balance/recharge)
|
||||
|
||||
举报
|
||||
|
||||
[](https://mall.csdn.net/vip?utm_source=25618_vip_blogrighticon)
|
||||
|
||||
[AI 搜索](https://ai.csdn.net/chat/?utm_source=cknow_pc_blog_right_hover) [智能体](https://ai.csdn.net/chat/cmd?utm_source=cknow_pc_blog_right_hover) [AI 编程](https://ai.csdn.net/chat/coding?utm_source=cknow_pc_blog_right_hover) [AI 作业助手](https://ai.csdn.net/chat/homework?utm_source=cknow_pc_blog_right_hover)
|
||||
|
||||
隐藏侧栏 
|
||||
|
||||
程序员都在用的中文IT技术交流社区
|
||||
|
||||

|
||||
|
||||
专业的中文 IT 技术社区,与千万技术人共成长
|
||||
|
||||

|
||||
|
||||
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!
|
||||
|
||||
客服 返回顶部
|
||||
@@ -0,0 +1,317 @@
|
||||
### 一、[iptables](https://so.csdn.net/so/search?q=iptables&spm=1001.2101.3001.7020)
|
||||
|
||||
**iptables简介**
|
||||
|
||||
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包[重定向](https://so.csdn.net/so/search?q=%E9%87%8D%E5%AE%9A%E5%90%91&spm=1001.2101.3001.7020)和网络地址转换(NAT)等功能。
|
||||
|
||||
**iptables基础**
|
||||
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。
|
||||
|
||||
**iptables和netfilter的关系:**
|
||||
|
||||
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
|
||||
|
||||
**iptables传输数据包的过程**
|
||||
|
||||
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
|
||||
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
|
||||
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
|
||||
|
||||
**iptables的规则表和链:**
|
||||
|
||||
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
|
||||
|
||||
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
|
||||
|
||||
Iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链。现在REHL5成了四张表五个链了,不过多出来的那个表用的也不太多,所以基本还是和以前一样。下面罗列一下这四张表和五个链。注意一定要明白这些表和链的关系及作用。
|
||||
|
||||
**规则表:**
|
||||
|
||||
1.filter表——三个链:INPUT、FORWARD、OUTPUT
|
||||
作用:过滤数据包 内核模块:iptables\_filter.
|
||||
2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
|
||||
作用:用于网络地址转换(IP、端口) 内核模块:iptable\_nat
|
||||
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
|
||||
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable\_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
|
||||
4.Raw表——两个链:OUTPUT、PREROUTING
|
||||
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable\_raw
|
||||
(这个是REHL4没有的,不过不用怕,用的不多)
|
||||
|
||||
**规则链:**
|
||||
|
||||
1.INPUT——进来的数据包应用此规则链中的策略
|
||||
2.OUTPUT——外出的数据包应用此规则链中的策略
|
||||
3.FORWARD——转发数据包时应用此规则链中的策略
|
||||
4.PREROUTING——对数据包作路由选择前应用此链中的规则
|
||||
(记住!所有的数据包进来的时侯都先由这个链处理)
|
||||
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
|
||||
(所有的数据包出来的时侯都先由这个链处理)
|
||||
|
||||
**规则表之间的优先顺序:**
|
||||
|
||||
Raw——mangle——nat——filter
|
||||
规则链之间的优先顺序(分三种情况):
|
||||
|
||||
第一种情况:入站数据流向
|
||||
|
||||
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
|
||||
|
||||
第二冲情况:转发数据流向
|
||||
|
||||
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
|
||||
|
||||
第三种情况:出站数据流向
|
||||
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
|
||||
|
||||
**管理和设置iptables规则**
|
||||
iptables的基本语法格式
|
||||
|
||||
iptables \[-t 表名\] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
|
||||
说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。
|
||||
|
||||
iptables命令的管理控制选项
|
||||
|
||||
```
|
||||
`-A 在指定链的末尾添加(append)一条新的规则
|
||||
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
|
||||
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
|
||||
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
|
||||
-L 列出(list)指定链中所有的规则进行查看
|
||||
-E 重命名用户定义的链,不改变链本身
|
||||
-F 清空(flush)
|
||||
-N 新建(new-chain)一条用户自己定义的规则链
|
||||
-X 删除指定表中用户自定义的规则链(delete-chain)
|
||||
-P 设置指定链的默认策略(policy)
|
||||
-Z 将所有表的所有链的字节和数据包计数器清零
|
||||
-n 使用数字形式(numeric)显示输出结果
|
||||
-v 查看规则表详细信息(verbose)的信息
|
||||
-V 查看版本(version)
|
||||
-h 获取帮助(help)`
|
||||
|
||||

|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
* 8
|
||||
* 9
|
||||
* 10
|
||||
* 11
|
||||
* 12
|
||||
* 13
|
||||
* 14
|
||||
* 15
|
||||
* 16
|
||||
|
||||
|
||||
```
|
||||
|
||||
**防火墙处理数据包的四种方式**
|
||||
|
||||
ACCEPT 允许数据包通过
|
||||
DROP 直接丢弃数据包,不给任何回应信息
|
||||
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
|
||||
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
|
||||
|
||||
**iptables防火墙规则的保存与恢复**
|
||||
|
||||
iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载
|
||||
|
||||
使用命令iptables-save来保存规则。一般用
|
||||
|
||||
```
|
||||
`iptables-save > /etc/sysconfig/iptables`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
生成保存规则的文件 /etc/sysconfig/iptables,
|
||||
|
||||
也可以用
|
||||
|
||||
```
|
||||
`service iptables save`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
它能把规则自动保存在/etc/sysconfig/iptables中。
|
||||
|
||||
当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。
|
||||
|
||||
### 二、firewalld
|
||||
|
||||
**firewall 防火墙服务简述与安装**
|
||||
1、Centos7 默认的防火墙是 firewall,替代了以前的 iptables
|
||||
2、firewall 使用更加方便、功能也更加强大一些
|
||||
3、firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
|
||||
4、查看 firewall 版本:firewall-cmd --version
|
||||
|
||||
```
|
||||
`[root@localhost ~]
|
||||
0.4.4.4`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
|
||||
|
||||
```
|
||||
|
||||
firewall 防火墙安装
|
||||
|
||||
1)像使用 iptables 一样,firewall 同样需要安装
|
||||
2)需要注意的是某些系统已经自带了 firewal l的,如果查看版本没有找到,则可以进行 yun 安装
|
||||
3)安装指令: yum install firewalld
|
||||
|
||||
**firewalld 服务基本使用**
|
||||
1、firewall 与 iptables 一样都是服务,所以可以使用 systemctl 服务管理工具来操作
|
||||
|
||||
```
|
||||
`查看防火墙状态 systemctl status firewalld
|
||||
关闭防火墙,停止 firewall 服务 systemctl stop firewalld
|
||||
开启防火墙,启动 firewall 服务 systemctl start firewalld
|
||||
重启防火墙,重启 firewall 服务 systemctl restart firewalld
|
||||
查看 firewall 服务是否开机启动 systemctl is-enabled firewalld
|
||||
开机时自动启动 firewall 服务 systemctl enable firewalld.service
|
||||
开机时自动禁用 firewall 服务 systemctl disable firewalld.service`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
|
||||
|
||||
```
|
||||
|
||||
**firewalld-cmd 防护墙命令使用**
|
||||
1、上面所说的 firewall 可以看成整个防火墙服务,而 firewall-cmd 可以看成是其中的一个功能,可用来管理端口
|
||||
|
||||
(1)查看 firewall-cmd 状态,即查看 firewall 防火墙程序是否正在运行: firewall-cmd --state
|
||||
|
||||
\[root@localhost ~\]# firewall-cmd --state
|
||||
running
|
||||
\[root@localhost ~\]#
|
||||
(2)查看已打开的所有端口,firewall-cmd --zone=public --list-ports
|
||||
|
||||
\[root@localhost ~\]# firewall-cmd --zone=public --list-ports
|
||||
6379/tcp 22122/tcp 23000/tcp 8080/tcp 8888/tcp 9502/tcp 6662/tcp 9999/tcp 7002/tcp 6661/tcp 6688/tcp 6667/tcp 6689/tcp 8000/tcp 6663/tcp 9070/tcp 9089/tcp 9988/tcp 9222/tcp 4444/tcp
|
||||
\[root@localhost ~\]#
|
||||
(3)开启指定端口
|
||||
|
||||
1. 开启一个端口:firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent 永久生效,没有此参数重启后失效)
|
||||
2. 重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload
|
||||
|
||||
```
|
||||
`[root@localhost ~]
|
||||
9876/tcp 8090/tcp 80/tcp 8080/tcp
|
||||
[root@localhost ~]
|
||||
success
|
||||
[root@localhost ~]
|
||||
success
|
||||
[root@localhost ~]
|
||||
9876/tcp 8090/tcp 80/tcp 8080/tcp 3307/tcp`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
* 8
|
||||
|
||||
|
||||
```
|
||||
|
||||
(4)关闭指定端口
|
||||
|
||||
1. 关闭 9876 端口:firewall-cmd --zone=public --remove-port=9898/tcp --permanent(–permanent 表示永久生效,没有此参数重启后失效)
|
||||
2. 重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload
|
||||
|
||||
```
|
||||
`[root@localhost ~]
|
||||
9876/tcp 8090/tcp 80/tcp 8080/tcp
|
||||
[root@localhost ~]
|
||||
success
|
||||
[root@localhost ~]
|
||||
success
|
||||
[root@localhost ~]
|
||||
8090/tcp 80/tcp 8080/tcp`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
* 8
|
||||
|
||||
|
||||
```
|
||||
|
||||
**public.xml 文件修改防火墙端口**
|
||||
|
||||
* firewall-cmd对端口的操作,如开放端口等信息,都放在在"/etc/firewall/zones/public.xml"中记录所以直接修改此文件也是可以的
|
||||
|
||||
**注意事项**
|
||||
1、如下所示,CentOS 7.2 Linux系统防火墙明明开启了指定的端口,tomcat服务器端口也指定正确,启动没有任何问题,最后从windows浏览器访问的时候,却只有80端口有效,其余的端口全部访问失败
|
||||
|
||||
2、最后原因居然是因为系统是阿里云服务器,而它的后台为了安全,封掉了其它端口的访问,所以即使防火墙修改了也没用,解决办法是登录阿里云服务器后台,修改它的安全组策略即可。这是生产上遇到的问题。
|
||||
|
||||
### 三、iptables和firewalld的区别
|
||||
|
||||
firewalld 与 iptables的比较:
|
||||
|
||||
1,firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;
|
||||
|
||||
2,firewalld使用区域和服务而不是链式规则;
|
||||
|
||||
3,firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制;
|
||||
|
||||
4,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。也就是说,firewalld和iptables一样,它们的作用都用于维护规则,而真正使用规则干活的是内核的netfilter。只不过firewalld和iptables的结果以及使用方法不一样!
|
||||
|
||||
firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。它并不是iptables的替代品,虽然iptables命令仍可用于firewalld,但建议firewalld时仅使用firewalld命令。
|
||||
|
||||
使用方式区别:
|
||||
|
||||
iptables要给http服务添加80端口允许规则,需要在/etc/sysconfig/iptables中添加如下内容:
|
||||
|
||||
\-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
|
||||
|
||||
然后
|
||||
|
||||
systemctl stop iptables
|
||||
|
||||
systemctl restart iptables
|
||||
|
||||
systemctl enable iptables
|
||||
|
||||
firewalld实现同样的功能,可以用下面2种方式:
|
||||
|
||||
1.直接添加服务
|
||||
|
||||
firewall-cmd --permanent --zone=public --add-service=http
|
||||
|
||||
firewall-cmd --reload
|
||||
|
||||
2.添加端口
|
||||
|
||||
firewall-cmd --permanent --zone=public --add-port=80/tcp
|
||||
|
||||
firewall-cmd --reload
|
||||
|
||||
> iptables部分参考:https://www.cnblogs.com/metoy/p/4320813.html
|
||||
> firewalld部分参考:https://blog.csdn.net/wangmx1993328/article/details/80738012
|
||||
> iptables与firewalld的区别参考:https://blog.51cto.com/14390242/2408693
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
created: 2025-09-30T12:07
|
||||
updated: 2025-09-30T12:07
|
||||
---
|
||||
j4125处理英特尔® 赛扬® 处理器 J4125,是一款应用非常广的CPU,在2019年底上市至今,很多品牌,很多客户端(笔记本,路由器,NAS,工控机,三防平板等好多终端设备)都采用这款神级的CPU。那么这款CPU有什么亮点呢,会让很多设备上都选择他呢?其实这款CPU主要亮点就在于性能够用,价格低廉,功耗也不是很大,兼容平台广泛所以很受欢迎。
|
||||
|
||||

|
||||
|
||||
J4125 CPU性能为:4核心4线程,4M缓存,2.0Ghz基频,最高睿频2.7GHz,核显为UHD Graphics 600 GPU,最大功耗10W;那么对于这款CPU是什么档次,在性能上和主流的core i系列对比,J4125会有什么样的表现,能和core i系列哪一代有可比性呢?下面通过鲁大师上的跑分参数对比一下。
|
||||
|
||||
J4125单核跑分:15907分;
|
||||
|
||||
i3-4010U单核跑分:15787分;
|
||||
|
||||
i5-4210Y单核跑分:14647分;
|
||||
|
||||
i7-2360QM单核跑分:15673分;
|
||||
|
||||
按照这几款对比,J4125单核性能稍微有一点点优势,这个分只能说明,J4125在单核性能上可以和i3四代,i5四代,i7二代;
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
J4125多核跑分:57869分;
|
||||
|
||||
i3-5015U多核跑分:55932分;
|
||||
|
||||
i5-3340M多核跑分:57870分;
|
||||
|
||||
i7-2640M多核跑分:53957分;
|
||||
|
||||
多核跑分情况看出J4125处于i3五代,i5三代,i7二代;
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
J4125综合跑分:80200分;
|
||||
|
||||
i3-4025U综合跑分:80056分;
|
||||
|
||||
i5-3437U综合跑分:76079分;
|
||||
|
||||
i7-2677M综合跑分:63518分;
|
||||
|
||||
综合性能跑分情况说明,J4125处于i3四代,i5三代,i7二代;
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
根据跑分可以大概看出J4125处于core哪个时代,但是按照详细参数以及其他配件组合后的整体对比的话,J4125是比这些老的i3,i5,i7(上面用于对比的CPU)有一定优势的,比如内存频率,J4125为(DDR4代,2400MT/s),老的i3,i5,i7最高是DDR3 1600; 比如功耗,i3是15W,i5和i7都是35W,J4125是10W(相对节能很多),功耗低了热量也就低了,比如缓存,老的i3,i5是3M,i7是4M,J4125是4M。这些参数都相对有优势,再说了电子产品买新不买旧。
|
||||
|
||||
需要迷你小主机的建议选下面这款,是一台N5095的小主机,性能要比j4125好很多,价格还不贵。
|
||||
|
||||

|
||||
|
||||
酷开 创维智享系列 台式电脑商务办公家用mini迷你小主
|
||||
|
||||
京东
|
||||
|
||||
¥799.00
|
||||
|
||||
去购买
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
酷开 创维智享系列 台式电脑商务办公家用mini迷你小主
|
||||
|
||||
京东
|
||||
|
||||
¥799.00
|
||||
|
||||
去购买
|
||||
|
||||

|
||||
|
||||
对于CPU性能对比仅能作为一个参考,不可能做到100%相同,甚至偏差20%的性能都有可能,所以说CPU对比只参考范围就可以了。如何选择CPU要看你需求来决定,比如你需要单核性能那么你就看一下单核主频大的,如果你需要任务工作,比如拿电脑举例,你想打开多个内容(word,excel,浏览器,微信,游戏等等),那么建议考虑多核跑分和综合跑分高的CPU,选择CPU就这么简单。
|
||||
@@ -0,0 +1,159 @@
|
||||
---
|
||||
title: "macOS 27停用AirPort备份 老用户备份方案何去何从?"
|
||||
source: "https://www.ai-blog.cn/17758.html"
|
||||
author:
|
||||
- "[[小智]]"
|
||||
- "[[进主页]]"
|
||||
published:
|
||||
created: 2025-11-23
|
||||
description: "macOS27停用AiP备份老用户备份方案何去何从?:6月11日,苹果在WWDC25开发者大会上正式宣布:将于2026年发布的macOS27系统中,彻底停止支持AiPTimeCapsule的TimeMachie备份功能。这意味着,这款陪伴Mac用户18年的..."
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
**摘要:**
|
||||
|
||||
macOS 27停用AirPort备份 老用户备份方案何去何从?: 6月11日,苹果在WWDC25开发者大会上正式宣布:将于2026年发布的macOS 27系统中,彻底停止支持AirPort Time Capsul……
|
||||
|
||||
哈喽!伙伴们,我是小智,你们的AI向导。欢迎来到每日的AI学习时间。今天,我们将一起深入AI的奇妙世界,探索“ **[macOS 27停用AirPort备份 老用户备份方案何去何从?](https://www.ai-blog.cn/17758.html)** ”,并学会本篇文章中所讲的全部知识点。还是那句话“不必远征未知,只需唤醒你的潜能!”跟着小智的步伐,我们终将学有所成,学以致用,并发现自身的更多可能性。话不多说,现在就让我们开始这场激发潜能的AI学习之旅吧。
|
||||
|
||||
[](https://www.ai-blog.cn/wp-content/uploads/dynamic_images/1749621949.jpg)
|
||||
|
||||
**macOS 27停用AirPort备份 老用户备份方案何去何从?:**
|
||||
|
||||
6月11日,苹果在WWDC25开发者大会上正式宣布:将于2026年发布的macOS 27系统中,彻底停止支持AirPort Time Capsule的Time Machine备份功能。这意味着,这款陪伴Mac用户18年的“经典备份神器”将正式退出历史舞台,超百万依赖其自动备份的用户需提前寻找替代方案。 消息一出,引发老用户集体感慨——“连最后的‘本地备份安全感’都要被收走了?”
|
||||
|
||||
***AirPort Time Capsule:Mac用户的“备份白月光”***
|
||||
|
||||
要理解此次调整的影响,首先需要回顾AirPort Time Capsule的“传奇历史”。这款发布于2008年的设备,是苹果为Mac用户量身打造的“无线备份+路由二合一神器”:它内置硬盘(早期1TB/2TB,后期3TB/6TB),通过无线网络连接Mac后,用户只需在系统设置中开启Time Machine,即可实现“自动、无线、增量”的本地备份——无论Mac是在家中、办公室,只要连接AirPort的Wi-Fi,就能在后台静默完成数据备份。
|
||||
|
||||
凭借“傻瓜式操作”和“本地数据安全感”(无需插线、不依赖云端),AirPort Time Capsule迅速成为家庭用户、小型工作室的“备份首选”。数据显示,2015年其全球销量达到峰值,占Mac用户本地备份设备的37%(据Statista统计)。即便是2018年苹果宣布停产AirPort系列路由器后,仍有大量用户继续使用旧款设备维持备份需求。
|
||||
|
||||
“我从2012年用到现在,Mac的系统崩溃、误删文件,全靠它恢复。”资深Mac用户王先生向记者表示,“它最大的优势是‘存在感低’——你几乎感觉不到它在工作,但需要时永远在。”
|
||||
|
||||
***为何停用?苹果的“技术迭代”与“生态策略”***
|
||||
|
||||
尽管用户感情深厚,苹果停用AirPort备份功能的决定并非毫无征兆。综合官方说明与行业分析,主要有三大动因:
|
||||
|
||||
**1\. 底层技术过时,无法适配新系统**
|
||||
AirPort Time Capsule依赖的网络文件协议(AFP,Apple Filing Protocol)是苹果90年代推出的旧标准,存在安全性弱、传输效率低等问题。自macOS 10.15(Catalina)起,苹果已逐步弃用AFP,转向更现代的SMB(Server Message Block)协议。而AirPort的硬件与固件均不支持SMB,导致其与新系统的兼容性越来越差——在macOS 14(Sonoma)中,部分用户已遇到备份速度变慢、连接不稳定等问题。
|
||||
|
||||
**2\. 硬件性能跟不上大文件时代**
|
||||
AirPort Time Capsule的最后一代产品发布于2013年(6TB版),其内置硬盘为传统机械硬盘(HDD),读写速度仅约100MB/s,且不支持NVMe固态存储。而如今Mac用户的文件越来越大(4K视频、RAW照片、大型软件项目),单次备份数据量可达数十GB甚至上百GB。“用AirPort备份4K视频,可能需要几小时,而用现代SSD外置硬盘,半小时就能完成。”苹果硬件工程师在WWDC现场解释。
|
||||
|
||||
**3\. 推动用户转向“云端+本地”混合备份**
|
||||
苹果近年来正加速构建“iCloud主导”的生态体系,从iCloud Photos到iCloud Drive,均在强化云端存储的重要性。停用AirPort备份,可视为苹果“引导用户使用iCloud备份+现代本地存储”的策略之一。“我们希望用户享受更高效、安全的备份方案,比如将重要数据同步到iCloud,同时用高速SSD硬盘做本地冗余。”苹果软件工程高级副总裁克雷格·费德里吉在发布会上表示。
|
||||
|
||||
***用户紧急自救:替代方案怎么选?***
|
||||
|
||||
对于仍在使用AirPort Time Capsule的用户,苹果明确建议在macOS 27发布前(预计2026年秋季)迁移备份方案。目前可行的替代方案主要有三类:
|
||||
|
||||
**1\. 外置硬盘直连Mac(推荐指数★★★★☆)**
|
||||
最直接的替代方案是使用外置硬盘(SSD或HDD)通过USB-C/雷电接口连接Mac,开启Time Machine备份。相比AirPort,其优势在于:
|
||||
• 速度更快:SSD外置硬盘读写速度可达1000MB/s,备份大文件效率提升10倍以上;
|
||||
• 兼容性强:支持所有新版macOS系统,无协议限制;
|
||||
• 成本可控:1TB SSD外置硬盘价格约500元,6TB HDD约800元,远低于二手AirPort的收藏价(当前闲鱼6TB版约1500元)。
|
||||
|
||||
*注意:需定期检查硬盘连接状态(避免意外断开导致备份中断),建议选择带自动休眠功能的硬盘(减少损耗)。*
|
||||
|
||||
**2\. iCloud云备份(推荐指数★★★☆☆)**
|
||||
若用户更依赖“无需手动操作”的备份方式,可选择iCloud备份。在macOS 14及以上系统中,iCloud已支持备份桌面、文档文件夹及系统设置(需开启“iCloud云盘”中的“桌面与文档文件夹”选项)。
|
||||
|
||||
优势:
|
||||
• 完全无线,自动同步;
|
||||
• 支持多设备共享(iPhone、iPad、Mac数据互通)。
|
||||
|
||||
局限:
|
||||
• 免费仅提供5GB空间,需付费升级(200GB/月25元,2TB/月68元);
|
||||
• 无法备份大型应用程序(如Final Cut Pro工程文件),需手动管理。
|
||||
|
||||
**3\. 第三方NAS网络存储(推荐指数★★★★★)**
|
||||
对于家庭/小型团队用户,更“AirPort式”的替代方案是选择第三方NAS(网络附加存储),如群晖(Synology)DS224+、威联通(QNAP)TS-264C。这类设备支持SMB协议,可通过Wi-Fi或有线网络连接多台Mac,实现自动Time Machine备份。
|
||||
|
||||
优势:
|
||||
• 支持多设备同时备份(最多10台Mac);
|
||||
• 可扩展存储(支持硬盘替换/叠加,最大容量可达数十TB);
|
||||
• 附加功能丰富(如照片管理、视频流媒体、远程访问)。
|
||||
|
||||
*注意:需一定技术门槛(首次配置需设置网络权限、备份路径),入门款NAS价格约1500元(不含硬盘)。*
|
||||
|
||||
***用户声音:情怀与现实的碰撞***
|
||||
|
||||
面对AirPort的“谢幕”,用户反应两极分化。
|
||||
|
||||
“用了10年的老伙计说没就没,苹果太绝情了。”上海用户李女士表示,她的AirPort里存着孩子从小到大的照片和家庭视频,“虽然知道技术会过时,但还是希望苹果能给老用户更体面的过渡方案,比如固件升级支持SMB。”
|
||||
|
||||
但也有技术派用户持理解态度。“AirPort的硬件确实该淘汰了,机械硬盘容易坏,备份速度慢,换个SSD外置硬盘反而更省心。”程序员张先生认为,“苹果推动用户转向更高效的方案,长期看是好事。”
|
||||
|
||||
***备份方式迭代,数据安全永不过时***
|
||||
|
||||
AirPort Time Capsule的停用,本质上是科技产品“更新换代”的必然结果——正如软盘、CD-ROM退出历史舞台,旧技术终将为更高效、安全的方案让路。对用户而言,关键是在过渡期内完成数据迁移,确保重要文件“有备无患”。
|
||||
|
||||
“无论选择哪种方案,数据备份的核心原则不变:本地+云端双冗余,重要文件至少存两份。”数据安全专家刘鑫提醒,“趁着macOS 27还未发布,现在正是检查备份策略、升级设备的好时机。”
|
||||
|
||||
对于陪伴用户18年的AirPort Time Capsule,或许未来它会以“复古硬件”的身份被收藏,但属于它的备份时代,确实要翻篇了。
|
||||
|
||||
嘿,伙伴们,今天我们的AI探索之旅已经圆满结束。关于“ **[macOS 27停用AirPort备份 老用户备份方案何去何从?](https://www.ai-blog.cn/17758.html)** ”的内容已经分享给大家了。感谢你们的陪伴,希望这次旅程让你对AI能够更了解、更喜欢。谨记,精准提问是解锁AI潜能的钥匙哦!如果有小伙伴想要了解学习更多的AI知识,请关注我们的官网“ **[AI智研社](https://www.ai-blog.cn/)** ”,保证让你收获满满呦!
|
||||
|
||||
[收藏 0](https://www.ai-blog.cn/)
|
||||
|
||||
赏
|
||||
|
||||
 微信扫一扫
|
||||
|
||||
 支付宝扫一扫
|
||||
|
||||
[点赞 0](https://www.ai-blog.cn/)
|
||||
|
||||
上一篇: [重大突破!中科院发布全球首个AI芯片设计系统“启蒙”](https://www.ai-blog.cn/17756.html)
|
||||
|
||||
下一篇: [重磅!抖音日均拦截超400万条诈骗内容,反诈联盟成立](https://www.ai-blog.cn/17760.html)
|
||||
|
||||
相关推荐
|
||||
|
||||
[a16z发布全球TOP 100生成式AI消费应用榜单](https://www.ai-blog.cn/19394.html "a16z发布全球TOP 100生成式AI消费应用榜单")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
a16z发布全球TOP 100生成式AI消费应用榜单: 这是《顶级100款生成式AI消费应用》的第五版,它反映…
|
||||
|
||||
[OpenAI 浏览器上线,支持全网页操作](https://www.ai-blog.cn/19392.html "OpenAI 浏览器上线,支持全网页操作")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
OpenAI 浏览器上线,支持全网页操作: 所有用户可用,付费用户解锁 Agent 模式。 能对网页提问、…
|
||||
|
||||
[OpenAI Atlas 浏览器 Agent 模式超强操作](https://www.ai-blog.cn/19390.html "OpenAI Atlas 浏览器 Agent 模式超强操作")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
OpenAI Atlas 浏览器 Agent 模式超强操作: 自动处理多步操作,如跳转页面、替换设备等。 实测能…
|
||||
|
||||
[Claude 客户端更新:截图+语音全支持](https://www.ai-blog.cn/19388.html "Claude 客户端更新:截图+语音全支持")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
Claude 客户端更新:截图+语音全支持: 支持截图直接发 Claude,图像交互更方便。 可用 Caps Loc…
|
||||
|
||||
[AI Studio 应用构建大升级,模型直接选](https://www.ai-blog.cn/19386.html "AI Studio 应用构建大升级,模型直接选")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
AI Studio 应用构建大升级,模型直接选: 集成所有 Google AI 模型,选模型写提示词即可运行。 无…
|
||||
|
||||
[AIStudio 上线 Vibe Coding,网页开发实时预览](https://www.ai-blog.cn/19384.html "AIStudio 上线 Vibe Coding,网页开发实时预览")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
AIStudio 上线 Vibe Coding,网页开发实时预览: 可直接网页开发并实时查看结果。 支持二次创作与…
|
||||
|
||||
[OpenAI 推出浏览器 ChatGPT Atlas,体验 AI 网页助手](https://www.ai-blog.cn/19382.html "OpenAI 推出浏览器 ChatGPT Atlas,体验 AI 网页助手")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
OpenAI 推出浏览器 ChatGPT Atlas,体验 AI 网页助手: 内置侧边栏,可直接对网页提问、操控标签页…
|
||||
|
||||
[AI 正在吞噬 SaaS,CRM 只是“沉睡的数据仓库”](https://www.ai-blog.cn/19380.html "AI 正在吞噬 SaaS,CRM 只是“沉睡的数据仓库”")
|
||||
|
||||
[AI动态资讯](https://www.ai-blog.cn/anli/newszx)
|
||||
|
||||
AI 正在吞噬 SaaS,CRM 只是“沉睡的数据仓库”: AI Agent 重构企业流程,SaaS 平台变成 AI 后端。…
|
||||
@@ -0,0 +1,29 @@
|
||||
一、禁止生成 .DS\_store 文件
|
||||
|
||||
macOS可以通过命令行修改系统配置,让系统不再在文件夹中生成这个配置文件,命令如下:
|
||||
|
||||
defaults write com.apple.desktopservicesDSDontWriteNetworkStores true
|
||||
|
||||
如果此命令不生效,可以使用下方命令(注意:命令行中 -m 之后为你的目录,此命令只能指定目录生效)
|
||||
|
||||
/usr/sbin/dot\_clean -m ~/your\_working\_dir
|
||||
|
||||
此命令可以禁止生成一切文件前带.的文件生成(macOS文件前带.的默认为隐藏文件)
|
||||
|
||||
二、删除已经生成的 .DS\_store 文件
|
||||
|
||||
删除当前目录的.DS\_store 文件
|
||||
|
||||
find . -name '.DS\_Store' -type f -delete
|
||||
|
||||
删除所有的.DS\_store 文件
|
||||
|
||||
sudo find / -name ".DS\_Store" -depth -exec rm {} ;
|
||||
|
||||
三、恢复.DS\_Store生成
|
||||
|
||||
如果你觉得这个命令执行后会影响你的文件夹操作,可以使用下方命令恢复回来
|
||||
|
||||
defaults delete com.apple.desktopservices DSDontWriteNetworkStores 作者:-暗夜萤火- https://www.bilibili.com/read/cv38053061/?jump\_opus=1 出处:bilibili
|
||||
|
||||
免责声明:本内容来自平台创作者,博客园系信息发布平台,仅提供信息存储空间服务。
|
||||
@@ -0,0 +1,193 @@
|
||||
---
|
||||
title: openwrt的openclash提示【更新失败,请确认设备闪存空间足够后再试】_版本内核更新失败,请确认设备闪存空间足够后再试!-CSDN博客
|
||||
source: https://blog.csdn.net/bigcarp/article/details/130731343
|
||||
author:
|
||||
- "[[成就一亿技术人!]]"
|
||||
- "[[hope_wisdom 发出的红包]]"
|
||||
published:
|
||||
created: 2025-09-30
|
||||
description: 文章浏览阅读5.9w次,点赞28次,收藏75次。当OpenClash遇到无法从网络下载内核更新包或无法识别内核版本号的问题时,可以尝试手动下载Dev内核,然后上传到路由器,解压缩并更新配置文件。具体步骤包括:找到对应架构的安装包,上传到指定目录,解压缩并设置权限,最后在OpenClash界面更新配置完成修复。
|
||||
tags:
|
||||
- clippings
|
||||
updated: 2025-09-30T12:24
|
||||
---
|
||||
AI 搜索
|
||||
|
||||
## openwrt的openclash提示【更新失败,请确认设备闪存空间足够后再试】
|
||||
|
||||
原创 已于 2023-05-17 23:19:58 修改 · 5.9w 阅读 · 75 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
于 2023-05-17 18:04:55 首次发布
|
||||
|
||||
当OpenClash遇到无法从网络下载内核更新包或无法识别内核版本号的问题时,可以尝试手动下载Dev内核,然后上传到路由器,解压缩并更新配置文件。具体步骤包括:找到对应架构的安装包,上传到指定目录,解压缩并设置权限,最后在OpenClash界面更新配置完成修复。
|
||||
|
||||
网上搜索了一下,问题应该是出在“无法从网络下载内核更新包”或者“无法识别内核的版本号”(openclash会去 github 下载内核,github会间歇性的抽风,当抽风时无法自动完成下载。)
|
||||
|
||||
解决办法:手动下载(我是只搞了DEV内核就搞定了,TUN和Meta没有动) --> 上传到路由器上 --> 解压缩 --> 回到openclash界面更新配置文件
|
||||
|
||||
1、在 Dev 内核发布页 内查找对应的架构 安装包
|
||||
|
||||
- **Dev 内核下载** : (我的是 [clash](https://so.csdn.net/so/search?q=clash&spm=1001.2101.3001.7020) - linux -armv8.tar.gz)
|
||||
|
||||

|
||||
|
||||
2.上传到/tem/upload/目录
|
||||
|
||||

|
||||
|
||||
3、拷贝到/etc/openclash/core/ ,并解压
|
||||
|
||||

|
||||
|
||||
拷贝-->进入/etc/openclash/core/-->解压-->设置读写权限
|
||||
|
||||
```cobol
|
||||
cp /tmp/upload/clash-linux-armv8.tar.gz /etc/openclash/core/
|
||||
|
||||
|
||||
|
||||
cd /etc/openclash/core/
|
||||
|
||||
|
||||
|
||||
tar -zxvf clash-linux-armv8.tar.gz
|
||||
|
||||
|
||||
|
||||
chmod 777 clash
|
||||
|
||||
|
||||
|
||||
exit
|
||||
```
|
||||
|
||||
4、更新配置
|
||||
|
||||

|
||||
|
||||
5、完成
|
||||
|
||||
[Creator\_Ly的博客](https://blog.csdn.net/Creator_Ly)
|
||||
|
||||
05-30 7484[有些时候因为一些解不了的bug,在新的 *内核* *版本* 里面已经解决了,这时候我们会想着升级下 *内核* *版本* ,而不是把整个 *openwrt* 升级。](https://blog.csdn.net/Creator_Ly/article/details/130941861)[【 *openwrt* -21.02】T750 *openwrt* -21.02 pptp拨号 *失败* 问题分析及解决方案](https://blog.csdn.net/wgl307293845/article/details/141720207)
|
||||
|
||||
[wgl307293845的博客](https://blog.csdn.net/wgl307293845)
|
||||
|
||||
08-30 1214[点对点隧道协议 (PPTP) 是由包括微软和3Com等公司组成的PPTP论坛开发的一种点对点隧道协,基于拨号使用的PPP协议使用PAP或CHAP之类的加密算法,或者使用Microsoft的点对点加密算法MPPE。LCP terminated by peer (MPPE required but peer negotiation failed)这个错误表示需要客户端使用MPPE方式拨号。基于以上分析,可以发现是由于pptp client和server的加密方式不一致导致,需要使用mppe方式。](https://blog.csdn.net/wgl307293845/article/details/141720207)
|
||||
|
||||
12 条评论
|
||||
|
||||
[gangdayi](https://blog.csdn.net/gangdayi) 热评
|
||||
|
||||
有没有meta内核或者tun内核的下载地址
|
||||
|
||||
写评论[在 *路由器* *openwrt* 上安装openclas](https://phpsir.blog.csdn.net/article/details/149868607)
|
||||
|
||||
[
|
||||
|
||||
最新发布
|
||||
|
||||
](https://phpsir.blog.csdn.net/article/details/149868607)
|
||||
|
||||
[经验之谈,不做搬运工](https://blog.csdn.net/gianttj)
|
||||
|
||||
08-03 863[*OpenWrt* *路由器* 安装OpenClas教程:通过iStore手动安装后需重启路由才会显示菜单。安装方法参考GitHub和官网资源。运行时需下载 *内核* ,若 *失败* 可查看日志。如遇Ruby依赖错误,可删除Ruby后让OpenClas自动重装依赖解决。安装完成后需在"服务"菜单下启动, *内核* 下载按 *提示* 操作即可。](https://phpsir.blog.csdn.net/article/details/149868607)[小米AX6S刷 *OpenWrt* 和开启 *OpenClash* ,及刷回官网固件](https://xmuli.blog.csdn.net/article/details/128268719)
|
||||
|
||||
12-10 2万+[闲暇,折腾下新购 小米AX6S,刷下 \` *OpenWrt* \`,初次接触记录下。以及开启 *OpenClash* + clash-rules 的进阶使用](https://xmuli.blog.csdn.net/article/details/128268719)[*OpenClash* 无法 *更新* *内核*](https://devpress.csdn.net/v1/article/detail/134996551)
|
||||
|
||||
[
|
||||
|
||||
热门推荐
|
||||
|
||||
](https://devpress.csdn.net/v1/article/detail/134996551)
|
||||
|
||||
[HC\_wood的博客](https://blog.csdn.net/HC_wood)
|
||||
|
||||
12-14 3万+[安装完 Dev *内核* 后,可以配置代理网络节点,然后通过在 “ *openclash* ”>“全局设置”>“ *版本* *更新* ” 内 *更新* *内核* ,如你需要安装 TUN *内核* ,那么和以上方法一致,但需要将 *内核* 文件修改为 clash\_tun 并给予 777 最高权限,以下列出 Dev 和 TUN *内核* 下载地址。Dev *内核* 下载:https://github.com/vernesong/ *OpenClash* /releases/tag/Clash。](https://devpress.csdn.net/v1/article/detail/134996551)[*OpenClash* *内核* *更新* *失败* 解决方法](https://devpress.csdn.net/v1/article/detail/130613853)
|
||||
|
||||
[weixin\_49319918的博客](https://blog.csdn.net/weixin_49319918)
|
||||
|
||||
05-11 2万+[*OpenClash* 是运行在ImmortalWrt上的插件,使用这个插件可以轻松的实现全家人kx上网。在 *更新* 插件中我遇到一个问题 *OpenClash* *内核* *更新* *失败*,主程序一直是未运行的状态。在全局设置中无法识别当前 *内核* *版本* 或者是不存在。固件刷新错误导致的问题。未 *更新* 官方给定的插件。](https://devpress.csdn.net/v1/article/detail/130613853)[Ubuntu 8.10 *内核* 无法 *更新* 问题,无法关机的解决](https://blog.csdn.net/tglg/article/details/3467159)
|
||||
|
||||
[TL的专栏](https://blog.csdn.net/tglg)
|
||||
|
||||
12-07 1407[Ubuntu 8.10 *内核* 无法 *更新* 问题,无法关机的解决 昨天有位 *Linux* Eye的会员说他的Ubuntu 8.10无法正常关机,总会停留在Ubuntu的进度条那无法关机。于是尝试了以下几个方法。第一种(这个没有成功,但是也是可能的解决方案)怀疑是alsa的问题,于是可以这样操作gksu gedi](https://blog.csdn.net/tglg/article/details/3467159)[*版本* *内核* *更新* *失败* , *请* 检查网络或稍后 *再试*](https://devpress.csdn.net/v1/article/detail/109413180)
|
||||
|
||||
[小虫](https://blog.csdn.net/Demon_311)
|
||||
|
||||
11-01 1万+[*linux* *版本* *内核* *更新* *失败* , *请* 检查网络或稍后 *再试* ! 好跟上哥哥的节奏慢慢来 cd /etc/ *openclash* /core/ wget https://github.com/Dreamacro/clash/releases/download/v1.2.0/clash- *linux* -amd64-v1.2.0.gz gzip -d clash- *linux* -amd64-v1.2.0.gz mv clash- *linux* -amd64-v1.2.0 clash\_tun chmod 755 clash\_tun...](https://devpress.csdn.net/v1/article/detail/109413180)[MT3000 *路由器* 4.6.9 固件升级后 *OpenClash* 与 OPKG 配置全攻略](https://devpress.csdn.net/v1/article/detail/144393749)
|
||||
|
||||
[shawn\_du的博客](https://blog.csdn.net/shawn_du)
|
||||
|
||||
12-11 1万+[MT3000 *路由器* 在升级到 4.6.9 固件( *OpenWrt* 21.02 - SNAPSHOT r15812 + 901 - 46b6ee7ffc)之后,不少用户遭遇了之前安装的 *openclash* 消失的情况。别担心,本文将详细介绍如何重新安装 *openclash* ,并解决软件包管理的 OPKG 配置问题,让你的 *路由器* 恢复强大功能。](https://devpress.csdn.net/v1/article/detail/144393749)[【 *openwrt* -21.02】T750 *openwrt* -21.02 l2tp(no ipsec)拨号 *失败* 问题分析及解决方案](https://blog.csdn.net/wgl307293845/article/details/141721490)
|
||||
|
||||
[wgl307293845的博客](https://blog.csdn.net/wgl307293845)
|
||||
|
||||
08-30 1744[第 2 层隧道协议 (L2TP) 是IETF基于L2F (Cisco的第二层转发协议)开发的PPTP的后续 *版本* 。L2TP支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。但是当L2TP 或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP。L2TP只要求隧道媒介提供面向数据包的点对点的连接,L2TP可以在IP(使用UDP),桢中继永久虚拟电路 (PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。这里没有写入密码和用户名。](https://blog.csdn.net/wgl307293845/article/details/141721490)[\[*Openwrt*\]IPQ4019 *openwrt* 系统升级解压软件包之后,删除压缩包文件内存占用 *空间* 不释放问题分析及解决方案](https://blog.csdn.net/wgl307293845/article/details/136346023)
|
||||
|
||||
[wgl307293845的博客](https://blog.csdn.net/wgl307293845)
|
||||
|
||||
02-28 1280[qsdk11 *openwrt* -15.05 *版本* ,IPQ4019。](https://blog.csdn.net/wgl307293845/article/details/136346023)[luci下配置 *openclash*](https://devpress.csdn.net/v1/article/detail/117400037)
|
||||
|
||||
[shengyaoyi的博客](https://blog.csdn.net/shengyaoyi)
|
||||
|
||||
05-30 1万+[安装 *openclash* 后发现 *路由器* 后台没有 *openclash* 选项,查看 *openwrt* 官网需要配置luci 那就手动配置练习,熟悉一下luci: 输入tree命令观察luci文件目录结构 tree /usr/lib/lua/luci 目录有点多,不过核心就是三个目录,下面用绿色显示. ├── cacheloader.lua ├── cbi │ └── datatypes.lua ├── cbi.lua ├── ccache.lua ├── config.lua ├── 'controller' │](https://devpress.csdn.net/v1/article/detail/117400037)[小米 *路由器* 4A千兆版安装 *OpenWRT* 和ShellClash](https://devpress.csdn.net/v1/article/detail/134342699)
|
||||
|
||||
[passerma的博客](https://blog.csdn.net/passerma)
|
||||
|
||||
11-10 8957[小米 *路由器* 4A千兆版安装 *OpenWRT* 和ShellClash](https://devpress.csdn.net/v1/article/detail/134342699)[*OpenClash* 与Tailscale冲突得问题](https://blog.csdn.net/aplsc/article/details/143233394)
|
||||
|
||||
[aplsc的专栏](https://blog.csdn.net/aplsc)
|
||||
|
||||
10-25 3392[*openclash* 与tailscale冲突](https://blog.csdn.net/aplsc/article/details/143233394)[网件 R6220路由 *OpenWRT* 安装 ShellCrash](https://blog.csdn.net/ansondroider/article/details/145601951)
|
||||
|
||||
[ansondroider的博客](https://blog.csdn.net/ansondroider)
|
||||
|
||||
02-17 3046[ShellCrash是为 *Linux* 系统提供便捷管理功能的工具,适用于 *路由器* ,可通过Web面板在shell环境下管理 *设备* ,支持多种模式切换、在线 *更新* 等,能灵活配置网络规则实现精准流量管理;网件R6220是2015年发布的家用无线 *路由器* ,性能稳定,采用联发科MT7621ST处理器,支持双频,有4个千兆LAN口和1个千兆WAN口,适合家庭网络使用;R6220要安装ShellCrash需先成功刷入 *OpenWRT* 系统,否则无法安装。](https://blog.csdn.net/ansondroider/article/details/145601951)
|
||||
|
||||
评论 12
|
||||
|
||||
被折叠的 2 条评论 [为什么被折叠?](https://blogdev.blog.csdn.net/article/details/122245662)[到【灌水乐园】发言](https://bbs.csdn.net/forums/FreeZone)
|
||||
|
||||
添加红包
|
||||
|
||||
实付 元
|
||||
|
||||
[使用余额支付](https://blog.csdn.net/bigcarp/article/details/)
|
||||
|
||||
点击重新获取
|
||||
|
||||
扫码支付
|
||||
|
||||
钱包余额 0
|
||||
|
||||
抵扣说明:
|
||||
|
||||
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
|
||||
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
|
||||
|
||||
[余额充值](https://i.csdn.net/#/wallet/balance/recharge)
|
||||
|
||||
举报
|
||||
|
||||
[AI 搜索](https://ai.csdn.net/?utm_source=cknow_pc_blog_right_hover) [智能体](https://ai.csdn.net/cmd?utm_source=cknow_pc_blog_right_hover) [AI 编程](https://ai.csdn.net/coding?utm_source=cknow_pc_blog_right_hover) [AI 作业助手](https://ai.csdn.net/homework?utm_source=cknow_pc_blog_right_hover)
|
||||
|
||||
隐藏侧栏 
|
||||
|
||||
程序员都在用的中文IT技术交流社区
|
||||
|
||||

|
||||
|
||||
专业的中文 IT 技术社区,与千万技术人共成长
|
||||
|
||||

|
||||
|
||||
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!
|
||||
|
||||
客服 返回顶部
|
||||
|
||||
   
|
||||
@@ -0,0 +1,15 @@
|
||||
1、 syncthing 实现本地两个不同的文件夹 内容同步,一个只发送,一个只接收
|
||||
|
||||
2、启动两个 syncthing进程,建议使用非 root 账号,root也能用
|
||||
|
||||
```null
|
||||
./syncthing -home ~/.config/syncthing5 -gui-address 0.0.0.0:8384 ./syncthing -home ~/.config/syncthing4 -gui-address 0.0.0.0:8383
|
||||
```
|
||||
|
||||
3、同步的文件夹可以存在,也可以不存在会自己创建
|
||||
|
||||
4、先添加远程设备建立 连接(设备ID)
|
||||
|
||||
5、发送端 建立文件夹~/syncthing4- 配置 共享-仅发送
|
||||
|
||||
6、接收端 收到共享请求,确定,填写接收文件夹名 ~/syncthing5
|
||||
@@ -0,0 +1,109 @@
|
||||
一、查看 Windows 自动执行的指令
|
||||
--------------------
|
||||
|
||||
### 1.使用任务计划程序
|
||||
|
||||
**任务计划程序是 Windows 内置的工具,可以用于创建、编辑和管理计划任务。您可以按照以下步骤查看已设置的计划任务:**
|
||||
|
||||
1.1 按下 Win + R 键,然后输入 “taskschd.msc”,按 Enter 键打开任务计划程序
|
||||
|
||||

|
||||
|
||||
或在搜索框中输入"任务计划程序",然后选择打开或以管理员身份运行
|
||||
|
||||

|
||||
|
||||
1.2 在任务计划程序窗口中,您可以查看和管理计划任务。展开 “任务计划程序库”,可以看到已设置的任务列表。选择感兴趣的任务,右键单击并选择 “属性”,可以查看任务的详细信息,包括触发器、操作和条件等。
|
||||
|
||||

|
||||
|
||||
### 2.使用命令行工具
|
||||
|
||||
**您可以使用命令行工具来查看计划任务。打开命令提示符或** **PowerShell** **终端,然后使用以下命令:**
|
||||
|
||||
2.1 查看所有计划任务:
|
||||
|
||||
schtasks /query
|
||||
|
||||
2.2 查看特定计划任务的详细信息:
|
||||
|
||||
schtasks /query /tn "任务名称" /v
|
||||
|
||||
将 “任务名称” 替换为您要查看的任务的实际名称。
|
||||
|
||||
### 3.使用第三方工具
|
||||
|
||||
**还有一些第三方工具可用于查看和管理计划任务。例如,****Sysinternals Suite** **提供了一个名为** **“****Autoruns****”** **的工具,可以显示自动启动程序和计划任务等。**
|
||||
|
||||
二、取消 Windows 中的计划任务
|
||||
-------------------
|
||||
|
||||
### 1.使用任务计划程序
|
||||
|
||||
**任务计划程序是** **Windows** **内置的工具,可以用于创建、编辑和管理计划任务。按照以下步骤取消计划任务:**
|
||||
|
||||
1.1 按下 Win + R 键,然后输入 “taskschd.msc”,按 Enter 键打开任务计划程序或在搜索框中输入"任务计划程序",然后选择打开或以管理员身份运行。(图参考一、1. 1.1)
|
||||
|
||||
1.2 在任务计划程序窗口中,展开 “任务计划程序库”,找到您要取消的任务。
|
||||
|
||||
1.3 右键单击任务,然后选择 “删除”,确认删除操作。
|
||||
|
||||

|
||||
|
||||
### 2.使用命令行工具
|
||||
|
||||
**您可以使用命令行工具** **schtasks** **来取消计划任务。打开命令提示符或** **PowerShell** **终端,然后使用以下命令:**
|
||||
|
||||
schtasks /delete /tn "任务名称" /f
|
||||
|
||||
将 “任务名称” 替换为您要取消的任务的实际名称。使用 /f 参数可以强制删除任务而不需要确认。
|
||||
|
||||
请注意,取消计划任务可能需要管理员权限。如果您没有管理员权限,可能无法取消某些任务。
|
||||
|
||||
效果图
|
||||
|
||||

|
||||
|
||||
三、启动执行计划任务
|
||||
----------
|
||||
|
||||
### 1.使用任务计划程序
|
||||
|
||||
**任务计划程序是** **Windows** **内置的工具,可以用于创建、编辑和管理计划任务。按照以下步骤启动执行任务:**
|
||||
|
||||
1.1 按下 Win + R 键,然后输入 “taskschd.msc”,按 Enter 键打开任务计划程序或在搜索框中输入"任务计划程序",然后选择打开或以管理员身份运行。(图参考一、1. 1.1)
|
||||
|
||||
1.2 在任务计划程序窗口中,展开 “任务计划程序库”,找到您要启动执行的任务。
|
||||
|
||||
1.3 右键单击任务,然后选择 “运行”。
|
||||
|
||||

|
||||
|
||||
### 2.使用命令行工具
|
||||
|
||||
**您可以使用命令行工具** **schtasks** **来启动执行计划任务。打开命令提示符或** **PowerShell** **终端,然后使用以下命令:**
|
||||
|
||||
schtasks /run /tn "任务名称"
|
||||
|
||||
将 “任务名称” 替换为您要启动执行的任务的实际名称。
|
||||
|
||||
请注意,启动执行计划任务可能需要管理员权限。如果您没有管理员权限,可能无法启动某些任务。
|
||||
|
||||
四、创建任务计划
|
||||
--------
|
||||
|
||||
### 1.使用任务计划程序
|
||||
|
||||
**任务计划程序是** **Windows** **内置的工具,可以用于创建、编辑和管理计划任务。按照以下步骤创建任务:**
|
||||
|
||||
1.1 按下 Win + R 键,然后输入 “taskschd.msc”,按 Enter 键打开任务计划程序或在搜索框中输入"任务计划程序",然后选择打开或以管理员身份运行。(图参考一、1. 1.1)
|
||||
|
||||
1.2 在任务计划程序窗口中,展开 “任务计划程序库”,找到您要创建任务的文件夹。
|
||||
|
||||
1.3 右键单击空白处,然后选择 “创建基本任务…”或“创建任务…”。
|
||||
|
||||

|
||||
|
||||
1.4 根据实际情况填写
|
||||
|
||||
到此这篇关于windows定时计划任务的查看、取消、启动和创建方法的文章就介绍到这了,更多相关windows计划任务用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!
|
||||
@@ -0,0 +1,114 @@
|
||||
最新推荐文章于 2026-02-14 01:03:12 发布
|
||||
|
||||
原创 于 2021-11-11 10:28:37 发布 · 3.1w 阅读
|
||||
|
||||
· 
|
||||
23
|
||||
|
||||
· 
|
||||
64 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
#### 🔶 基本使用
|
||||
|
||||
```
|
||||
`启动: systemctl start firewalld
|
||||
关闭: systemctl stop firewalld
|
||||
查看状态: systemctl status firewalld
|
||||
开机禁用 : systemctl disable firewalld
|
||||
开机启用 : systemctl enable firewalld`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
|
||||
|
||||
```
|
||||
|
||||
> systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体
|
||||
> 启动一个服务:systemctl start firewalld.service
|
||||
> 关闭一个服务:systemctl stop firewalld.service
|
||||
> 重启一个服务:systemctl restart firewalld.service
|
||||
> 显示一个服务的状态:systemctl status firewalld.service
|
||||
> 在开机时启用一个服务:systemctl enable firewalld.service
|
||||
> 在开机时禁用一个服务:systemctl disable firewalld.service
|
||||
> 查看服务是否开机启动:systemctl is-enabled firewalld.service
|
||||
> 查看已启动的服务列表:systemctl list-unit-files|grep enabled
|
||||
> 查看启动失败的服务列表:systemctl --failed
|
||||
|
||||
#### 🔶 配置 firewalld-cmd
|
||||
|
||||
```
|
||||
`查看版本: firewall-cmd --version
|
||||
查看帮助: firewall-cmd --help
|
||||
显示状态: firewall-cmd --state
|
||||
查看所有打开的端口: firewall-cmd --zone=public --list-ports
|
||||
更新防火墙规则: firewall-cmd --reload
|
||||
查看区域信息: firewall-cmd --get-active-zones
|
||||
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
|
||||
拒绝所有包:firewall-cmd --panic-on
|
||||
取消拒绝状态: firewall-cmd --panic-off
|
||||
查看是否拒绝: firewall-cmd --query-panic`
|
||||
|
||||

|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
* 4
|
||||
* 5
|
||||
* 6
|
||||
* 7
|
||||
* 8
|
||||
* 9
|
||||
* 10
|
||||
|
||||
|
||||
```
|
||||
|
||||
#### 🔶 开启 防火墙端口
|
||||
|
||||
比如,需打开防火墙2888和3888端口
|
||||
|
||||
**步骤1:设置开放的端口号**
|
||||
|
||||
```
|
||||
`firewall-cmd --add-service=http --permanent
|
||||
sudo firewall-cmd --add-port=2888/tcp --permanent
|
||||
sudo firewall-cmd --add-port=3888/tcp --permanent`
|
||||
|
||||
* 1
|
||||
* 2
|
||||
* 3
|
||||
|
||||
|
||||
```
|
||||
|
||||
> –permanent永久生效,没有此参数重启后失效
|
||||
|
||||
**步骤2:重启防火墙**
|
||||
|
||||
```
|
||||
`firewall-cmd --reload`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||
**步骤3:查看开放端口号**
|
||||
|
||||
```
|
||||
`firewall-cmd --list-all`
|
||||
|
||||
* 1
|
||||
|
||||
|
||||
```
|
||||
|
||||

|
||||
@@ -0,0 +1,185 @@
|
||||
---
|
||||
title: "【完美解决】sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位_必须属于用户id0并且设置setuid-CSDN博客"
|
||||
source: "https://blog.csdn.net/m0_57448978/article/details/132586928"
|
||||
author:
|
||||
- "[[成就一亿技术人!]]"
|
||||
- "[[hope_wisdom 发出的红包]]"
|
||||
published:
|
||||
created: 2026-01-06
|
||||
description: "文章浏览阅读2.3w次,点赞11次,收藏46次。本文讲述了作者在尝试扩大Home路径时,误将系统分区挂载到子文件夹并修改权限导致sudo失效。通过查找解决方案,作者发现sudo必须属于用户ID0且设置setuid位,并解决了/etc/sudoers的所有权问题。"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
## 【完美解决】sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
|
||||
|
||||
最新推荐文章于 2025-11-20 04:55:37 发布
|
||||
|
||||
原创 于 2023-08-30 17:36:26 发布 · 2.3w 阅读 · 46 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
文章标签:
|
||||
|
||||
[#服务器](https://so.csdn.net/so/search/s.do?q=%E6%9C%8D%E5%8A%A1%E5%99%A8&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art) [#linux](https://so.csdn.net/so/search/s.do?q=linux&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art) [#运维](https://so.csdn.net/so/search/s.do?q=%E8%BF%90%E7%BB%B4&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art)
|
||||
|
||||
本文讲述了作者在尝试扩大Home路径时,误将系统分区挂载到子文件夹并修改权限导致sudo失效。通过查找解决方案,作者发现sudo必须属于用户ID0且设置setuid位,并解决了/etc/sudoers的所有权问题。
|
||||
|
||||
故事的起源发生于我觉得自己的Home路径太小,用我自己之前的方法,想要挂载 [硬盘分区](https://so.csdn.net/so/search?q=%E7%A1%AC%E7%9B%98%E5%88%86%E5%8C%BA&spm=1001.2101.3001.7020) 实现扩容的目的。但是我没搞清一件事就是,我挂载的分区就是 linux 的系统分区!而我挂在的段是系统盘下的子文件夹(就等于是我把子文件夹挂载在父文件夹下)。其实这个没有什么问题,但是在修改的过程中有一步是修改挂在路径的权限,就这样我把linux的系统权限由root改成了用户名k。导致了我自己的sudo直接不认主了,直接报废,所有与sudo相关的命令无法执行!
|
||||
|
||||
在网上找了一圈,挨个试了好几个没啥效果,最终还是在我坚持不懈的努力下得到解决!
|
||||
|
||||
#### 1、解决sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
|
||||
|
||||
试了一圈,只有这个博主的方法有用,不得不说还是得多思考
|
||||
|
||||
[ubuntu /usr/bin/sudo必须属于用户ID 0(的用户)并设置setuid位 踩坑解决\_必须属于用户id0\_爱折腾的小码农的博客-CSDN博客](https://blog.csdn.net/qq_38883889/article/details/109674073?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-109674073-blog-103401394.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-109674073-blog-103401394.235%5Ev38%5Epc_relevant_anti_t3&utm_relevant_index=2 "ubuntu /usr/bin/sudo必须属于用户ID 0(的用户)并设置setuid位 踩坑解决_必须属于用户id0_爱折腾的小码农的博客-CSDN博客")
|
||||
|
||||
按照上面的步骤走下来,但是出现了新的问题
|
||||
|
||||
Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”
|
||||
|
||||
reboot过后发现sudo是可以用了,但是后面会出来以上内容,每次都带着所以我先把之前设置的权限改回了root然后重新开始找这个解决办法。
|
||||
|
||||
#### 2、解决Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”
|
||||
|
||||
参考: [完美解决Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”\_joker-wt的博客-CSDN博客](https://blog.csdn.net/wtlll/article/details/119059267 "完美解决Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”_joker-wt的博客-CSDN博客")
|
||||
|
||||
因为这个时候sudo其实已经是可以用的了
|
||||
|
||||
```cobol
|
||||
sudo chown root: root /etc/sudoers /etc/sudoers.d -R
|
||||
```
|
||||
|
||||
这里我们加上如上代码,直接速通!
|
||||
|
||||
[Ubuntu *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://vegetable-chicken.blog.csdn.net/article/details/103401394)
|
||||
|
||||
[专注基础架构领域](https://blog.csdn.net/qq_19734597)
|
||||
|
||||
12-05 3万+[一、前言 这是一个神奇的错误,缘由是因为有人将/ *usr* / *bin* / *sudo* 的权限改为777或其他。 *解决* 办法:最终目的只有一个,想办法执行 $ chmod 4755 / *usr* / *bin* / *sudo* $ chmod 755 / *usr* 二、 *解决* 办法 1.如果知道root密码。 su登录root *用户* ,执行命令 $ chmod 4755 / *usr* / *bin* / *sudo* $ chmod 7...](https://vegetable-chicken.blog.csdn.net/article/details/103401394)
|
||||
|
||||
2 条评论 您还未登录,请先 登录 后发表或查看评论[*sudo**:*/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/iteye_9184/article/details/82580189)
|
||||
|
||||
1-3[今天手抖本来要修改/ *usr* / *bin* /下面的一个文件属性为 user*:*user,执行chown -R / *usr* / *bin* /的时候,再按tab之前直接敲了回车;结果导致执行 *sudo* 命令时出现错误提示*:*“ *sudo**:*/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位* ” 网上找了一些 *解决* 方案,都没能很好的成功;结果结合两个帖子顺利搞定。步骤如下...](https://blog.csdn.net/iteye_9184/article/details/82580189)[安全编程指南](https://blog.csdn.net/duduhaha/article/details/1147831)
|
||||
|
||||
12-30[有效U *ID* 和有效G *ID* 每个进程有一个有效 *用户* *ID*,在通常的环境中最初是 *设置* 成和 实际 *用户* *ID* 一样的值,但是当一 *setuid* 文件被执行以后,有效 *用户* *ID* 属于文件的属主,因此在执行 *setuid* root程序中,进程的有效u *id* 会变为 *0* *(*root*)*,而此时实际u *id* 会仍旧是 *用户* U *ID*.这是系统调用用于判断进程是否有足够的权利访问一资源. 保留U *ID* 和...](https://blog.csdn.net/duduhaha/article/details/1147831)[Kylin-Desktop 提示 *sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/taoxicun/article/details/130618955)
|
||||
|
||||
[太极淘的博客](https://blog.csdn.net/taoxicun)
|
||||
|
||||
05-11 4042[*sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/taoxicun/article/details/130618955)[银河麒麟V1 *0* : *sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/kevin_lp/article/details/137017911)
|
||||
|
||||
[潮湿的桥](https://blog.csdn.net/kevin_lp)
|
||||
|
||||
03-25 5597[*sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位* 。修改了/ *usr* / *bin* / *sudo* 的权限,引发后续问题。5、重启:exec /s *bin* /init。四、 *解决* 方法(不知道root密码)三、 *解决* 方法(知道root密码)1、重启系统,按e进入编辑模式。](https://blog.csdn.net/kevin_lp/article/details/137017911)[*Linux* 系统入门与配置](https://blog.csdn.net/qq_28949903/article/details/46459733)
|
||||
|
||||
1-4[\# *0* 停机 *(*千万不能把initdefault *设置* 为 *0**)* 1 / 45 #1 单 *用户* 模式 #2 多 *用户*,没有 NFS *(*和级别3 相似,会停止部分服务*)* #3 完全多 *用户* 模式 #4 没有用到 #5 x11 *(*Xwindow*)* #6 重新启动 *(*千万不要把initdefault *设置* 为 6*)* 1.3.5 查看 *linux* 系统信息...](https://blog.csdn.net/qq_28949903/article/details/46459733)[TogetherJS与在线设计:实时设计评审与协作的终极指南](https://blog.csdn.net/gitblog_00826/article/details/151476637)
|
||||
|
||||
[
|
||||
|
||||
最新发布
|
||||
|
||||
](https://blog.csdn.net/gitblog_00826/article/details/151476637)
|
||||
|
||||
[gitblog\_00826的博客](https://blog.csdn.net/gitblog_00826)
|
||||
|
||||
11-20 281[TogetherJS是一款由Mozilla开发的免费开源JavaScript库,为你的网站添加令人惊喜的实时协作功能。这款工具让设计师和团队能够轻松实现远程设计评审、实时编辑和同步浏览,彻底改变传统设计工作流程。😊 ## 为什么TogetherJS是设计协作的 *完美* 选择? ### 实时同步设计体验 TogetherJS让你的 *用户* 能够\*\*实时协作设计\*\*,看到彼此的鼠标光标、编辑操作和页面浏览行](https://blog.csdn.net/gitblog_00826/article/details/151476637)[麒麟系统提示 *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/liudexin1985/article/details/139683070)
|
||||
|
||||
[liudexin1985的专栏](https://blog.csdn.net/liudexin1985)
|
||||
|
||||
06-14 3612[2、选择recovery mode。输入指令后根据提示依次输入密码。指令:passwd root。1、重启电脑,选择高级模式。3、在下面 *位* 置输入以下指令。3.1重设root密码。](https://blog.csdn.net/liudexin1985/article/details/139683070)[Solaris高级系统管理员指南\_solaris远程单 *用户*](https://blog.csdn.net/uuty/article/details/140294)
|
||||
|
||||
1-5[1.5.1.21 *设置* Bourne和Korn shell路径 1.5.1.22 *设置* C shell路径 1.5.2使用管理工具 第2章、基本OS命令 2.1查找 *用户* 信息 2.1.1确定系统中有谁注册 2.1.1.1使用who命令 2.1.1.2使用finger命令 2.1.1.3使用rusers -1命令 2.1.1.4使用whodo命令 2.1.2检查 *用户* 的 *用户* 号和组号 *(**id* 命令*)*...](https://blog.csdn.net/uuty/article/details/140294)[*sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/qq_25458977/article/details/78861980)
|
||||
|
||||
[
|
||||
|
||||
热门推荐
|
||||
|
||||
](https://blog.csdn.net/qq_25458977/article/details/78861980)
|
||||
|
||||
12-21 4万+[应该是之前的误操作,导致 *sudo* 不能正常的使用,每次输入sudp,都会提醒 *:**sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*; 这是因为我之前修改了 *usr* 的权限,将 *usr* 整个文件夹的权限都修改为自己的组,而不是root; 这个问题的修改方法*:* 具体修改方法*:* http*:*//www.jianshu.com/p/2c46 *0* cf](https://blog.csdn.net/qq_25458977/article/details/78861980)[ubuntu报错 *sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://devpress.csdn.net/v1/article/detail/129751215)
|
||||
|
||||
[qq\_43387268的博客](https://blog.csdn.net/qq_43387268)
|
||||
|
||||
03-24 5406[我们用的是二手的DELL R73 *0* XD *服务器* ,开机后一直点按的方式触发ESC和SHIFT键(也不知道哪个是对的),在看到BIOS启动界面是看到顶部有这个界面时按F12。但ubuntu2 *0* 的版本是没有固定的root密码的,在 *sudo* 异常的情况下,也不能用命令 *sudo* passwd root修改root的密码。查找了各种大神讲解,合适的做法是进入到ubuntu的安全模式,然后修改引导文件的配置。修复后,进入/ *usr* / *bin* ,以 *sudo* 命令创建一个目录,成功!](https://devpress.csdn.net/v1/article/detail/129751215)[*Linux* *运维* 学习笔记之六*:**Linux* 中的文件类型、属性、正则表达式、权限体...](https://blog.csdn.net/rumengjian/article/details/76378022)
|
||||
|
||||
1-6[\* 文件拥有者的User *ID* \* 文件的Group *ID* \* 文件的读、写、执行权限 \* 文件的时间戳,共有三个*:*ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间, atime指文件上一次打开的时间。 \* 链接数,即有多少文件名指向这个inode \* 文件数据block的 *位* 置 *(*指针,inode节点和block的对应关系*)*...](https://blog.csdn.net/rumengjian/article/details/76378022)[*Linux* 操作系统详解](https://blog.csdn.net/kongdaoxian/article/details/6961370)
|
||||
|
||||
12-29[\- set u *id* 与set g *id* 在u和g的x *位* 置上各采用一个s,sticky使用一个t。 set g *id* 对目录的作用 - 默认情况下,*用户* 建立的文件属于 *用户* 当前所在的组。 - 目录上 *设置* 了setg *id*,表示在此目录中,任何人建立的文件,都会属于目录所属的组。 # cd /home/test # touch test2.php # *id* root # mkdir demo # chgrp sk...](https://blog.csdn.net/kongdaoxian/article/details/6961370)[*运维* 系列【仅供参考】: *sudo**:* / *usr* / *bin* / *sudo* must be owned by u *id* *0* and have the *setuid* bit set问题 *解决* 方案--Ubuntu系统](https://blog.csdn.net/weixin_54626591/article/details/143595735)
|
||||
|
||||
[weixin\_54626591的博客](https://blog.csdn.net/weixin_54626591)
|
||||
|
||||
11-07 600[*sudo**:* / *usr* / *bin* / *sudo* must be owned by u *id* *0* and have the *setuid* bit set问题 *解决* 方案](https://blog.csdn.net/weixin_54626591/article/details/143595735)[*运维* 系列: *sudo**:* / *usr* / *bin* / *sudo* must be owned by u *id* *0* and have the *setuid* bit set](https://blog.csdn.net/weixin_54626591/article/details/141889240)
|
||||
|
||||
[weixin\_54626591的博客](https://blog.csdn.net/weixin_54626591)
|
||||
|
||||
09-04 1355[*sudo**:* / *usr* / *bin* / *sudo* must be owned by u *id* *0* and have the *setuid* bit set](https://blog.csdn.net/weixin_54626591/article/details/141889240)[*Linux* : *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://devpress.csdn.net/v1/article/detail/80169012)
|
||||
|
||||
[m0\_37257009的博客](https://blog.csdn.net/m0_37257009)
|
||||
|
||||
05-02 8306[1.权能实验过程中将 *sudo* 的s *位* 给去掉了2.恢复 *sudo* 权限重启进入recovery模式输入如下指令](https://devpress.csdn.net/v1/article/detail/80169012)[【领卓教育】 *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位* ; *解决* 方法;](https://blog.csdn.net/Printf_y/article/details/83543445)
|
||||
|
||||
[Printf\_y的博客](https://blog.csdn.net/Printf_y)
|
||||
|
||||
10-30 8686[*sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位* ; 是之前的误操作,导致 *sudo* 不能正常的使用,每次输入 *sudo*,都会提醒 *:**sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*; 这是因为修改了 *usr* 的权限,将 *usr* 整个文件夹的权限都修改为自己的组,而不是root; 这个问题的修改方法*:*进入r...](https://blog.csdn.net/Printf_y/article/details/83543445)[ubuntu系统 *sudo* 命令失败 提示 *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/sinat_41860739/article/details/120157634)
|
||||
|
||||
[sinat\_41860739的博客](https://blog.csdn.net/sinat_41860739)
|
||||
|
||||
09-07 1353[ubuntu系统 *sudo* 命令失败 提示 *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位* 首先进入超级管理员权限 输入命令: su root 输入密码:123456(自己的) 进入后输入以下命令: chown root*:*root / *usr* / *bin* / *sudo* chmod 4755 / *usr* / *bin* / *sudo* 之后重启reboot即可...](https://blog.csdn.net/sinat_41860739/article/details/120157634)[deepin系统: *sudo* :/ *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/xiaoxinla/article/details/112797189)
|
||||
|
||||
[xiaoxinla的专栏](https://blog.csdn.net/xiaoxinla)
|
||||
|
||||
01-18 2490[出现这个错误,是因为我执行了: *sudo* chown a / *usr* / -R 命令,把自己的权限交出去了,导致 *sudo* 命令不能执行了; *解决* 办法:最终目的只有一个,想办法执行: $ chmod 4755 / *usr* / *bin* / *sudo* $ chmod 755 / *usr* 如果知道root密码,直接使用su命令登录,然后执行: $ chmod 4755 / *usr* / *bin* / *sudo* $ chmod 755 / *usr* 如果不知道root密码,就比较麻烦了,只能破解:deepin 2 *0* 破解密码(root)..](https://blog.csdn.net/xiaoxinla/article/details/112797189)[【ubuntu】 *sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*](https://blog.csdn.net/qq_35975447/article/details/125662222)
|
||||
|
||||
[聿默的博客](https://blog.csdn.net/qq_35975447)
|
||||
|
||||
07-07 2153[*sudo**:* / *usr* / *bin* / *sudo* 必须属于 *用户* *ID* *0* *(*的 *用户**)* *并且* *设置* *setuid* *位*,solved](https://blog.csdn.net/qq_35975447/article/details/125662222)
|
||||
|
||||
评论 2
|
||||
|
||||
被折叠的 0 条评论 [为什么被折叠?](https://blogdev.blog.csdn.net/article/details/122245662)[到【灌水乐园】发言](https://bbs.csdn.net/forums/FreeZone)
|
||||
|
||||
添加红包
|
||||
|
||||
实付 元
|
||||
|
||||
[使用余额支付](https://blog.csdn.net/m0_57448978/article/details/)
|
||||
|
||||
点击重新获取
|
||||
|
||||
扫码支付
|
||||
|
||||
钱包余额 0
|
||||
|
||||
抵扣说明:
|
||||
|
||||
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
|
||||
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
|
||||
|
||||
[余额充值](https://i.csdn.net/#/wallet/balance/recharge)
|
||||
|
||||
举报
|
||||
|
||||
[ 点击体验
|
||||
DeepSeekR1满血版](https://ai.csdn.net/chat?utm_source=cknow_pc_blogdetail&spm=1001.2101.3001.10583) 
|
||||
|
||||
程序员都在用的中文IT技术交流社区
|
||||
|
||||

|
||||
|
||||
专业的中文 IT 技术社区,与千万技术人共成长
|
||||
|
||||

|
||||
|
||||
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!
|
||||
|
||||
客服 返回顶部
|
||||
|
||||
登录后您可以享受以下权益:
|
||||
|
||||
- 免费复制代码
|
||||
- 和博主大V互动
|
||||
- 下载海量资源
|
||||
- 发动态/写文章/加入社区
|
||||
×
|
||||
@@ -0,0 +1,93 @@
|
||||
\[i=s\] 本帖最后由 神经蛙\_r9959 于 2024-11-18 14:05 编辑 \[/i\]
|
||||
|
||||
背景
|
||||
|
||||
> 使用nas的小伙伴通常会用ddns或者IPV6把服务暴露到公网,方便访问,一旦暴露到公网,不可避免的会被扫描爆破,一旦被爆破对我们来说也是一个灾难,可能好几年的图片都丢失,所以最好还是加一道防护,防止爆破,这里我是用fail2ban对账号进行保护
|
||||
|
||||
#### 1.安装fail2ban
|
||||
|
||||
```null
|
||||
#1. 安装fail2ban
|
||||
sudo apt install fail2ban
|
||||
|
||||
```
|
||||
|
||||
#### 2\. 添加日志过滤的配置
|
||||
|
||||
```null
|
||||
#
|
||||
sudo vim /etc/fail2ban/filter.d/trim_main.conf
|
||||
|
||||
```
|
||||
|
||||
```null
|
||||
#以下内容写入到/etc/fail2ban/filter.d/trim_main.conf
|
||||
[Definition]
|
||||
failregex = MAINEVENT:.*"template":"LoginFail".*"IP":"<HOST>"
|
||||
ignoreregex =
|
||||
|
||||
```
|
||||
|
||||
#### 3\. 设置要ban的规则
|
||||
|
||||
```null
|
||||
#
|
||||
sudo vim /etc/fail2ban/jail.local
|
||||
|
||||
```
|
||||
|
||||
```null
|
||||
#把下面配置写入jail.local
|
||||
[DEFAULT]
|
||||
# 忽略的IP地址列表,局域网内的ip不做限制
|
||||
ignoreip = 127.0.0.1/8 192.168.1.0/24
|
||||
# 默认的禁用时间(秒)
|
||||
bantime = 3600
|
||||
# 最大失败尝试次数
|
||||
maxretry = 5
|
||||
|
||||
# 日志级别
|
||||
loglevel = 3
|
||||
|
||||
[trim_main]
|
||||
enabled = true
|
||||
filter = trim_main
|
||||
logpath = /var/log/syslog
|
||||
maxretry = 5
|
||||
bantime = 3600
|
||||
findtime = 600
|
||||
#若想ban掉某个ip,不让他访问飞牛服务器任何端口,就用这个配置
|
||||
#action = iptables-allports[name=trim_main, port="all"]
|
||||
#只ban 掉飞牛5667端口访问权限
|
||||
action = iptables-multiport[name=trim_main, port="5667", protocol=tcp]
|
||||
|
||||
```
|
||||
|
||||
以上参数可根据自己的需求做调整,比如密码错误次数,ban的时间长短,还有ban的端口,因为我对外暴露的就一个5667端口,所以这里我就ban了5667,如果想直接ban掉ip的所有访问权限,直接把 `action = iptables-allports[name=trim_main, port="all"]`的注释去掉,把5667那个配置注释即可
|
||||
|
||||
#### 4\. fail2ban基本用法
|
||||
|
||||
```null
|
||||
#启动
|
||||
sudo systemctl start fail2ban
|
||||
#停止
|
||||
sudo systemctl stop fail2ban
|
||||
# 重启
|
||||
sudo systemctl stop fail2ban
|
||||
# 查看被ban的ip
|
||||
sudo fail2ban-client banned
|
||||
# 解除某个被ban的ip
|
||||
sudo fail2ban-client set trim_main unbanip x.x.x.x
|
||||
#开机启动fail2ban
|
||||
sudo systemctl enable fail2ban
|
||||
# 禁止开机启动
|
||||
sudo systemctl disable fail2ban
|
||||
|
||||
```
|
||||
|
||||
#### 5.飞牛的服务日志查看
|
||||
|
||||
```null
|
||||
sudo tail -f /var/log/syslog
|
||||
|
||||
```
|
||||
@@ -0,0 +1,276 @@
|
||||
**iperf3 是最常用的网络吞吐测试工具之一,可以在两台设备之间通过“客户端 ↔ 服务端”产生测试流量,测出链路的:**
|
||||
|
||||
* **TCP 吞吐(带宽上限、拥塞、窗口等)**
|
||||
* **UDP 吞吐 + 丢包 + 抖动(jitter)**
|
||||
* **单向/反向/双向**
|
||||
* **多连接并发能力**
|
||||
* **长时间稳态、突发等**
|
||||
|
||||
> **一句话原理**:一台机器跑 `iperf3 -s` 当服务端;另一台跑 `iperf3 -c <server_ip>` 当客户端。 **在 fnOS 上最推荐用 Docker 跑服务端。**
|
||||
|
||||
0\. 推荐方案
|
||||
--------
|
||||
|
||||
* **推荐**:fnOS(飞牛 NAS)用 **Docker 部署 iperf3 Server**
|
||||
* **优点:一键、干净、升级方便**
|
||||
* **备选**:如果你已有 SSH 权限,也可以在 fnOS 终端里直接安装 iperf3
|
||||
|
||||
* * *
|
||||
|
||||
1\. 方案 A:Docker 在 fnOS 上部署 iperf3 服务端(推荐)
|
||||
-----------------------------------------
|
||||
|
||||
### 1.1 图形界面部署(最简单)
|
||||
|
||||
1. **打开 fnOS 的** **Docker** 应用
|
||||
2. **进入** **镜像仓库/镜像管理**
|
||||
3. **搜索** `iperf3`
|
||||
4. **选择镜像(例如** `networkstatic/iperf3`)并下载
|
||||
5. **创建容器:**
|
||||
* **网络模式**:建议 `host`
|
||||
* \*\*或者端口映射 \*\*`5201:5201`
|
||||
* **启动命令/command**:`-s`(server 模式)
|
||||
6. **启动容器后,日志里看到:**
|
||||
* `Server listening on 5201` **说明服务端已就绪**
|
||||
|
||||
> **为什么建议 host?** \*\* \*\*避免端口映射、NAT 或容器网络限制导致测速偏差。
|
||||
|
||||
* * *
|
||||
|
||||
### 1.2 Docker Compose 部署(喜欢 compose 的同学)
|
||||
|
||||
在 fnOS 的 compose/stack 面板里新建:
|
||||
|
||||
```null
|
||||
services:
|
||||
iperf3:
|
||||
image: networkstatic/iperf3:latest
|
||||
container_name: iperf3
|
||||
command: -s
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
|
||||
```
|
||||
|
||||
保存并启动即可。
|
||||
|
||||
### 1.3 端口/防火墙说明
|
||||
|
||||
* **iperf3 默认监听:5201/TCP + 5201/UDP**
|
||||
* **如果 NAS 有防火墙/安全策略,记得放行端口**
|
||||
* ****也可以换端口:****
|
||||
|
||||
**服务端:**
|
||||
|
||||
```null
|
||||
iperf3 -s -p 6000
|
||||
|
||||
```
|
||||
|
||||
**客户端:**
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -p 6000
|
||||
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
2\. 方案 B:SSH 进 fnOS 直接安装(有终端权限时)
|
||||
--------------------------------
|
||||
|
||||
**如果你已开启 SSH(fnOS 系统设置可开),终端里尝试:**
|
||||
|
||||
```null
|
||||
# Debian/Ubuntu 系
|
||||
sudo apt update
|
||||
sudo apt install iperf3
|
||||
|
||||
# CentOS/RHEL 系
|
||||
sudo yum install iperf3
|
||||
|
||||
```
|
||||
|
||||
**如果包管理不可用或装不上,回到 Docker 方案即可(最稳)。**
|
||||
|
||||
* * *
|
||||
|
||||
3\. NAS 当服务端,客户端怎么测
|
||||
-------------------
|
||||
|
||||
### 3.1 fnOS/NAS 上启动 server
|
||||
|
||||
* \*\*Docker 方式已经 \*\*`-s` 就不用再管
|
||||
* **命令行方式:**
|
||||
|
||||
```null
|
||||
iperf3 -s
|
||||
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
### 3.2 客户端测速(任何 PC/服务器/路由器)
|
||||
|
||||
**最基础 TCP 上行(客户端 → NAS):**
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP>
|
||||
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
4\. 飞牛 NAS 场景下常用测速方式
|
||||
--------------------
|
||||
|
||||
\*\*下面所有命令都在 \*\***客户端** 执行。
|
||||
|
||||
### 4.1 测上行 TCP(Client → NAS)
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -t 30 -i 1
|
||||
|
||||
```
|
||||
|
||||
* `-t 30` 测 30 秒(默认 10 秒)
|
||||
* `-i 1` 每秒输出一次(看波动)
|
||||
|
||||
* * *
|
||||
|
||||
### 4.2 测下行 TCP(NAS → Client)
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -R -t 30 -i 1
|
||||
|
||||
```
|
||||
|
||||
`-R` 表示反向测试(server 发 → client 收)。
|
||||
|
||||
* * *
|
||||
|
||||
### 4.3 多并发 TCP(测跑满能力)
|
||||
|
||||
**在 2.5G/10G 或高延迟链路下,单流可能跑不满,用多流:**
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -P 8 -t 30 -i 1
|
||||
|
||||
```
|
||||
|
||||
`-P` = 并发流数量。
|
||||
|
||||
* * *
|
||||
|
||||
### 4.4 双向同时测(上行 + 下行)
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> --bidir -t 30 -i 1
|
||||
|
||||
```
|
||||
|
||||
**适合验证全双工链路或 NAT/防火墙策略。**
|
||||
|
||||
* * *
|
||||
|
||||
### 4.5 UDP 测吞吐 + 丢包 + jitter(常用于 Wi-Fi / 实时业务)
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -u -b 300M -l 1400 -t 30 -i 1
|
||||
|
||||
```
|
||||
|
||||
* `-u` 使用 UDP
|
||||
* `-b 300M` 目标速率(UDP **必须指定**)
|
||||
* `-l 1400` 包长(避免超过 MTU 分片)
|
||||
|
||||
* * *
|
||||
|
||||
### 4.6 UDP 找上限(压到开始丢包)
|
||||
|
||||
**从小到大逐步加速率,例如:**
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -u -b 500M -l 1400 -t 20 -i 1
|
||||
|
||||
```
|
||||
|
||||
**当丢包明显上升、jitter 飙升,即接近链路上限。**
|
||||
|
||||
* * *
|
||||
|
||||
### 4.7 长时间稳态(看是否降速/抖动)
|
||||
|
||||
```null
|
||||
iperf3 -c <NAS_IP> -t 300 -i 5
|
||||
|
||||
```
|
||||
|
||||
**测 5 分钟,每 5 秒一报。**
|
||||
|
||||
* * *
|
||||
|
||||
5\. 结果怎么看
|
||||
---------
|
||||
|
||||
### 5.1 TCP
|
||||
|
||||
**看最后两行:**
|
||||
|
||||
* `sender`:客户端发出去的带宽
|
||||
* `receiver`:NAS 实际收到的带宽
|
||||
|
||||
**两者应接近;差距大通常说明重传/拥塞/丢包。**
|
||||
|
||||
* * *
|
||||
|
||||
### 5.2 UDP
|
||||
|
||||
**重点三项:**
|
||||
|
||||
* **带宽(Mbits/sec)**
|
||||
* **jitter(ms)**
|
||||
* **丢包率(lost/total)**
|
||||
|
||||
**丢包 > 1% 或 jitter 很大,对语音/视频/游戏会明显影响。**
|
||||
|
||||
* * *
|
||||
|
||||
6\. 常见坑 & 排查
|
||||
------------
|
||||
|
||||
1. **测速比预期低**
|
||||
* **先试** `-P 4/8/16` 多流
|
||||
* **单流 TCP 在高带宽链路上经常跑不满**
|
||||
2. **UDP 忘了加 `-b`**
|
||||
* **默认只有 1M,测速会假低**
|
||||
3. **容器网络模式不对**
|
||||
* **推荐** `host`
|
||||
* `bridge` 可能被 NAT/限速影响
|
||||
4. **MTU/分片导致性能怪异**
|
||||
* **UDP 用** `-l 1400`
|
||||
* **TCP 用** `-M 1400`
|
||||
|
||||
* * *
|
||||
|
||||
7\. 一键抄走的飞牛 NAS 测速模板
|
||||
--------------------
|
||||
|
||||
**假设 NAS IP =** `192.168.1.10`
|
||||
|
||||
```null
|
||||
# 1) 上行 TCP
|
||||
iperf3 -c 192.168.1.10 -t 30 -i 1
|
||||
|
||||
# 2) 下行 TCP
|
||||
iperf3 -c 192.168.1.10 -R -t 30 -i 1
|
||||
|
||||
# 3) 多流跑满
|
||||
iperf3 -c 192.168.1.10 -P 8 -t 30 -i 1
|
||||
|
||||
# 4) UDP Wi-Fi/实时压测
|
||||
iperf3 -c 192.168.1.10 -u -b 300M -l 1400 -t 30 -i 1
|
||||
|
||||
```
|
||||
|
||||
* * *
|
||||
@@ -0,0 +1,214 @@
|
||||
阿里云AI生产力先锋第二期上线啦!面对如今火热的AI视频浪潮,围绕“超级创作者-AI生产力先锋开辟视觉创作新路径”的议题,来自影视、广告、设计等多行业的AI生产力先锋们将带来精彩分享!如何让AI从Toy到Tool再到真正的生产力,让创作者更快落地AI应用制作视频,还有对时下兴起的AI短剧的讨论,你想了解的tips这里都有!👉 立即点击链接,观看视频:[ https://click.aliyun.com/m/1000414743/](https://click.aliyun.com/m/1000414743/)
|
||||
|
||||
### 前言
|
||||
|
||||
WebDAV (Web Distributed Authoring and Versioning) 是一种基于HTTP的协议,常用于云存储服务如Cloudreve、NextCloud等。在Linux系统中挂载WebDAV可以让我们像使用本地文件夹一样操作远程存储,本文将详细介绍在Ubuntu系统上挂载WebDAV并实现自动双向同步的几种方法。
|
||||
|
||||
### 方法对比
|
||||
|
||||
|
|
||||
|
||||
方法
|
||||
|
||||
|
||||
|
|
||||
|
||||
优点
|
||||
|
||||
|
||||
|
|
||||
|
||||
缺点
|
||||
|
||||
|
||||
|
|
||||
|
||||
适用场景
|
||||
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
davfs2
|
||||
|
||||
|
||||
|
|
||||
|
||||
系统级挂载,访问速度快
|
||||
|
||||
|
||||
|
|
||||
|
||||
配置复杂,网络问题易断线
|
||||
|
||||
|
||||
|
|
||||
|
||||
频繁文件操作
|
||||
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
rclone
|
||||
|
||||
|
||||
|
|
||||
|
||||
功能强大,支持多种云存储
|
||||
|
||||
|
||||
|
|
||||
|
||||
占用资源较多
|
||||
|
||||
|
||||
|
|
||||
|
||||
多种云服务整合
|
||||
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
unison
|
||||
|
||||
|
||||
|
|
||||
|
||||
真正的双向同步
|
||||
|
||||
|
||||
|
|
||||
|
||||
配置复杂,学习成本高
|
||||
|
||||
|
||||
|
|
||||
|
||||
严格的双向同步需求
|
||||
|
||||
|
||||
|
|
||||
|
||||
### 方法一:使用 davfs2 挂载
|
||||
|
||||
#### 1\. 安装依赖包
|
||||
|
||||
#### 2\. 用户组配置
|
||||
|
||||
#### 3\. 配置认证信息
|
||||
|
||||
#### 4\. 优化配置文件
|
||||
|
||||
编辑 `~/.davfs2/davfs2.conf`,确保以下配置项:
|
||||
|
||||
#### 5\. 挂载WebDAV
|
||||
|
||||
#### 6\. 自动挂载配置
|
||||
|
||||
为了避免启动时挂载失败影响系统,建议使用安全的fstab配置:
|
||||
|
||||
选项说明:
|
||||
|
||||
* `noauto`: 不在启动时自动挂载
|
||||
* `nofail`: 挂载失败不影响系统启动
|
||||
* `user`: 允许普通用户挂载
|
||||
|
||||
### 方法二:使用 rclone(推荐)
|
||||
|
||||
#### 1\. 安装 rclone
|
||||
|
||||
#### 2\. 配置 WebDAV 连接
|
||||
|
||||
#### 3\. 双向同步
|
||||
|
||||
#### 4\. 挂载方式使用
|
||||
|
||||
### 智能挂载脚本
|
||||
|
||||
为了解决davfs2挂载过程中的各种问题,我开发了一个智能挂载脚本:
|
||||
|
||||
#### 脚本特性
|
||||
|
||||
* **智能卸载**:多层卸载机制(普通→强制→懒卸载)
|
||||
* **多种挂载方法**:自动尝试不同的挂载方式
|
||||
* **错误处理**:详细的日志输出和状态检查
|
||||
* **权限检查**:自动检测和提醒权限问题
|
||||
|
||||
#### 使用方法
|
||||
|
||||
#### 脚本核心功能
|
||||
|
||||
脚本会依次尝试以下挂载方法:
|
||||
|
||||
1. **sudo mount -t davfs**:最可靠的方法
|
||||
2. **直接调用 mount.davfs**:适用于用户组配置正确的情况
|
||||
3. **临时fstab条目**:作为最后的备用方案
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
#### 1\. 权限问题:“NoPermissions”
|
||||
|
||||
**原因**:用户不在davfs2组或配置不正确
|
||||
|
||||
**解决方案**:
|
||||
|
||||
#### 2\. fstab配置冲突
|
||||
|
||||
**错误信息**:`different mount options in /etc/fstab`
|
||||
|
||||
**解决方案**:
|
||||
|
||||
#### 3\. 网络连接问题
|
||||
|
||||
**症状**:挂载后访问缓慢或断线
|
||||
|
||||
**解决方案**:
|
||||
|
||||
* 检查网络稳定性
|
||||
* 调整davfs2缓存设置
|
||||
* 考虑使用rclone的mount功能
|
||||
|
||||
#### 4\. 认证失败
|
||||
|
||||
**解决方案**:
|
||||
|
||||
### 最佳实践建议
|
||||
|
||||
#### 1\. 选择合适的方法
|
||||
|
||||
* **简单文件访问**:使用davfs2
|
||||
* **多云服务整合**:使用rclone
|
||||
* **严格双向同步**:使用unison
|
||||
* **批量文件操作**:使用rclone bisync
|
||||
|
||||
#### 2\. 安全配置
|
||||
|
||||
#### 3\. 监控和维护
|
||||
|
||||
#### 4\. 性能优化
|
||||
|
||||
### 故障排除
|
||||
|
||||
#### 诊断命令
|
||||
|
||||
#### 日志分析
|
||||
|
||||
WebDAV相关的错误通常记录在系统日志中:
|
||||
|
||||
### 总结
|
||||
|
||||
在Ubuntu上挂载WebDAV有多种方法,每种都有其适用场景:
|
||||
|
||||
* **davfs2**:适合需要高性能本地访问的场景
|
||||
* **rclone**:功能最全面,推荐大多数用户使用
|
||||
* **智能脚本**:解决挂载过程中的各种技术问题
|
||||
|
||||
通过合理的配置和脚本自动化,可以实现稳定可靠的WebDAV文件同步解决方案。建议根据实际需求选择合适的方法,并做好监控和维护工作。
|
||||
|
||||
阿里云AI生产力先锋第二期上线啦!面对如今火热的AI视频浪潮,围绕“超级创作者-AI生产力先锋开辟视觉创作新路径”的议题,来自影视、广告、设计等多行业的AI生产力先锋们将带来精彩分享!如何让AI从Toy到Tool再到真正的生产力,让创作者更快落地AI应用制作视频,还有对时下兴起的AI短剧的讨论,你想了解的tips这里都有!👉 立即点击链接,观看视频:[ https://click.aliyun.com/m/1000414743/](https://click.aliyun.com/m/1000414743/)
|
||||
|
||||
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
|
||||
|
||||
**相关文章**
|
||||
@@ -0,0 +1,54 @@
|
||||
2025-12-19 07:50:29 0点赞 3收藏 0评论
|
||||
|
||||
### 前言
|
||||
|
||||
> 作为一枚不是那么正宗的屯屯鼠,之前很长一段时间都使用[群晖](https://pinpai.smzdm.com/2315/)作为唯一的[NAS](https://www.smzdm.com/ju/sp3qr1k/)系统,直到某天看到最近很火飞牛os终于出了正式版,决定体验一下,结果发现这玩意整的还真不错,特别是飞牛影音那是真滴方便,于是决定将影视库和工具类的docker搬到飞牛系统中运行,然而,遇到了用命令行创建docker时,挂载目录权限的问题导致docker出现错误,寻思着来趁机来聊聊群晖和飞牛docker挂载目录权限出现问题时如何解决,也是为自己做一个记录(本文以安装qbittorrent为例,并尽量不使用命令行而是用使用比较可视化的方法)
|
||||
>
|
||||
> 飞牛的文件夹权限逻辑和群晖的有很大差别,而这种差别也在创建docker容器时也有体现
|
||||
|
||||
### 群晖
|
||||
|
||||
群晖安装container manager后会自动创建一个名为docker的文件夹,并赋予其ContainerManager、administrators的读写权限和Everyone的只读权限,但这样的权限很多时候无法满足使用需求,比如如果挂载了qbittorrent的config文件夹,启动docker容器时会报Could not create required directory 这样的错误导致甚至容器都无法创建成功,这个时候有两个解决问题的简单方法
|
||||
|
||||
**一.**为容器添加环境变量PUID=1026,PGID=101(对支持 PUID/PGID 环境变量的镜像)
|
||||
|
||||
[
|
||||
](https://post.smzdm.com/p/a0vgm420/pic_2/)
|
||||
|
||||
这两个id是你运行群晖时默认创建用户的uid和管理员组gid (至少7.2版本时这样的,如果设置之后还是有问题的话进命令行查一下用户id填进去就行),添加后这两个环境变量后你的容器就默认运行在此用户下,并且创建和下载的文件所有者也是此用户,权限问题就此解决
|
||||
|
||||
**二.**群晖文件权限问题的通用解:添加everone的可读写权限(右键文件夹-点击属性-点击权限-点击新增)
|
||||
|
||||
[
|
||||
](https://post.smzdm.com/p/a0vgm420/pic_3/)
|
||||
|
||||
包治百病,只是牺牲了一点点理论上的安全性
|
||||
|
||||
### 飞牛
|
||||
|
||||
飞牛os虽然不会在你安装docker应用时替你创建一个带权限设置的docker文件夹,但因为飞牛里容器会默认以root用户运行(应该是),所以你只需要随便创建一个文件夹并挂载运行即可,绝大多数时候完全不需要进行任何额外的文件夹权限设置,qbittorrent的创建和使用中不会出现任何的权限问题。
|
||||
|
||||
一切都很美好,我们已经搞定了一切….么?
|
||||
|
||||
之所以只是说绝大多数时候,是因为偶尔有些镜像配置里使用了非root用户的情况,比如,我在用docker-compose创建archivebox/archivebox时就遇到了权限错误,虽然容器的运行和执行下载任务都没有问题,但如我在飞牛网页端对下载的文件进行替换的话,会导致容器读不到被替换后的文件而出现错误
|
||||
|
||||
就像这样:原文件的所有者是911
|
||||
|
||||
[
|
||||
](https://post.smzdm.com/p/a0vgm420/pic_4/)
|
||||
|
||||
而被替换后的文件所有者变成当前登录网页的飞牛用户:ceshi(这是我的测试用户)
|
||||
|
||||
[
|
||||
](https://post.smzdm.com/p/a0vgm420/pic_5/)
|
||||
|
||||
替换后在网页端打开这个文件会报Server Error (500),该怎么解决呢?倒也简单,和群晖的第一种方法原理相同,在环境变量里添加PUID=1000,PGID=1000就一般可以搞定(飞牛里无法设置文件权限为everone可读写,所以纯网页只有这一种方式,还是没用的话就只能进ssh里设置…那就是另一个故事了)
|
||||
|
||||
[
|
||||
](https://post.smzdm.com/p/a0vgm420/pic_6/)
|
||||
|
||||
喵,就是这样~
|
||||
|
||||
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
|
||||
|
||||

|
||||
@@ -0,0 +1,13 @@
|
||||
在两性相处中,“真正的生理性喜欢”,从来不止于接吻、拥抱这些显而易见的亲密举动,它深植于人类进化而来的生物本能与神经化学反应中,化作一系列难以自控的潜意识行为和生理信号。这种深层吸引往往发生在意识之外,却主导着我们对异性的偏好与选择,下面便从多个维度,拆解这份“不为人知”的吸引逻辑。
|
||||
|
||||
嗅觉的隐秘筛选,是生理性喜欢最原始的密码。人类鼻腔上方的犁鼻器,能捕捉到异性分泌的费洛蒙(也就是我们常说的信息素),这种无形的化学信号会直接作用于下丘脑,悄悄触发本能层面的吸引或排斥。从进化生物学角度来看,女性更倾向于选择与自身HLA基因(与免疫系统相关)差异较大的男性,而这种基因差异,恰恰能通过体味被感知到。差异越大,后代的免疫系统就越具多样性,更易抵御疾病。有实验表明,女性对免疫基因差异大的男性汗液样本评分更高,这种偏好完全不受意识控制,是基因层面为“优生优育”埋下的生物伏笔,比任何刻意的亲密都更直接、更本能。
|
||||
|
||||
视觉的潜意识捕捉,藏着动态美的隐性密码。我们的视觉系统对异性的“动态美”,远比静态外貌更敏感。进化心理学研究发现,男性会不自觉关注女性的腰臀比,约0.7的比例会让他们潜意识里认为对方处于最佳生育状态;而女性则更在意男性的步态、手势等动态细节,这些动作能悄悄传递出对方的力量、自信与生存能力。比如,女性对男性肩宽腰细的“V型”躯干的偏好,本质是对其资源获取能力的潜意识评估;男性对女性对称面部的偏爱,则与对方的健康状况、基因质量密切相关。这些视觉判断在0.3秒内就能完成,远早于我们意识层面产生“喜欢”的念头。
|
||||
|
||||

|
||||
|
||||
非接触式的触觉幻觉,是生理性喜欢的隐性表达。真正的生理吸引,往往不需要实际的肢体接触,就能让人产生温暖、安全或兴奋的感觉,这就是“非接触式触觉”。神经科学研究显示,当人对某异性产生强烈生理好感时,大脑中负责处理身体感觉的岛叶会异常活跃,进而产生“皮肤饥饿”或“心痒”的触觉幻觉。就像热恋中的人,仅仅看到对方,就会心跳加速、手心冒汗,这种反应源于肾上腺素与去甲肾上腺素的激增,触发了交感神经的应激反应,但身体却本能地想要靠近,形成一种矛盾又强烈的吸引。
|
||||
|
||||
神经化学的协同作用,是生理性喜欢的核心驱动力。当我们对心仪对象产生好感时,大脑的奖赏回路会触发“多巴胺喷泉”,腹侧被盖区会向伏隔核大量释放多巴胺,让人产生“想要靠近、想要更多”的渴望;而接吻、拥抱等亲密行为,会进一步刺激垂体后叶释放催产素,让人产生“拥有即安心”的依赖感。这种神经化学的配合,让生理性喜欢表现为“既渴望靠近,又害怕失去”的矛盾心理——比如热恋中“一日不见如隔三秋”的焦虑,本质就是多巴胺水平波动引发的类似“戒断”的反应。
|
||||
|
||||
真正的生理性喜欢,是基因、神经与激素共同编织的本能吸引,它不依赖刻意的亲密举动,而是藏在嗅觉的隐秘筛选、视觉的潜意识判断、触觉的幻觉传递和神经化学的协同反应中。它发生在意识之下,却深刻影响着两性关系的走向,既是“一见钟情”的科学答案,也是“日久生情”的生理基础。读懂这份深层吸引,能让我们更理性地看待两性情感,也能更真诚地接纳自己的本能与心意。[返回搜狐,查看更多](https://www.sohu.com/?strategyid=00001&spm=smpc.content.content.1.1773370893053UEuxpcG "点击进入搜狐首页")
|
||||
@@ -0,0 +1,154 @@
|
||||
---
|
||||
title: "为你的 Linux 服务器开启 BBR,大幅提升网络性能!"
|
||||
source: "https://blog.eimoon.com/p/ubuntu-bbr/"
|
||||
author:
|
||||
- "[[月球基地]]"
|
||||
published: 2025-06-04
|
||||
created: 2025-12-01
|
||||
description: "一份详尽的指南,教你如何在 Ubuntu、Debian、CentOS 等 Linux 服务器上检查、启用和验证 TCP BBR 拥塞控制算法,有效提升网络吞吐量和降低延迟。"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
## 什么是 TCP BBR?为什么你需要它?
|
||||
|
||||
在如今这个对网络速度要求越来越高的时代,服务器的网络性能直接影响着用户体验和业务效率。TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) 是由 Google 开发的一种先进的 TCP 拥塞控制算法。与传统的基于丢包的拥塞控制算法(如 Cubic)不同,BBR 通过主动探测网络的瓶颈带宽和往返延迟,来更精确地调整发送速率。
|
||||
|
||||
启用 BBR 的主要优势包括:
|
||||
|
||||
- 显著提升网络吞吐量:尤其是在有一定丢包率或延迟较高的网络链路上(例如跨国访问、Wi-Fi 和移动网络)。
|
||||
- 有效降低网络延迟:通过避免不必要的缓冲膨胀 (Bufferbloat),BBR 可以让网络连接更加灵敏。
|
||||
- 更好的网络波动适应性:即使在网络质量不稳定的情况下,BBR 也能维持相对较高的性能。
|
||||
|
||||
对于网站服务器、应用服务器、游戏服务器或任何需要处理大量互联网流量的 Linux 服务器来说,开启 BBR 往往能带来立竿见影的性能改善。
|
||||
|
||||
## 如何在你的 Linux 服务器上检查和启用 BBR?
|
||||
|
||||
下面,我们将一步步指导你如何在常见的 Linux 发行版(如 Ubuntu, Debian, CentOS)上操作。
|
||||
|
||||
### 第一步:检查当前是否已启用 BBR
|
||||
|
||||
首先,我们需要确认你的系统当前正在使用哪种 TCP 拥塞控制算法。
|
||||
|
||||
在服务器终端输入以下命令:
|
||||
|
||||
```bash
|
||||
sysctl net.ipv4.tcp_congestion_control
|
||||
```
|
||||
|
||||
如果输出结果是:
|
||||
|
||||
```fallback
|
||||
net.ipv4.tcp_congestion_control = bbr
|
||||
```
|
||||
|
||||
恭喜你!这说明 BBR 已经在你的系统上启用了。🎉
|
||||
|
||||
接下来,可以进一步确认内核是否已经加载了 BBR 模块:
|
||||
|
||||
```bash
|
||||
lsmod | grep bbr
|
||||
```
|
||||
|
||||
如果看到类似下面的输出(具体数字可能不同):
|
||||
|
||||
```fallback
|
||||
tcp_bbr 20480 1
|
||||
```
|
||||
|
||||
这表明内核已成功加载 BBR 模块,并且系统正在使用 BBR 进行网络加速。
|
||||
|
||||
### 第二步:如果 BBR 未启用,如何开启?
|
||||
|
||||
如果上述检查结果显示你没有启用 BBR(例如,tcp\_congestion\_control 的值是 cubic),别担心,按照以下步骤来开启它。
|
||||
|
||||
#### 1\. 确认内核版本
|
||||
|
||||
BBR 需要 Linux 内核版本 4.9 或更高。使用以下命令查看你的内核版本:
|
||||
|
||||
```bash
|
||||
uname -r
|
||||
```
|
||||
|
||||
例如,输出可能是 `5.15.0-72-generic` 。只要主版本号大于等于 4,次版本号大于等于 9,就满足条件。
|
||||
|
||||
#### 2\. 启用 BBR 并设置为永久生效
|
||||
|
||||
如果内核版本符合要求,你可以通过以下命令立即启用 BBR:
|
||||
|
||||
```bash
|
||||
sudo sysctl -w net.core.default_qdisc=fq
|
||||
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
|
||||
```
|
||||
|
||||
`fq` (Fair Queue) 是一种队列调度程序,通常推荐与 BBR 配合使用以获得最佳效果。
|
||||
|
||||
为了让这些设置在服务器重启后依然生效,我们需要将它们添加到 `sysctl` 的配置文件中:
|
||||
|
||||
```bash
|
||||
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
|
||||
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
|
||||
```
|
||||
|
||||
然后,应用这些永久配置,使其立即生效,无需重启:
|
||||
|
||||
```bash
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
执行后,系统会加载 `/etc/sysctl.conf` 中的配置。
|
||||
|
||||
#### 3\. 再次检查以确认
|
||||
|
||||
完成上述步骤后,再次运行检查命令,确保 BBR 已经成功启用:
|
||||
|
||||
```bash
|
||||
sysctl net.ipv4.tcp_congestion_control
|
||||
```
|
||||
|
||||
预期输出:
|
||||
|
||||
```fallback
|
||||
net.ipv4.tcp_congestion_control = bbr
|
||||
```
|
||||
|
||||
以及:
|
||||
|
||||
```bash
|
||||
lsmod | grep bbr
|
||||
```
|
||||
|
||||
预期能看到 `tcp_bbr` 模块。
|
||||
|
||||
### 第三步:Bonus - 进行测速验证(可选)
|
||||
|
||||
为了直观地感受 BBR 带来的提升,你可以在启用 BBR 前后,使用 speedtest-cli 工具测试服务器的上传和下载速度。
|
||||
|
||||
安装并运行 speedtest-cli:
|
||||
|
||||
```bash
|
||||
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -
|
||||
```
|
||||
|
||||
对比两次的测试结果,尤其是在上传速度和连接稳定性方面,你可能会发现显著的改善。
|
||||
|
||||
## 总结
|
||||
|
||||
启用 TCP BBR 是一个简单而有效的提升 Linux 服务器网络性能的方法。通过几个简单的命令,你就可以让你的服务器在复杂的互联网环境中表现得更加出色。如果你还没有尝试过,不妨现在就去检查并开启它吧!
|
||||
|
||||
希望这篇教程对你有所帮助!如果你有任何问题或经验分享,欢迎在下方留言。
|
||||
|
||||
### 📬 关注我获取更多资讯
|
||||
|
||||
2 评论
|
||||
|
||||
- 按正序
|
||||
- 按倒序
|
||||
- 按热度
|
||||
|
||||
[默小班](https://www.memxb.top/) 2025-10-06
|
||||
|
||||
已经通过博主的方法启用了,来发个评论支持一下
|
||||
|
||||
[moses](https://xn--ciqpnp34izzd/) Admin 2025-10-07
|
||||
|
||||
😄
|
||||
@@ -0,0 +1,295 @@
|
||||
---
|
||||
title: "从Linux服务器下载文件和文件夹到本地命令_linux下载文件到本地-CSDN博客"
|
||||
source: "https://blog.csdn.net/github_35856054/article/details/126095595"
|
||||
author:
|
||||
- "[[成就一亿技术人!]]"
|
||||
- "[[hope_wisdom 发出的红包]]"
|
||||
published:
|
||||
created: 2025-12-14
|
||||
description: "文章浏览阅读8.8w次,点赞49次,收藏116次。本文介绍了在Linux服务器与本地之间传输文件的多种方法,包括使用scp命令进行安全复制,rz/sz命令在xshell等工具中进行文件上传下载,以及wget命令从ftp服务器获取文件。详细阐述了各个命令的格式、参数及使用示例,适合Linux系统管理员和日常文件交互操作。"
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
AI 搜索
|
||||
|
||||
## 从Linux服务器下载文件和文件夹到本地命令
|
||||
|
||||
最新推荐文章于 2025-10-19 22:35:16 发布
|
||||
|
||||
原创 于 2022-08-01 15:30:00 发布 · 8.8w 阅读 · 116 ·
|
||||
|
||||
CC 4.0 BY-SA版权
|
||||
|
||||
版权声明:本文为博主原创文章,遵循 [CC 4.0 BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) 版权协议,转载请附上原文出处链接和本声明。
|
||||
|
||||
文章标签:
|
||||
|
||||
[#linux](https://so.csdn.net/so/search/s.do?q=linux&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art) [#运维](https://so.csdn.net/so/search/s.do?q=%E8%BF%90%E7%BB%B4&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art) [#服务器](https://so.csdn.net/so/search/s.do?q=%E6%9C%8D%E5%8A%A1%E5%99%A8&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art)
|
||||
|
||||
本文介绍了在Linux服务器与本地之间传输文件的多种方法,包括使用scp命令进行安全复制,rz/sz命令在xshell等工具中进行文件上传下载,以及wget命令从ftp服务器获取文件。详细阐述了各个命令的格式、参数及使用示例,适合Linux系统管理员和日常文件交互操作。
|
||||
|
||||
该文章已生成可运行项目,
|
||||
|
||||
从Linux
|
||||
服务器上传或者下载文件到本地除了使用FTP外,还可以通过 Linux命令 来实现,Linux服务器与本地电脑之间传输文件的命令及使用方法:
|
||||
|
||||
#### 1、使用scp命令
|
||||
|
||||
**命令格式:**
|
||||
|
||||
> scp \[参数\] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>
|
||||
|
||||
**举例:**
|
||||
|
||||
```bash
|
||||
scp /home/work/source.txt work@192.168.0.10:/home/work/ #把本地的source.txt文件拷贝到192.168.0.10机器上的/home/work目录下
|
||||
|
||||
|
||||
|
||||
scp work@192.168.0.10:/home/work/source.txt /home/work/ #把192.168.0.10机器上的source.txt文件拷贝到本地的/home/work目录下
|
||||
|
||||
|
||||
|
||||
scp work@192.168.0.10:/home/work/source.txt work@192.168.0.11:/home/work/ #把192.168.0.10机器上的source.txt文件拷贝到192.168.0.11机器的/home/work目录下
|
||||
bash
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
|
||||
```cobol
|
||||
scp -r /home/work/sourcedir work@192.168.0.10:/home/work/ #拷贝文件夹,加-r参数
|
||||
|
||||
|
||||
|
||||
scp -r /home/work/sourcedir work@www.myhost.com:/home/work/ #使用主机名
|
||||
|
||||
|
||||
|
||||
scp -r -v /home/work/sourcedir work@www.myhost.com:/home/work/ #显示详情,加-v参数
|
||||
```
|
||||
|
||||
注意:scp命令适用于Linux之间复制文件和目录,Windows建议使用下方的rz或sz命令。
|
||||
|
||||
#### 2、使用xshell、SecureCRT工具等
|
||||
|
||||
使用xshell来操作服务非常方便,传文件也比较方便。
|
||||
就是使用 **rz,sz**
|
||||
**首先,服务器要安装了rz,sz:**
|
||||
|
||||
```bash
|
||||
yum install lrzszbash
|
||||
```
|
||||
|
||||
**命令格式:**
|
||||
当然你的本地 windows 主机也通过ssh连接了linux服务器
|
||||
|
||||
```bash
|
||||
运行rz filename,会将windows的文件传到linux服务器
|
||||
|
||||
运行sz filename,会将文件下载到windows本地
|
||||
```
|
||||
|
||||
**举例:**
|
||||
|
||||
```cobol
|
||||
rz命令和sz命令使用方法:
|
||||
|
||||
举例说明:将Linux服务器上的test.txt文件下载到Windows本地
|
||||
|
||||
首先确保本地Windows通过ssh已经连接了linux服务器。
|
||||
|
||||
命令:sz test.txt
|
||||
|
||||
执行命令后,会自动弹出文件存放对话框。
|
||||
```
|
||||
|
||||
注意:Mac使用rz或sz命令可能会引起卡死的现象,建议Mac使用scp命令。
|
||||
|
||||
#### 3、使用wget
|
||||
|
||||
**命令格式:**
|
||||
|
||||
> wget \[参数\] ftp://<目标机器ip或主机名>/<文件的绝对路径> #proftpd格式
|
||||
|
||||
**举例:**
|
||||
|
||||
```bash
|
||||
wget ftp://192.168.0.10//home/work/source.txt #从192.168.0.10上拷贝文件夹source.txt
|
||||
|
||||
|
||||
|
||||
wget ftp://www.myhost.com//home/work/source.txt #使用主机名
|
||||
bash
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
|
||||
```cobol
|
||||
wget -nH -P /home/work/ ftp://www.myhost.com//home/work/source.txt #指定本地保存路径,使用参数“-P 路径”或者“--directory-prefix=路径”;-nH, --no-host-directories 不创建主机目录
|
||||
|
||||
|
||||
|
||||
wget -r -l 0 -nH -P /home/work/ ftp://www.myhost.com//home/work/sourcedir #递归下载sourcedir目录,使用参数-r;参数-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
|
||||
|
||||
|
||||
|
||||
wget --cut-dirs=3 -r -l 0 -nH -P /home/work/ ftp://www.myhost.com//home/work/sourcedir #-参数-cut-dirs=NUMBER 忽略 NUMBER层远程目录,本例中将myhost上的sourcedir目录保存到本地的work目录下。
|
||||
|
||||
|
||||
|
||||
wget --limit-rate=200k --cut-dirs=3 -r -l 0 -nH -P /home/work/ ftp://www.myhost.com//home/work/sourcedir #-参数--limit-rate=RATE 限定下载输率
|
||||
|
||||
|
||||
|
||||
wget --limit-rate=200k --cut-dirs=3 -r -l 0 -nH -P /home/work/ -X /home/work/sourcedir/notincludedir ftp://www.myhost.com//home/work/sourcedir #排除路径使用-X参数
|
||||
|
||||
|
||||
|
||||
wget -q --limit-rate=200k --cut-dirs=3 -r -l 0 -nH -P /home/work/ -X /home/work/sourcedir/notincludedir ftp://www.myhost.com//home/work/sourcedir #参数-q表示安静模式,无输出;默认是-v,冗余模式
|
||||
```
|
||||
|
||||
#### 4、常用方法
|
||||
|
||||
在本地上安装Xshell和Xftp软件,在xshell软件中有快捷方式(选择利用Xftp打开当前目录)
|
||||
|
||||
本文章已经生成可运行项目
|
||||
|
||||
[从 *Linux* 将 *文件* *下载* 到 Windows 的几种实用方法](https://iteacher.blog.csdn.net/article/details/149576778)
|
||||
|
||||
[h a 6 6 6 c k 为 你解决复杂难题!](https://blog.csdn.net/HQ354974212)
|
||||
|
||||
07-23 1552[方法是否推荐说明scp✅ 强烈推荐快速、安全、无需图形界面rsync✅ 推荐(高级)适合大量 *文件* 同步sftp✅ 推荐交互式 *下载* ,适合调试HTTP 服务✅ 推荐(临时)适合无权限拷贝时WinSCP✅ 推荐图形化操作,适合新手。](https://iteacher.blog.csdn.net/article/details/149576778)[从 *Linux* *服务器* *下载* *文件* 到 *本地* *命令* \_ *linux* *下载* *文件* 到 *本地*](https://blog.csdn.net/segegefe/article/details/126553582)
|
||||
|
||||
12-13[yum install lrzsz 当然你的 *本地* windows主机也通过ssh连接了 *linux* *服务器* 运行rz,会将windows的 *文件* 传到 *linux* *服务器* 运行sz filename,会将 *文件* *下载* 到windows *本地* 3、常用方法 在 *本地* 上安装Xshell *和* Xftp软件,在xshell软件中有快捷方式(选择利用Xftp打开当前目录)](https://blog.csdn.net/segegefe/article/details/126553582)[*Linux* 如何上传 *本地* *文件* 以及 *下载* *文件* 到 *本地* *命令* 总结](https://blog.csdn.net/yh4494/article/details/146319899)
|
||||
|
||||
12-14[2.scp(安全拷贝,适用于 Windows/Mac/ *Linux*) 如果你的 *本地* 电脑有 SSH(Windows 可使用PowerShell或Git Bash),可以使用scp: scpuser@remote:/path/to/file./local\_file 运行项目并 *下载* 源码sh 1 示例: scproot@192.168.1.100:/home/user/file.zip./ 运行项目并 *下载* 源码sh 1 root@192.168.1.100是远程 *服务器* 的...](https://blog.csdn.net/yh4494/article/details/146319899)[*下载* liunx *服务器* 上的 *文件* 到Windows *本地* 、或者上传到 *服务器* 的方法](https://blog.csdn.net/unit2006/article/details/125012531)
|
||||
|
||||
[软件测试入门&进阶](https://blog.csdn.net/unit2006)
|
||||
|
||||
05-27 6354[*下载* 使用:sz、上传使用:rz、系统没有自带:sz或者rz *命令* 时,手动安装1、手动安装:yum install lrzsz2、举例 *下载* :bigder.txtsz /root/bigder/bigder.txt3、上传输入rz 后回车,弹出选择Windows *本地* *文件* 的窗口ps,1、云 *服务器* 一般限制使用rz、sz指令2、不使用 *命令* ,直接使用远程连接工具上传 *下载* *文件* ,如:SecureCRT工具我的历史文章测试环境登陆框的密码怎么看明文Showcase时手机不够怎么办? 云真机平台atxserver2xmind2t](https://blog.csdn.net/unit2006/article/details/125012531)[上位机知识篇---常用 *下载* *命令* *和* 软件安装 *命令*](https://lotus.blog.csdn.net/article/details/153594425)
|
||||
|
||||
[
|
||||
|
||||
最新发布
|
||||
|
||||
](https://lotus.blog.csdn.net/article/details/153594425)
|
||||
|
||||
[道阻且长,行则将至。](https://blog.csdn.net/2301_79556402)
|
||||
|
||||
10-19 856[本文简单介绍了常用的 *Linux* *下载* *命令* 、软件安装 *命令* 。同时简洁了apt *和* apt-get的区别。](https://lotus.blog.csdn.net/article/details/153594425)[*linux* *服务器* *下载* 或者发送 *文件* 到 *本地* (windows)\_windows *下载* linxu *文件*...](https://blog.csdn.net/onway_goahead/article/details/88108243)
|
||||
|
||||
12-14[对于经常使用 *Linux* 系统的人员来说,少不了将 *本地* 的 *文件* 上传到 *服务器* 或者从 *服务器* 上 *下载* *文件* 到 *本地*,rz / sz *命令* 很方便的帮我们实现了这个功能,但是很多 *linux* 系统初始并没有这两个 *命令* 。今天,我们就简单的讲解一下如何安装 *和* 使用rz、sz *命令* 。 rz: Receive Zmodem...](https://blog.csdn.net/onway_goahead/article/details/88108243)[从 *Linux* *服务器* 上 *下载* *文件* 到 *本地* \_telnet 到 *linux* 后, *下载* *文件*](https://blog.csdn.net/lwfcgz/article/details/7981567)
|
||||
|
||||
11-28[本文详细介绍了在 *Linux* *服务器* 环境中,如何使用FTP *命令* *和* DOS *命令* 进行 *文件* 传输的过程,包括 *服务器* *文件* 打包、 *下载* *文件* 的具体步骤及注意事项。 部署运行你感兴趣的模型镜像一键部署 转载自http://www.cnblogs.com/erichhuang/archive/2009/10/26/1589987.html 测试环境是 *linux* *服务器*,所以经常会传输 *文件* 到 *服务器*,或者从 *服务器*...](https://blog.csdn.net/lwfcgz/article/details/7981567)[*Linux* 如何上传 *本地* *文件* 以及 *下载* *文件* 到 *本地* *命令* 总结](https://devpress.csdn.net/v1/article/detail/146319899)
|
||||
|
||||
[yh4494的博客](https://blog.csdn.net/yh4494)
|
||||
|
||||
03-17 9324[如果你希望在 Shell 终端中\*\*将远程 *服务器* 上的 *文件* *下载* 到 *本地* 电脑\*\*,可以使用以下工具 *和* *命令*...](https://devpress.csdn.net/v1/article/detail/146319899)[如何从 *Linux* *服务器* 上 *下载* *文件* 到 *本地* \_ *linux* 怎么 *下载* conf *文件* 到本机-CS...](https://blog.csdn.net/LazyTojava/article/details/74999581)
|
||||
|
||||
12-1[\* @param ftpPath SFTP *服务器* 中 *文件* 所在路径 格式: ftptest/aa \* \* @param localPath *下载* 到 *本地* 的位置 格式:H:/download \* \* @param fileName *文件* 名称 \*/ public static void downloadSftpFile(String ftpHost, String ftpUserName,String ftpPassword, int ftpPort, String ftpPath, String localPath,Stri...](https://blog.csdn.net/LazyTojava/article/details/74999581)[从 *Linux* *服务器* *下载* *文件夹* 到 *本地* \_从 *服务器* *下载* *文件* 到 *本地*](https://blog.csdn.net/QianZhaoVic/article/details/79031359)
|
||||
|
||||
12-12[从 *Linux* *服务器* *下载* *文件夹* 到 *本地* 1、使用scp *命令* scp /home/work/source.txt work@192.168.0.10:/home/work/#把 *本地* 的source.txt *文件* 拷贝到192.168.0.10机器上的/home/work目录下scp work@192.168.0.10:/home/work/source.txt /home/work/#把192.168.0.10机器上的source.txt *文件* 拷贝到 *本地* 的/home/work目录下scp...](https://blog.csdn.net/QianZhaoVic/article/details/79031359)[从 *Linux* *服务器* *下载* *文件夹* 到 *本地*](https://devpress.csdn.net/v1/article/detail/101655950)
|
||||
|
||||
[Pitbull2014的博客](https://blog.csdn.net/Pitbull2014)
|
||||
|
||||
05-23 1万+[从 *Linux* *服务器* *下载* *文件夹* 到 *本地* 1、使用scp *命令* scp /home/work/source.txt work@192.168.0.10:/home/work/ #把 *本地* 的source.txt *文件* 拷贝到192.168.0.10机器上的/home/work目录下 scp work@192.168.0.10:/home/work/source.txt /home/wo...](https://devpress.csdn.net/v1/article/detail/101655950)[*Linux* 常用 *命令* : *文件* 的 *下载* 、压缩与解压](https://blog.csdn.net/TiYong/article/details/136362506)
|
||||
|
||||
[TiYong的博客](https://blog.csdn.net/TiYong)
|
||||
|
||||
02-29 1万+[在 *Linux* 系统使用中,我们经常需要 *下载* *文件* 、对 *文件* 进行压缩 *和* 解压操作。本文将介绍一些常用的 *Linux* *命令* ,帮助你轻松完成这些操作。](https://blog.csdn.net/TiYong/article/details/136362506)[从远程 *Linux* *服务器* *下载* *文件* 到windows\_如何远程把 *linux* *服务器* 上的文...](https://blog.csdn.net/mucaoyx/article/details/51916138)
|
||||
|
||||
12-8[本文详细介绍了如何在没有FTP服务的 *Linux* *服务器* 上 *下载* *文件* 至Windows *本地* 。首先通过telnet登录 *服务器* 并使用tar *命令* 将 *文件* 打包,然后利用ftp *命令* 实现 *文件* 的远程 *下载* 。 测试环境是 *linux* *服务器*,所以经常会传输 *文件* 到 *服务器*,或者从 *服务器* *下载* *文件* 。如果 *服务器* 安装了FTP,那么直接用FTP软件来 *下载* 就可以了,如果没有安装,那么就要用...](https://blog.csdn.net/mucaoyx/article/details/51916138)[*Linux* 终端访问 FTP 及 上传 *下载* *文件* \_ *linux* 访问ftp](https://blog.csdn.net/tianlesoftware/article/details/5818990)
|
||||
|
||||
12-9[Put *命令*:格式:put local-file \[remote-file\]将一个 *文件* 上传到ftp Mput *命令*:格式:mput local-files将 *本地* 主机中一批 *文件* 传送至远端主机. 注意:mput *命令* 只能将当前 *本地* 目录下的 *文件* 上传到FTP上的当前目录。比如,在/root/dave下运行的ftp *命令*,则只有在/root/dave下的 *文件* *linux* 才会上传到 *服务器* 上的当前目录下。](https://blog.csdn.net/tianlesoftware/article/details/5818990)[*Linux* curl *命令* *下载* *文件*](https://blog.csdn.net/a158640927/article/details/129829574)
|
||||
|
||||
[a158640927的博客](https://blog.csdn.net/a158640927)
|
||||
|
||||
03-29 1万+[*Linux* curl *命令*](https://blog.csdn.net/a158640927/article/details/129829574)[*Linux* *命令* :wget *命令*](https://blog.csdn.net/dl_11/article/details/136527173)
|
||||
|
||||
[dl\_11的博客](https://blog.csdn.net/dl_11)
|
||||
|
||||
03-12 2490[wget *命令* 是一种常用的网络工具,用于从Web *服务器* *下载* *文件* 。wget *命令* 基于HTTP、HTTPS *和* FTP协议从指定的URL *下载* *文件* 。它可以在 *Linux* *和* Unix系统的 *命令* 行中使用,并支持各种参数来定制 *下载* 行为。Wget也可以根据HTML、XHTML *和* CSS页面中的链接,创建远程网站的 *本地* 版本。Wget旨在应对缓慢或不稳定的网络连接;如果由于网络问题 *下载* 失败,它会不断重试,直到检索到整个 *文件* 。如果 *服务器* 支持重新获取,它会指示 *服务器* 从停止 *下载* 的地方继续 *下载* 。](https://blog.csdn.net/dl_11/article/details/136527173)[从 *Linux* *服务器* *下载* *文件* 到 *本地* *命令*](https://devpress.csdn.net/v1/article/detail/123709407)
|
||||
|
||||
[u012114437的博客](https://blog.csdn.net/u012114437)
|
||||
|
||||
03-24 3583[1、安装lrzsz包:yum -y install lrzsz 2、上传:rz -y (注意:rz -e 可以弹出框,但拖不了 *文件* ) 3、 *下载* *文件* *本地* :sz filename](https://devpress.csdn.net/v1/article/detail/123709407)[Python实现 *Linux* *服务器* 上递归 *下载* *文件夹* 下所有 *文件*](https://seasoft.blog.csdn.net/article/details/139819690)
|
||||
|
||||
[wjianwei666的专栏](https://blog.csdn.net/wjianwei666)
|
||||
|
||||
06-20 855[本文将介绍如何使用Python从 *Linux* *服务器* 上递归 *下载* *文件夹* 下的所有 *文件* 。我们将使用paramiko库来实现SSH连接,以及os *和* shutil库来处理 *文件* *和* 目录。](https://seasoft.blog.csdn.net/article/details/139819690)[windows主机用scp *命令* 向 *Linux* *服务器* 上传 *和* *下载* *文件*](https://blog.csdn.net/2401_88244350/article/details/143367317)
|
||||
|
||||
[2401\_88244350的博客](https://blog.csdn.net/2401_88244350)
|
||||
|
||||
11-10 1966[scp是的简写,用于在 *Linux* 下进行远程拷贝 *文件* 的 *命令* , *和* 它类似的 *命令* 有cp,不过cp只是在本机进行拷贝不能跨 *服务器* ,而且scp传输是加密的。可能会稍微影响一下速度。当你 *服务器* 硬盘变为只读 read only system时,用scp可以帮你把 *文件* 移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小 *文件* 众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。scp是 *linux* 系统下基于ssh登陆。](https://blog.csdn.net/2401_88244350/article/details/143367317)[从 *Linux* *服务器* 上 *下载* *文件* 到 *本地*](https://devpress.csdn.net/v1/article/detail/7981567)
|
||||
|
||||
[BananaTree](https://blog.csdn.net/lwfcgz)
|
||||
|
||||
09-15 5万+[转载自http://www.cnblogs.com/erichhuang/archive/2009/10/26/1589987.html 测试环境是 *linux* *服务器* ,所以经常会传输 *文件* 到 *服务器* ,或者从 *服务器* *下载* *文件* 。如果 *服务器* 安装了FTP,那么直接用FTP软件来 *下载* 就可以了,如果没有安装,那么就要用DOS *命令* 来解决了,以下以 *下载* *文件* 到windows本机为例,简单说下整个过程。 一、服务](https://devpress.csdn.net/v1/article/detail/7981567)[从云 *服务器* *下载* *文件* 到 *本地*](https://blog.csdn.net/m0_62796616/article/details/136373104)
|
||||
|
||||
[m0\_62796616的博客](https://blog.csdn.net/m0_62796616)
|
||||
|
||||
03-03 2671[从云 *服务器* *下载* *文件* 到 *本地*](https://blog.csdn.net/m0_62796616/article/details/136373104)[线上 *服务器* 的 *文件* *下载* 到 *本地* Windows电脑](https://blog.csdn.net/youhebuke225/article/details/145896345)
|
||||
|
||||
[youhebuke225的博客](https://blog.csdn.net/youhebuke225)
|
||||
|
||||
02-27 3964[根据需求选择合适的方法,推荐优先使用远程桌面映射磁盘或SFTP工具,操作简单且安全。](https://blog.csdn.net/youhebuke225/article/details/145896345)[将 *linux* 上的 *文件* / *文件夹* *下载* 到 *本地*](https://devpress.csdn.net/v1/article/detail/132824688)
|
||||
|
||||
[weixin\_45966674的博客](https://blog.csdn.net/weixin_45966674)
|
||||
|
||||
09-12 3411[这样 就相当于 将 *服务器* 上 root下的dist 传输给我们 *本地* E盘下的 测试 *服务器* 传输 目录下。如果不知道 例如 我知道我想下的 *文件* 叫 dist。其实非常简单 但您需要知道自己的 *文件* 在哪个路径下。然后 你需要输入一下 *服务器* 密码 他就会开始传输了。可我不知道他在那个目录 我们可以在 *服务器* 中输入。这样 所有叫 dist的 *文件* 都会被带出来。而我们要的是 root目录下这个。最终 我们的东西就被成功拷贝了下来。我们可以在自己电脑的终端 输入。如果没有安装 可以参考我的文章。](https://devpress.csdn.net/v1/article/detail/132824688)[*linux* *下载* *文件* 到 *本地* *命令*](https://devpress.csdn.net/v1/article/detail/84035735)
|
||||
|
||||
[
|
||||
|
||||
热门推荐
|
||||
|
||||
](https://devpress.csdn.net/v1/article/detail/84035735)
|
||||
|
||||
[mengda\_lei的博客](https://blog.csdn.net/mengda_lei)
|
||||
|
||||
11-13 11万+[*linux* *下载* *文件* 到 *本地* windows系统,可以用sz *命令* *下载* *linux* *文件* 到 *本地* ,也可以用 *命令* rz上传 *本地* *文件* 到 *linux* 使用xshell来操作服务非常方便,传 *文件* 也比较方便。 就是使用rz,sz 首先, *服务器* 要安装了rz,sz 。 如果没安装,则通过 *命令* 安装yum install lrzsz 当然你的 *本地* windows主机也通过ssh连接了 *linux* *服务器* 。 1.输入sz *文件*...](https://devpress.csdn.net/v1/article/detail/84035735)[从 *Linux* *服务器* *下载* *文件* 至 *本地* 的 *命令*](https://wenku.csdn.net/answer/6vku34549h)
|
||||
|
||||
07-25[</think>### 从 *Linux* *服务器* *下载* *文件* 到 *本地* 的 *命令* 以下是两种常用方法,根据您的 *本地* 操作系统 *和* 网络环境选择: #### 方法1:使用 \`scp\` *命令* (推荐) \*\*适用场景\*\*: *本地* 是 *Linux* /macOS系统,或Windows安装了OpenSSH...](https://wenku.csdn.net/answer/6vku34549h)
|
||||
|
||||
评论
|
||||
|
||||
被折叠的 0 条评论 [为什么被折叠?](https://blogdev.blog.csdn.net/article/details/122245662)[到【灌水乐园】发言](https://bbs.csdn.net/forums/FreeZone)
|
||||
|
||||
添加红包
|
||||
|
||||
实付 元
|
||||
|
||||
[使用余额支付](https://blog.csdn.net/github_35856054/article/details/)
|
||||
|
||||
点击重新获取
|
||||
|
||||
扫码支付
|
||||
|
||||
钱包余额 0
|
||||
|
||||
抵扣说明:
|
||||
|
||||
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
|
||||
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
|
||||
|
||||
[余额充值](https://i.csdn.net/#/wallet/balance/recharge)
|
||||
|
||||
×
|
||||
|
||||
本文章已经生成可运行项目
|
||||
|
||||
举报
|
||||
|
||||
[](https://mall.csdn.net/vip?utm_source=25618_vip_blogrighticon) [ 点击体验
|
||||
DeepSeekR1满血版](https://ai.csdn.net/chat?utm_source=cknow_pc_blogdetail&spm=1001.2101.3001.10583) 隐藏侧栏 
|
||||
|
||||
程序员都在用的中文IT技术交流社区
|
||||
|
||||

|
||||
|
||||
专业的中文 IT 技术社区,与千万技术人共成长
|
||||
|
||||

|
||||
|
||||
关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!
|
||||
|
||||
客服 返回顶部
|
||||