├── Arch ├── README.md ├── add_ip.sh ├── bash.bashrc └── mysql_root.md ├── README.md ├── bitmonero ├── Dockerfile ├── Dockerfile.alpine ├── README.md └── xmseed.py ├── cloud ├── README.md ├── photo.sh └── samba.sh ├── debian ├── README.md ├── autonet.sh ├── config.sh ├── delnat.sh ├── emby2url.py ├── nat.sh ├── netboot.xyz ├── nfsdir.md ├── sskcp.sh ├── virmach_vnc.md └── webbench.md ├── docker ├── README.md └── lnmp.md ├── mysql ├── City.sql.gz ├── README.md ├── addfile.py ├── addvps.py ├── conf.py ├── get_info.php ├── getfile.py ├── getsh.py ├── mykcp.py ├── mysql_connector.py ├── mysql_test.md └── sskcp.sh ├── sqlite ├── README.md ├── addvps.py ├── get_vps_db.py ├── make_db.py ├── myvps.py ├── sskcp.py └── sskcp_v2.py ├── vscode ├── README.md └── settings.json └── zfaka ├── MYSQL命令学习.txt ├── README.md ├── docker-compose.yml └── ss命令.txt /Arch/README.md: -------------------------------------------------------------------------------- 1 | ## Arch Linux 安装简易版 For VirtualBox 安装虚拟机 2 | 3 | ### 启动ssh服务,临时修改光盘系统密码,方便ssh客户端远程登陆安装系统 4 | ``` 5 | systemctl restart sshd 6 | ip addr 7 | passwd 8 | ``` 9 | 10 | ### 硬盘分区,一个区 linux分区 命令选o,建立dos硬盘,命令n,默认建立linux主分区 11 | ``` 12 | fdisk /dev/sda 13 | mkfs.ext4 /dev/sda1 14 | mount /dev/sda1 /mnt 15 | ``` 16 | 17 | ### 如果是国内,选择镜像推荐清华中科大, 18 | - vim编辑找到China源 9yyggp :wq 19 | ``` 20 | vim /etc/pacman.d/mirrorlist 21 | ``` 22 | 23 | ### 安装必须的软件包到硬盘中,如果虚拟机 linux-firmware 可以不装 24 | ``` 25 | pacstrap /mnt base linux linux-firmware 26 | ``` 27 | 28 | ### 把硬盘UUID写到fstab里,下次重启能自动找到 29 | ``` 30 | genfstab -U /mnt >> /mnt/etc/fstab 31 | ``` 32 | 33 | ### 把根目录/ 切换到硬盘/dev/sda1,接下来的都在硬盘系统操作 34 | ``` 35 | arch-chroot /mnt 36 | ``` 37 | 38 | ### 软件包更新源,安装必要软件 39 | ``` 40 | pacman -Syy 41 | pacman -S dhcpcd openssh grub vim htop wget curl tmux fish ca-certificates 42 | ``` 43 | 44 | ### Arch配置同其他linux不同,用傻瓜dhcpcd; 启用ssh服务 45 | ``` 46 | systemctl enable dhcpcd 47 | systemctl enable sshd 48 | ``` 49 | 50 | ### 安装grub引导信息到硬盘,自动建立grub.cfg 51 | ``` 52 | grub-install --target=i386-pc /dev/sda 53 | grub-mkconfig -o /boot/grub/grub.cfg 54 | ``` 55 | 56 | ### 修改系统root密码,建立一个vip,临时ssh远程用 57 | ``` 58 | passwd 59 | useradd vip 60 | passwd vip 61 | ``` 62 | 63 | ### 重启系统,然后ssh 登陆,su 切换管理员 64 | ``` 65 | ssh vip@192.168.1.110 66 | # 建立 /root/.ssh/authorized_keys 密钥文件后就可以root登陆了 67 | ssh root@192.168.1.110 68 | ``` 69 | 70 | ### arch 安装命令参考中文文档 71 | - https://wiki.archlinux.org/index.php/Installation_guide_(简体中文) 72 | 73 | 74 | ### start_VM_Headless 简易 VirtualBox Headless 模式启动器 75 | - VBoxManage.exe 建立2个快捷方式,分别启动和关闭 ArchLinux 76 | ``` 77 | # Oracle VM VirtualBox 默认安装目录 C:\Program Files\Oracle\VirtualBox\ 78 | 79 | "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm ArchLinux --type headless 80 | 81 | "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm ArchLinux acpipowerbutton 82 | 83 | ``` 84 | 85 | ------- 86 | 87 | ## 另外一种Arch Linux 安装: 使用gdisk建立EFI分区和Linux分区 88 | gdisk /dev/sda 89 | 90 | - 直接打o,意味着create a new empty GUID partition table (GPT),回车 91 | - 接下来,打n,新建分区,EFI分区用来储存引导文件,分区代码 EF00 表示efi分区 92 | - 再建立Linux分区,直到Hex code这行,打8300,8300是linux的文件系统。 93 | 94 | - 检查,看到文件系统 GPT,2个分区分别是EFI system partition 和 Linux filesystem 95 | ``` 96 | # gdisk -l /dev/sda 97 | 98 | Found valid GPT with protective MBR; using GPT. 99 | Disk /dev/sda: 16777216 sectors, 8.0 GiB 100 | Disk identifier (GUID): B60E27F0-F574-4AAB-B0C1-BAEC5377DDFD 101 | Number Start (sector) End (sector) Size Code Name 102 | 1 2048 1050623 512.0 MiB EF00 EFI system partition # EFI分区主要放引导文件其实128M够用了 103 | 2 1050624 16777182 7.5 GiB 8300 Linux filesystem 104 | ``` 105 | 106 | ### 格式化分区和挂载分区有相应修改,再按上面安装Arch系统 107 | ``` 108 | mkfs.vfat -F 32 /dev/sda1 109 | mkfs.ext4 /dev/sda2 110 | mount /dev/sda2 /mnt 111 | mkdir -p /mnt/boot 112 | mount /dev/sda1 /mnt/boot 113 | ``` 114 | 115 | 116 | ## 不装GRUB,使用系统自带的systemd bootctl 117 | 118 | ``` 119 | bootctl install 120 | ``` 121 | 122 | ``` 123 | # vim /boot/loader/loader.conf 124 | 125 | default arch 126 | timeout 1 127 | 128 | #console-mode keep 129 | default 75ece990f54f40eba924862b4f752aa6-* 130 | ``` 131 | 132 | ``` 133 | vim /boot/loader/entries/arch.conf 134 | 135 | title Arch Linux 136 | linux /vmlinuz-linux 137 | initrd /initramfs-linux.img 138 | options root=PARTUUID=470b42a8-69bf-4822-ad1a-8164c741b17c rw 139 | ``` 140 | 141 | ### 查看磁盘分区UUID号 142 | ``` 143 | partx /dev/sda 144 | NR START END SECTORS SIZE NAME UUID 145 | 1 2048 1050623 1048576 512M EFI system partition 0d180520-7c33-4899-9e8e-30272e072fb4 146 | 2 1050624 16777182 15726559 7.5G Linux filesystem 470b42a8-69bf-4822-ad1a-8164c741b17c 147 | 148 | ``` 149 | 150 | ## Arch Linux 安装 Nginx + PHP-FPM 配置填坑笔记 151 | - 安装nginx和php-fpm挺简单,启用服务 systemctl enable 152 | ``` 153 | pacman -S nginx php php-fpm 154 | systemctl enable nginx 155 | systemctl enable php-fpm 156 | 157 | # 生成index.php 158 | echo "" > /usr/share/nginx/html/index.php 159 | 160 | # 调试配置比较坑,会用到重启命令 161 | systemctl restart nginx 162 | systemctl restart php-fpm 163 | 164 | ``` 165 | 166 | ### 网上找了N个方法,终于找到一个能用的 167 | ``` 168 | # pass PHP scripts to FastCGI server 169 | location ~ \.php$ { 170 | root /usr/share/nginx/html; 171 | fastcgi_pass unix:/run/php-fpm/php-fpm.sock; 172 | fastcgi_index index.php; 173 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 174 | include fastcgi_params; 175 | } 176 | ``` 177 | 178 | ### Arch Wiki 找到的配置,因为 nginx.conf 默认配置 root变量移到了location空间里,导致SCRIPT_FILENAME失效 179 | ``` 180 | # vim /etc/nginx/nginx.conf 181 | 182 | # 默认 nginx.conf 配置 root变量移到了location空间里 183 | location / { 184 | root /usr/share/nginx/html; 185 | index index.html index.htm; 186 | } 187 | ``` 188 | ----- 189 | - 解决方法 root 移出来,或者在 php-fpm 配置里复制一份 190 | ``` 191 | # 解决方法 root 移出来 192 | root /usr/share/nginx/html; 193 | 194 | # pass PHP scripts to FastCGI server 195 | location ~ \.php$ { 196 | # 404 197 | try_files $fastcgi_script_name =404; 198 | 199 | # root /usr/share/nginx/html; ### 在 php-fpm 配置里复制一份 root 200 | 201 | # default fastcgi_params 202 | include fastcgi_params; 203 | 204 | # fastcgi settings 205 | fastcgi_pass unix:/run/php-fpm/php-fpm.sock; 206 | fastcgi_index index.php; 207 | fastcgi_buffers 8 16k; 208 | fastcgi_buffer_size 32k; 209 | 210 | # fastcgi params 211 | fastcgi_param DOCUMENT_ROOT $realpath_root; 212 | fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 213 | #fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/"; 214 | } 215 | ``` 216 | 217 | - 参考链接: https://wiki.archlinux.org/index.php/Nginx_(简体中文) 218 | 219 | ### 还有一个比较坑的 fastcgi_pass 变量怎么设置,网上有N种配置 220 | - 网上有N种配置,你不知道怎么设置和测试;我也是花了N个小时整理出来的方法,应该也适用于debian系统 221 | ``` 222 | 1. php ./index.php # 测试 php 是否正确 223 | 2. systemctl status php-fpm # 检查 php-fpm 是否启动 224 | 3. nginx -t # 检查配置是否有问题 225 | 4. vim /etc/php/php-fpm.conf/ # 找到 include=/etc/php/php-fpm.d/*.conf 这行,判断 www.conf 所在目录 226 | 5. cd /etc/php/php-fpm.d/ # 找到文件 /etc/php/php-fpm.d/www.conf 227 | 6. cat www.conf | grep 'php-fpm' # 查到 listen = /run/php-fpm/php-fpm.sock 判断 php-fpm 正确的监听端口 228 | 7. 修改nginx配置: fastcgi_pass unix:/run/php-fpm/php-fpm.sock; # 各个linux 默认各不相同 229 | 8. systemctl restart nginx # 重启nginx 测试是否能正确php,不行就网络查资料再排查 230 | ``` 231 | 232 | ### 附: Debian 系统 Nginx 默认配置文件: /etc/nginx/sites-enabled/default 233 | - 作为参考比较, Debian Nginx + PHP-FPM 设置好像简单点 234 | ``` 235 | # Add index.php to the list if you are using PHP 236 | index index.html index.htm index.nginx-debian.html index.php; 237 | ``` 238 | ``` 239 | # pass PHP scripts to FastCGI server 240 | # 241 | location ~ \.php$ { 242 | include snippets/fastcgi-php.conf; 243 | # 244 | # # With php-fpm (or other unix sockets): 245 | fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; # 注意版本号要对应,不然 520 网关错误 246 | # # With php-cgi (or other tcp sockets): 247 | # fastcgi_pass 127.0.0.1:9000; # apt 安装的 php-fpm 直接开这个是不行的 248 | } 249 | ``` 250 | 251 | ### Debian 系统 Nginx + PHP-FPM 设置排查方案步骤 252 | ``` 253 | 1. php ./index.php # 测试 php 是否正确 254 | 2. systemctl status php7.3-fpm # 检查 php-fpm 是否启动 255 | 3. vim /etc/nginx/nginx.conf # http用户名 user www-data; 站点配置 include /etc/nginx/sites-enabled/*; 256 | vim /etc/nginx/sites-enabled/default 257 | nginx -t # 检查配置是否有问题 258 | 4. vim /etc/php/7.3/fpm/php-fpm.conf # 判断 www.conf 所在目录 259 | 5. cd /etc/php/php-fpm.d/ # 找到文件 /etc/php/php-fpm.d/www.conf 260 | 6. cat /etc/php/7.3/fpm/pool.d/www.conf | grep -e 'fpm\.sock' 261 | # 查到 listen = /run/php/php7.3-fpm.sock 判断 php-fpm 正确的监听端口 262 | 7. 修改nginx配置: fastcgi_pass unix:/run/php/php7.3-fpm.sock; 263 | 8. systemctl restart nginx # 重启nginx 测试是否能正确php 264 | ``` 265 | 266 | ### 修正 Arch Linux locale 無法 generate 以及 tmux mosh 出現錯誤 267 | ``` 268 | pacman -S tmux 269 | 270 | tmux: invalid LC_ALL, LC_CTYPE or LANG 271 | 272 | locale -a 273 | locale: Cannot set LC_CTYPE to default locale: No such file or directory 274 | locale: Cannot set LC_MESSAGES to default locale: No such file or directory 275 | locale: Cannot set LC_COLLATE to default locale: No such file or directory 276 | ``` 277 | ### 解法 沒有把 /etc/locale.gen 內的 comment 拿掉 278 | ``` 279 | vim /etc/locale.gen 280 | #en_US.UTF-8 UTF-8 删除 注释# 281 | 282 | locale-gen "en_US.UTF-8" 283 | 284 | Generating locales... 285 | en_US.UTF-8... 286 | done 287 | ``` 288 | 289 | ### Alpine Linux 实现开机自启脚本 290 | ``` 291 | cd /etc/local.d 292 | 293 | vi sskcp.start 294 | 295 | #!/bin/bash 296 | ip link set eth0 up 297 | ip addr add 192.168.1.111/24 dev eth0 298 | ip route add default via 192.168.1.1 299 | exec /root/sskcp.sh start 300 | 301 | 302 | # 赋予脚本可执行权限: 303 | chmod +x sskcp.start 304 | 305 | # 设置 local 服务开机启动: 306 | rc-update add local 307 | ``` 308 | -------------------------------------------------------------------------------- /Arch/add_ip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # dhcpcd 启动后延迟 2秒 再添加一个静态IP 4 | sleep 2 5 | 6 | ni=$(ip addr | grep -E en[a-zA-Z0-9] | head -n 1 | awk -F ': ' '{print $2}') 7 | 8 | ip link set $ni up 9 | ip addr add 192.168.1.111/24 dev $ni 10 | ip route add default via 192.168.1.1 11 | 12 | 13 | help(){ 14 | echo -e "${SkyBlue}:: Source: ${Green} Debian or Arch Linux 添加 一个静态IP add_ip.sh ${Font}By 蘭雅sRGB" 15 | echo -e "${SkyBlue}:: Usage: ${GreenBG} bash add_ip.sh ${Yellow} [service] ${Font}" 16 | echo 17 | } 18 | 19 | system_def(){ 20 | Green="\033[32m" && Red="\033[31m" && GreenBG="\033[42;37m" && RedBG="\033[41;37m" 21 | Font="\033[0m" && Yellow="\033[0;33m" && SkyBlue="\033[0;36m" 22 | } 23 | 24 | systemd_service(){ 25 | # 安装启动服务 26 | cat </usr/lib/systemd/system/add_ip.service 27 | [Unit] 28 | Description=add_ip.sh Service 29 | Requires=dhcpcd.service 30 | 31 | [Service] 32 | Type=forking 33 | User=root 34 | ExecStart=nohup sh /root/add_ip.sh & 35 | 36 | [Install] 37 | WantedBy=multi-user.target 38 | 39 | EOF 40 | chmod +x /root/add_ip.sh 41 | systemctl enable add_ip.service 42 | systemctl start add_ip.service 43 | systemctl status add_ip.service 44 | } 45 | 46 | # 脚本命令参数 47 | system_def 48 | if [[ $# > 0 ]]; then 49 | key="$1" 50 | case $key in 51 | service) 52 | systemd_service 53 | ;; 54 | esac 55 | fi 56 | help 57 | -------------------------------------------------------------------------------- /Arch/bash.bashrc: -------------------------------------------------------------------------------- 1 | # 2 | # /etc/bash.bashrc 3 | # 4 | 5 | # If not running interactively, don't do anything 6 | [[ $- != *i* ]] && return 7 | 8 | [[ $DISPLAY ]] && shopt -s checkwinsize 9 | 10 | PS1='[\u@\h \W]\$ ' 11 | 12 | case ${TERM} in 13 | xterm*|rxvt*|Eterm|aterm|kterm|gnome*) 14 | PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' 15 | 16 | ;; 17 | screen*) 18 | PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' 19 | ;; 20 | esac 21 | 22 | [ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion 23 | 24 | 25 | # ~/.bashrc: executed by bash(1) for non-login shells. 26 | 27 | # Note: PS1 and umask are already set in /etc/profile. You should not 28 | # need this unless you want different defaults for root. 29 | # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' 30 | # umask 022 31 | 32 | # You may uncomment the following lines if you want `ls' to be colorized: 33 | export LS_OPTIONS='--color=auto' 34 | eval "`dircolors`" 35 | alias ls='ls $LS_OPTIONS' 36 | alias ll='ls $LS_OPTIONS -l' 37 | alias l='ls $LS_OPTIONS -lA' 38 | 39 | alias pa='ps aux' 40 | alias sc='systemctl' 41 | 42 | # Some more alias to avoid making mistakes: 43 | # alias rm='rm -i' 44 | # alias cp='cp -i' 45 | # alias mv='mv -i' 46 | alias tohtml='vim -c "TOhtml" -c ":w|:qa"' 47 | 48 | alias cls='clear' 49 | alias hg='history | grep --color=auto' 50 | alias ssr="http_proxy=http://127.0.0.1:1080 https_proxy=http://127.0.0.1:1080" 51 | alias grep='grep --color=auto' 52 | alias ssh='ssh -o ServerAliveInterval=60' 53 | -------------------------------------------------------------------------------- /Arch/mysql_root.md: -------------------------------------------------------------------------------- 1 | ## Arch linux 安装 mysql 没有默认数据库,要先初始化 2 | ``` 3 | mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql 4 | ``` 5 | 6 | ## mysql root 帐户没有密码没法登陆操作 7 | ``` 8 | systemctl stop mysql 9 | mysqld_safe --skip-grant-tables & 10 | mysql -uroot 11 | ``` 12 | 13 | ## 完整代码解决方案(arch linux 部分适用) 14 | ``` 15 | Full code solution 16 | 1. run bash commands 17 | 1. first, run these bash commands 18 | 19 | sudo /etc/init.d/mysql stop # stop mysql service 20 | sudo mysqld_safe --skip-grant-tables & # start mysql without password 21 | # enter -> go 22 | mysql -uroot # connect to mysql 23 | 24 | 2. then run mysql commands => copy paste this to cli manually 25 | 26 | use mysql; # use mysql table 27 | update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing 28 | update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user 29 | 30 | flush privileges; 31 | quit; 32 | 33 | 3. run more bash commands 34 | 35 | sudo /etc/init.d/mysql stop 36 | sudo /etc/init.d/mysql start # reset mysql 37 | # try login to database, just press enter at password prompt because your password is now blank 38 | mysql -u root -p 39 | 40 | 4. Socket issue (from your comments) 41 | When you see a socket error, a community came with 2 possible solutions: 42 | 43 | sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld 44 | sudo mysqld_safe --skip-grant-tables & 45 | (thanks to @Cerin) 46 | 47 | Or 48 | 49 | mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld 50 | (thanks to @Peter Dvukhrechensky) 51 | ``` 52 | 53 | ### 下载WordPress安装包并解压,添加wp用户名 54 | ``` 55 | wget http://wordpress.org/latest.tar.gz 56 | tar -xzvf latest.tar.gz 57 | 58 | mysql -u root 59 | 60 | mysql> CREATE DATABASE wp2020; 61 | mysql> GRANT ALL PRIVILEGES ON wp2020.* TO "wp2020"@"127.0.0.1" IDENTIFIED BY "wp2020passwd"; 62 | FLUSH PRIVILEGES; 63 | 64 | ``` 65 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![GitHub stars](https://img.shields.io/github/stars/hongwenjun/vps_setup)](https://github.com/hongwenjun/vps_setup/stargazers) 2 | [![GitHub forks](https://img.shields.io/github/forks/hongwenjun/vps_setup)](https://github.com/hongwenjun/vps_setup/network) 3 | - :smile: [简体中文](https://github.com/hongwenjun/vps_setup/blob/master/README.md)  :cry: [English](https://git.io/vps.english)                  龙芯2F服务器 https://262235.xyz/ 4 | 5 | ## :bell: 我們雖然窮,但是不能說謊,也不能打人;不是我們的東西,我們不能拿; 6 | ## :100: 要好好讀書,長大要做個對社會有用的人。 7 | 8 | - [![](https://raw.githubusercontent.com/hongwenjun/vps_setup/master/img/youtube.png)频道](https://www.youtube.com/sRGB18/videos)   www.youtube.com/sRGB18   [![](https://raw.githubusercontent.com/hongwenjun/vps_setup/master/img/paypal.png)赞赏支持!](https://paypal.me/sRGB18)  https://paypal.me/sRGB18 9 | - 推荐新手两个性价比:100:好按时计费VPS: :+1: [vultr.com](https://www.vultr.com/?ref=7425413) :+1: [skysilk.com](https://www.skysilk.com/ref/Xmr9xL1Bnf)  :+1:按需开启,不用不浪费! 10 | ---- 11 | 12 | - :gift: 项目: https://git.io/vps.us    https://git.io/winkcp    https://git.io/vps.english 13 | - :bomb: 脚本: https://git.io/vps.sh    https://git.io/wgmtu    https://git.io/v2ray.ss 14 | - :anger: 防火墙脚本: https://git.io/fhUSe    路由器脚本: https://git.io/sskcp.sh 15 | - English Script: https://git.io/vps.setup    https://git.io/wireguard.sh    https://git.io/v2ray_ss.sh 16 | 17 | --- 18 | ### :heart_eyes:Linux 简单命令工具和简易脚本 19 |
20 | 点击展开内容 21 | 22 | ## XPath Helper 简单使用方法 23 | ``` 24 | 1.开启插件 (ctrl+shif+x) 25 | 2.鼠标移动到一个标题上方 26 | 3.按 shift 键,提取xpath 27 | 4.删除xpath尾部[方括号] 28 | 29 | /a 链接文件 /a/@href 链接地址 30 | 31 | /html/body[@class='home pace-done']/section[@class='container']/div[@class='content-wrap']/div[@class='content']/article[@class='excerpt']/header/h2/a/@href 32 | ``` 33 | 34 | ## grep ip 并计数 35 | ``` 36 | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq -c| sort -nrk 1 37 | 38 | # 应用: 统计自己电信服务商IP动态变化 39 | cat /var/log/udp2raw.log \ 40 | | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq -c| sort -nrk 1 41 | 42 | # 统计哪些IP在扫描你的vps 43 | cat /var/log/auth.log \ 44 | | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq -c| sort -nrk 1 45 | 46 | # 查询IP信息 47 | https://www.ipip.net/ipquery.html 48 | ``` 49 | 50 | 51 | 52 | #### 一些表情例子 EMOJI 53 | - :smile: :laughing: :dizzy_face: :sob: :cold_sweat: :sweat_smile: :cry: :triumph: :heart_eyes: :relieved: 54 | - :+1: :-1: :100: :clap: :bell: :gift: :question: :bomb: :heart: :coffee: :cyclone: :bow: :kiss: :pray: :anger: 55 | 56 | ```c 57 | :smile: :laughing: :dizzy_face: :sob: :cold_sweat: :sweat_smile: :cry: :triumph: :heart_eyes: :relieved: 58 | :+1: :-1: :100: :clap: :bell: :gift: :question: :bomb: :heart: :coffee: :cyclone: :bow: :kiss: :pray: :anger: 59 | ``` 60 | 61 | ### 安装工具 tmux 和 fish 等 62 | 63 | ``` 64 | apt install tmux fish -y 65 | ``` 66 | ### GCP_AZ_AWS_Virmach等小内存优化,htop 或者 systemctl查看有的任务 67 | ``` 68 | systemctl | grep running 69 | 70 | systemctl disable google-accounts-daemon.service 71 | systemctl disable google-clock-skew-daemon.service 72 | systemctl disable google-network-daemon.service 73 | systemctl disable google-osconfig-agent.service 74 | 75 | systemctl disable unattended-upgrades.service 76 | systemctl disable fail2ban 77 | systemctl disable rsyslog 78 | systemctl disable cron 79 | systemctl disable getty@tty2.service 80 | systemctl disable console-getty.service 81 | ``` 82 | 83 | ### 微软B1ls 内存只给420M运行Docker崩溃只好开虚拟内存 84 | ``` 85 | # WALinuxAgent (waagent) 卸载 86 | systemctl disable walinuxagent 87 | 88 | # Swap 交换空间 89 | 90 | fallocate -l 1G /swapfile 91 | chmod 600 /swapfile 92 | mkswap /swapfile 93 | swapon /swapfile 94 | 95 | echo "/swapfile swap swap defaults 0 0" >> /etc/fstab 96 | 97 | 98 | # 其他优化设定 99 | vim /etc/sysctl.conf 100 | 101 | vm.min_free_kbytes = 18600 102 | vm.swappiness = 5 103 | 104 | sysctl -p 105 | 106 | 107 | 网上找了文章 《Azure 乞丐版 B1ls 的正确使用姿势 压榨极致性能》 108 | 先凑合着用吧,反正是备用机,续签的 99刀应该可以用一年 109 | ---------------- 110 | ## crontab -l 111 | 1 * */7 * * reboot 112 | 59 * * * * wget -qO- git.io/fxxlb | bash 113 | 8 */8 * * * docker run --rm hostloc 用户 密码 114 | ``` 115 | 116 | ### 在Android手机上安装Termux应用,测试学习10个秘密和酷命令! 117 | 118 | ``` 119 | 1) apt install sl 120 | sl 121 | 2) factor "Any Number" 122 | 3) apt install fish 123 | fish 124 | 4) apt install figlet 125 | figlet "Any Text" 126 | 5) apt install cmatrix 127 | cmatrix 128 | 6) apt install fortune 129 | fortune 130 | 7) apt install toilet 131 | toilet "Any Text" 132 | toilet -f mono12 -F gay "Any Text" 133 | 8) apt install w3m 134 | w3m "any websites" 135 | example:- w3m google.com 136 | 9) ifconfig 137 | 10) apt install cowsay 138 | cowsay "Any Text" 139 | ``` 140 | 141 | ### [acme协议从letsencrypt生成免费的证书](http://srgb.vicp.net/2018/11/05/acme_sh/) 142 | 143 | ``` 144 | #!/usr/bin/env sh 145 | 146 | # https://github.com/Neilpang/acme.sh/wiki/说明 147 | 148 | # 安装ssl依赖 和 acme.sh工具 149 | apt-get install socat netcat -y 150 | curl https://get.acme.sh | sh 151 | 152 | # 设置域名 153 | DOMAIN=ssl.srgb888.ga 154 | 155 | # 生成域名ssl证书 156 | ~/.acme.sh/acme.sh --issue -d ${DOMAIN} --webroot /var/www/html --standalone -k ec-256 --force 157 | 158 | ``` 159 | 160 | ### 如果你用的nginx服务器,以后可以使用一行命令更新证书 161 | ``` 162 | ~/.acme.sh/acme.sh --issue -d ssl.srgb888.ga --nginx --standalone -k ec-256 --force 163 | ``` 164 | 165 | ## Linux 使用代理 加速git 和安装软件 166 | 167 | ``` 168 | #!/bin/bash 169 | # socks5tohttp.sh 170 | 171 | brook socks5tohttp -s 127.0.0.1:1080 -l 0.0.0.0:8010 & 172 | ps aux | grep -E brook 173 | 174 | export http_proxy="http://127.0.0.1:8010" 175 | export https_proxy="http://127.0.0.1:8010" 176 | ``` 177 | - Windows 系统脚本 VPN --> socks5 --> http代理 给手机使用 178 | ``` 179 | :: Brook 开启 socks5 再转http 180 | start /b brook socks5 -l :1080 -i 0.0.0.0 181 | sleep 1 182 | start /b brook socks5tohttp -s 127.0.0.1:1080 -l 0.0.0.0:8010 183 | ``` 184 | 185 | ## 安装 brook 用来 Socks5 转 HTTP 代理 186 | - brook 其他更多使用方法访问 [官方网站](https://txthinking.github.io/brook/#/zh-cn/brook-socks5tohttp) 187 | ``` 188 | $ curl -L https://github.com/txthinking/brook/releases/download/v20200909/brook_linux_amd64 -o /usr/bin/brook 189 | $ chmod +x /usr/bin/brook 190 | 191 | # 32位系统安装 192 | $ curl -L https://github.com/txthinking/brook/releases/download/v20200909/brook_linux_386 -o /usr/bin/brook 193 | 194 | ``` 195 | - Socks5 转 HTTP 代理 196 | ``` 197 | $ brook socks5tohttp -s 127.0.0.1:1080 -l 127.0.0.1:8010 198 | ``` 199 | 200 | - 中继: 可以将地址中继到远程地址。 它可以中继任何tcp和udp服务器 201 | ``` 202 | $ brook relay -f :9999 -t 1.2.3.4:9999 203 | ``` 204 | 205 | - brook socks5 运行一个独立的标准socks5服务器(TCP和UDP) 206 | ``` 207 | $ brook socks5 -l :1080 -i 0.0.0.0 208 | ``` 209 | 210 | ## Linux 让终端走代理的几种方法 211 | - https://zhuanlan.zhihu.com/p/46973701 212 | 213 | 214 | ### ssh保持长连接的方式,方法有以下三种: 215 | 216 | ``` 217 | 1.修改server端的etc/ssh/sshd_config 218 | 219 | ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接 220 | ClientAliveCountMax 3 #server发出请求后,客户端没有响应得次数达到3,就自动断开连接,正常情况下,client不会不响应 221 | 222 | systemctl reload sshd 223 | 224 | 2.修改client端的etc/ssh/ssh_config添加以下:(在没有权限改server配置的情形下) 225 | 226 | ServerAliveInterval 60 #client每隔60秒发送一次请求给server,然后server响应,从而保持连接 227 | ServerAliveCountMax 3 #client发出请求后,服务器端没有响应得次数达到3,就自动断开连接,正常情况下,server不会不响应 228 | 229 | 3.在命令参数里ssh -o ServerAliveInterval=60 这样子只会在需要的连接中保持持久连接, 毕竟不是所有连接都要保持持久的 230 | ``` 231 | 232 | 233 |
234 | 235 | --- 236 | ### Docker 版 RISC-V 交叉编译器和执行 riscv-pke 的环境 [在线阅读](https://262235.xyz/index.php/archives/1250/) 237 | ### Hugo编译 C语言入门教程文档 Html静态网站制作 [在线阅读](https://262235.xyz/index.php/archives/1247/) 238 | ### Xshell 7 操作 Docker Python3 学习编程 [在线阅读](https://www.262235.xyz/index.php/archives/431/) 239 | ### Linux Command 命令大全 [命令列表 离线包](https://262235.xyz/index.php/archives/313/) 240 | ### 公益中小学教学视频 - 免费观看 [在线阅读](https://262235.xyz/index.php/archives/216/) 241 | ### 旧手机烂手机不要换锈钢脸盆,安装Linux Deploy做移动服务器 [在线阅读](https://262235.xyz/index.php/archives/193/) 242 | ### 群晖NAS部署自动PT工具 感谢大神TaterLi [在线阅读](https://262235.xyz/index.php/archives/119/) 243 | ### 一键 WordPress 博客安装脚本,同时也是 LNMP 套件 [在线阅读](https://262235.xyz/index.php/archives/124/) 244 | ### 宇宙第一大站 IPT 刷上传,守株待兔也能活 [在线阅读](https://262235.xyz/index.php/archives/86/) 245 | ### Typecho 自用博客笔记安装 [上篇](https://262235.xyz/index.php/archives/61/) [下篇:Typecho-theme-DUX 主题安装](https://262235.xyz/index.php/archives/74/) 246 | ### Oracle VM VirtualBox 安装虚拟机 Debian 10 挖坑填坑笔记 [在线阅读](https://github.com/hongwenjun/vps_setup/tree/remove/debian) 247 | ### Arch Linux 安装简易版 For VirtualBox 安装虚拟机 填坑笔记 [在线阅读](https://github.com/hongwenjun/vps_setup/blob/remove/Arch/README.md) 248 | ### 黑五变态机有救,可以用NFS挂载一个僚机 [在线阅读](https://github.com/hongwenjun/vps_setup/blob/remove/debian/nfsdir.md) 249 | --- 250 | ### 网友视频和白话文档 251 | 252 | - 白话文档: [OpenWRT配置](https://git.io/wrt.wg)   [Nginx反代V2ray原理](https://git.io/v2ray.nginx)   [rclone使用教程](https://github.com/hongwenjun/vps_setup/blob/master/rclone/README.md)   [Debian 安装Transmission教程和一键脚本](https://github.com/hongwenjun/vps_setup/blob/master/rclone/transmission.md) 253 | - 网友视频: [三剑客](https://youtu.be/BHZhU8wxf9A)   [PC_MAC_手机客户端](https://youtu.be/dkXWicxak3w) 254 | 255 | ### Debian 10 Buster 管理员手册 [在线阅读](https://debian-handbook.info/browse/zh-CN/stable/) 256 | 257 | - Debian 开发者和 Debian 手册作者 Raphaël Hertzog 宣布面向 Debian 11 的最新版本 Debian 管理员手册已上线。 258 | 259 | --- 260 | 261 | -------------------------------------------------------------------------------- /bitmonero/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stable-slim AS builder 2 | RUN apt update -y \ 3 | && apt install --no-install-recommends --no-install-suggests -y python3 python3-distutils python3-venv \ 4 | && apt install --no-install-recommends --no-install-suggests -y wget tmux nano gcc unzip \ 5 | && wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate \ 6 | && python3 get-pip.py 7 | 8 | RUN wget https://github.com/monero-ecosystem/monero-python/archive/refs/heads/master.zip --no-check-certificate && \ 9 | unzip master.zip && \ 10 | mv monero-python-master /app && \ 11 | rm master.zip && \ 12 | cd /app && \ 13 | python3 -m venv .venv && \ 14 | echo c291cmNlIC52ZW52L2Jpbi9hY3RpdmF0ZQpwaXAzIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dAo= \ 15 | | base64 -d > py-venv.sh && \ 16 | bash py-venv.sh ### source .venv/bin/activate && pip3 install -r requirements.txt 17 | 18 | ################################################################## 19 | 20 | FROM debian:stable-slim 21 | RUN apt update -y && \ 22 | apt install --no-install-recommends --no-install-suggests -y python3 && \ 23 | rm -rf /var/lib/apt/lists/* 24 | 25 | COPY --from=builder /app /app 26 | ADD ./xmseed.py /app/xmseed.py 27 | 28 | WORKDIR /app 29 | RUN echo IyEvYmluL2Jhc2gKICAgIApzb3VyY2UgLnZlbnYvYmluL2FjdGl2YXRlCnB5dGhvbjMgeG1zZWVkLnB5 \ 30 | | base64 -d > run.sh && \ 31 | chmod +x run.sh 32 | 33 | CMD ["bash", "run.sh"] 34 | 35 | ################################################################## 36 | 37 | # Usage: docker run --rm -it xmseed 38 | 39 | # docker run --name xmseed -itd hongwenjun/xmseed sh 40 | # docker exec -it xmseed bash run.sh 41 | 42 | -------------------------------------------------------------------------------- /bitmonero/Dockerfile.alpine: -------------------------------------------------------------------------------- 1 | FROM python:3.6.15-alpine3.15 AS builder 2 | RUN sed -i s/#http/http/g /etc/apk/repositories && \ 3 | apk add --no-cache wget unzip bash gcc g++ make python3-dev openssl-dev libffi-dev 4 | 5 | RUN wget -O master.zip --no-check-certificate \ 6 | https://github.com/monero-ecosystem/monero-python/archive/refs/heads/master.zip && \ 7 | unzip master.zip && \ 8 | mv monero-python-master /app && \ 9 | cd /app && \ 10 | python3 -m venv .venv && \ 11 | echo c291cmNlIC52ZW52L2Jpbi9hY3RpdmF0ZQpwaXAzIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dAo= \ 12 | | base64 -d > py-venv.sh && \ 13 | bash py-venv.sh 14 | ################################################################## 15 | FROM python:3.6.15-alpine3.15 AS Release 16 | COPY --from=builder /app /app 17 | ADD ./xmseed.py /app/xmseed.py 18 | 19 | WORKDIR /app 20 | RUN apk add --no-cache bash && \ 21 | echo IyEvYmluL2Jhc2gKICAgIApzb3VyY2UgLnZlbnYvYmluL2FjdGl2YXRlCnB5dGhvbjMgeG1zZWVkLnB5 \ 22 | | base64 -d > run.sh && \ 23 | chmod +x run.sh 24 | 25 | RUN find / -depth -name '__pycache__' -type d -exec rm -rf {} \; && \ 26 | rm /app/tests -rf && \ 27 | rm /app/.venv/share/python-wheels/* -rf && \ 28 | rm /app/.venv/lib/python3.6/site-packages/pip* -rf && \ 29 | rm /app/.venv/lib/python3.6/site-packages/setuptools* -rf && \ 30 | rm /usr/local/include/python3.6 -rf && \ 31 | rm /usr/share/zoneinfo /etc/ssl /tmp -rf && \ 32 | cd /usr/local/lib/python3.6/site-packages && \ 33 | rm pip setuptools pkg_resources -rf 34 | ################################################################## 35 | 36 | FROM scratch 37 | COPY --from=Release . . 38 | WORKDIR /app 39 | CMD ["bash", "run.sh"] 40 | ################################################################## 41 | # Usage: docker run --rm -it xmseed 42 | 43 | # docker run --name xmseed -itd hongwenjun/xmseed sh 44 | # docker exec -it xmseed bash run.sh 45 | 46 | -------------------------------------------------------------------------------- /bitmonero/README.md: -------------------------------------------------------------------------------- 1 | ![bb.jpg][1] 2 | 3 | # 数字货币学习文章 https://262235.xyz/index.php/tag/xmr/ 4 | 5 | ## 使用Linux虚拟机(或VNC)建立数字货币冷钱包 6 | ![11.png][2] 7 | 8 | GRUB 菜单 按键 e 编辑菜单 9 | 找到 quiet 后 添加 init=/bin/bash 10 | 按 F10 进入系统 无网络的 Debian linux系统 11 | 12 | ![22.png][3] 13 | 14 | ``` 15 | 16 | GRUB 菜单 按键 e 编辑菜单 17 | 找到 quiet 后 添加 init=/bin/bash 18 | 按 F10 进入系统 无网络的 Debian linux系统 19 | 20 | df -h 查看内存盘 挂载 /run 21 | cd /run 后运行预先准备的钱包软件 22 | 23 | /root/monero-wallet-cli | tee seed.txt 24 | 25 | 按提示输入新建冷钱包名,和密码 26 | seed种子选择 9 简体中文 27 | 28 | 现在建立的钱包,只可以看到钱包地址和只读私钥 29 | 30 | seed种子因为选择中文,是乱码的。 31 | 所以要挂载 根分区,seed.txt 压缩密码打包到硬盘上 32 | 33 | mount -no remount,rw / 34 | 35 | 7z a mycp.7z seed.txt -p 36 | 37 | 一次可以多做几个冷钱包,压缩加密打包备用,目前为止,自己也还不知道 seed 内容是什么 38 | ``` 39 | ![捕获.PNG][4] 40 | 41 | ``` 42 | wallet 地址: 45MPKaLeV9t xxx NV3FoU2k 43 | View key: 37f177238 xxxx 6790107 44 | 使用钱包地址和私钥建立只读钱包,可以发送零钱测试是否正确 45 | ``` 46 | 47 | [1]: https://262235.xyz/usr/uploads/2022/01/1902993299.jpg 48 | [2]: https://262235.xyz/usr/uploads/2022/01/251645996.png 49 | [3]: https://262235.xyz/usr/uploads/2022/01/391228121.png 50 | [4]: https://262235.xyz/usr/uploads/2022/01/2706755165.png 51 | -------------------------------------------------------------------------------- /bitmonero/xmseed.py: -------------------------------------------------------------------------------- 1 | from monero.seed import Seed 2 | from monero import wordlists 3 | 4 | XM_XMR = u"小 明 的 钱 包 " * 5 5 | seed = Seed(XM_XMR, "Chinese (simplified)") 6 | 7 | def colorize(text, col='SkyBlue'): 8 | colors = ['SUCCESS', 'FAILURE', 'WARNING', 'NOTE', 'Green', 'Red', 'Yellow', 'SkyBlue'] 9 | if col == colors[0] or col == 0 : out = '\033[42m' 10 | elif col == colors[1] or col == 1 : out = '\033[41m' 11 | elif col == colors[2] or col == 2 : out = '\033[43m' 12 | elif col == colors[3] or col == 3 : out = '\033[44m' 13 | elif col == colors[4] or col == 4 : out = '\033[32m' 14 | elif col == colors[5] or col == 5 : out = '\033[31m' 15 | elif col == colors[6] or col == 6 : out = '\033[0;33m' 16 | elif col == colors[7] or col == 7 : out = '\033[0;36m' 17 | else : out = '\033[42m' + col +'\033[0m' 18 | return out + text +'\033[0m' 19 | 20 | def display_info(): 21 | s =['Seed.Hex: ', 'Seed种子: ', '钱包地址: ', 'view密钥: ', 'spend密钥:', '\n'] 22 | print(colorize(s[5] + s[1], 0), colorize(seed.phrase, 'Green')) 23 | print(colorize(s[5] + s[0], 1), colorize(seed.hex, 'Yellow')) 24 | print(colorize(s[5] + s[2], 2), seed.public_address()) 25 | print(colorize(s[3], 3), seed.secret_view_key()) 26 | print(colorize(s[4], 1), seed.secret_spend_key()) 27 | print() 28 | 29 | def fix_seed(s): 30 | s = s.replace(' ', '') 31 | if len(s) == 64 or len(s) < 1 : 32 | return s 33 | elif len(s) < 12 or len(s) > 25: 34 | print(s, colorize(error, 'FAILURE')) 35 | exit() 36 | elif 13 < len(s) < 23 : 37 | print(s, colorize(error, 'FAILURE')) 38 | exit() 39 | 40 | cn = wordlists.ChineseSimplified() 41 | lst = list(); error_flag = '' 42 | for c in s: 43 | lst.append(c) 44 | if c not in cn.word_list : 45 | print(c, colorize('Not In Seed字典!', 'FAILURE')) 46 | error_flag = 'error_flag' 47 | 48 | if error_flag == 'error_flag' : 49 | exit() 50 | s = ' '.join(lst) 51 | return s 52 | 53 | info = '本脚本用来给门罗币数字钱包 制作个性 Seed 种子汉字助记词\n' 54 | info1 = '请输入12或24个汉字, 程序帮你计算第13或25个校验汉字! 也可以输入 Seed.Hex 计算 Seed 种子助记词。\n' 55 | info2 = 'Seed 种子(汉字/Hex): ' 56 | info3 = '直接输入' + colorize(' ', 1) + '键将新建随机种子\n' 57 | error = '\t错误-检查字数!\t' 58 | 59 | print(colorize(info, 'SUCCESS'), end = '') 60 | yes = 'y' # yes = input() 61 | if yes == 'y' or yes == 'Y' : 62 | print(colorize(info1) + info3 + colorize(info2, 'Red'), end = '') 63 | XM_XMR = fix_seed(input()) 64 | seed = Seed(XM_XMR, "Chinese (simplified)") 65 | seed = Seed(seed.hex, "Chinese (simplified)") 66 | 67 | display_info() 68 | 69 | # monero.seed 开源库: https://github.com/monero-ecosystem/monero-python 70 | # 测试结果是否正确, 可以使用在线轻钱包检查,注意实际密钥种子,不要随便网上测试 71 | # https://wallet.mymonero.com/ 72 | -------------------------------------------------------------------------------- /cloud/README.md: -------------------------------------------------------------------------------- 1 | ## 家庭云之一键安装Samba 2 | Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。第三版不仅可访问及分享SMB的文件夹及打印机,本身还可以集成入Windows Server的网域,扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列操作系统之间搭起一座桥梁,让两者的资源可互通有无。 3 | 4 | ```bash 5 | wget 262235.xyz/samba.sh && bash samba.sh 6 | ``` 7 | 8 | ## 家庭云之一键安装 `php`相册 files.photo.gallery 9 | files.photo.gallery 是一个单文件 PHP 应用程序,可以将其放入服务器上的任何文件夹中,从而立即创建一个文件和文件夹库。它支持所有文件类型,并允许您预览图像、视频、音频和文本文件。 10 | 11 | ```bash 12 | wget 262235.xyz/photo.sh && bash photo.sh 13 | ``` 14 | 15 | ## `samba.sh` 和 `photo.sh` 脚本源码 16 | https://github.com/hongwenjun/vps_setup/tree/remove/cloud/ -------------------------------------------------------------------------------- /cloud/photo.sh: -------------------------------------------------------------------------------- 1 | # 部署 nginx-php 和 php 相册 2 | photo_install(){ 3 | downloads=/var/www/html 4 | 5 | docker run -d -p 80:80 -p 443:443 \ 6 | --cpus 0.6 --restart=always \ 7 | -v ${downloads}:/var/www/html \ 8 | --name nginx-php \ 9 | hongwenjun/nginx-php 10 | 11 | wget -q -O - https://262235.xyz/photo.tar.gz | tar -xzf - -C ${downloads} 12 | 13 | cd ${downloads} 14 | mkdir -p _files 15 | chown -R www-data:www-data _files 16 | chmod 0777 _files/ 17 | } 18 | 19 | apt install curl -y 20 | wget https://262235.xyz/wgmtu && bash wgmtu docker 21 | 22 | photo_install 23 | 24 | -------------------------------------------------------------------------------- /cloud/samba.sh: -------------------------------------------------------------------------------- 1 | install_samba() 2 | { 3 | # 安装和设置 samba 4 | apt update -y && apt install samba -y 5 | mkdir -p /var/www/html/u 6 | chown -R nobody:nogroup /var/www/html/u 7 | 8 | cat </etc/samba/smb.conf 9 | [global] 10 | workgroup = WORKGROUP 11 | max log size = 1000 12 | logging = file 13 | panic action = /usr/share/samba/panic-action %d 14 | server role = standalone server 15 | obey pam restrictions = yes 16 | unix password sync = yes 17 | 18 | passwd program = /usr/bin/passwd %u 19 | passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . 20 | 21 | pam password change = yes 22 | map to guest = bad user 23 | usershare allow guests = yes 24 | 25 | [homes] 26 | comment = Home Directories 27 | browseable = no 28 | read only = yes 29 | create mask = 0700 30 | directory mask = 0700 31 | valid users = %S 32 | 33 | [cloud] 34 | comment = Network Logon Service 35 | path = /var/www/html/u 36 | guest ok = yes 37 | read only = no 38 | 39 | EOF 40 | 41 | systemctl restart smbd.service 42 | 43 | } 44 | 45 | install_samba 46 | 47 | -------------------------------------------------------------------------------- /debian/README.md: -------------------------------------------------------------------------------- 1 | # Oracle VM VirtualBox 安装虚拟机 Debian 10 挖坑填坑笔记 2 | 3 | ### VirtualBox 安装虚拟机 Debian 系统 省略 4 | - 下载 **mini.iso** 网络安装,或者 **debian-10.5.0-amd64-xfce-CD-1.iso** 图形GUI安装 5 | 6 | - 注意: 选择中文语言,使用中国大陆镜像,推荐中科大软件源,如果选择默认的官方站速度会很慢;即使选对中科大镜像源在安装过程中 7 | 还是会从官方下载证书文件卡住,可以ctrl+alt+f4 切换到后台,ctrl+c停止从官方源下载资源包,不影响系统安装。安装软件选择SSH 8 | 方便远程登陆,不要选择xfce或者KDE图形桌面,安装完成后,按下面修改 软件源 9 | 10 | - **sources.list** 修改 apt 中科大软件源 配置 11 | ``` 12 | # vim /etc/apt/sources.list 13 | 14 | deb http://mirrors.ustc.edu.cn/debian/ buster main 15 | deb-src http://mirrors.ustc.edu.cn/debian/ buster main 16 | 17 | deb http://mirrors.ustc.edu.cn/debian-security buster/updates main 18 | deb-src http://mirrors.ustc.edu.cn/debian-security buster/updates main 19 | 20 | deb http://mirrors.ustc.edu.cn/debian/ buster-updates main 21 | deb-src http://mirrors.ustc.edu.cn/debian/ buster-updates main 22 | ``` 23 | 24 | ### 设置时区为北京时间 25 | ``` 26 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone 27 | ``` 28 | ## dd 命令是备份Linux系统,或者是linux系统杀手 29 | - 所以建立虚拟vmdk磁盘只分配了2G,方便DD,或者写U盘镜像 30 | ``` 31 | # dd指令 语法格式 32 | dd [option] if=file:输入文件名,缺省为标准输入 of=file:输出文件名,缺省为标准输出 33 | 测试纯写入性能 34 | dd if=/dev/zero of=test bs=8k count=10000 oflag=direct 35 | 测试纯读取性能 36 | dd if=test of=/dev/null bs=8k count=10000 iflag=direct 37 | 38 | root@debian:~$ fdisk -l 39 | 40 | Disk /dev/sda: 2 GiB, 2147483648 bytes, 4194304 sectors 41 | Disk model: VBOX HARDDISK 42 | Units: sectors of 1 * 512 = 512 bytes 43 | Sector size (logical/physical): 512 bytes / 512 bytes 44 | I/O size (minimum/optimal): 512 bytes / 512 bytes 45 | Disklabel type: dos 46 | Disk identifier: 0x4ea1acbd 47 | 48 | Device Boot Start End Sectors Size Id Type 49 | /dev/sda1 * 2048 4192255 4190208 2G 83 Linux 50 | 51 | 52 | Disk /dev/sdb: 4 GiB, 4294967296 bytes, 8388608 sectors 53 | Disk model: VBOX HARDDISK 54 | Units: sectors of 1 * 512 = 512 bytes 55 | Sector size (logical/physical): 512 bytes / 512 bytes 56 | I/O size (minimum/optimal): 512 bytes / 512 bytes 57 | 58 | root@debian:~$ dd if=/dev/sda of=/dev/sdb 59 | 记录了4194304+0 的读入 60 | 记录了4194304+0 的写出 61 | 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 91.3932 s, 23.5 MB/s 62 | 63 | 64 | root@debian:~$ mkfs.ext4 /dev/sdb1 65 | 66 | mke2fs 1.44.5 (15-Dec-2018) 67 | /dev/sdb1 contains a ext4 file system 68 | last mounted on / on Tue Sep 15 20:33:12 2020 69 | Proceed anyway? (y,N) y 70 | Creating filesystem with 523776 4k blocks and 131072 inodes 71 | Filesystem UUID: ebe2ce7e-1543-43a7-8df9-0e7596448227 72 | Superblock backups stored on blocks: 73 | 32768, 98304, 163840, 229376, 294912 74 | 75 | Allocating group tables: done 76 | Writing inode tables: done 77 | Creating journal (8192 blocks): done 78 | Writing superblocks and filesystem accounting information: done 79 | 80 | 81 | mkdir /root/d 82 | mount /dev/sdb1 /root/d 83 | 84 | root@debian:~$ df -h 85 | 文件系统 容量 已用 可用 已用% 挂载点 86 | udev 102M 0 102M 0% /dev 87 | tmpfs 24M 3.0M 21M 13% /run 88 | /dev/sda1 2.0G 1.3G 621M 67% / 89 | tmpfs 116M 0 116M 0% /dev/shm 90 | tmpfs 5.0M 0 5.0M 0% /run/lock 91 | tmpfs 116M 0 116M 0% /sys/fs/cgroup 92 | tmpfs 24M 0 24M 0% /run/user/0 93 | /dev/sdb1 2.0G 6.0M 1.9G 1% /root/d 94 | 95 | root@debian:~$ dd if=/dev/sda | gzip > /root/d/image.gz 96 | 记录了4194304+0 的读入 97 | 记录了4194304+0 的写出 98 | 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 102.968 s, 20.9 MB/s 99 | 100 | ``` 101 | ## VirtualBox 中如何使用U盘 102 | ``` 103 | 以 管理员身份 打开命令提示符 CMD 查看一下U盘的 DeviceID【磁盘标识盘】: 104 | 105 | wmic diskdrive list brief 106 | 107 | 使用 VBoxManage 命令生成vmdk文件 usb.vmdk 108 | 109 | cd "C:\Program Files\Oracle\VirtualBox" 110 | 111 | VBoxManage.exe internalcommands createrawvmdk -filename "C:\VPC\usb.vmdk" -rawdisk \\.\PhysicalDrive3 112 | 113 | RAW host disk access VMDK file C:\VPC\usb.vmdk created successfully. 114 | 115 | === usb.vmdk 文件内容 === 116 | 117 | # Disk DescriptorFile 118 | version=1 119 | CID=db9f2dfb 120 | parentCID=ffffffff 121 | createType="fullDevice" 122 | 123 | # Extent description 124 | RW 8036352 FLAT "\\.\PhysicalDrive3" 0 125 | 126 | # The disk Data Base 127 | #DDB 128 | 129 | ddb.virtualHWVersion = "4" 130 | ddb.adapterType="ide" 131 | ddb.geometry.cylinders="7972" 132 | ddb.geometry.heads="16" 133 | ddb.geometry.sectors="63" 134 | ddb.uuid.image="8dcce260-7a5f-462c-878f-01786958e77f" 135 | ddb.uuid.parent="00000000-0000-0000-0000-000000000000" 136 | ddb.uuid.modification="00000000-0000-0000-0000-000000000000" 137 | ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000" 138 | 139 | ``` 140 | 141 | ## 使用 VBoxManage 将vmdk文件转换成IMG文件 142 | - 语法: **VBoxManage clonehd** 源文件.vmdk 目标文件.img --format RAW 143 | ``` 144 | VBoxManage clonehd debian-disk001.vmdk debian10.img --format RAW 145 | 146 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 147 | Clone medium created in format 'RAW'. UUID: 76294339-5652-45d9-97e0-eab5688aa2aa 148 | ``` 149 | 150 | ## Debian 10 默认安装了N多 realtek intel 等主要硬件厂商网卡 151 | ``` 152 | ls /lib/modules/4.19.0-10-amd64/kernel/drivers/net/ethernet 153 | 154 | 3com alteon atheros chelsio emulex huawei mellanox natsemi packetengines sfc sun xircom 155 | 8390 amazon broadcom cisco fealnx.ko intel micrel neterion qlogic silan tehuti 156 | adaptec amd brocade dec fujitsu jme.ko microchip netronome rdc sis ti 157 | agere aquantia cavium dlink hp marvell myricom nvidia realtek smsc via 158 | 159 | lspci | grep Ethernet 160 | 161 | 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) 162 | 163 | lsmod 164 | e1000 155648 0 165 | 166 | ``` 167 | ## Debian 10 迁移系统网卡不能自动获取IP修改方法 168 | ``` 169 | ip addr 170 | 171 | 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 172 | link/ether 08:00:27:d3:49:8d brd ff:ff:ff:ff:ff:ff 173 | inet 192.168.1.111/24 brd 192.168.1.255 scope global dynamic enp0s3 174 | 175 | cat /etc/network/interfaces 176 | 177 | # This file describes the network interfaces available on your system 178 | # and how to activate them. For more information, see interfaces(5). 179 | 180 | source /etc/network/interfaces.d/* 181 | 182 | # The loopback network interface 183 | auto lo 184 | iface lo inet loopback 185 | 186 | # The primary network interface 187 | allow-hotplug enp0s3 188 | iface enp0s3 inet dhcp 189 | 190 | ### --------修改成固定IP------------- #### 191 | # The loopback network interface 192 | auto lo 193 | iface lo inet loopback 194 | 195 | # The primary network interface 196 | allow-hotplug enp0s3 197 | iface enp0s3 inet static 198 | address 192.168.1.111 199 | netmask 255.255.255.0 200 | gateway 192.168.1.1 201 | dns-nameserver 8.8.8.8 202 | 203 | vim /etc/network/interfaces 204 | ### 修改interfaces中的网卡名字enp0s3同 ip addr获得的网卡名字相同 205 | 206 | systemctl restart networking.service 207 | 208 | # debian系统下重启停止网卡命令 209 | ifdown enp0s3 210 | ifup enp0s3 211 | ``` 212 | ![](https://raw.githubusercontent.com/hongwenjun/img/master/debian/autonet.png) 213 | 214 | ## autonet.sh 自动修改interfaces 网卡自动加载 215 | ``` 216 | lspci | grep Ethernet 217 | ni=$(ip addr | grep enp | head -n 1 | awk -F ': ' '{print $2}') 218 | sed -i "s/enp[a-zA-Z0-9]*/${ni}/g" /etc/network/interfaces 219 | ifup $ni 220 | ``` 221 | 222 | ## debian使用 parted 工具 调整磁盘分区 223 | ``` 224 | apt install parted 225 | 226 | root@debian:~$ partx /dev/sda 227 | NR START END SECTORS SIZE NAME UUID 228 | 1 2048 4192255 4190208 2G 4ea1acbd-01 229 | 230 | root@debian:~$ parted 231 | 232 | (parted) help 233 | print 显示分区表,可用设备,可用空间,所有找到的分区或特定分区 234 | quit 退出程序 235 | 236 | resizepart NUMBER END 调整分区号 237 | rm NUMBER 删除分区 238 | 239 | 其他详细命令 240 | https://www.howtoing.com/parted-command-to-create-resize-rescue-linux-disk-partitions/ 241 | 242 | ``` 243 | ## Vbox增加虚拟磁盘大小方法 244 | - **VBoxManage** 只支持VDI格式,不支持vmdk格式,所以要先转换磁盘格式VDI,在扩容 245 | ``` 246 | VBoxManage clonehd debian.vmdk debian.vdi --format VDI 247 | 248 | VBoxManage modifyhd debian.vdi -resize 8192 249 | ``` 250 | - 使用 **parted** 工具 调整磁盘系统分区后,**df -h** 空间没有增大,需要 **resize2fs* /dev/sda1 调整文件系统大小 251 | ``` 252 | root@debian:~$ parted /dev/sda 253 | 254 | (parted) print free 255 | 256 | Number Start End Size Type File system Flags 257 | 32.3kB 1049kB 1016kB Free Space 258 | 1 1049kB 8590MB 8589MB primary ext4 boot 259 | 260 | 261 | root@debian:~$ df -h 262 | Filesystem Size Used Avail Use% Mounted on 263 | /dev/sda1 2.0G 1.4G 486M 74% / 264 | 265 | root@debian:~$ resize2fs /dev/sda1 266 | resize2fs 1.44.5 (15-Dec-2018) 267 | Filesystem at /dev/sda1 is mounted on /; on-line resizing required 268 | old_desc_blocks = 1, new_desc_blocks = 1 269 | The filesystem on /dev/sda1 is now 2096896 (4k) blocks long. 270 | 271 | root@debian:~$ df -h 272 | Filesystem Size Used Avail Use% Mounted on 273 | /dev/sda1 7.9G 1.4G 6.2G 19% / 274 | 275 | ``` 276 | 277 | ### linux 关闭swap 278 | 279 | ``` 280 | # 禁用swap 281 | swapoff -a 282 | 283 | # 启用swap 284 | swapon -a 285 | 286 | # 查看交换分区状态 287 | free -m 288 | ``` 289 | 290 | ## debian 使用 ntfs-3g 挂载读取Windows NTFS系统文件 291 | ``` 292 | apt search ntfs-3g # 搜索工具在哪个安装包 293 | apt install ntfs-3g 294 | 295 | 使用语法:mount -t ntfs-3g 分区设备文件名 挂载点 296 | 297 | 查找分区的设备文件名:fdisk -l 298 | 299 | 执行挂载:mount -t ntfs-3g /dev/sdb1 /mnt/usb 300 | 301 | 访问数据:ls -l /mnt/usb 302 | 303 | 卸载:umount /mnt/usb 304 | 305 | umount -a 全卸载挂载 306 | ``` 307 | ## debian buster不能启动docker守护进程(dockerd)的解决办法 308 | ## iptables v1.8.2 (nf_tables): Chain already exists 解决办法 309 | 310 | - 故障原因是Docker用iptables初始化NAT网络,而Debian buster使用 nftables 而不是 iptables,导致dockerd不能正常完成NAT初始化,出错退出。 311 | - 处理方法是调用update-alternatives强制Debian用iptables而不是nftables。 312 | 313 | ``` 314 | sudo update-alternatives --set iptables /usr/sbin/iptables-legacy 315 | # for ipv6 316 | sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy 317 | ``` 318 | 319 | ## Debian 语言设置 320 | - vim /etc/default/locale 321 | ``` 322 | # 英文显示 323 | LANG=en_US.UTF-8 324 | 325 | # 中文显示 326 | LANG="zh_CN.UTF-8" 327 | LANGUAGE="zh_CN:zh" 328 | ``` 329 | 330 | ## DEBIAN LOCALE LANGUAGE SETTINGS & Modify Interfaces 331 | ``` 332 | ######### Debain config.sh ########### 333 | #!/bin/bash 334 | 335 | en_US() 336 | { 337 | cat </etc/default/locale 338 | LANG=en_US.UTF-8 339 | EOF 340 | echo -e "Please log in again on Debian tty1" 341 | } 342 | 343 | zh_CN() 344 | { 345 | cat </etc/default/locale 346 | # 中文显示 347 | LANG="zh_CN.UTF-8" 348 | LANGUAGE="zh_CN:zh" 349 | EOF 350 | 351 | echo -e "Please log in again on Debian tty1" 352 | 353 | } 354 | 355 | autonet() 356 | { 357 | # 自动修改interfaces 网卡自动加载 358 | lspci | grep Ethernet 359 | ni=$(ip addr | grep enp | head -n 1 | awk -F ': ' '{print $2}') 360 | sed -i "s/enp[a-zA-Z0-9]*/${ni}/g" /etc/network/interfaces 361 | ifup $ni 362 | 363 | } 364 | 365 | # 设置菜单 366 | start_menu() 367 | { 368 | echo -e ":: DEBIAN LOCALE LANGUAGE SETTINGS & Modify Interfaces" 369 | read -p ":: Please enter the number <1>:English <2>:Chinese :: <8> AutoModify Interfaces " num_x 370 | case "$num_x" in 371 | 1) 372 | en_US 373 | ;; 374 | 2) 375 | zh_CN 376 | ;; 377 | 8) 378 | autonet 379 | ;; 380 | esac 381 | } 382 | start_menu 383 | 384 | ################################################# 385 | ``` 386 | 387 | ### linux 中文乱码 388 | - 乱码 '$'\351\243\236\345\210\251\ 389 | 390 | ``` 391 | 首先查看系统对中文的支持 392 | locale -a | grep zh_CN 393 | 394 | 输出样例如下 395 | zh_CN.gbk 396 | zh_CN.utf8 397 | 398 | vim ~/.bash_profile 399 | 400 | 文件末尾添加 401 | 402 | export LANG="zh_CN.UTF-8" 403 | export LC_ALL="zh_CN.UTF-8" 404 | ``` 405 | 406 | ### 将VirtualBox里安装的虚拟机在后台运行方法 407 | ``` 408 | :: 将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口) 409 | 410 | CD "C:\Program Files\Oracle\VirtualBox\" 411 | .\VBoxManage.exe startvm debian --type headless 412 | 413 | ``` 414 | --- 415 | ``` 416 | :: 将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口) 417 | 418 | CD "C:\Program Files\Oracle\VirtualBox\" 419 | .\VBoxManage.exe startvm debian --type headless 420 | 421 | 422 | 将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口) 423 | 由于工作和学习需要,经常要开一个虚拟机开测试和开发,虚拟机选择Oracle公司的VirtualBox,经常开着这个窗口感觉有些浪费资源,这样隐藏窗口就在需求了。 424 | 425 | 将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口) 426 | 427 | 开始=>运行=>cmd进入DOS窗口 428 | d: 429 | cd D:\Program Files\VirtualBox 430 | D:\Program Files\VirtualBox> .\VBoxManage.exe startvm master --type headless 431 | 这在Linux系统和MAC上同样适用,只要替换成相应的命令即可 432 | 433 | 434 | 435 | 解释:其中 master 是这个虚拟机的名称 436 | 437 | Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。 438 | Headless模式针对在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。 439 | ``` 440 | 441 | ## Debian中匿名挂载Samba服务器中的目录 442 | 443 | - 1、在Debian中安装Samba的相应组件: 444 | 445 | apt install cifs-utils 446 | 447 | Debian中匿名挂载Samba服务器中的目录 448 | 449 | - 2、查看其上已经共享的目录,假设Samba服务器的IP地址为192.168.1.135 450 | 451 | smbclient -L 192.168.1.135 -N 452 | 453 | Debian中匿名挂载Samba服务器中的目录 454 | 455 | 其中-N即为匿名的意义。 456 | 457 | - 3、在本地新建一个目录用于挂载 458 | 459 | mkdir /mnt/samba 460 | 461 | Debian中匿名挂载Samba服务器中的目录 462 | 463 | - 4、使用mount挂载: 464 | 465 | mount -t cifs //192.168.1.135/netlogon /mnt/samba/ -o guest 466 | 467 | Debian中匿名挂载Samba服务器中的目录 468 | 469 | 其中-t cifs意义为使用SMB文件系统,-o guest意义为匿名访问,即使用guest来宾账户,之后不会再要求输入密码。 470 | 命令执行完毕后即将远程主机上的netlogon 目录挂载到本地的/mnt/samba目录。 471 | 472 | 473 | ## 安装EMBY 打造多媒体中心,刮削GD网盘影视库,在本地做影视索引服务 474 | - 下载最新版本的 Emby Server,当前版本为 4.4.3.0,新版查阅地址:https://emby.media/linux-server.html 475 | 476 | ``` 477 | # 下载Emby安装包和安装 478 | wget https://github.com/MediaBrowser/Emby.Releases/releases/download/4.4.3.0/emby-server-deb_4.4.3.0_amd64.deb 479 | dpkg -i emby-server-deb_4.4.3.0_amd64.deb 480 | 481 | 482 | # 使用网页打开 emby 服务器 配置EMBY 483 | # http://192.168.1.111:8096/ 484 | 485 | # 停止 emby 服务 486 | systemctl stop emby-server 487 | 488 | # 恢复emby刮削数据 489 | sudo rm -rf /var/lib/emby/* 490 | cd /var/lib && tar -xvf "/mnt/EmbyMedia/EmbyData/emby200925.tar 491 | sudo chown -R emby:emby /var/lib/emby 492 | 493 | # 重新启动 emby 服务 494 | systemctl start emby-server 495 | systemctl status emby-server 496 | 497 | ``` 498 | --- 499 | ## fstab 使用UUID自动挂载emby数据盘 500 | ``` 501 | # 挂载 emby 数据盘 502 | mkdir /mnt/emby -p 503 | mount /dev/sdb5 /mnt/emby/ 504 | chown -R emby:emby /mnt/emby/ 505 | 506 | 507 | # 挂载玩客云samba 508 | mount -t cifs //192.168.1.90/1aab /mnt/smb/ -o guest 509 | cd /mnt/emby 510 | tar xf /mnt/smb/onecloud/tddownload/emby201003.tar 511 | 512 | # 修改emby数据到数据盘 513 | ln -s /mnt/emby/var/lib/emby /var/lib/emby 514 | chown -R emby:emby /var/lib/emby 515 | systemctl start emby-server 516 | 517 | # fstab 使用UUID自动挂载 emby 数据盘 518 | cat /etc/fstab #查看当前系统已经存在的挂载信息 519 | # 520 | UUID=8a2aa399-0f5a-4cc1-bc77-5cb008f9a754 / ext4 errors=remount-ro 0 1 521 | UUID=231a3535-73c5-4245-8e3e-bf546f034d98 /mnt/emby/ ext4 defaults 0 2 522 | 523 | blkid ### 查看磁盘分区的 UUID 524 | blkid /dev/sdb5 525 | /dev/sdb5: UUID="231a3535-73c5-4245-8e3e-bf546f034d98" TYPE="ext4" PARTUUID="aeb779b9-05" 526 | 527 | ``` 528 | 529 | ## VirtualBox压缩VDI文件 VDI文件瘦身方法 530 | - 瘦身原理:操作系统删除文件,不会填充0,所以磁盘镜像不能释放空间,所以使用dd把剩余空间用zero全零填充,然后删除 free这个文件 531 | - 再用VBoxManage就能瘦身了;Vbox 建立镜像可以分配空间小点,也可以把系统盘和数据盘分开建立 532 | ``` 533 | dd if=/dev/zero of=/free bs=1M 534 | rm /free 535 | 536 | cd "C:\Program Files\Oracle\VirtualBox\" 537 | VBoxManage modifyvdi --compact debian-disk.vdi 538 | ``` 539 | 540 | 541 | ## emby2url.py # 替换EmbyMedia路径到URL给PotPlayer播放视频 542 | ```python 543 | # python 读写剪切板内容 544 | # pip3 install pywin32 545 | 546 | import win32clipboard as w 547 | import win32con 548 | import os 549 | 550 | def getText(): 551 | w.OpenClipboard() 552 | d = w.GetClipboardData(win32con.CF_TEXT) 553 | w.CloseClipboard() 554 | return(d).decode('GBK') 555 | 556 | def setText(aString): 557 | w.OpenClipboard() 558 | w.EmptyClipboard() 559 | w.SetClipboardText(aString) 560 | w.CloseClipboard() 561 | 562 | # 获取剪贴板文本 563 | url = getText() 564 | print(url) 565 | 566 | # 替换 EmbyMedia 路径 到URL 给PotPlayer播放视频 567 | emby_path = "/mnt/EmbyMedia/" 568 | http_url = "http://192.168.1.111/" 569 | 570 | url = url.replace( emby_path , http_url ) 571 | 572 | # 把文本写回剪贴板 573 | setText(url) 574 | print(url) 575 | 576 | # 调用系统暂停 577 | os.system("pause") 578 | 579 | ``` 580 | 581 | ## 使用rsync同步目录 582 | ``` 583 | 同步命令: 584 | rsync -avzP --delete root@{remoteHost}:{remoteDir} {localDir} 585 | 586 | 参数说明: 587 | -a 参数,相当于-rlptgoD(-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件); 588 | -z 传输时压缩; 589 | -P 传输进度; 590 | -v 传输时的进度等信息; 591 | 592 | rsync -avzP --delete root@us.myvps.xyz:/var/lib/emby /var/lib/emby 593 | 594 | ``` 595 | 596 | ## apt upgrade 更新 grub 会把引导信息损坏, 可以使用下面 GRUB引导修复 597 | ``` 598 | grub-mkconfig -o /boot/grub/grub.cfg 599 | 600 | grub-install /dev/sda 601 | 602 | update-grub 603 | 604 | ``` 605 | -------------------------------------------------------------------------------- /debian/autonet.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # autonet.sh 自动修改interfaces 网卡自动加载 3 | 4 | lspci | grep Ethernet 5 | ni=$(ip addr | grep -E en[a-zA-Z0-9] | head -n 1 | awk -F ': ' '{print $2}') 6 | sed -i "s/enp[a-zA-Z0-9]*/${ni}/g" /etc/network/interfaces 7 | ifup $ni 8 | -------------------------------------------------------------------------------- /debian/config.sh: -------------------------------------------------------------------------------- 1 | ######### Debain config.sh ########### 2 | #!/bin/bash 3 | 4 | en_US() 5 | { 6 | cat </etc/default/locale 7 | LANG=en_US.UTF-8 8 | EOF 9 | echo -e "Please log in again on Debian tty1" 10 | } 11 | 12 | zh_CN() 13 | { 14 | cat </etc/default/locale 15 | # 中文显示 16 | LANG="zh_CN.UTF-8" 17 | LANGUAGE="zh_CN:zh" 18 | EOF 19 | 20 | echo -e "Please log in again on Debian tty1" 21 | } 22 | 23 | autonet() 24 | { 25 | # 自动修改interfaces 网卡自动加载 26 | lspci | grep Ethernet 27 | ni=$(ip addr | grep enp | head -n 1 | awk -F ': ' '{print $2}') 28 | sed -i "s/enp[a-zA-Z0-9]*/${ni}/g" /etc/network/interfaces 29 | ifup $ni 30 | 31 | } 32 | 33 | # 设置菜单 34 | start_menu() 35 | { 36 | echo -e ":: DEBIAN LOCALE LANGUAGE SETTINGS & Modify Interfaces" 37 | read -p ":: Please enter the number <1>:English <2>:Chinese :: <8> AutoModify Interfaces " num_x 38 | case "$num_x" in 39 | 1) 40 | en_US 41 | ;; 42 | 2) 43 | zh_CN 44 | ;; 45 | 8) 46 | autonet 47 | ;; 48 | esac 49 | } 50 | start_menu 51 | 52 | ################################################# 53 | 54 | -------------------------------------------------------------------------------- /debian/delnat.sh: -------------------------------------------------------------------------------- 1 | # Usage: bash delnat.sh $(lxc-ls) 2 | 3 | # 小鸡的端口转发规则 ssh 22 http 80 1000 : 1099 4 | # ID对应IP 101: 10122 10180 10100 : 10199 5 | #-------------------------------------------------------------# 6 | input_id() 7 | { 8 | id=101 9 | echo -e "删除端口转发ID: \033[41;37m ${id} \033[0m 可以修改设置其他ID; " 10 | read -p "请输入NAT小鸡的ID号(按回车不修改): " -t 30 new 11 | if [[ ! -z "${new}" ]]; then 12 | id="${new}" 13 | fi 14 | delnat_port 15 | iptables -t nat -nvL PREROUTING 16 | echo -e ":: PVE NAT 批量删除端口转发设置脚本: \033[41;37m bash delnat.sh $(lxc-ls) \033[0m \n使用参考: https://262235.xyz/index.php/archives/714/" 17 | } 18 | # 以id为ip设置删除端口转发 19 | delnat_port() 20 | { 21 | iptables -t nat -D PREROUTING -p tcp -m tcp --dport ${id}22 -j DNAT --to-destination 10.10.10.${id}:22 22 | # iptables -t nat -D PREROUTING -p tcp -m tcp --dport ${id}80 -j DNAT --to-destination 10.10.10.${id}:80 23 | iptables -t nat -D PREROUTING -p tcp -m multiport --dport ${id}00:${id}99 -j DNAT --to-destination 10.10.10.${id} 24 | } 25 | 26 | # 手工输入id,input_id调用nat删除端口转发 27 | if [ $# -eq 0 ]; 28 | then 29 | input_id 30 | exit 31 | fi 32 | 33 | # 遍历参数 批量设置 nat删除端口转发 34 | for arg in $* 35 | do 36 | id=$arg 37 | delnat_port 38 | done 39 | 40 | # 查看 nat PREROUTING 端口映射规则 41 | iptables -t nat -nvL PREROUTING 42 | 43 | # 清空 nat PREROUTING 端口映射规则 44 | # iptables -t nat -F PREROUTING -------------------------------------------------------------------------------- /debian/emby2url.py: -------------------------------------------------------------------------------- 1 | # python 读写剪切板内容 2 | # pip3 install pywin32 3 | 4 | import win32clipboard as w 5 | import win32con 6 | import os 7 | 8 | def getText(): 9 | w.OpenClipboard() 10 | d = w.GetClipboardData(win32con.CF_TEXT) 11 | w.CloseClipboard() 12 | return(d).decode('GBK') 13 | 14 | def setText(aString): 15 | w.OpenClipboard() 16 | w.EmptyClipboard() 17 | w.SetClipboardText(aString) 18 | w.CloseClipboard() 19 | 20 | # 获取剪贴板文本 21 | url = getText() 22 | print(url) 23 | 24 | # 替换 EmbyMedia 路径 到URL 给PotPlayer播放视频 25 | emby_path = "/mnt/EmbyMedia/" 26 | http_url = "http://192.168.1.111/" 27 | 28 | url = url.replace( emby_path , http_url ).replace('\n', '') 29 | 30 | # 把文本写回剪贴板 31 | setText(url) 32 | print(url) 33 | 34 | path = "C:\Program Files\DAUM\PotPlayer" 35 | os.chdir(path) 36 | 37 | cmdline ='cmd /c ' + 'PotPlayerMini64.exe \"' + url + '\"' 38 | 39 | print(cmdline) 40 | 41 | # 调用 PotPlayer 64 bit 42 | os.system(cmdline) 43 | 44 | # os.system('pause') -------------------------------------------------------------------------------- /debian/nat.sh: -------------------------------------------------------------------------------- 1 | # Usage: bash nat.sh $(lxc-ls) 2 | 3 | # 小鸡的端口转发规则 ssh 22 http 80 1000 : 1099 4 | # ID对应IP 101: 10122 10180 10100 : 10199 5 | #-------------------------------------------------------------# 6 | input_id() 7 | { 8 | id=101 9 | echo -e "测试默认ID: \033[41;37m ${id} \033[0m 可以修改设置其他ID; " 10 | read -p "请输入NAT小鸡的ID号(按回车不修改): " -t 30 new 11 | if [[ ! -z "${new}" ]]; then 12 | id="${new}" 13 | fi 14 | nat_port 15 | iptables -t nat -nvL PREROUTING 16 | echo -e ":: PVE NAT 批量端口转发设置脚本: \033[41;37m bash nat.sh $(lxc-ls) \033[0m \n使用参考: https://262235.xyz/index.php/archives/714/" 17 | } 18 | # 以id为ip设置端口转发 19 | nat_port() 20 | { 21 | iptables -t nat -I PREROUTING -p tcp -m tcp --dport ${id}22 -j DNAT --to-destination 10.10.10.${id}:22 22 | # iptables -t nat -I PREROUTING -p tcp -m tcp --dport ${id}80 -j DNAT --to-destination 10.10.10.${id}:80 23 | iptables -t nat -A PREROUTING -p tcp -m multiport --dport ${id}00:${id}99 -j DNAT --to-destination 10.10.10.${id} 24 | } 25 | 26 | # 手工输入id,input_id调用nat端口转发 27 | if [ $# -eq 0 ]; 28 | then 29 | input_id 30 | exit 31 | fi 32 | 33 | # 遍历参数 批量设置 nat端口转发 34 | for arg in $* 35 | do 36 | id=$arg 37 | nat_port 38 | done 39 | 40 | # 查看 nat PREROUTING 端口映射规则 41 | iptables -t nat -nvL PREROUTING 42 | 43 | # 清空 nat PREROUTING 端口映射规则 44 | # iptables -t nat -F PREROUTING -------------------------------------------------------------------------------- /debian/netboot.xyz: -------------------------------------------------------------------------------- 1 | # 进入引导目录或者分区 2 | cd /boot 3 | 4 | # 下载 netboot.xyz 内核到 /boot 目录 5 | wget https://boot.netboot.xyz/ipxe/netboot.xyz.lkrn 6 | 7 | # 替换 netboot 引导 8 | sed -i s/'initrd \/boot\/initrd.img/linux16 \'/'boot\/netboot.xyz.lkrn #'/g /boot/grub/grub.cfg 9 | 10 | # 重启 11 | reboot 12 | -------------------------------------------------------------------------------- /debian/nfsdir.md: -------------------------------------------------------------------------------- 1 | ## 黑五变态机有救,可以用NFS挂载一个僚机 2 | ![](https://i.loli.net/2020/10/22/VltEuXR1oYhdIxN.png) 3 | 4 | - 水牛城3G硬盘的机器 ,挂载亚特兰大32G盘机器,网盘速度有 9-10M/s 5 | ``` 6 | # NFS 服务端安装设置 7 | apt install nfs-kernel-server -y 8 | 9 | mkdir nfsdir 10 | 11 | echo '/root/nfsdir 10.0.8.0/24(rw,sync,no_root_squash)' >> /etc/exports 12 | 13 | sudo /etc/init.d/nfs-kernel-server restart 14 | 15 | # 或者 16 | systemctl restart nfs-kernel-server 17 | 18 | showmount -e 19 | Export list for kvm-VirMach: 20 | /root/nfsdir 10.0.8.0/24 21 | 22 | # NFS 客户端安装使用 23 | apt install nfs-common -y 24 | 25 | mkdir /mnt/nfsdir -p 26 | mount -t nfs 10.0.8.1:/root/nfsdir /mnt/nfsdir 27 | df -h 28 | cd /mnt/nfsdir 29 | 30 | dd if=/dev/zero of=1.bin bs=1M count=100 31 | 32 | dd if=/dev/zero of=1.bin bs=1M count=1024 33 | ``` 34 | 35 | - 以上配置 Debian 10 配置通过测试,虚拟网络 使用WG搭建,服务端和客户端都用这个脚本搭建 36 | - 客户端 自行修改配置文件 37 | 38 | ``` 39 | # One-Step Automated Install WireGuard Script 40 | wget -qO- https://git.io/wireguard.sh | bash 41 | ``` 42 | 43 | - NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。 44 | 45 | - NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利; 46 | 47 | - 介绍见 https://blog.csdn.net/qq_38265137/article/details/83146421 48 | -------------------------------------------------------------------------------- /debian/sskcp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SERVER_IP=188.188.188.188 4 | PORT=1999 5 | PASSWORD=wg2999 6 | SS_PORT=40000 7 | SOCKS5_PORT=1080 8 | 9 | start(){ 10 | # SS + KcpTun + Udp2RAW 11 | udp2raw -c -r$SERVER_IP:$PORT -l0.0.0.0:4000 -k $PASSWORD --raw-mode faketcp -a >> /var/log/udp2raw.log & 12 | kcp-client -r 127.0.0.1:4000 -l :$SS_PORT --key $PASSWORD -mode fast2 -mtu 1300 >> /var/log/kcp-client.log 2>&1 & 13 | 14 | # ss-local -s 服务器IP地址 -p 服务器端口 -b 绑定本地IP -l 本地端口 -k 密码 -m 加密方式 [-c 配置文件] 15 | ss-local -s 127.0.0.1 -p $SS_PORT -b 0.0.0.0 -l $SOCKS5_PORT -k $PASSWORD -m aes-256-gcm -t 300 >> /var/log/ss-local.log & 16 | 17 | # status 18 | } 19 | 20 | stop(){ 21 | killall -9 kcp-client 22 | killall -9 udp2raw 23 | killall -9 ss-local 24 | } 25 | 26 | restart(){ 27 | stop 28 | start 29 | } 30 | 31 | help(){ 32 | echo -e "${SkyBlue}:: Source: ${Green}https://git.io/sskcp.sh ${Font}By 蘭雅sRGB" 33 | echo -e "${SkyBlue}:: Usage: ${GreenBG} bash sskcp.sh ${Yellow} [start|stop|restart|service|set] ${Font}" 34 | echo 35 | } 36 | 37 | status(){ 38 | # log 和 命令行参数 39 | cat /var/log/udp2raw.log | tail 40 | cat /var/log/kcp-client.log | tail 41 | cat /var/log/ss-local.log | tail 42 | echo 43 | 44 | if [[ -e /etc/openwrt_release ]]; then 45 | ps | grep -e udp2raw -e kcp-client -e ss-local 46 | else 47 | ps ax | grep --color=auto -e udp2raw -e kcp-client -e ss-local 48 | fi 49 | echo 50 | } 51 | 52 | setconf() 53 | { 54 | echo -e "${SkyBlue}:: 修改脚本sskcp.sh记录参数,按${RedBG}${SkyBlue}不修改! ${Yellow}" 55 | head -n 6 sskcp.sh | tail -n 4 && echo -e "${SkyBlue}" 56 | 57 | read -p ":: 1.请输入远程服务器IP: " sv_ip 58 | read -p ":: 2.请输入udp2raw 端口: " port 59 | read -p ":: 3.请输入套接转发密码: " passwd 60 | read -p ":: 4.请输入 SS 服务端口: " ss_port 61 | 62 | if [[ ! -z "${sv_ip}" ]]; then 63 | sed -i "s/^SERVER_IP=.*/SERVER_IP=${sv_ip}/g" "sskcp.sh" 64 | fi 65 | if [[ ! -z "${port}" ]]; then 66 | sed -i "s/^PORT=.*/PORT=${port}/g" "sskcp.sh" 67 | fi 68 | if [[ ! -z "${passwd}" ]]; then 69 | sed -i "s/^PASSWORD=.*/PASSWORD=${passwd}/g" "sskcp.sh" 70 | fi 71 | if [[ ! -z "${ss_port}" ]]; then 72 | sed -i "s/^SS_PORT=.*/SS_PORT=${ss_port}/g" "sskcp.sh" 73 | fi 74 | 75 | echo -e "${Yellow}" && head -n 7 sskcp.sh | tail -n 5 && echo -e "${Font}" 76 | } 77 | 78 | system_def(){ 79 | Green="\033[32m" && Red="\033[31m" && GreenBG="\033[42;37m" && RedBG="\033[41;37m" 80 | Font="\033[0m" && Yellow="\033[0;33m" && SkyBlue="\033[0;36m" 81 | } 82 | 83 | systemd_service(){ 84 | # 安装启动服务 85 | cat </usr/lib/systemd/system/sskcp.service 86 | [Unit] 87 | Description=sskcp.sh Service 88 | After=network.target 89 | 90 | [Service] 91 | Type=forking 92 | User=root 93 | ExecStart=nohup /root/sskcp.sh start & 94 | ExecReload=sh /root/sskcp.sh stop 95 | 96 | [Install] 97 | WantedBy=multi-user.target 98 | 99 | EOF 100 | chmod +x /root/sskcp.sh 101 | systemctl enable sskcp.service 102 | systemctl start sskcp.service 103 | systemctl status sskcp.service 104 | } 105 | 106 | # 脚本命令参数 107 | system_def 108 | if [[ $# > 0 ]]; then 109 | key="$1" 110 | case $key in 111 | start) 112 | start 113 | ;; 114 | stop) 115 | stop 116 | ;; 117 | restart) 118 | restart 119 | ;; 120 | service) 121 | systemd_service 122 | ;; 123 | set) 124 | setconf 125 | ;; 126 | esac 127 | else 128 | status 129 | fi 130 | help 131 | -------------------------------------------------------------------------------- /debian/virmach_vnc.md: -------------------------------------------------------------------------------- 1 | ## VirMach 小内存机器InstallNET.sh 安装Debian 10 简易方法 2 | 3 | ``` 4 | wget git.io/auto.sh 5 | bash auto.sh -d 10 -v 64 -a -p password 6 | ``` 7 | 8 | - 下载网络安装脚本,自动安装的 root 密码写在 脚本前几行, 9 | 10 | wget git.io/InstallNET.sh 11 | 12 | - -d 10 表示debian -v 64 表示X64 -a 表示自动安装 -m 手动安装 -p 自定义密码 13 | 14 | bash InstallNET.sh -d 10 -v 64 -a -p password 15 | 16 | ### 由于这个网络脚本没有匹配小内存选择,所以会如下图停住 17 | 18 | ![](https://i.loli.net/2020/12/14/1uGp9xZTjyS2hAF.png) 19 | 20 | - 所以需要进 KVM 面板,打开VNC 窗口,要按下确认,选择北美和美国地区,然后就能接下来自动安装 21 | - 圣何塞 机房VNC 窗口会连不到,可以记录下 VNC 帐户,使用 VNC-Viewer 免费软件登陆 22 | 23 | 浏览器 打开 git.io/InstallNET.sh 网址查看密码,登陆 passwd 修改 24 | 25 | 26 | ![](https://i.loli.net/2020/12/14/H6AWcpK9yC1ftGi.png) 27 | 28 | ### 最后 安装常用软件 和哪个软件,如上图,系统盘占用不到1G 29 | 30 | apt install wget curl tmux vim htop 31 | 32 | ``` 33 | ----------------- 补充 网络安装脚本有几个隐藏参数 --------------------- 34 | # -p|--password 设置linux系统的root 自定义密码 35 | # -firmware 安全 linux-firmware 虚拟机一般不用安装 36 | ``` 37 | bash InstallNET.sh -d 10 -v 64 -a -p password 38 | 39 | ### 某些系统缺少下载和运行脚本工具,需要先更新 40 | 41 | apt-get update 42 | apt-get install -y xz-utils openssl gawk file wget 43 | 44 | ### Vutrl 家的 Centos 使用EFI 启动,脚本会提示 grub.cfg 错误,不能运行 45 | -------------------------------------------------------------------------------- /debian/webbench.md: -------------------------------------------------------------------------------- 1 | ## 网站压力测试工具webbench 2 | 3 | ``` 4 | 1、安装依赖包CTAGS 5 | 6 | apt install ctags 7 | 8 | 2、安装 Webbench 9 | 10 | wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz 11 | tar xf webbench-1.5.tar.gz 12 | cd webbench-1.5 13 | make && make install 14 | 15 | 3. 使用 webbench -? (查看命令帮助) 16 | 17 | 常用参数 说明,-c 表示客户端数,-t 表示时间 18 | 测试实例: 19 | 20 | webbench -c 500 -t 30 http://127.0.0.1/phpionfo.php 21 | ``` 22 | 23 | ### Install 24 | ============= 25 | ``` 26 | wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz 27 | tar zxvf webbench-1.5.tar.gz 28 | cd webbench-1.5 29 | make && make install 30 | ``` 31 | Usage 32 | ============= 33 | ``` 34 | webbench --help 35 | webbench [option]... URL 36 | -f|--force Don't wait for reply from server. 37 | -r|--reload Send reload request - Pragma: no-cache. 38 | -t|--time Run benchmark for seconds. Default 30. 39 | -p|--proxy Use proxy server for request. 40 | -c|--clients Run HTTP clients at once. Default one. 41 | -9|--http09 Use HTTP/0.9 style requests. 42 | -1|--http10 Use HTTP/1.0 protocol. 43 | -2|--http11 Use HTTP/1.1 protocol. 44 | --get Use GET request method. 45 | --head Use HEAD request method. 46 | --options Use OPTIONS request method. 47 | --trace Use TRACE request method. 48 | -?|-h|--help This information. 49 | -V|--version Display program version. 50 | ``` 51 | Example 52 | ============= 53 | ``` 54 | webbench -c 500 -t 30 http://google.com/ 55 | Webbench - Simple Web Benchmark 1.5 56 | Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. 57 | 58 | Benchmarking: GET http://google.com/ 59 | 500 clients, running 30 sec. 60 | 61 | Speed=5372 pages/min, 79426 bytes/sec. 62 | Requests: 2418 susceed, 268 failed. 63 | ``` 64 | -------------------------------------------------------------------------------- /docker/README.md: -------------------------------------------------------------------------------- 1 | ## Docker 搭建Portainer可视化界面 2 | 3 | Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、 4 | 容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、 5 | 容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。 6 | 7 | ### 查询当前有哪些Portainer镜像 8 | 9 | docker search portaine 10 | 11 | ### 安装Docker可视化界面Portainer 12 | 13 | ``` 14 | docker run --name Portainer \ 15 | --restart=always -d -p 9000:9000 \ 16 | -v /var/run/docker.sock:/var/run/docker.sock \ 17 | -v /opt/portainer_data:/data \ 18 | portainer/portainer 19 | ``` 20 | 21 | ### 删除Portainer服务 22 | 23 | docker rm -f Portainer 24 | docker rmi portainer/portainer 25 | 26 | ----- 27 | 28 | ## Docker 安装和运行 Nginx 29 | 30 | ``` 31 | # 安装Docker软件一键脚本 32 | curl -fsSLo- get.docker.com | /bin/sh 33 | ``` 34 | 35 | ### Docker 拉取最新版的 Nginx 镜像 36 | docker pull nginx:latest 37 | 38 | ### 运行nginx-web容器, 39 | ``` 40 | docker run --rm -d -p 80:80 --name nginx-web \ 41 | -v /var/www/html:/usr/share/nginx/html \ 42 | nginx 43 | ``` 44 | --- 45 | ``` 46 | # --rm 结束删除容器,-d 后台运行,-p 80:80 映射端口 本地:容器 47 | # -v /var/www/html:/usr/share/nginx/html 本地目录/var/www/html 映射到 /usr/share/nginx/html 48 | ``` 49 | 50 | ### HTML5 测速 51 | ``` 52 | docker run -d -p 8888:80 --name html5speed \ 53 | --cpus 0.5 --restart=always \ 54 | ilemonrain/html5-speedtest:alpine 55 | ``` 56 | 57 | ### 登入nginx-web 容器查看 58 | docker exec -it nginx-web /bin/bash 59 | 60 | 61 | ### 实际部署,服务器重启,nginx-web 容器 也自动运行 62 | ``` 63 | docker run -d -p 80:80 --name nginx-web \ 64 | --cpus 0.5 --restart=always \ 65 | -v /var/www:/usr/share/nginx/html \ 66 | nginx 67 | 68 | ## --restart=always 参数能够使我们在重启docker时,自动启动相关容器 69 | ## --cpus 0.3 70 | 71 | docker stats # 查看容器运行情况 72 | 73 | CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 74 | 8d025484dd41 nginx-web 0.00% 2.391MiB / 420.4MiB 0.57% 16.8kB / 64.5kB 11MB / 0B 2 75 | ``` 76 | 77 | --------- 78 | 79 | ### 部署 nginx-php7 和 php 相册 80 | ``` 81 | docker run -d -p 80:80 --name nginx-web \ 82 | --cpus 0.5 --restart=always \ 83 | -v /mnt/downloads:/data/wwwroot \ 84 | skiychan/nginx-php7 85 | 86 | downloads=/mnt/downloads 87 | 88 | cd ${downloads} 89 | wget https://github.com/hongwenjun/srgb/raw/master/files.photo.gallery/index.php 90 | mkdir -p _files 91 | chown -R www-data:www-data _files 92 | chmod 0777 _files/ 93 | 94 | ``` 95 | 96 | ----- 97 | 98 | ## Docker 安装 WordPress 博客程序 99 | 100 | ``` 101 | # wordpress 安装目录和程序下载 102 | 103 | mkdir /mnt/wordpress -p 104 | cd /mnt/wordpress 105 | 106 | wget https://wordpress.org/latest.tar.gz 107 | tar xf latest.tar.gz 108 | chown -R www-data:www-data wordpress 109 | mv wordpress www 110 | 111 | # 容器 linuxserver/nginx 安装,已经包含php7.x支持 112 | 113 | docker run -d \ 114 | --name=nginx \ 115 | -e PUID=1000 \ 116 | -e PGID=1000 \ 117 | -e TZ=Europe/London \ 118 | -p 80:80 \ 119 | -p 443:443 \ 120 | -v /mnt/wordpress:/config \ 121 | --restart unless-stopped \ 122 | linuxserver/nginx 123 | 124 | # 容器 linuxserver/mariadb 数据库程序安装 125 | 126 | docker run -d \ 127 | --name=mysql \ 128 | -e PUID=1000 \ 129 | -e PGID=1000 \ 130 | -e MYSQL_ROOT_PASSWORD=密码 \ 131 | -e TZ=Europe/London \ 132 | -e MYSQL_DATABASE=wordpress \ 133 | -e MYSQL_USER=wordpress \ 134 | -e MYSQL_PASSWORD=密码 \ 135 | -p 3306:3306 \ 136 | -v /mnt/wordpress:/config \ 137 | --restart unless-stopped \ 138 | linuxserver/mariadb 139 | 140 | ``` 141 | 142 | ### WordPress 博客程序 配置 143 | - http://wp.262235.xyz/wp-admin/setup-config.php 144 | 145 | ``` 146 | 数据库连接 配置 147 | 148 | 数据库名 wordpress 149 | 用户名 wordpress 150 | 密码 密码 151 | 数据库主机 localhost ( mysql容器IP 172.17.0.4 或者网关 172.17.0.1 ) 152 | 有些模版 填 容器名称 mysql 也可以 153 | 154 | ``` 155 | 156 | ----- 157 | 158 | ### Typecho 简单博客框架 Docker 安装笔记 159 | 160 | ``` 161 | # Typecho 简单博客 程序下载和目录放置 162 | 163 | mkdir /mnt/typecho -p 164 | cd /mnt/typecho 165 | 166 | wget https://typecho.org/downloads/1.1-17.10.30-release.tar.gz 167 | tar xf 1.1-17.10.30-release.tar.gz 168 | mv build www 169 | 170 | # 容器 linuxserver/nginx 安装,已经包含php7.x支持 171 | 172 | docker run -d \ 173 | --name=nginx \ 174 | -e PUID=1000 \ 175 | -e PGID=1000 \ 176 | -e TZ=Europe/London \ 177 | -p 80:80 \ 178 | -p 443:443 \ 179 | -v /mnt/typecho:/config \ 180 | --restart unless-stopped \ 181 | linuxserver/nginx 182 | 183 | # 安装按提示,数据库 先 Sqlite 3.0 184 | 185 | Nginx服务器无法登录后台,点击前台链接或者后台登录时出现"404, not found" 186 | ============================================================= 187 | 188 | http://docs.typecho.org/faq 189 | 190 | 一般的出现这种情况时,nginx.conf里的的location设置都是类似这样 191 | 192 | location ~ .*\.php$ 193 | 194 | 要支持pathinfo,要改成 195 | 196 | location ~ .*\.php(\/.*)*$ 197 | ``` 198 | 199 | ------ 200 | ## Docker 安装PT下载神器 QB 和 TR 201 | ``` 202 | # 脚本安装 203 | wget git.io/wgmtu 204 | 205 | # 安装Docker软件 206 | bash wgmtu docker 207 | 208 | # 安装qbittorrent软件 209 | bash wgmtu qb 210 | 211 | # 安装transmission软件(目前非docker安装) 212 | # docker 安装参考下面命令 213 | bash wgmtu tr 214 | ``` 215 | 216 | ### 安装Docker软件 217 | curl -fsSLo- get.docker.com | /bin/sh 218 | 219 | ### 测试运行 220 | docker run hello-world 221 | 222 | ### 创建容器: qbittorrent 223 | ```bash 224 | docker run --name=qbittorrent \ 225 | -e PUID=1000 -e PGID=1000 \ 226 | -e TZ=Asia/ShangHai \ 227 | -e UMASK_SET=022 -e \ 228 | WEBUI_PORT=8080 \ 229 | -p 59902:59902 \ 230 | -p 59902:59902/udp \ 231 | -p 8080:8080 \ 232 | -v /mnt/config:/config \ 233 | -v /mnt/downloads:/downloads \ 234 | --restart unless-stopped \ 235 | -d linuxserver/qbittorrent 236 | ``` 237 | 238 | ### 创建容器: transmission 239 | ```bash 240 | docker run --name=transmission \ 241 | -e PUID=1000 -e PGID=1000 \ 242 | -e TZ=Asia/ShangHai \ 243 | -e TRANSMISSION_WEB_HOME=/transmission-web-control/ \ 244 | -e USER=admin -e PASS=password@2021 \ 245 | -p 9091:9091 \ 246 | -p 51413:51413 \ 247 | -p 51413:51413/udp \ 248 | -v /mnt/config:/config \ 249 | -v /mnt/downloads:/downloads \ 250 | -v /mnt/watch:/watch \ 251 | --restart unless-stopped \ 252 | -d linuxserver/transmission 253 | ``` 254 | 255 | ### 登陆 256 | - 用默认用户名密码(admin/adminadmin)登录,端口8080,配置Peer端口(用于传入链接的端口)59902,配置完基本的东西之后重启QB. 257 | docker restart qbittorrent 258 | 259 | 260 | -------------------------------------------------------------------------------- /docker/lnmp.md: -------------------------------------------------------------------------------- 1 | 2 | ### LNMP一键安装包无人值守命令生成器 3 | 4 | - https://lnmp.org/auto.html 5 | 6 | 7 | ``` 8 | wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && \ 9 | tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && LNMP_Auto="y" DBSelect="3" DB_Root_Password="lnmp.org" \ 10 | InstallInnodb="y" PHPSelect="5" SelectMalloc="1" ./install.sh lnmp 11 | ``` 12 | 13 | ---- 14 | 15 | ### LNMP 管理命令 16 | 17 | ``` 18 | lnmp 19 | ``` 20 | 21 | 22 | 23 | ## Docker LAMP 镜像部署 24 | ``` 25 | # PHP源代码下载 26 | cd /opt 27 | git clone https://github.com/hongwenjun/bxwlyz.git www 28 | 29 | 共执行37条sql语句 30 | 写入安装锁文件失败 31 | 解决方法 32 | chown -R www-data:www-data /opt/www 33 | 34 | 35 | # 安装Docker软件一键脚本 36 | 37 | curl -fsSLo- get.docker.com | /bin/sh 38 | 39 | 40 | # Docker 拉取最新版的 LAMP 镜像 41 | 42 | docker pull icoty1/lamp:v1.1.0 43 | 44 | 45 | # 高级用法(Advanced usage) 46 | 47 | docker run -dit --name=webapi \ 48 | -p 80:80 -p 3306:3306 \ 49 | -v /opt/www:/var/www/html \ 50 | --cpus 0.8 --restart=always \ 51 | -v /opt/mysql:/data/mysql \ 52 | icoty1/lamp:v1.1.0 /bin/bash start.sh 53 | 54 | 55 | 56 | # 连接(Connect) 默认密码 root root 57 | 58 | docker exec -it webapi /bin/bash 59 | 60 | mysql -u root -p 61 | 62 | #修改当前登录用户密码 63 | 64 | SET PASSWORD =PASSWORD("WebApi@2021"); 65 | 66 | # 建立数据库 webapi 67 | 68 | create database webapi; 69 | 70 | 71 | ``` 72 | 73 | ===== 74 | 75 | ### lnmp 安装 wordpress 笔记 76 | - 这个lnmp没有安装成功,另一个lnmp可以完成 77 | ``` 78 | 79 | chown -R www-data:www-data /opt/www 80 | 81 | https://hub.docker.com/r/2233466866/lnmp 82 | 83 | docker run -dit \ 84 | -p 80:80 \ 85 | -p 443:443 \ 86 | -p 3306:3306 \ 87 | -p 9000:9000 \ 88 | -v /opt/www/wordpress:/www \ 89 | -v /opt/mysql:/data/mysql \ 90 | --privileged=true \ 91 | -e PUID=1000 -e PGID=1000 \ 92 | --name=lnmp \ 93 | 2233466866/lnmp 94 | 95 | 96 | # 连接(Connect) 容器名称 97 | 98 | docker exec -it lnmp /bin/bash 99 | 100 | # 初始密码(Default password) 101 | 102 | cat /var/log/mysqld.log|grep 'A temporary password' 103 | 104 | A temporary password is generated for root@localhost: 9R3dGy,uEWf- 105 | 106 | 107 | mysql -u root -p 密码 108 | 109 | # 修改当前登录用户密码 110 | 111 | SET PASSWORD =PASSWORD("WebApi@2021"); 112 | 113 | # 建立数据库 wordpress 114 | 115 | create database wordpress; 116 | 117 | chown -R www-data:www-data www 118 | 119 | 120 | ``` 121 | 122 | -------------------------------------------------------------------------------- /mysql/City.sql.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongwenjun/vps_setup/d9a0eb59d517dbf81141061470a4e01a16b60969/mysql/City.sql.gz -------------------------------------------------------------------------------- /mysql/README.md: -------------------------------------------------------------------------------- 1 | # 使用sql数据表保存脚本代码文件 2 | # Python脚本从数据库里上传和下载代码文件 3 | 4 | ![sql表格][1] 5 | 学习Python脚本和SQL数据库使用,为了保持多设备代码的版本同步,折腾把脚本代码保存到SQL数据表中。 6 | 方便一起备份,用到方便更新,也可以再写个批量插入文件和更新文件脚本,网页端读取使用。 7 | ## 可以使用图形工具软件,连数据库建立表 8 | - 表 vps2022.text 结构 9 | ``` 10 | CREATE TABLE IF NOT EXISTS `text` ( 11 | `name` text, 12 | `text` text 13 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 14 | ``` 15 | 16 | ## 统一设置 MYSQL密码配置 `conf.py` 17 | ``` 18 | # conn = mysql.connector.connect 19 | 20 | host="188.188.188.188" 21 | user="root" 22 | passwd="passwd@passwd" 23 | port=3306 24 | 25 | ``` 26 | 27 | ## 获取sql数据表 text 中所有脚本文件的代码 `getsh.py` 28 | ![get.PNG][2] 29 | 30 | 31 | ## 选择下载一个文件 `getfile.py` 32 | ![getfile.PNG][4] 33 | 34 | 35 | ## 使用 `addfile.py` 可以批量上传文件到数据库中 36 | ![addfile.PNG][6] 37 | 38 | 39 | [1]: https://262235.xyz/usr/uploads/2021/12/1283040383.png 40 | [2]: https://262235.xyz/usr/uploads/2021/12/2063028572.png 41 | [3]: https://262235.xyz/usr/uploads/2021/12/1283040383.png 42 | [4]: https://262235.xyz/usr/uploads/2021/12/516251946.png 43 | [5]: https://262235.xyz/usr/uploads/2021/12/1283040383.png 44 | [6]: https://262235.xyz/usr/uploads/2021/12/4190129443.png 45 | -------------------------------------------------------------------------------- /mysql/addfile.py: -------------------------------------------------------------------------------- 1 | import sys, glob 2 | import mysql.connector 3 | import conf 4 | conn = mysql.connector.connect( 5 | host=conf.host, user=conf.user, 6 | passwd=conf.passwd, port=conf.port, 7 | database="vps2022", buffered = True) 8 | c = conn.cursor() 9 | 10 | files = [] 11 | for f in sys.argv[1:]: 12 | files = files + glob.glob(f) 13 | 14 | def readfile(file): 15 | f = open(file, 'r') 16 | str = f.read(); f.close() 17 | return str 18 | 19 | for file in files: 20 | file_str = readfile(file) 21 | row =(file, file_str) 22 | 23 | c.execute("DELETE FROM text WHERE name=%s ", (file,) ) 24 | c.execute('INSERT INTO text VALUES (%s,%s)', row) 25 | print("FontName: " + file + " ....OK") 26 | 27 | conn.commit() 28 | conn.close() 29 | -------------------------------------------------------------------------------- /mysql/addvps.py: -------------------------------------------------------------------------------- 1 | import sys, mysql.connector 2 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m'; Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 3 | # 连接MYSQL数据库 4 | import conf 5 | conn = mysql.connector.connect( 6 | host=conf.host, user=conf.user, 7 | passwd=conf.passwd, port=conf.port, 8 | database="vps2022", buffered = True) 9 | c = conn.cursor() 10 | 11 | # sql 获取 vps 数据 , 显示 vps 数据 12 | def display_data(c): 13 | print(GreenBG, ":: 显示 MySQL 数据库 vps2022 中获节点表 ") 14 | sql = 'SELECT * FROM vps' 15 | c.execute(sql) 16 | cnt=0 ; sk = list() 17 | for row in c.fetchall(): 18 | print(SkyBlue, cnt,'节点:', Yellow, row) 19 | sk.append(list(row)); cnt+=1 20 | display_data(c) 21 | 22 | while True : 23 | print(GreenBG, ":: 添加节点:", SkyBlue, 'add ', RedBG, '保存和退出: quit', Font, '\n $ ', end='') 24 | cmd = input().strip() 25 | cmd = cmd.replace(',', ' ').replace('\'', '') 26 | arg = cmd.split() 27 | 28 | if (len(arg)==0): 29 | continue 30 | 31 | if arg[0] == 'add' and len(arg)==6: 32 | row =(arg[1], arg[2], arg[3], arg[4], arg[5]) 33 | c.execute('INSERT INTO vps VALUES (%s,%s,%s,%s,%s)', row) 34 | 35 | if arg[0] == 'quit' : 36 | conn.commit() 37 | display_data(c) 38 | sys.exit(0) 39 | 40 | # 使用命令 python3 addvps.py < iplist.txt 或者 cat iplist.txt | python3 addvps.py 41 | # 批量输入数据 iplist.txt 格式 add 数据, 最后一行 quit 42 | # add '111.188.188.188', '22', 'Pa55@SSL', '443', '111号NAT小鸡' 43 | # add 115.115.188.188 22 Pa55@SSL 443 115号NAT小鸡 44 | # add 118.115.188.188,22,Pa55@SSL,443,115号NAT小鸡 45 | # quit 46 | -------------------------------------------------------------------------------- /mysql/conf.py: -------------------------------------------------------------------------------- 1 | # conn = mysql.connector.connect 2 | 3 | host="188.188.188.188" 4 | user="root" 5 | passwd="passwd@passwd" 6 | port=3306 7 | -------------------------------------------------------------------------------- /mysql/get_info.php: -------------------------------------------------------------------------------- 1 | 18 | array(1) { 19 | ["name"]=> 20 | string(10) "addfile.py" 21 | ** MYSQLI_NUM 22 | array(11) { 23 | [0]=> 24 | array(1) { 25 | [0]=> 26 | string(10) "addfile.py" 27 | */ -------------------------------------------------------------------------------- /mysql/getfile.py: -------------------------------------------------------------------------------- 1 | import mysql.connector 2 | import conf 3 | conn = mysql.connector.connect( 4 | host=conf.host, user=conf.user, 5 | passwd=conf.passwd, port=conf.port, 6 | database="vps2022", buffered = True) 7 | c = conn.cursor() 8 | 9 | sql = 'SELECT name FROM text' 10 | c.execute(sql) 11 | names = c.fetchall() 12 | 13 | # 显示所有文件名,以供下载 14 | for i in range(len(names)): 15 | print(names[i][0], end=' ') 16 | 17 | print('\n:: 选择一个文件下载,输入文件名: ', end='') 18 | name = input().strip() 19 | 20 | sql = 'SELECT * FROM text WHERE name="' + name +'"' 21 | c.execute(sql) 22 | text = c.fetchall() 23 | 24 | def makefile(file, str): 25 | f = open(file, 'w') 26 | f.write(str); f.close() 27 | 28 | for i in range(len(text)): 29 | file=text[i][0] 30 | file_str = text[i][1] 31 | makefile(file, file_str) 32 | print('FontName:', file, "\t保存完成!") 33 | 34 | conn.close() 35 | 36 | -------------------------------------------------------------------------------- /mysql/getsh.py: -------------------------------------------------------------------------------- 1 | import mysql.connector 2 | import conf 3 | conn = mysql.connector.connect( 4 | host=conf.host, user=conf.user, 5 | passwd=conf.passwd, port=conf.port, 6 | database="vps2022", buffered = True) 7 | c = conn.cursor() 8 | 9 | sql = 'SELECT * FROM text ORDER BY name' 10 | c.execute(sql) 11 | text = c.fetchall() 12 | 13 | def makefile(file, str): 14 | f = open(file, 'w') 15 | f.write(str); f.close() 16 | 17 | for i in range(len(text)): 18 | file=text[i][0] 19 | file_str = text[i][1] 20 | makefile(file, file_str) 21 | print(file, "\t保存完成!") 22 | 23 | conn.close() 24 | -------------------------------------------------------------------------------- /mysql/mykcp.py: -------------------------------------------------------------------------------- 1 | import sys, os, mysql.connector 2 | # define Color 3 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m' 4 | Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 5 | 6 | # 连接MYSQL数据库 7 | import conf 8 | conn = mysql.connector.connect( 9 | host=conf.host, user=conf.user, 10 | passwd=conf.passwd, port=conf.port, 11 | database="vps2022", buffered = True) 12 | c = conn.cursor() 13 | 14 | # sql 获取 vps 数据 , 显示 vps 数据 15 | def display_data(c): 16 | print(GreenBG, ":: 显示 MySQL 数据库 vps2022 中获节点表 ") 17 | sql = 'SELECT * FROM vps ORDER BY ip' 18 | c.execute(sql) 19 | vps = c.fetchall() 20 | 21 | cnt=0 ; sk = list() 22 | for row in vps: 23 | print(SkyBlue, cnt,'节点:', Yellow, row) 24 | sk.append(list(row)) 25 | cnt+=1 26 | print(Font) 27 | return sk 28 | 29 | vps = display_data(c) 30 | print(SkyBlue, ":: 使用节点直接输入节点号数字 ") 31 | print(GreenBG, ":: 输入命令:", RedBG, "del <1> 删除节点 \n :: 添加节点:", SkyBlue, 'add ', Font) 32 | print(' $ ', end='') 33 | cmd = input().strip() 34 | cmd = cmd.replace(',', ' ').replace('\'', '') 35 | arg = cmd.split() 36 | # print(arg) 37 | 38 | if (len(arg)==0): 39 | sys.exit(1) 40 | 41 | # 命令 del <1> 删除节点 42 | if arg[0] == 'del' : 43 | id = int(arg[1]) 44 | row = vps[id] 45 | c.execute("DELETE FROM vps WHERE ip=%s AND port=%s ", (row[0], row[1]) ) 46 | conn.commit() 47 | print('\n'); display_data(c) 48 | sys.exit(0) 49 | 50 | # 命令 add 添加节点 51 | if arg[0] == 'add' and len(arg)==6: 52 | row =(arg[1], arg[2], arg[3], arg[4], arg[5]) 53 | c.execute('INSERT INTO vps VALUES (%s,%s,%s,%s,%s)', row) 54 | conn.commit() 55 | print('\n'); display_data(c) 56 | sys.exit(0) 57 | 58 | text = 'sskcp.sh' 59 | if text == 'sskcp.sh' : 60 | sql = "SELECT * FROM text WHERE name ='sskcp.sh'" 61 | c.execute(sql); row = c.fetchone(); text = row[1] 62 | 63 | def make_sskcp(sk, id): 64 | cfg = sk[id] 65 | str = '#!/bin/bash\n\n' 66 | str += 'SERVER_IP=' + cfg[0] + '\nPORT=' + cfg[1] + '\nPASSWORD=' + cfg[2] + '\nSS_PORT=40000\nSOCKS5_PORT=1080\n' 67 | print(str) 68 | str += text 69 | return str 70 | 71 | if int(arg[0]) < len(vps) and len(arg)==1: 72 | str = make_sskcp(vps, int(arg[0])) 73 | f = open('sskcp.sh', 'w') 74 | f.write(str); f.close() 75 | os.system('bash sskcp.sh restart') 76 | sys.exit(0) 77 | 78 | conn.close() 79 | -------------------------------------------------------------------------------- /mysql/mysql_connector.py: -------------------------------------------------------------------------------- 1 | # Python安装 MySQL Connector 驱动程序,访问 MySQL 数据库和查询修改 WordPress 博客文章 2 | # https://262235.xyz/index.php/archives/707/ 3 | 4 | import mysql.connector 5 | 6 | mydb = mysql.connector.connect( 7 | host="localhost", 8 | user="root", 9 | passwd="yourpassword" 10 | ) 11 | 12 | ## 使用 `SHOW DATABASES` 语句列出系统中的所有数据库 13 | c = mydb.cursor() 14 | c.execute("SHOW DATABASES") 15 | for x in c: 16 | print(x) 17 | 18 | ## WordPress 存放文章的数据表名 wp_posts,使用 SELECT 查询博客的文章 19 | c = mydb.cursor() 20 | c.execute("USE wordpress") 21 | c.execute("SELECT * FROM wp_posts LIMIT 5") 22 | result = c.fetchall() 23 | for x in result: 24 | print(x) 25 | 26 | ### 选取列-只选择表中的某些列,请使用 "SELECT" 语句,后跟列名 27 | c.execute("SELECT ID, post_title, guid, post_type FROM wp_posts LIMIT 5") 28 | result = c.fetchall() 29 | for x in result: print(x) 30 | 31 | ### 用 fetchall() 方法,该方法从最后执行的语句中获取所有行 32 | ### 如果只需一行或者逐行,可以使用 fetchone() 方法, 将返回结果的第一行 33 | c.execute("SELECT ID, post_title, guid, post_type FROM wp_posts LIMIT 5") 34 | result = c.fetchone() 35 | print(result) 36 | result = c.fetchone(); print(result) 37 | 38 | ### WordPress文章内容批量替换文字的方法 更新表: 使用 UPDATE 语句来更新表中的现有记录 39 | sql = "UPDATE wp_posts SET post_content = replace(post_content,'nginx','nginx-php')" 40 | c.execute(sql) 41 | mydb.commit() 42 | print(c.rowcount, "record(s) affected") 43 | -------------------------------------------------------------------------------- /mysql/mysql_test.md: -------------------------------------------------------------------------------- 1 | ![mysql.webp][1] 2 | ## 使用Docker部署MYSQL和建立数据表,使用php远程访问学习示例 3 | 4 | ### 命令: vim `docker-compose.yml` # 建立 `docker-compose` 部署文件 5 | 6 | ``` 7 | version: '3.1' 8 | services: 9 | db: 10 | image: mysql 11 | command: --default-authentication-plugin=mysql_native_password 12 | restart: always 13 | environment: 14 | MYSQL_ROOT_PASSWORD: test-mysql@2022 15 | ports: 16 | - 53306:3306 17 | 18 | adminer: 19 | image: adminer 20 | restart: always 21 | ports: 22 | - 10086:8080 23 | ``` 24 | 25 | ### 使用 `linuxserver/docker-compose` 部署 MYSQL 和 adminer 服务 26 | 27 | ``` 28 | docker run --rm \ 29 | -v /var/run/docker.sock:/var/run/docker.sock \ 30 | -v "$PWD:$PWD" \ 31 | -w="$PWD" \ 32 | linuxserver/docker-compose \ 33 | up 34 | ``` 35 | 36 | ### 部署完成,浏览器访问 `http://ip:10086` 登陆管理建立数据库 37 | 38 | - 可以web-ui建立数据库和添加用户,也可以使用执行 sql 命令完成创建用户 39 | 40 | ``` 41 | # 创建数数据库: world 42 | CREATE DATABASE `world` COLLATE 'utf8mb4_bin'; 43 | 44 | # 创建用户密码 45 | CREATE USER 'test'@'%' IDENTIFIED BY 'NSbgs4Z8nYAnqhW'; 46 | 47 | # 修改用户密码 48 | SET PASSWORD FOR 'test'@'localhost' = 'test@localhost'; 49 | 50 | # 修改远程链接的用户 51 | CREATE USER 'test22'@'%' IDENTIFIED BY 'NSbgs4Z8nYAnqhW'; 52 | GRANT ALL PRIVILEGES ON `world`.* TO 'test22'@'%'; 53 | ``` 54 | SQL命令中的 'test22'@'%' 可以这样理解: test22是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址, 55 | 你也可替换成任意其它用户名或指定唯一的IP地址;'MyPassword'是给授权用户指定的登录数据库的密码 56 | 57 | ![111.png][2] 58 | 59 | ### `CREATE TABLE` 创建 `City` 数据表,如果已经存在,使用 `DROP TABLE` 先删除 60 | 61 | ``` 62 | # DROP TABLE IF EXISTS `City`; 63 | CREATE TABLE `City` ( `ID` int, `Name` text, `CountryCode` text, 64 | `District` text, `Population` int ); 65 | ``` 66 | 67 | ### `INSERT INTO` 向 `City` 数据表插入数据,或者使用备份的出来的数据导入 `City.sql.gz` [下载](https://github.com/hongwenjun/vps_setup/raw/remove/mysql/City.sql.gz) 68 | - `City.sql.gz` [下载](https://github.com/hongwenjun/vps_setup/raw/remove/mysql/City.sql.gz) 69 | 70 | ``` 71 | INSERT INTO `City` (`ID`, `Name`, `CountryCode`, `District`, `Population`) VALUES 72 | (1, 'Kabul', 'AFG', 'Kabol', 1780000), 73 | (2, 'Qandahar', 'AFG', 'Qandahar', 237500), 74 | (3, 'Herat', 'AFG', 'Herat', 186800), 75 | (4, 'Mazar-e-Sharif', 'AFG', 'Balkh', 127800), 76 | (5, 'Amsterdam', 'NLD', 'Noord-Holland', 731200), 77 | 78 | (4078, 'Nablus', 'PSE', 'Nablus', 100231), 79 | (4079, 'Rafah', 'PSE', 'Rafah', 92020); 80 | 81 | ``` 82 | 83 | ## 使用php远程访问学习示例 84 | 85 | ### 在建立php环境的机器上,使用命令行测试 86 | 87 | ``` 88 | docker exec -it nginx-php bash 89 | php -a 90 | 91 | $link = mysqli_connect("18.18.18.18", "test22", "NSbgs4Z8nYAnqhW", "world","53306"); 92 | $result = mysqli_query($link, "SELECT * FROM City LIMIT 10"); 93 | $rows = mysqli_fetch_all($result); 94 | var_dump($rows); 95 | 96 | ``` 97 | 98 | ![test.php.png][3] 99 | 100 | ### `test.php` 源码, 演示站 https://262235.xyz/test/test.php (php服务国内,mysql在美西) 101 | 102 | ``` 103 | 135 | ``` 136 | 137 | 138 | [1]: https://262235.xyz/usr/uploads/2021/12/1342246453.webp 139 | [2]: https://262235.xyz/usr/uploads/2021/12/1011972683.png 140 | [3]: https://262235.xyz/usr/uploads/2021/12/925080225.png 141 | -------------------------------------------------------------------------------- /mysql/sskcp.sh: -------------------------------------------------------------------------------- 1 | # https://git.io/sskcp.sh 2 | 3 | start(){ 4 | # SS + KcpTun + Udp2RAW 5 | udp2raw -c -r$SERVER_IP:$PORT -l0.0.0.0:4000 -k $PASSWORD --raw-mode faketcp -a >> /var/log/udp2raw.log & 6 | kcp-client -r 127.0.0.1:4000 -l :$SS_PORT --key $PASSWORD -mode fast2 -mtu 1300 >> /var/log/kcp-client.log 2>&1 & 7 | 8 | # ss-local -s 服务器IP地址 -p 服务器端口 -b 绑定本地IP -l 本地端口 -k 密码 -m 加密方式 [-c 配置文件] 9 | ss-local -s 127.0.0.1 -p $SS_PORT -b 0.0.0.0 -l $SOCKS5_PORT -k $PASSWORD -m aes-256-gcm -t 300 >> /var/log/ss-local.log & 10 | 11 | # status 12 | } 13 | 14 | stop(){ 15 | killall -9 kcp-client 16 | killall -9 udp2raw 17 | killall -9 ss-local 18 | } 19 | 20 | restart(){ 21 | stop 22 | start 23 | } 24 | 25 | help(){ 26 | echo -e "${SkyBlue}:: Source: ${Green}https://git.io/sskcp.sh ${Font}By 蘭雅sRGB" 27 | echo -e "${SkyBlue}:: Usage: ${GreenBG} bash sskcp.sh ${Yellow} [start|stop|restart|service|set] ${Font}" 28 | echo 29 | } 30 | 31 | status(){ 32 | # log 和 命令行参数 33 | cat /var/log/udp2raw.log | tail 34 | cat /var/log/kcp-client.log | tail 35 | cat /var/log/ss-local.log | tail 36 | echo 37 | 38 | if [[ -e /etc/openwrt_release ]]; then 39 | ps | grep -e udp2raw -e kcp-client -e ss-local 40 | else 41 | ps ax | grep --color=auto -e udp2raw -e kcp-client -e ss-local 42 | fi 43 | echo 44 | } 45 | 46 | setconf() 47 | { 48 | echo -e "${SkyBlue}:: 修改脚本sskcp.sh记录参数,按${RedBG}${SkyBlue}不修改! ${Yellow}" 49 | head -n 6 sskcp.sh | tail -n 4 && echo -e "${SkyBlue}" 50 | 51 | read -p ":: 1.请输入远程服务器IP: " sv_ip 52 | read -p ":: 2.请输入udp2raw 端口: " port 53 | read -p ":: 3.请输入套接转发密码: " passwd 54 | read -p ":: 4.请输入 SS 服务端口: " ss_port 55 | 56 | if [[ ! -z "${sv_ip}" ]]; then 57 | sed -i "s/^SERVER_IP=.*/SERVER_IP=${sv_ip}/g" "sskcp.sh" 58 | fi 59 | if [[ ! -z "${port}" ]]; then 60 | sed -i "s/^PORT=.*/PORT=${port}/g" "sskcp.sh" 61 | fi 62 | if [[ ! -z "${passwd}" ]]; then 63 | sed -i "s/^PASSWORD=.*/PASSWORD=${passwd}/g" "sskcp.sh" 64 | fi 65 | if [[ ! -z "${ss_port}" ]]; then 66 | sed -i "s/^SS_PORT=.*/SS_PORT=${ss_port}/g" "sskcp.sh" 67 | fi 68 | 69 | echo -e "${Yellow}" && head -n 7 sskcp.sh | tail -n 5 && echo -e "${Font}" 70 | } 71 | 72 | system_def(){ 73 | Green="\033[32m" && Red="\033[31m" && GreenBG="\033[42;37m" && RedBG="\033[41;37m" 74 | Font="\033[0m" && Yellow="\033[0;33m" && SkyBlue="\033[0;36m" 75 | } 76 | 77 | systemd_service(){ 78 | # 安装启动服务 79 | cat </usr/lib/systemd/system/sskcp.service 80 | [Unit] 81 | Description=sskcp.sh Service 82 | After=network.target 83 | 84 | [Service] 85 | Type=forking 86 | User=root 87 | ExecStart=nohup /root/sskcp.sh start & 88 | ExecReload=sh /root/sskcp.sh stop 89 | 90 | [Install] 91 | WantedBy=multi-user.target 92 | 93 | EOF 94 | chmod +x /root/sskcp.sh 95 | systemctl enable sskcp.service 96 | systemctl start sskcp.service 97 | systemctl status sskcp.service 98 | } 99 | 100 | # 脚本命令参数 101 | system_def 102 | if [[ $# > 0 ]]; then 103 | key="$1" 104 | case $key in 105 | start) 106 | start 107 | ;; 108 | stop) 109 | stop 110 | ;; 111 | restart) 112 | restart 113 | ;; 114 | service) 115 | systemd_service 116 | ;; 117 | set) 118 | setconf 119 | ;; 120 | esac 121 | else 122 | status 123 | fi 124 | help 125 | -------------------------------------------------------------------------------- /sqlite/README.md: -------------------------------------------------------------------------------- 1 | ![vps_sqlte.png][1] 2 | 3 | SQLite 是一个C语言库,它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的 SQL 查询语言来访问它。一些应用程序可以使用 SQLite 作为内部数据存储。 4 | 5 | ## Python 建立 Sqlite3 数据库和vps数据表,插入数据示例 6 | ![vps2021.png][2] 7 | 8 | ### 源码: `make_db.py` 9 | ``` 10 | import sqlite3 11 | conn = sqlite3.connect('vps2021.db') 12 | 13 | c = conn.cursor() 14 | 15 | # Create table 建立 vps 数据表 16 | c.execute('''CREATE TABLE vps 17 | (ip text, port text, password text, ss_port text, info text)''') 18 | 19 | # Insert a row of data 插入一行示例数据 20 | c.execute('''INSERT INTO vps VALUES 21 | ('188.188.188.188', '22', 'passwd@vps2021', '443', '0号vps示例')''') 22 | 23 | # Save (commit) the changes 保存提交数据修改 24 | conn.commit() 25 | 26 | # 不应该使用 Python 的字符串操作来创建你的查询语句,因为那样做不安全;它会使你的程序容易受到 SQL 注入攻击 27 | # 推荐使用 DB-API 的参数替换。在 SQL 语句中,使用 ? 占位符来代替值,然后把对应的值组成的元组做为 execute() 方法的第二个参数。 28 | port = ('22',) 29 | c.execute('SELECT * FROM vps WHERE port=?', port) 30 | print(c.fetchone()) 31 | 32 | # Larger example that inserts many records at a time 33 | # 一次插入很多行数据记录的例子 34 | purchases = [ ('188.188.188.188', '10122', 'passwd@vps2021', '443', '1号NAT小鸡'), 35 | ('188.188.188.188', '10222', 'passwd@vps2021', '443', '2号NAT小鸡'), 36 | ('188.188.188.188', '10322', 'passwd@vps2021', '443', '3号NAT小鸡'), 37 | ('188.188.188.188', '10422', 'passwd@vps2021', '443', '4号NAT小鸡'), 38 | ('188.188.188.188', '10522', 'passwd@vps2021', '443', '5号NAT小鸡'), 39 | ('188.188.188.188', '10622', 'passwd@vps2021', '443', '6号NAT小鸡'), 40 | ('188.188.188.188', '10722', 'passwd@vps2021', '443', '7号NAT小鸡'), 41 | ('188.188.188.188', '10822', 'passwd@vps2021', '443', '8号NAT小鸡'), 42 | ('188.188.188.188', '10922', 'passwd@vps2021', '443', '9号NAT小鸡'), 43 | ] 44 | c.executemany('INSERT INTO vps VALUES (?,?,?,?,?)', purchases) 45 | conn.commit() 46 | 47 | # We can also close the connection if we are done with it. 48 | # 如果我们完成了连接,我们也可以关闭连接。 49 | # Just be sure any changes have been committed or they will be lost. 50 | # 只要确定任何修改都已经提交,否则就会丢失。 51 | conn.close() 52 | ``` 53 | 54 | ### 运行 `make_db.py` 脚本,输出一行数据,建立数据文件 `vps2021.db` 55 | ``` 56 | python make_db.py 57 | ('188.188.188.188', '22', 'passwd@vps2021', '443', '0号vps示例') 58 | ``` 59 | 60 | ## 使用软件 `SQLiteSpy` 打开检查数据表和查询示例 61 | ![spy.png][3] 62 | 63 | ### 输入 `SELECT` 查询指令,搜索数据 64 | ![select.png][4] 65 | - 源码 `get_vps_db.py` 66 | ``` 67 | SELECT * FROM vps WHERE port=10822 68 | ``` 69 | ### 快捷键 F2 修改数据 70 | ![f2.png][5] 71 | 72 | ## Python 获取 vps数据 73 | ![vps.png][6] 74 | 75 | - 源码 `get_vps_db.py` 76 | ``` 77 | import sqlite3 78 | conn = sqlite3.connect('vps2021.db') 79 | c = conn.cursor() 80 | 81 | # 要在执行 SELECT 语句后获取数据,你可以把游标作为 iterator, 82 | # 然后调用它的 fetchone() 方法来获取一条匹配的行, 83 | # 也可以调用 fetchall() 来得到包含多个匹配行的列表。 84 | vps = c.execute('SELECT * FROM vps ORDER BY ip') 85 | print(vps.fetchone()) 86 | 87 | # 下面是一个使用迭代器形式的例子: 88 | cnt=1 89 | for row in vps: 90 | print(cnt,'节点: ', row) 91 | cnt+=1 92 | 93 | conn.close() 94 | ``` 95 | 96 | ## 从vps数据库中构建我们的应用脚本 源码 `sskcp.py` 97 | ![sskcp.png][7] 98 | ``` 99 | import sqlite3 100 | conn = sqlite3.connect('vps2021.db') 101 | c = conn.cursor() 102 | 103 | # sql 获取 vps 数据 104 | sql = 'SELECT * FROM vps ORDER BY ip' 105 | c.execute(sql) 106 | vps = c.fetchall() 107 | 108 | # define Color 109 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m' 110 | Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 111 | print(GreenBG, ":: SQLite3 数据库 vps2021.db 中获取的节点表 ") 112 | 113 | # 显示 vps 数据 114 | cnt=0 ; sk = list() 115 | for row in vps: 116 | print(SkyBlue, cnt,'节点:', Yellow, row) 117 | sk.append(list(row)) 118 | cnt+=1 119 | 120 | # 输入数字选择节点 121 | print(RedBG, ":: 请选择你需要的节点,输入节点号:", Font, end='') 122 | id = int(input()) 123 | 124 | def make_sskcp(sk, id): 125 | text = ''' 126 | # git.io/sskcp.sh 127 | ''' 128 | cfg = sk[id] 129 | str = '#!/bin/bash\n\n' 130 | str += 'SERVER_IP=' + cfg[0] + '\nPORT=' + cfg[1] + '\nPASSWORD=' + cfg[2] + '\nSS_PORT=40000\nSOCKS5_PORT=1080\n' 131 | print(str) 132 | str += text 133 | return str 134 | 135 | # 构建 sskcp.sh 136 | str = make_sskcp(sk, id) 137 | f = open('sskcp.sh', 'w') 138 | f.write(str) 139 | 140 | # 关闭数据库链接和文件 141 | conn.close() 142 | f.close() 143 | ``` 144 | 145 | --------------------- 146 | ## 更多文章: 147 | ### Python使用SQLite数据库,建立增加和删除数据实现,调用数据生成实用的Shell脚本 148 | ### https://262235.xyz/index.php/archives/766/ 149 | 150 | ### Python使用MySQL数据库,建立增加和删除数据实现,调用数据生成实用的Shell脚本 151 | ### https://262235.xyz/index.php/archives/769/ 152 | 153 | 154 | [1]: https://262235.xyz/usr/uploads/2021/12/564091663.png 155 | [2]: https://262235.xyz/usr/uploads/2021/12/230470055.png 156 | [3]: https://262235.xyz/usr/uploads/2021/12/890574423.png 157 | [4]: https://262235.xyz/usr/uploads/2021/12/1631363865.png 158 | [5]: https://262235.xyz/usr/uploads/2021/12/2789190230.png 159 | [6]: https://262235.xyz/usr/uploads/2021/12/3608186973.png 160 | [7]: https://262235.xyz/usr/uploads/2021/12/2410509594.png 161 | -------------------------------------------------------------------------------- /sqlite/addvps.py: -------------------------------------------------------------------------------- 1 | import sys, mysql.connector 2 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m'; Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 3 | # 连接MYSQL数据库 4 | conn = mysql.connector.connect( 5 | host="MYSQL服务器", 6 | user="用户", 7 | passwd="密码" 8 | c = conn.cursor(); c.execute("USE vps2022") 9 | 10 | # sql 获取 vps 数据 , 显示 vps 数据 11 | def display_data(c): 12 | print(GreenBG, ":: 显示 MySQL 数据库 vps2022 中获节点表 ") 13 | sql = 'SELECT * FROM vps' 14 | c.execute(sql) 15 | cnt=0 ; sk = list() 16 | for row in c.fetchall(): 17 | print(SkyBlue, cnt,'节点:', Yellow, row) 18 | sk.append(list(row)); cnt+=1 19 | display_data(c) 20 | 21 | while True : 22 | print(GreenBG, ":: 添加节点:", SkyBlue, 'add ', RedBG, '保存和退出: quit', Font, '\n $ ', end='') 23 | cmd = input().strip() 24 | cmd = cmd.replace(',', ' ').replace('\'', '') 25 | arg = cmd.split() 26 | 27 | if (len(arg)==0): 28 | continue 29 | 30 | if arg[0] == 'add' and len(arg)==6: 31 | row =(arg[1], arg[2], arg[3], arg[4], arg[5]) 32 | c.execute('INSERT INTO vps VALUES (%s,%s,%s,%s,%s)', row) 33 | 34 | if arg[0] == 'quit' : 35 | conn.commit() 36 | display_data(c) 37 | sys.exit(0) 38 | 39 | # 使用命令 python3 addvps.py < iplist.txt 或者 cat iplist.txt | python3 addvps.py 40 | # 批量输入数据 iplist.txt 格式 add 数据, 最后一行 quit 41 | # add '111.188.188.188', '22', 'Pa55@SSL', '443', '111号NAT小鸡' 42 | # add 115.115.188.188 22 Pa55@SSL 443 115号NAT小鸡 43 | # add 118.115.188.188,22,Pa55@SSL,443,115号NAT小鸡 44 | # quit -------------------------------------------------------------------------------- /sqlite/get_vps_db.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | conn = sqlite3.connect('vps2021.db') 3 | c = conn.cursor() 4 | 5 | # 要在执行 SELECT 语句后获取数据,你可以把游标作为 iterator, 6 | # 然后调用它的 fetchone() 方法来获取一条匹配的行, 7 | # 也可以调用 fetchall() 来得到包含多个匹配行的列表。 8 | vps = c.execute('SELECT * FROM vps ORDER BY ip') 9 | print(vps.fetchone()) 10 | 11 | # 下面是一个使用迭代器形式的例子: 12 | cnt=1 13 | for row in vps: 14 | print(cnt,'节点: ', row) 15 | cnt+=1 16 | 17 | conn.close() -------------------------------------------------------------------------------- /sqlite/make_db.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | conn = sqlite3.connect('vps2021.db') 3 | 4 | c = conn.cursor() 5 | 6 | # Create table 建立 vps 数据表 7 | c.execute('''CREATE TABLE vps 8 | (ip text, port text, password text, ss_port text, info text)''') 9 | 10 | # Insert a row of data 插入一行示例数据 11 | c.execute('''INSERT INTO vps VALUES 12 | ('188.188.188.188', '22', 'passwd@vps2021', '443', '0号vps示例')''') 13 | 14 | # Save (commit) the changes 保存提交数据修改 15 | conn.commit() 16 | 17 | # 不应该使用 Python 的字符串操作来创建你的查询语句,因为那样做不安全;它会使你的程序容易受到 SQL 注入攻击 18 | # 推荐使用 DB-API 的参数替换。在 SQL 语句中,使用 ? 占位符来代替值,然后把对应的值组成的元组做为 execute() 方法的第二个参数。 19 | port = ('22',) 20 | c.execute('SELECT * FROM vps WHERE port=?', port) 21 | print(c.fetchone()) 22 | 23 | # Larger example that inserts many records at a time 24 | # 一次插入很多行数据记录的例子 25 | purchases = [ ('188.188.188.188', '10122', 'passwd@vps2021', '443', '1号NAT小鸡'), 26 | ('188.188.188.188', '10222', 'passwd@vps2021', '443', '2号NAT小鸡'), 27 | ('188.188.188.188', '10322', 'passwd@vps2021', '443', '3号NAT小鸡'), 28 | ('188.188.188.188', '10422', 'passwd@vps2021', '443', '4号NAT小鸡'), 29 | ('188.188.188.188', '10522', 'passwd@vps2021', '443', '5号NAT小鸡'), 30 | ('188.188.188.188', '10622', 'passwd@vps2021', '443', '6号NAT小鸡'), 31 | ('188.188.188.188', '10722', 'passwd@vps2021', '443', '7号NAT小鸡'), 32 | ('188.188.188.188', '10822', 'passwd@vps2021', '443', '8号NAT小鸡'), 33 | ('188.188.188.188', '10922', 'passwd@vps2021', '443', '9号NAT小鸡'), 34 | ] 35 | c.executemany('INSERT INTO vps VALUES (?,?,?,?,?)', purchases) 36 | conn.commit() 37 | 38 | # We can also close the connection if we are done with it. 39 | # 如果我们完成了连接,我们也可以关闭连接。 40 | # Just be sure any changes have been committed or they will be lost. 41 | # 只要确定任何修改都已经提交,否则就会丢失。 42 | conn.close() -------------------------------------------------------------------------------- /sqlite/myvps.py: -------------------------------------------------------------------------------- 1 | import sys, mysql.connector 2 | # define Color 3 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m' 4 | Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 5 | 6 | # 连接MYSQL数据库 7 | conn = mysql.connector.connect( 8 | host="MYSQL服务器", 9 | user="用户", 10 | passwd="密码" 11 | ) 12 | c = conn.cursor() 13 | c.execute("USE vps2022") 14 | 15 | # sql 获取 vps 数据 , 显示 vps 数据 16 | def display_data(c): 17 | print(GreenBG, ":: 显示 MySQL 数据库 vps2022 中获节点表 ") 18 | sql = 'SELECT * FROM vps ORDER BY ip' 19 | c.execute(sql) 20 | vps = c.fetchall() 21 | 22 | cnt=0 ; sk = list() 23 | for row in vps: 24 | print(SkyBlue, cnt,'节点:', Yellow, row) 25 | sk.append(list(row)) 26 | cnt+=1 27 | print(Font) 28 | return sk 29 | 30 | vps = display_data(c) 31 | print(SkyBlue, ":: 使用节点直接输入节点号数字 ") 32 | print(GreenBG, ":: 输入命令:", RedBG, "del <1> 删除节点 \n :: 添加节点:", SkyBlue, 'add ', Font) 33 | print(' $ ', end='') 34 | cmd = input().strip() 35 | cmd = cmd.replace(',', ' ').replace('\'', '') 36 | arg = cmd.split() 37 | # print(arg) 38 | 39 | if (len(arg)==0): 40 | sys.exit(1) 41 | 42 | # 命令 del <1> 删除节点 43 | if arg[0] == 'del' : 44 | id = int(arg[1]) 45 | row = vps[id] 46 | c.execute("DELETE FROM vps WHERE ip=%s AND port=%s ", (row[0], row[1]) ) 47 | conn.commit() 48 | print('\n'); display_data(c) 49 | sys.exit(0) 50 | 51 | # 命令 add 添加节点 52 | if arg[0] == 'add' and len(arg)==6: 53 | row =(arg[1], arg[2], arg[3], arg[4], arg[5]) 54 | c.execute('INSERT INTO vps VALUES (%s,%s,%s,%s,%s)', row) 55 | conn.commit() 56 | print('\n'); display_data(c) 57 | sys.exit(0) 58 | 59 | text = ''' 60 | # text 字符串填充你实际用到的shell脚本内容 61 | ''' 62 | def make_sskcp(sk, id): 63 | cfg = sk[id] 64 | str = '#!/bin/bash\n\n' 65 | str += 'SERVER_IP=' + cfg[0] + '\nPORT=' + cfg[1] + '\nPASSWORD=' + cfg[2] + '\nSS_PORT=40000\nSOCKS5_PORT=1080\n' 66 | print(str) 67 | str += text 68 | return str 69 | 70 | if int(arg[0]) < len(vps) and len(arg)==1: 71 | str = make_sskcp(vps, int(arg[0])) 72 | f = open('sskcp.sh', 'w') 73 | f.write(str); f.close() 74 | # os.system('cat sskcp.sh') 75 | sys.exit(0) 76 | 77 | conn.close() -------------------------------------------------------------------------------- /sqlite/sskcp.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | conn = sqlite3.connect('vps2021.db') 3 | c = conn.cursor() 4 | 5 | # sql 获取 vps 数据 6 | sql = 'SELECT * FROM vps ORDER BY ip' 7 | c.execute(sql) 8 | vps = c.fetchall() 9 | 10 | # define Color 11 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m' 12 | Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 13 | print(GreenBG, ":: SQLite3 数据库 vps2021.db 中获取的节点表 ") 14 | 15 | # 显示 vps 数据 16 | cnt=0 ; sk = list() 17 | for row in vps: 18 | print(SkyBlue, cnt,'节点:', Yellow, row) 19 | sk.append(list(row)) 20 | cnt+=1 21 | 22 | # 输入数字选择节点 23 | print(RedBG, ":: 请选择你需要的节点,输入节点号:", Font, end='') 24 | id = int(input()) 25 | 26 | def make_sskcp(sk, id): 27 | text = ''' 28 | # git.io/sskcp.sh 29 | ''' 30 | cfg = sk[id] 31 | str = '#!/bin/bash\n\n' 32 | str += 'SERVER_IP=' + cfg[0] + '\nPORT=' + cfg[1] + '\nPASSWORD=' + cfg[2] + '\nSS_PORT=40000\nSOCKS5_PORT=1080\n' 33 | print(str) 34 | str += text 35 | return str 36 | 37 | # 构建 sskcp.sh 38 | str = make_sskcp(sk, id) 39 | f = open('sskcp.sh', 'w') 40 | f.write(str) 41 | 42 | # 关闭数据库链接和文件 43 | conn.close() 44 | f.close() -------------------------------------------------------------------------------- /sqlite/sskcp_v2.py: -------------------------------------------------------------------------------- 1 | import sqlite3, sys, os.path 2 | # define Color 3 | Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m' 4 | Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m' 5 | 6 | db_flag = os.path.exists('vps2021.db') 7 | conn = sqlite3.connect('vps2021.db') 8 | c = conn.cursor() 9 | 10 | if db_flag == False : 11 | c.execute('''CREATE TABLE vps 12 | (ip text, port text, password text, ss_port text, info text)''') 13 | c.execute('''INSERT INTO vps VALUES 14 | ('188.188.188.188', '22', 'passwd@SSL', '443', '0号示例')''') 15 | conn.commit() 16 | 17 | # sql 获取 vps 数据 , 显示 vps 数据 18 | def display_data(c): 19 | print(GreenBG, ":: 显示 SQLite3 数据库 vps2021.db 中获节点表 ") 20 | sql = 'SELECT * FROM vps ORDER BY ip' 21 | c.execute(sql) 22 | vps = c.fetchall() 23 | 24 | cnt=0 ; sk = list() 25 | for row in vps: 26 | print(SkyBlue, cnt,'节点:', Yellow, row) 27 | sk.append(list(row)) 28 | cnt+=1 29 | print(Font) 30 | return sk 31 | 32 | vps = display_data(c) 33 | print(SkyBlue, ":: 使用节点直接输入节点号数字 ") 34 | print(GreenBG, ":: 输入命令:", RedBG, "del <1> 删除节点 \n :: 添加节点:", SkyBlue, 'add ', Font) 35 | print(' $ ', end='') 36 | cmd = input().strip() 37 | cmd = cmd.replace(',', '').replace('\'', '') 38 | arg = cmd.split() 39 | # print(arg) 40 | 41 | if (len(arg)==0): 42 | sys.exit(1) 43 | 44 | # 命令 del <1> 删除节点 45 | if arg[0] == 'del' : 46 | id = int(arg[1]) 47 | row = vps[id] 48 | c.execute("DELETE FROM vps WHERE ip=? AND port=? ", (row[0], row[1]) ) 49 | conn.commit() 50 | print('\n'); display_data(c) 51 | sys.exit(0) 52 | 53 | # 命令 add 添加节点 54 | if arg[0] == 'add' and len(arg)==6: 55 | row =(arg[1], arg[2], arg[3], arg[4], arg[5]) 56 | c.execute('INSERT INTO vps VALUES (?,?,?,?,?)', row) 57 | conn.commit() 58 | print('\n'); display_data(c) 59 | sys.exit(0) 60 | 61 | text = ''' 62 | # text 字符串填充你实际用到的shell脚本内容 63 | ''' 64 | def make_sskcp(sk, id): 65 | cfg = sk[id] 66 | str = '#!/bin/bash\n\n' 67 | str += 'SERVER_IP=' + cfg[0] + '\nPORT=' + cfg[1] + '\nPASSWORD=' + cfg[2] + '\nSS_PORT=40000\nSOCKS5_PORT=1080\n' 68 | print(str) 69 | str += text 70 | return str 71 | 72 | if int(arg[0]) < len(vps) and len(arg)==1: 73 | str = make_sskcp(vps, int(arg[0])) 74 | f = open('sskcp.sh', 'w') 75 | f.write(str); f.close() 76 | os.system('cat sskcp.sh') 77 | sys.exit(0) 78 | 79 | conn.close() -------------------------------------------------------------------------------- /vscode/README.md: -------------------------------------------------------------------------------- 1 | ## VS Code 学习 Python 脚本编程 IDE环境配置 2 | 3 | ![VScode.jpg][1] 4 | 5 | ## 安装好 VS Code 默认是英文,首先安装中文语言包 6 | - `Ctrl+Shiht+X` 打开 扩展插件安装 输入 `Chinese` 搜索, 选择 `Chinese (Simplified) Language Pack` 安装后 VS Code 就能支持中文了 7 | - 适用于 VS Code 的中文(简体)语言包,此中文(简体)语言包为 VS Code 提供本地化界面。 8 | - 使用方法 9 | 10 | 通过使用“配置显示语言”命令显式设置 VS Code 显示语言,可以替代默认 UI 语言。 按 "Ctrl+Shift+P" 以显示“命令面板”,然后开始键入 "display" 以筛选和显示“配置显示语言”命令。按 "Enter",然后会按区域设置显示安装的语言列表,并突出显示当前语言设置。选择另一个“语言”以切换 UI 语言。 请参阅文档并获取更多信息。 11 | 12 | ## 安装 Python 编程语言扩展包 13 | - 打开 扩展插件安装面板,搜索 `@recommended:languages` 或者 `Python` ,安装 `Python extension for Visual Studio Code` 14 | 15 | - Python扩展为Visual Studio代码 16 | 在Visual Studio代码扩展与Python语言丰富支持(对于语言的所有积极支持的版本:> = 3.6),包括特征,例如智能感知(Pylance),掉毛,调试,代码导航,代码格式,重构,变量资源管理器,测试资源管理,以及更多! 17 | 18 | - 安装的扩展 19 | 20 | Python的扩展将自动安装Pylance和Jupyter扩展与Python文件和Jupyter笔记本电脑工作时,给你最好的体验。但是,Pylance 是一个可选的依赖项,这意味着如果安装失败,Python 扩展将保持完整功能。您还可以卸载它在某些功能为代价的,如果您使用的是不同的语言服务器。 21 | 22 | - 快速开始 23 | 24 | 第1步:您的系统上安装Python支持的版本(注:不支持,该系统在Mac OS的Python的安装)。 25 | 第2步:安装Python扩展为Visual Studio代码。 26 | 第3步:打开或创建一个Python文件,并开始编码! 27 | 28 | ![welcome.png][2] 29 | 30 | ## 安装 `Code Runner` 文件栏,增加运行△图标,方便运行 31 | - 代码运行器 32 | 33 | 运行多种语言的代码片段或代码文件:C、C++、Java、JavaScript、PHP、Python、Perl、Perl 6、Ruby、Go、Lua、Groovy、PowerShell、BAT/CMD、BASH/SH、F# Script、F#( .NET Core)、C# 脚本、C# (.NET Core)、VBScript、TypeScript、CoffeeScript、Scala、Swift、Julia、Crystal、OCaml Script、R、AppleScript、Elixir、Visual Basic .NET、Clojure、Haxe、Objective-C , Rust, Racket, Scheme, AutoHotkey, AutoIt, Kotlin, Dart, Free Pascal, Haskell, Nim, D, Lisp, Kit, V, SCSS, Sass, CUDA, Less, Fortran, 和自定义命令 34 | 35 | ## VS Code 【查看】->【外观】->【面板】主要快键 36 | ![kk.png][3] 37 | - 切换底下输出和终端面板 `Ctrl+J` ; 切换侧栏 `Ctrl+B` ;放大缩小 `Ctrl+=` ;其他见图 38 | 39 | ## Python 代码格式化 快捷键 `Shift+Alt+F` ,可选 `yapf` 和 `autopep8` 40 | - 如果没有指定帮你安装 `yapf` 或者 `autopep8` 可以按下面命令安装 41 | ``` 42 | pip install yapf autopep8 43 | ``` 44 | ![pyformat.png][4] 45 | - 【设置】 搜索 `python.formatting.provider` ,选择代码样式工具 46 | 47 | ### 【面板】终端显示 `宋体点阵字` 设置: 修改 48 | ![tm.png][5] 49 | - 【设置】 搜索 `terminal.integrated.fontFamily` 修改成 "宋体",或者修改配置文件 50 | ``` 51 | // VS Code settings.json 52 | { 53 | "code-runner.executorMap": { 54 | "php": "php", 55 | "python": "set PYTHONIOENCODING=utf8 && python -u", 56 | }, 57 | "editor.fontFamily": "'Fixedsys Excelsior 3.01',Consolas, 'Courier New', monospace", 58 | "editor.fontSize": 16, 59 | "terminal.integrated.defaultProfile.windows": "PowerShell", 60 | "terminal.integrated.fontFamily": "宋体", 61 | "editor.lineHeight": 16 62 | } 63 | ``` 64 | ## 字体使用 Fixedsys ,字体大小16px 65 | - Fixedsys Excelsior 3.01 [字体下载](https://github.com/hongwenjun/pillow_font/raw/main/ttf/fixedsys_excelsior.ttf) 66 | ``` 67 | "editor.fontFamily": "'Fixedsys Excelsior 3.01',Consolas, 'Courier New', monospace" 68 | ``` 69 | [1]: https://262235.xyz/usr/uploads/2021/08/3627711294.jpg 70 | [2]: https://262235.xyz/usr/uploads/2021/08/233973932.png 71 | [3]: https://262235.xyz/usr/uploads/2021/08/3090452545.png 72 | [4]: https://262235.xyz/usr/uploads/2021/08/1749171291.png 73 | [5]: https://262235.xyz/usr/uploads/2021/08/1974051124.png 74 | 75 | 76 | 77 | ## VSCode RunCode Python 输出中文乱码解决方案 78 | 79 | ![code-run.png](https://262235.xyz/usr/uploads/2021/08/2938074038.png) 80 | ### 设置搜索 `code-runner.executorMap` ; 在 `settings.json` 中编辑 81 | 82 | "python": "set PYTHONIOENCODING=utf8 && python -u", 83 | 84 | 修改其后方字典中"python"冒号后面的值为:“set PYTHONIOENCODING=utf8 && python”,直接复制粘贴引号及引号之间的内容粘贴到原文的冒号后面就行,如图,同样也可以修改其他脚本源于的命令行: 85 | 86 | ![22.png](https://262235.xyz/usr/uploads/2021/08/2097796441.png) 87 | -------------------------------------------------------------------------------- /vscode/settings.json: -------------------------------------------------------------------------------- 1 | // VS Code settings.json 2 | { 3 | 4 | "code-runner.executorMap": { 5 | "php": "php", 6 | "python": "set PYTHONIOENCODING=utf8 && python -u", 7 | }, 8 | "editor.fontFamily": "'Fixedsys Excelsior 3.01',Consolas, 'Courier New', monospace", 9 | "editor.fontSize": 16, 10 | "terminal.integrated.defaultProfile.windows": "PowerShell", 11 | "terminal.integrated.fontFamily": "宋体", 12 | "editor.lineHeight": 16 13 | } 14 | -------------------------------------------------------------------------------- /zfaka/MYSQL命令学习.txt: -------------------------------------------------------------------------------- 1 | UPDATE `t_admin_user` SET `email` = 'root@gmail.com' WHERE `t_admin_user`.`id` = 1; 2 | 3 | 4 | SELECT * FROM `t_admin_user`; 5 | 6 | 7 | MySQL数据库命令 8 | 9 | https://blog.csdn.net/qq_42992643/article/details/82959720 10 | 11 | 1.对数据库常用命令 12 | 1.连接数据库 13 | mysql -u用户名 -p密码 14 | 2.显示已有数据库 15 | show databases; 16 | 3.创建数据库 17 | create database sqlname; 18 | 4.选择数据库 19 | use database sqlname; 20 | 5.显示数据库中的表(先选择数据库) 21 | show tables; 22 | 6.显示当前数据库的版本信息以及连接用户名 23 | select version(),user(); 24 | 7.删除数据库(删除时没有提示直接删除) 25 | drop database sqlname; 26 | 27 | 2.数据库中对表的命令 28 | 1.创建表 29 | (1)语法: 30 | create table tablename( 31 | 字段1 数据类型 字段属性 32 | … 33 | 字段n 34 | ); 35 | (2)注意: 36 | 1.创建表时为了防止与保留字冲突,用’'括起来 37 | 2.单行注释:#… 38 | 多行注释:/…/ 39 | 3.创建表时多字段中间用英文逗号隔开,最后一行不用逗号。 40 | (3) 字段约束和属性 41 | 1.非空约束 not null(字段不允许为空) 42 | 2.默认约束 default(设置默认值) 43 | 3.唯一约束 unique key(uk)(设置字段的值是唯一的,可为空,但只能有一个空值) 44 | 4.主键约束 primary key(pk)(作为表记录的唯一标识) 45 | 5.外键约束 foreign key(fk)(用于两个表之间建立关系,需要指定引用主表的哪一字段。在数据库的存储引擎中InnoDB支持外键,MyISAM不支持外键。 46 | 作为外键的字段要求是主表中的主键(单字段主键)) 47 | 48 | 添加外键约束: 49 | CONSTRAINT FK_外键名 FOREIGN KEY(字表中外键字段)REFERENCES 关联表名 (关联字段)。 50 | grandid作为字表的外键 51 | grandid 52 | 在这里插入图片描述 53 | 1.设置自增auto_increment=n,从n开始。 54 | 2.设置自增set @@ auto_increment_increment=m,步长为m。 55 | 在这里插入图片描述 56 | 3.多字段设置主键:primary key(字段1,字段2…字段n) 57 | 4.表中的注释/说明性文字:)comment=“说明文字”; 58 | 5.设置字符集:)charset=“字符集”; 59 | 6.查看表的结构:describe’表名’/desc 表名 60 | 7.查看数据库定义:show create database sqlname; 61 | 8.查看数据表定义:show create table tablename; 62 | 9.查看默认存储引擎:show variables like’storage_engine%’; 63 | 11.指定表的存储引擎:)engine=存储引擎; 64 | 10.删除表:drop table ‘tablename’; 65 | 11.获取当前日期:now(); 66 | 12.修改表: 67 | (1)修改表名:alter table 旧表名 rename 新表名; 68 | (2)添加字段:alter table 表名 add 字段名 数据类型…;(添加新的字段) 69 | (3)修改字段:alter table 表名 change 原字段名 新字段名 数据类型…; 70 | (4)删除字段:alter table 表名 drop 字段名; 71 | (5)在创建完表以后添加主键约束: 72 | alter table 表名 add constraint 主键名 primary key 表名(主键字段); 73 | (6)创建完表以后添加外键约束(作为外键的字段要求是主表中的主键(单字段主键)): 74 | alter table 表名 add constraint 外键名 foreign key(外键字段) references 关联表名 (关联字段); 75 | 76 | 插入数据 77 | 1.插入单行数据: 78 | insert into 表名 (字段名列表(逗号隔开)) values(值列表(逗号隔开)); 79 | 2.插入多行数据 : 80 | insert into 表名(字段名列表) values (值列表1), … ,(值列表n); 81 | 3.将查询结果插入到新表中: 82 | create table 新表(select 字段1, … ,from 原表); 83 | 84 | 查询student表中的id,name,sex,phone数据插入到newstudent表中: 85 | 86 | CREATE TABLE newstudent(SELECT id,`name`,sex,phone FROM student); 87 | 88 | 1 89 | 2 90 | 3 91 | 4 92 | 3.更新数据(修改数据): 93 | update 表名 set 列名=更新值 where 更新条件; 94 | 95 | 修改newstudent表中id=1001的数据名字为tom: 96 | 97 | UPDATE newstudent SET `name`='tom' WHERE id=1001; 98 | 99 | 1 100 | 2 101 | 3 102 | 4 103 | 4.删除数据 104 | (1)delete from 表名 where 删除条件; 105 | delete 删除的是整条数据,不会只删除单个列。 106 | 107 | 删除newstudent表中名字为tom的数据: 108 | 109 | DELETE FROM newstudent WHERE `name`='tom'; 110 | 1 111 | 2 112 | 3 113 | (2)truncate table 删除数据: 114 | truncate table 删除的是表中所有的行,但表的结构,列,约束,索引等不会改变。不能用于有外键约束的表。删除数据不能恢复。 115 | truncate table 表名 where 删除条件; 116 | 117 | 数据查询 118 | 1.使用select查询 119 | select 列名/表达式/函数/常量 from 表名 where 查询条件 order by 排序的列名asc/desc; 120 | (1)查询所有的数据行和列: 121 | select * from 表名; 122 | (2)查询部分行和列: 123 | select 列名… from 表名 where 查询条件; 124 | (3)在查询中使用列的别名: 125 | select 列名 AS 新列名 form 表名 where 查询条件; 126 | 计算,合并得到新的列名: 127 | select 列名1+’.’+列名2 AS 新列名 from 表名; 128 | (4)查询空值: 129 | 通过is null 或者 is not null 判断列值是否为空 130 | 131 | 查询student表中Email为空的学生姓名: 132 | 133 | SELECT `name` FROM student WHERE Email IS NULL; 134 | 1 135 | 2 136 | 3 137 | 2.分组查询 138 | 在这里插入图片描述 139 | 140 | #查询不同课程的平均分,最低分,最高分,并查询出平均分大于80分的课程 141 | SELECT r.subjectno,sub.`SubjectName` 课程名称,AVG(StudentResult) 平均分, 142 | MAX(StudentResult) 最高分,MIN(StudentResult) 最低分 143 | FROM result r INNER JOIN `subject` sub 144 | ON r.`SubjectNo`=sub.`SubjectNo` 145 | GROUP BY r.subjectno 146 | #where AVG(StudentResult)>=80出现错误, 147 | #分组查询group by 在where语句后, 148 | #group by 约束条件使用having语句 149 | HAVING AVG(StudentResult)>=80; 150 | 151 | 1 152 | 2 153 | 3 154 | 4 155 | 5 156 | 6 157 | 7 158 | 8 159 | 9 160 | 10 161 | 11 162 | 在这里插入图片描述 163 | 164 | 常用函数 165 | 1.聚合函数: 166 | (1)AVG (平均值):select avg(列名)from 表名 167 | 假设列名为成绩 则查询到的是表中所有成绩的平均值。 168 | (2)count 返回某字段的行数 169 | (3)max 返回某字段的最大数 170 | (4)min 返回某字段的最小值 171 | (5)sum 返回某字段的和。 172 | 2.字符串函数: 173 | (1)concat() 连接字符串s1,s2…sn为一个完整的字符串。 174 | (2)insert(s1,p1,n,news)将字符串s1从p1位置开始,n个字符长的字串替换为字符串news。 175 | (3)lower(s)将字符串s中的所有字符改为小写。 176 | (4)upper(s)将字符串s中的所有字符改为大写。 177 | (5)substring(s,num,len)返回字符串s的第num个位置开始长度为len的子字符串。 178 | 3.时间日期函数: 179 | (1)获取当前日期:curdate(); 180 | (2)获取当前时间:curtime(); 181 | (3)获取当前日期和时间:now(); 182 | (4)返回日期date为一年中的第几周:week(date); 183 | (5)返回日期date的年份:year(date); 184 | (6)返回时间time的小时值:hour(time); 185 | (7)返回时间time的分钟值:minute(time); 186 | (8)返回日期参数(date1和date2之间相隔的天数):datediff(date1,date2); 187 | (9)计算日期参数date加上n天后的日期:adddate(date,n); 188 | 4.数学函数 189 | (1)返回大于或等于数值x的最小整数:ceil(x); 190 | (2)返回小于或等于数值x的最大整数:floor(x); 191 | (3)返回0~1之间的随机数:rand(); 192 | order by 子句 193 | order by子句按照一定的顺序排列查询结果,asc升序排列,desc降序排列。 194 | limit子句 195 | 显示指定位置指定行数的记录。 196 | select 字段名列表 form 表名 where 约束条件 group by分组的字段名 order by 排序列名 limit 位置偏移量,行数; 197 | #查询学生信息里gid=1按学号升序排列前四条记录 198 | 在这里插入图片描述 199 | 200 | #查询学生信息里gid=1按学号升序排列前四条记录(步长) 201 | SELECT id,`name` FROM `student1` WHERE gid=1 ORDER BY id LIMIT 4; 202 | (查询表里全部信息中gid=1的前四个学生) 203 | 1 204 | 2 205 | 3 206 | 查询结果: 207 | 在这里插入图片描述 208 | 209 | 210 | #查询学生信息里gid=1按学号升序排列前四条记录(位置偏移量,步长) 211 | SELECT id,`name` FROM `student1` WHERE gid=1 ORDER BY id LIMIT 4,4; 212 | (查询表中全部信息gid=1前四条以后的全部信息中的前四条学生信息) 213 | 1 214 | 2 215 | 3 216 | 4 217 | 查询结果: 218 | 在这里插入图片描述 219 | 220 | 模糊查询 221 | in子查询******not in 子查询 222 | 使用in关键字可以使父查询匹配子查询返回的多个单字段值。 223 | 解决使用比较运算符(=,>等),子查询返回值不唯一错误信息。 224 | like模糊查询 225 | LIKE语句语法格式:select * from 表名 where 字段名 like 对应值(子串)。 226 | 227 | 它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。 228 | 229 | A:% 包含零个或多个字符的任意字符串: 1、LIKE’Mc%’ 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。 230 |   2、LIKE’%inger’ 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。 231 |   3、LIKE’%en%’ 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。 232 |   B:_(下划线) 任何单个字符:LIKE’_heryl’ 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。 233 |   C:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:、 234 |   1,LIKE’[CK]ars[eo]n’ 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。 235 |   2、LIKE’[M-Z]inger’ 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer) 236 |   ***D:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:LIKE’M[^c]%’ 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。 237 |   E: 它同于DOS命令中的通配符,代表多个字符:cc代表cc,cBc,cbc,cabdfec等多个字符。 238 |   F:?同于DOS命令中的?通配符,代表单个字符 :b?b代表brb,bFb等 239 |   G:# 大致同上,不同的是代只能代表单个数字。k#k代表k1k,k8k,k0k 。 240 |   F:[!] 排除 它只代表单个字符 241 |   下面我们来举例说明一下: 242 |   例1,查询name字段中包含有“明”字的。 243 |   select * from table1 where name like ‘%明%’ 244 |   例2,查询name字段中以“李”字开头。 245 |   select * from table1 where name like '李’ 246 |   例3,查询name字段中含有数字的。 247 |   select * from table1 where name like ‘%[0-9]%’ 248 |   例4,查询name字段中含有小写字母的。 249 |   select * from table1 where name like ‘%[a-z]%’ 250 |   例5,查询name字段中不含有数字的。 251 |   select * from table1 where name like ‘%[!0-9]%’ 252 |   可以自定义转移符----》escape’自定义转移符’ 253 |   distinct------》去除重复项 254 |    255 |   between*and模糊查询 256 |  操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 257 |  null ,not null查询 258 | 259 | -- 查询手机号不为null的用户数据 260 | SELECT * from user where phone is not null; 261 | 262 | -- 查询手机号为null的用户数据 263 | SELECT * from user where phone is null; 264 | 1 265 | 2 266 | 3 267 | 4 268 | 5 269 | exists 子查询 not exists子查询 270 | exists子查询用来确认后边的查询是否继续进行 271 | drop table if exists test—>判断是否存在表test,如果存在就删除。 272 | not exists实现取反操作。对不存在对应查询条件的记录。 273 | 274 | 多表连接查询 275 | 多表连接查询是通过各个表之间共同列的关联性来查询数据。 276 | 1.内连接查询 277 | 内连接查询根据表中共同的列进行匹配。取两个的表的交集。两个表存在主外键关系是通常使用内连接查询。 278 | 内连接使用inner join…on 关键字或者where子句来进行表之间的关联。 279 | inner 可省略 on 用来设置条件。 280 | (1)在where子句中指定连接条件 281 | (2)在from中使用inner join…on关键字 282 | 283 | #查询学生姓名和成绩 284 | SELECT studentname,studentresult FROM student s,result r 285 | WHERE s.`StudentNo`=r.`StudentNo` 286 | 1 287 | 2 288 | 3 289 | #在from中使用inner join....on关键字 290 | SELECT s.`StudentName`,r.`StudentResult` ,r.`SubjectNo`FROM student s 291 | INNER JOIN result r ON s.`StudentNo`=r.`StudentNo` 292 | 1 293 | 2 294 | 3 295 | 两种方法查询结果相同。 296 | 2.外连接查询 297 | 外连接查询中参与连接的表有主从之分,已主表的每行数据匹配从表的数据列,将符合连接条件的数据直接返回到结果集中,对不符合连接条件的列,将被填上null值再返回到结果集中。 298 | (1)左外连接查询 299 | left join…on 或者left outer join…on关键字进行表之间的关联。 300 | 301 | SELECT s.`StudentName`,r.`StudentResult` ,r.`SubjectNo`FROM student s 302 | LEFT JOIN result r ON s.`StudentNo`=r.`StudentNo` 303 | 1 304 | 2 305 | 将没有成绩的学生成绩查出。 306 | (2)右外连接查询 307 | 右外连接包含右表中所有的匹配行,右表中有的项在左表中没有对应的项将以null值填充。 308 | right join…on 或right outer join…on关键字进行表之间的关联。 309 | (3)自连接 310 | 把一个表作为两个表使用。 311 | 312 | #创建一个表 313 | CREATE TABLE book( 314 | id INT(10), 315 | sort INT(10), 316 | books VARCHAR(10) NOT NULL 317 | ); 318 | #插入数据 319 | INSERT INTO book VALUES (2,1,'古文书'), 320 | (3,1,'现代书'), 321 | (4,2,'《三字经》'), 322 | (5,2,'《唐诗三百首》'), 323 | (6,3,'《我与地坛》'), 324 | (7,2,'《游大林寺》'), 325 | (8,2,'《王右军年减十岁时》'), 326 | (9,3,'《致橡树》'); 327 | 328 | #查询结果为: 329 | #书籍类型 书籍名 330 | #古文书 三字经.... 331 | #现代书 我与地坛.... 332 | 333 | SELECT a.books 书籍类型, b.books 书籍名 334 | FROM book a,book b 335 | WHERE a.id=b.sort; 336 | 1 337 | 2 338 | 3 339 | 4 340 | 5 341 | 6 342 | 7 343 | 8 344 | 9 345 | 10 346 | 11 347 | 12 348 | 13 349 | 14 350 | 15 351 | 16 352 | 17 353 | 18 354 | 19 355 | 20 356 | 21 357 | 22 358 | 23 359 | 24 360 | 在这里插入图片描述 361 | 自连接查询结果: 362 | 在这里插入图片描述 363 | 364 | MySQL的事务,视图,索引,备份和恢复 365 | 1.事务 366 | 事务是指将一系列数据操作捆绑成为一个整体进行统一管理。 367 | 把所有的命令作为一个整体一起向系统提交或者撤销造组偶请求。 368 | 事务属性:原子性,一致性,隔离性,持久性。 369 | myISA存储引擎不支持事务。 370 | 371 | 关闭事务自动提交:set autocommit=0; 372 | (1)开始事务:begin/start transaction; 373 | (2)提交事务:commit; 374 | (3)回滚/撤销事务:rollback; 375 | 恢复自动提交:set autocommit=1; 376 | 设置结果集以??编码格式显示:set names ??; 377 | 2.视图 378 | 视图是一种查看数据库中一个或多个表中数据的方法。视图是一种虚拟表,作为来自一个或多个表的行或列的子集创建的。视图充当查询中的表筛选器的角色。 379 | (1)创建视图:create view 视图名 as 380 | (2)删除视图:drop view 视图名; 381 | (3)查看视图数据:select 。。。。。from 视图名; 382 | 3.索引 383 | 索引类似于书的目录,使用索引可以将数据库程序无须对整个表扫描就可以在其中找到所需数据。 384 | (1)普通数据:允许重复和空值。 385 | (2)唯一索引:不允许出现重复。可以有多个唯一索引。 386 | (3)主键索引:非空,唯一。删除时drop primary key; 387 | (4)复合索引:将多个列组合作为索引。? 388 | (5)全文索引:可重复和空值,在char,varchar,text创建。 389 | where match(列名)against (‘查找内容’); 390 | (6)空间索引:对空间数据类型的列建立的索引。 391 | 392 | 创建索引: 393 | create 【索引类型】index 索引名 on 表名 (创建索引的列); 394 | 或者创建表时之间在列后面加上索引类型。 395 | 或者修改表alter table 表名 add index 索引名 (索引列); 396 | 删除索引:drop index 索引名; 397 | 查看索引:show index from 表名; 398 | 4.数据库备份和恢复 399 | 1.使用mysqldump命令备份数据库 400 | mysqldump -u -p 数据库名>备份数据库位置及名字; 401 | 表数据导出到文本文件 402 | select *from 表名 where 查询条件 into outfile 备份数据库位置及名字; 403 | 404 | 2.使用mysql命令恢复数据库(先创建新的数据库) 405 | mysql -u -p 新创建数据库名<所要恢复数据库位置及文件名; 406 | source命令恢复数据库 407 | source 数据库备份文件; 408 | 409 | 新建用户 410 | 411 | #创建本地用户 412 | CREATE USER `user`@`localhost` IDENTIFIED BY '123123'; 413 | #用户可登陆任何远程主机,使用通配符% 414 | CREATE USER `user2`@`123%` IDENTIFIED BY '123123'; 415 | #对用户进行全部权限授权 416 | GRANT ALL ON mysql.`user` TO `user2`@`123%`; 417 | #对已创建的用户授权 418 | GRANT SELECT,INSERT ON mysql.`user` TO `user2`@`123%`; 419 | #创建用户时授权 420 | GRANT SELECT,INSERT ON mysql.`user` TO `user_2`@`123%` IDENTIFIED BY '123123'; 421 | #删除用户user2(使用删除语句时必须拥有数据库全局权限或select权限) 422 | DROP USER `user2`@`123%`; 423 | DROP USER `user_2`@`123%`; 424 | DROP USER `user`@`localhost`; 425 | #mysqladmin修改超级用户user2账户密码(mysqladmin命令在cmd中使用,只能修改超级用户密码) 426 | mysqladmin -u root -p PASSWORD "123456"; 427 | #修改当前登录用户密码 428 | SET PASSWORD =PASSWORD("123456"); 429 | #修改其他用户密码 430 | SET PASSWORD FOR `user2`@`123%`=PASSWORD("123456"); -------------------------------------------------------------------------------- /zfaka/README.md: -------------------------------------------------------------------------------- 1 | ## ZFAKA安装教程(Docker版): 2 | 3 | ![](https://img.baiyue.one/upload/2019/08/5d5a09df7a3fa.png) 4 | 5 | Docker版优势 6 | 7 | **优点** 8 | 9 | - 30s即可成功搭建一个zfaka(熟悉docker的人) 10 | - 新手从0开始,也可以快速搭建,全自动部署 11 | - 不用手动去配置yaf、扩展插件、伪静态等等 12 | - 采用前后端数据分离、更安全 13 | 14 | ## 部署 15 | 16 | ### 方法1:一键脚本(推荐) 17 | 18 | ```bash 19 | bash <(curl -L -s https://raw.githubusercontent.com/Baiyuetribe/zfaka/master/zfaka.sh) 20 | ``` 21 | 22 | ![](https://img.baiyue.one/upload/2019/07/5d20c37515d89.png) 23 | 24 | 安装结束后: 25 | 26 | ![](https://img.baiyue.one/upload/2019/07/5d20c3ac80305.png) 27 | 28 | 29 | 30 | ### 方法2:手动部署 31 | 32 | 请自行搞定docker和docker-compose环境 33 | 34 | ``` 35 | wget https://raw.githubusercontent.com/Baiyuetribe/zfaka/docker/docker-compose.yml 36 | docker-compose up -d 37 | ``` 38 | 39 | 说明: 40 | 41 | - ZFAKA主程序入口为:`http://域名:3002` 打开后填入数据库密码即可完成安装步骤。 42 | - phpadmin入口:`http://域名:8080` 用来修改数据库 43 | - kodexplore入口:`http://域名:999` 用来管理源码或替换图片等等。 44 | 45 | ## 安装后相关问题: 46 | 47 | ![](https://img.baiyue.one/upload/2019/07/5d1c896077502.png) 48 | 更多资料,请参考:[【佰阅书籍】](https://book.baiyue.one/document/zfaka/) 49 | 50 | 51 | 52 | 博客:https://baiyue.one 佰阅部落 53 | 原作开发者:资料空白 54 | -------------------------------------------------------------------------------- /zfaka/docker-compose.yml: -------------------------------------------------------------------------------- 1 | 2 | version: '3.1' 3 | services: 4 | php: 5 | image: baiyuetribe/zfaka 6 | restart: always 7 | volumes: 8 | - /opt/zfaka/code:/var/www/html 9 | networks: 10 | - frontend 11 | - backend 12 | depends_on: 13 | - mysql 14 | nginx: 15 | image: nginx:1.17.1-alpine 16 | restart: always 17 | volumes: 18 | - /opt/zfaka/code/default.conf:/etc/nginx/conf.d/default.conf 19 | - /opt/zfaka/code:/var/www/html 20 | ports: 21 | - "3002:80" 22 | networks: 23 | - frontend 24 | depends_on: 25 | - php 26 | mysql: 27 | image: mysql:5.6 28 | volumes: 29 | - /opt/zfaka/mysql:/var/lib/mysql 30 | environment: 31 | TZ: 'Asia/Shanghai' 32 | MYSQL_DATABASE: faka 33 | MYSQL_ROOT_PASSWORD: baiyue.one 34 | command: ['mysqld', '--character-set-server=utf8'] 35 | networks: 36 | - backend 37 | phpmyadmin: 38 | image: phpmyadmin/phpmyadmin 39 | ports: 40 | - 8080:80 41 | depends_on: 42 | - nginx 43 | environment: 44 | PMA_HOST: mysql 45 | TZ: 'Asia/Shanghai' 46 | networks: 47 | - backend 48 | kodexplorer: 49 | image: baiyuetribe/kodexplorer 50 | volumes: 51 | - /opt/zfaka:/code 52 | ports: 53 | - 999:80 54 | depends_on: 55 | - nginx 56 | 57 | networks: 58 | frontend: 59 | backend: -------------------------------------------------------------------------------- /zfaka/ss命令.txt: -------------------------------------------------------------------------------- 1 | ss命令 2 | 3 | ss用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效,ss利用到了TCP协议栈中tcp_diag,tcp_diag是一个分析统计模块,直接从linux内核中获取信息 4 | 5 | 参数: 6 | 7 | 复制代码 8 | -h:显示帮助信息; 9 | 10 | -V:显示指令版本信息; 11 | 12 | -n:不解析服务名称,以数字方式显示; 13 | 14 | -a:显示所有的套接字; 15 | 16 | -l:显示处于监听状态的套接字; 17 | 18 | -o:显示计时器信息; 19 | 20 | -m:显示套接字的内存使用情况; 21 | 22 | -p:显示使用套接字的进程信息; 23 | 24 | -i:显示内部的TCP信息; 25 | 26 | -4:只显示ipv4的套接字; 27 | 28 | -6:只显示ipv6的套接字; 29 | 30 | -t:只显示tcp套接字; 31 | 32 | -u:只显示udp套接字; 33 | 34 | -d:只显示DCCP套接字; 35 | 36 | -w:仅显示RAW套接字; 37 | 38 | -x:仅显示UNIX域套接字。 39 | 复制代码 40 | 复制代码 41 | ss -l 显示本地打开的所有端口 42 | ss -pl 显示每个进程具体打开的socket 43 | ss -t -a 显示所有tcp socket 44 | ss -u -a 显示所有的UDP Socekt 45 | ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接 46 | ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接 47 | ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程 48 | ss -s 列出当前socket详细信息: 49 | 复制代码 50 | 复制代码 51 | ss dport OP PORT 52 | OP:是运算符 53 | PORT:表示端口 54 | dport:表示过滤目标端口、相反的有sport 55 | 56 | 57 | OP运算符如下: 58 | <= or le : 小于等于 >= or ge : 大于等于 59 | == or eq : 等于 60 | != or ne : 不等于端口 61 | < or lt : 小于这个端口 > or gt : 大于端口 62 | 63 | 实例: 64 | 65 | ss sport = :http 也可以是 ss sport = :80 66 | ss dport = :http 67 | ss dport \> :1024 68 | ss sport \> :1024 69 | ss sport \< :32000 70 | ss sport eq :22 71 | ss dport != :22 72 | ss state connected sport = :http 73 | ss \( sport = :http or sport = :https \) 74 | ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24 75 | 复制代码 76 | 实例: 77 | 78 | 显示sockte连接: ss -s 79 | 80 | 复制代码 81 | [root@174nhy1 ~]# ss -s 82 | Total: 956 (kernel 1154) 83 | TCP: 18211 (estab 547, closed 17652, orphaned 1, synrecv 0, timewait 17652/0), ports 13506 84 | 85 | Transport Total IP IPv6 86 | * 1154 - - 87 | RAW 0 0 0 88 | UDP 2 2 0 89 | TCP 559 559 0 90 | INET 561 561 0 91 | FRAG 0 0 0 92 | 复制代码 93 | 复制代码 94 | [root@174nhy1 ~]# ss -pl 95 | State Recv-Q Send-Q Local Address:Port Peer Address:Port 96 | LISTEN 0 511 *:http *:* users:(("nginx",3241,459),("nginx",3242,459),("nginx",3243,459),("nginx",3244,459),("nginx",3245,459),("nginx",3246,459),("nginx",3247,459),("nginx",3248,459),("nginx",20849,459)) 97 | LISTEN 0 128 *:ssh *:* users:(("sshd",2481,3)) 98 | LISTEN 0 1024 127.0.0.1:atmtcp *:* users:(("monit",20197,5)) 99 | LISTEN 0 128 *:9090 *:* users:(("odin-agent",7241,7)) 100 | LISTEN 0 128 *:tr-rsrb-p2 *:* users:(("munin-agent",21407,3)) 101 | LISTEN 0 128 127.0.0.1:smux *:* users:(("snmpd",2666,8)) 102 | LISTEN 0 30000 --------------------------------------------------------------------------------