分类
Linux 使用笔记

zsh: corrupt history file /root/.zsh_history

cd ~
mv .zsh_history .zsh_history_bad
strings -eS .zsh_history_bad > .zsh_history
fc -R .zsh_history
分类
Linux

linux 查找指定大小文件和大目录

查找>4G文件

find . -type f -size +4G

查找<4G文件

find . -type f -size -4G

查找大于40M小于30M的文件

find -size +30M -size -40M

配合 -exec 输出更多信息

find . -type f -size +4G -exec ls -lh {} +

查找大目录

du -Sh | sort -rh | head -5

不包括子目录

du -hs * | sort -rh | head -5
分类
Ubuntu 使用笔记

ubuntu正确卸载nginx

apt-get remove --purge nginx nginx-full nginx-common

分类
Ubuntu WordPress建站笔记 使用笔记

Ubuntu WordPress 开启redis 缓存

安装redis

apt-get update
apt-get install redis redis-server php-redis

编辑 /etc/redis/redis.conf 文件,添加

maxmemory 256mb
maxmemory-policy allkeys-lfu

重启服务

systemctl restart redis-server
systemctl restart php7.4-fpm
systemctl restart apache2

编辑wp-config.php文件添加

define( 'WP_CACHE_KEY_SALT', 'zuoridangnian.com' );
define( 'WP_CACHE', true );

安装Redis Object Cache 插件,点击开启缓存即可

下面查看一下效果

WP有个 Query Monitor 插件,可以查看一个页面的查询次数

未开启Redis Object Cache时,我的后台页面和首页查询次数是这样的

分别是68个查询和56个查询

开启后减少为32和25,大约节约一半的查询次数

分类
Linux 使用笔记

腾讯云轻量服务器定时创建快照

把下面的实例ID和secretId、secretKey替换就行了,这里是查询快照然后删除快照并新建一个快照。

由于腾讯云一个轻量只能有两个快照,我这里直接删除第二个快照,所以设置定时任务时,设置多久创建一次新快照都行。

// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");

const LighthouseClient = tencentcloud.lighthouse.v20200324.Client;

const clientConfig = {
  credential: {
    secretId: "更改为账号secretId",
    secretKey: "更改为账号secretKey",
  },
  region: "ap-guangzhou",
  profile: {
    httpProfile: {
      endpoint: "lighthouse.tencentcloudapi.com",
    },
  },
};

const client = new LighthouseClient(clientConfig);

const chakan = {
  "Filters": [
    {
      "Name": "instance-id",
      "Values": [
        "更改为实例id"
      ]
    }
  ]
};

client.DescribeSnapshots(chakan).then(

  (data) => {

    shanchu_id = data.SnapshotSet[1].SnapshotId //数组的第二个

    const shanchu = {
      "SnapshotIds": [
        shanchu_id
      ]
    };

    client.DeleteSnapshots(shanchu).then(
      (data) => {

        console.log('删除一个旧快照成功');
        console.log(data);

        // 创建快照

        const chuangjian = {
          "InstanceId": "更改为实例id"
        };
        client.CreateInstanceSnapshot(chuangjian).then(
          (data) => {
            console.log('创建一个新快照成功');
            console.log(data);
          },
          (err) => {
            console.error("error", err);
          }
        );

      },
      (err) => {

        console.log('删除一个旧快照失败~~~~必须已有两个快照,才能删除第二个快照并创建新快照');
        console.error("error", err);
      }
    );

  },
  (err) => {

    console.log('查询旧快照失败');
    console.error("error", err);
  }
);

这里是查询一个轻量的流量使用情况,然后发邮件通知我。这里除了实例id和密钥要替换外,还要设置smtp信息。

// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");

const LighthouseClient = tencentcloud.lighthouse.v20200324.Client;

const nodemailer = require('nodemailer'); //发送邮件的


function bytesToSize(bytes) {
  var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  if (bytes == 0) return '0 Byte';
  var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}

function sendEmail(data) {
  let transporter = nodemailer.createTransport({
    service: 'QQex', // 发送者的邮箱厂商,支持列表:https://nodemailer.com/smtp/well-known/ 如果是qq邮箱,就填QQ, QQex是腾讯企业邮
    port: 465, // SMTP 端口
    secureConnection: true, // SSL安全链接
    auth: {   //发送者的账户密码
      user: '账户', //账户
      pass: 'smtp授权码,到邮箱设置下获取', //smtp授权码,到邮箱设置下获取
    }
  });
  let mailOptions = {
    from: '"腾讯云轻量流量通知" <i@zuoridangnian.com>', // 发送者昵称和地址
    to: data.email, // 接收者的邮箱地址
    subject: data.subject, // 邮件主题
    html: data.content
  };
  //发送邮件
  transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
      return console.log(error);
    }
    console.log('邮件发送成功 ID:', info.messageId);
  });
}

