首页
工具
心境语句
相册
建站轨迹
关于
Search
1
微信小程序:计算属性的两种体现方式及应用场景
1,621 阅读
2
Antd Upload 组件上传文件接收数据流并下载
1,112 阅读
3
[C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行
590 阅读
4
C#插件火车头采集器动态切换代理IP,及自动切换UserAgent
583 阅读
5
ADODB.Connection 错误 800a0e7a 未找到提供程序。该程序可能未正确安装解决方法
529 阅读
react
typecho
ASP
Centos
MYSQL
PHP
Sql server
Javascript
nodejs
数据采集
.NET
git
编程算法
管理及流程
Vue
微信小程序
android
python
mongodb
登录
Search
标签搜索
kotlin
node-sass
nuxtjs
C#火车头插件
火车头采集器
火车头代理
C#反编译
程序逆向
dnSpy教程
Antd
InputNumber
NPM教程
NPM命令
rrweb教程
git慢
git镜像
vim命令
git命令
网页音乐插件
网页播放器
Elysian
累计撰写
74
篇文章
累计收到
0
条评论
首页
栏目
react
typecho
ASP
Centos
MYSQL
PHP
Sql server
Javascript
nodejs
数据采集
.NET
git
编程算法
管理及流程
Vue
微信小程序
android
python
mongodb
页面
工具
心境语句
相册
建站轨迹
关于
搜索到
74
篇与
Elysian
的结果
2021-12-20
自动创建sftp站点账号shell
#!/bin/bash #站点目录,用户名根据站点目录生成,多个站点用空格隔开 #例web="test1 test2",生成的用户为sftp_test1 sftp_test2 web="chinaoa sgj" user_dir="/home/public_html/" ssh_dir="/etc/ssh/sshd_config" #配置权限,属主必须为root,权限必须为755,facl也不行 chown root.root ${user_dir} chmod 755 ${user_dir} #设置sebool值 if [[ `getenforce` == "Enforcing" ]];then setsebool ssh_chroot_full_access 1 fi #配置ssh,开启internal-sftp if [[ `grep -w internal-sftp ${ssh_dir} | wc -l` -eq 0 ]];then sed -i "s/Subsystem/#Subsystem/g" ${ssh_dir} echo "Subsystem sftp internal-sftp" >>${ssh_dir} fi for user in ${web};do if [[ `grep -w "Match user sftp_${user}" ${ssh_dir} | wc -l` -eq 0 ]];then #!/bin/bash #站点目录,用户名根据站点目录生成,多个站点用空格隔开 #例web="test1 test2",生成的用户为sftp_test1 sftp_test2 web="chinaoa sgj" user_dir="/home/public_html/" ssh_dir="/etc/ssh/sshd_config" #配置权限,属主必须为root,权限必须为755,facl也不行 chown root.root ${user_dir} chmod 755 ${user_dir} #设置sebool值 if [[ `getenforce` == "Enforcing" ]];then setsebool ssh_chroot_full_access 1 fi #配置ssh,开启internal-sftp if [[ `grep -w internal-sftp ${ssh_dir} | wc -l` -eq 0 ]];then sed -i "s/Subsystem/#Subsystem/g" ${ssh_dir} echo "Subsystem sftp internal-sftp" >>${ssh_dir} fi for user in ${web};do if [[ `grep -w "Match user sftp_${user}" ${ssh_dir} | wc -l` -eq 0 ]];then Match user sftp_${user} ChrootDirectory ${user_dir} X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ### END ### EOF fi #添加用户 if [[ `grep -w "sftp_${user}" /etc/passwd | wc -l` -eq 0 ]];then useradd -M -s /bin/false sftp_${user} read -s -t 30 -p "请在30S内输入站点${i}用户密码: " password echo "${password}" |passwd --stdin sftp_${user} echo "用户生成完毕,用户名为: sftp_${user}" else echo "用户sftp_${user}已存在,请检查" fi #赋权对应目录给用户 setfacl -R -d -m u:sftp_${user}:rwx ${user_dir}${user} setfacl -R -m u:sftp_${user}:rwx ${user_dir}${user} #去掉不该有的目录权限,增加安全 cd ${user_dir} setfacl -R -d -m u:sftp_${user}:--- `ls ${user_dir} | grep -v "${user}"` setfacl -R -m u:sftp_${user}:--- `ls ${user_dir} | grep -v "${user}"` done #重启ssh服务 service sshd restart #人性化输出 echo "请使用sftp进行连接,端口号:`netstat -anltp | grep LISTEN | grep sshd | grep "0.0.0.0" | awk '{print $4}' | awk -F: '{print $2}'`"
2021年12月20日
59 阅读
0 评论
0 点赞
2021-12-20
CentOS文件权限查看和修改
文件权限查看查看目录的文件,输入命令:ls查看 token.txt 文件的权限,输入命令:ls -l token.txt那么就会出现相类似的信息-rw-r--r-- 1 root root 48 Jan 8 20:14 token.txt最开始的10位数 -rw-rw-r-- 最前面那个 - 代表的是类型第一个 rw- 代表的是所有者(user)第二个 rw- 代表的是组群(group)第三个 r-- 代表的是其他人(other) 其中: r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话) - 表示相应的权限还没有被授予通过上面的解释,就可以看出 token.txt 文件的权限是:当前用户本身:可读可写,没有可执行权限当前用户组群:可读不可写,没有可执行权限其他用户:可读不可写,没有可执行权限rwx 也可以用数字来代替r ------------4 w ------------2 x ------------1 - ------------0所以我们总结出权限对应的数字-rw------- (600) 只有所有者才有读和写的权限 -rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限 -rwx------ (700) 只有所有者才有读,写,执行的权限 -rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限 -rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限 -rw-rw-rw- (666) 每个人都有读写的权限 -rwxrwxrwx (777) 每个人都有读写和执行的权限修改文件权限现在我们把 token.txt 文件修改为 所有用户可读可写可执行 , 也就是对应编号为 777chmod 777 token.txt效果如下:转至:http://blog.csdn.net/zhaoyanjun6/article/details/79067442
2021年12月20日
70 阅读
0 评论
0 点赞
2021-11-27
反编译微信小程序和解分包操作方法
下载文件: wxappUnpacker-master输入: node wuWxapkg.js _1514036652_28.wxapkg 解包,其中_1514036652_28.wxapkg是包名.如提示:检测到此包是分包后的子包, 请通过 -s 参数指定存放路径后重试,就看其他包里文件大小最大的拿来先解,文件大的一般是主包下面进入解分包,命令: node wuWxapkg.js _19871000_28.wxapkg -s=../_1514036652_28就这样把所有的分包一个一个的解包,解分包无先后顺序之分,全部解包完成后,把分包里的内容按照目录文件结构手动复制到主包里覆盖,解包就完成了.wxapkg文件位置,用模拟器,开root模式,使用微信打开小程序后,在“根目录datadatacom.tencent.mmMicroMsg一堆很长的文件夹appbrandpkg”PS:其中一个大于14M左右的可以不用管,是固定生产文件
2021年11月27日
299 阅读
0 评论
0 点赞
2021-11-25
unlock-music工具介绍
Unlock Music 音乐解锁在浏览器中解锁加密的音乐文件。 Unlock encrypted music file in the browser.unlock-music项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循LicenseUnlock Music的CLI版本正在开发中。我们新建了Telegram群组,欢迎加入!https://t.me/unlock_music_chatCLI版本 Alpha 大批量转换建议使用CLI版本相关的其他项目特性支持的格式[x] QQ音乐 (.qmc0/.qmc2/.qmc3/.qmcflac/.qmcogg/.tkm)[x] 写入封面图片[x] Moo音乐格式 (.bkcmp3/.bkcflac)[x] QQ音乐Tm格式 (.tm0/.tm2/.tm3/.tm6)[x] QQ音乐新格式 (实验性支持)[x] .mflac[x] .mgg[x] 虾米音乐格式 (.xm) (测试阶段)[x] 酷我音乐格式 (.kwm) (测试阶段)[x] 酷狗音乐格式 (.kgm) (CLI版本)其他特性[x] 在浏览器中解锁[x] 拖放文件[x] 在线播放[x] 批量解锁[x] 渐进式Web应用[x] 多线程使用已构建版本从GitHub Release下载已构建的版本本地使用请下载legacy版本(modern版本只能通过http/https协议访问)解压缩后即可部署或本地使用(请勿直接运行源代码)使用Docker镜像docker run --name unlock-music -d -p 8080:80 ix64/unlock-music自行构建环境要求nodejsnpm获取项目源代码后执行 npm install 安装相关依赖执行 npm run build 即可进行构建,构建输出为 dist 目录npm run serve 可用于开发如需构建浏览器扩展,build完成后还需要执行npm run make-extensionQQ音乐绿色版 QQ音乐1733 unlock-music
2021年11月25日
396 阅读
0 评论
0 点赞
2021-11-17
PHP高效批量字符串替换类
以前是在.net里面写的高效替换字符串的类后因PHP要使用类似功能,所以重写了一个PHP版本,但是PHP没有类似字典的高效数据存储方式,所以性能还能优化暂贴着备忘原理是使用了树数据结构 #region 高效字符串替换类 class TrieNode { public $m_end; public $m_values; public function __construct() { $this->m_end = false; $this->m_values = []; } public function TryGetValue($key, &$node) { if (array_key_exists($key, $this->m_values)) { $node = $this->m_values[$key]; return true; } $node = new TrieNode(); return false; } } class TrieFilter extends TrieNode { private $ignorecase = false; public function __construct($keys, $isgore = false) { parent::__construct(); $this->ignorecase = $isgore; $this->AddKey($keys); } private function AddKey($keys) { foreach ($keys as $j => $key) { if (empty($key)) { return; } $node = $this; $key = strsplit($key); foreach ($key as $i => $v) { $c = $this->GetChar($v); if (!$node->TryGetValue($c, $subnode)) { $subnode = new TrieNode(); $node->m_values[$c] = $subnode; } $node = $subnode; } $node->m_end = true; } } private function GetChar($car) { if ($this->ignorecase) { return strtolower($car); } return $car; } public function Replace($text, $d, $onlyone = true, $excludehtml = true) { $ori = $text; $onlysize = 0; $length = mb_strlen($text); $textArr = strsplit($text); foreach ($textArr as $i => $v) { $node = null; if ($this->TryGetValue($this->GetChar($v), $node)) { for ($j = $i + 1; $j < $length; $j++) { if ($node->TryGetValue($this->GetChar($textArr[$j]), $node)) { if ($node->m_end) { if (count($node->m_values) > 0 && $length > $j + 1 && array_key_exists($this->GetChar($textArr[$j + 1]), $node->m_values)) { if ($j + 1 >= $length) { return $ori; } continue; } $isin = $excludehtml; if ($excludehtml) { $start = mb_substr($text, 0, $i); if (StringCount($start, "<a") == StringCount($start, "</a>") && StringCount($start, "<") == StringCount($start, ">")) { $isin = false; } } if (!$isin) { if (!empty($d[mb_substr($text, $i, $j + 1 - $i)])) { $mvalue = $d[mb_substr($text, $i, $j + 1 - $i)]; $key = mb_substr($text, $i, $j + 1 - $i); $ori = mb_substr($ori, 0, $i + $onlysize) . $mvalue . mb_substr($ori, $j + 1 + $onlysize); $onlysize += mb_strlen($mvalue) - mb_strlen($key); if ($onlyone) { $d[mb_substr($text, $i, $j + 1 - $i)] = ""; } } } $i = $j; } if ($j + 1 >= $length) { return $ori; } } else { if ($j + 1 >= $length) { return $ori; } break; } } } } return $ori; } } function StringCount($value, $find) { $value = strtolower($value); $find = strtolower($find); $count = 0; //计数器 $vlen = mb_strlen($value); $flen = mb_strlen($find); for ($i = 0; $i <= $vlen - $flen; $i++) { if (mb_substr($value, $i, $flen) == $find) { $count++; } } return $count; } function strsplit($str) { return preg_split('/(?<!^)(?!$)/u', $str); } function tmsectime() { list($msec, $sec) = explode(' ', microtime()); $msectime = (float) sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); return $msectime; } /** * 高效批量字符串替换 * @param string $text 字符串内容 * @param array $d 替换字典,数组结构,李['张三' => '李四', '王五' => '傻六'];意思就是把张三替换成李四,王五替换成傻六 * @param bool $onlyone 是否每个词只替换一次 * @param bool $excludehtml 是否排除a标签内的内容,例如<a title="张三哈哈哈">王五哈哈哈</a>,这种,就只会替换王五,这个参数主要是替换带连接内容使用 * @return string */ function replace_batch($text, $d, $onlyone = true, $excludehtml = true) { $cacheoption = [ 'type' => 'File', 'path' => CACHE_PATH, 'prefix' => '', 'expire' => 0 ]; // $min = tmsectime(); $tf = cache("tf_TrieFilter", '', $cacheoption); if (!$tf) { $tf = new TrieFilter(array_keys($d)); cache("tf_TrieFilter", $tf, $cacheoption); } // $max = tmsectime(); // var_dump($max - $min); $s = $tf->Replace($text, $d, $onlyone, $excludehtml); // var_dump(tmsectime() - $max); // exit(); return $s; } #endregion
2021年11月17日
156 阅读
0 评论
0 点赞
1
...
6
7
8
...
15