const clientConfig = {
  credential: {
    secretId: "更改为账号secretId",
    secretKey: "更改为账号secretKey",
  },
  region: "ap-guangzhou",
  profile: {
    httpProfile: {
      endpoint: "lighthouse.tencentcloudapi.com",
    },
  },
};

const client = new LighthouseClient(clientConfig);
const params = {
  "InstanceIds": [
    "更改为实例id"
  ]
};

let Traffic

client.DescribeInstancesTrafficPackages(params).then(
  (data) => {
    Traffic = `使用了${bytesToSize(data.InstanceTrafficPackageSet[0].TrafficPackageSet[0].TrafficUsed)},总共有1000GB。`

    let mail = {
      email: '收件邮箱@qq.com', //收件邮箱
      content: `腾讯云轻量应用服务器 流量使用情况:${Traffic}`,
      subject: Traffic
    }

    sendEmail(mail)

  },
  (err) => {
    console.error("error", err);
  }
)

分类
Linux

Crontab 定时脚本中出现 command not found

原因是cron中仅传递少部分环境变量,如下

LANGUAGE=en_US.utf8:
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.utf8
SHELL=/bin/sh
PWD=/root

而我想使用的命令文件在 /usr/local/bin/ 目录中,不在默认的环境变量中

解决办法是在定时脚本中加入PATH变量

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"
# 脚本内容

如果定时任务不是脚本文件,而是命令的话,可以用绝对路径的去执行命令,例如 /snap/bin/certbot … 这样子。

分类
Linux 使用笔记

Apache 域名跳转到目录

RewriteEngine On
RewriteCond %{SERVER_NAME} =photo.zuoridangnian.com
RewriteRule ^ https://zuoridangnian.com/photo-gallery%{REQUEST_URI} [END,NE,R=permanent]
分类
Ubuntu WordPress建站笔记 技术相关

Ubuntu 20.04 apache开启http2

apt update && apt upgrade
apt install apache2 php7.4-fpm 
a2enmod proxy_fcgi setenvif
a2enconf php7.4-fpm 
a2dismod php7.4 
systemctl restart apache2
a2dismod mpm_prefork 
a2enmod mpm_event 
systemctl restart apache2
systemctl restart php7.4-fpm
a2enmod http2
systemctl restart apache2
分类
Arch Linux 技术小贴士

oh my zsh 常用插件的常用命令

Ubuntu:

agi: 安装包

agp: 删除包和配置文件

agu: 更新本地包索引文件

agug: 更新所有包

git:

gaa	
#git add --all 添加所有修改到暂存区

gcam
# git commit -a -m 添加注释 比如 gcam "update"

gp
# git push 提交

systemd:

  • sc-start (即 sudo systemctl start 下同)
  • sc-stop
  • sc-reload
  • sc-restart
  • sc-status

arch linux:

  • pacin (sudo pacman -S)安装软件包
  • pacreps (pacman -Ss) 搜索软件包
  • pacre (sudo pacman -R) 删除软件包
  • pacrem (sudo pacman -Rns) 删除软件包包括依赖和配置文件
  • pacupg (sudo pacman -Syu)更新所有软件包

dnf:

  • dnfi 安装包
  • dnfgi 安装组包
  • dnfr 删除包
  • dnfu 更新包
  • dnfs 搜索包
分类
Arch Linux WordPress建站笔记

Arch Linux服务器配置php-fpm并开启http/2

我之前是用libphp的方式安装的php,就是安装 php7-apache 这个包,但是这种方法不支持http/2,所以我换成了 php-fpm

具体的配置方法看arch wiki就可以了

Apache HTTP Server – ArchWiki (archlinux.org)

但我按wiki的方法配置好后,打开什么页面都是503

原因是我使用的是php7,安装的包也是 php7-fpm,arch linux最新的版本是php8了,所以配置默认是php8的,需要修改一下 SetHandler 

DirectoryIndex index.php index.html
<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php-fpm7/php-fpm.sock|fcgi://localhost/"
</FilesMatch>

然后重启一下 httpd 服务就行了

开启http/2也很简单 Apache HTTP Server – ArchWiki (archlinux.org)

取消注释

LoadModule http2_module modules/mod_http2.so

加入以下行就行了

Protocols h2 http/1.1

可以在以下网址测试网站是否开启http/2