清理过期日志文件

清理过期日志文件的方法

用find+exec

find找出指定时间的文件,配合exec执行删除

1
2
3
# -mtime 指定文件修改时间
# 如清理2天前的
find log_dir -mtime +2 -type f -name "*.log" -exec rm -rf {} \;

用tmpwatch

使用tmpwatch清理目录,文件最后一次被访问的时间,单位是小时;这个命令只适全整个目录下都是日志的情况

1
2
# 如清理2天前的
tmpwatch -mdfv 48 log_dir

如何查询指定时间范围内的日志

搞代码的都离不开通过查看日志处理问题;服务器上记录的日志都比较大,不会把整个日志文件拿来分析,通常会截取时间范围内的日志来分析问题,介绍几种查询时间范围日志方法。

处理文件肯定是离不开linux三剑客grep、sed、awk的。

演示截取2点到9点的日志

测试日志文件test.log,模拟所有2点到11点日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{"timestamp":"2022-09-27T02:12:59+08:00","level":"debug"}
{"timestamp":"2022-09-27T02:14:42+08:00","level":"debug"}
{"timestamp":"2022-09-27T02:41:03+08:00","level":"debug"}
{"timestamp":"2022-09-27T02:45:59+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:35:31+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:35:31+08:00","level":"error"}
{"timestamp":"2022-09-27T04:35:31+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:38:40+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:49:55+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"error"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"error"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:19+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:30:30+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:30:35+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:33:46+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:37:02+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:29:54+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:29:59+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:02+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:03+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:43+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:44+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:45+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:46+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:48+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:56:22+08:00","level":"debug"}
{"timestamp":"2022-09-27T11:09:36+08:00","level":"debug"}
{"timestamp":"2022-09-27T11:09:41+08:00","level":"debug"}

正则方式

grep不支持范围,awk和sed支持范围,三个都支持正则匹配

linux编译安装gcc

下载指定版本http://ftp.gnu.org/gnu/gcc/

1
wget http://ftp.gnu.org/gnu/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz

解压

1
2
tar -xvf gcc-8.1.0.tar.xz
cd gcc-8.1.0

编译

1
2
3
4
5
6
7
8
9
# 安装依赖
./contrib/download_prerequisites
# 编译目录
mkdir build
cd build
# 配置,安装到/usr/local/gcc目录
../configure --prefix=/usr/local/gcc --enable-languages=c,c++ --disable-multilib
# make
make && make install

2cup+8g大概用了4个小时

加软链接

1
2
3
4
5
6
# 如果有老的版本先备份
sudo mv /usr/bin/gcc /usr/bin/gcc_bak
sudo ln -s /usr/local/gcc/gcc /usr/bin/gcc
# 如果有老的版本先备份
sudo mv /usr/bin/g++ /usr/bin/g++_bak
sudo ln -s /usr/local/gcc/g++ /usr/bin/g++

验证是否安装成功

1
gcc --version

linux安装golang

下载golang指定版本https://studygolang.com/dl

1
2
3
4
5
6
# 下载
wget https://studygolang.com/dl/golang/go1.17.7.linux-amd64.tar.gz
# 解压
tar -xvf go1.17.7.linux-amd64.tar.gz
# 统一放/usr/local
sudo mv go/ /usr/local/

设置环境变量

.bashrc文件中添加

1
2
export GOROOT=/usr/local/go
export PATH=$PATH:/usr/local/go/bin

激活环境变量

1
source ~/.bashrc

测试安装结果

1
go env

用户加入sudo列表

新创建的用户,使用sudo切换到root时提示错误

1
xxx is not in the sudoers file.  This incident will be reported.

解决方法:

1
2
3
4
5
6
7
8
9
10
# 切换到`root`下
su
# 授权
chmod u+w /etc/sudoers
# 编辑sudoers文件
vi /etc/sudoers
# 添加
username ALL=(ALL) ALL
# 保存
chmod u-w /etc/sudoers

linux用户管理

创建用户

创建一个用户

1
useradd username

创建用户并创建用户目录

1
useradd -m username

创建用户不创建用户目录

1
useradd -M username

创建用户不用于登录

1
useradd -s /sbin/nologin

创建用户不用于登录和不创建目录

1
useradd -s /sbin/nologin -M username

删除用户

1
userdel username

把用户目录也删掉

1
userdel -r username

设置密码

1
passwd username

用户组

创建组

1
groupadd groupname

删除组

1
groupadd groupname

用户加入组

1
usermod -G groupname username

用户加入组(并从原来组中移出)

1
usermod -g groupname username

用户移出用户组

1
gpasswd -d username groupname

相关查看

所有用户

1
cat /etc/passwd

所有用户组

1
cat /etc/group

ssh长时间保持不断开

远程ssh连接服务器,默认长时间不用会自动断开,设置不自动断开方式有三种

客户端连接加参数

1
2
# 相当于每隔120秒向服务器发送心跳
ssh -o ServerAliveInterval=120 user@ip

客户端设置配置

如果ssh服务器信息放~/.ssh/config中的,设置ServerAliveInterval

1
2
3
4
Host alias 
HostName ip
User root
ServerAliveInterval 120

服务器配置

修改sshd_config

1
2
3
4
5
6
7
vi vim /etc/ssh/sshd_config

## 发送心跳间隔
ClientAliveInterval 120
## 最大发送次数
ClientAliveCountMax 720

nodejs安装

各个linux系统的包管理都可安装nodejs,但安装的版本往往不是自己想要的版本,最好是手动安装

下载

nodejs中文网找到自己想要的版本

1
2
wget https://npmmirror.com/mirrors/node/v16.13.1/node-v16.13.1-linux-x64.tar.xz

解压

1
tar -xvf node-v16.13.1-linux-x64.tar.xz

移动到指定位置

1
sudo mv node-v16.13.1-linux-x64 /usr/local/node

链接

1
2
3
sudo ln -s /usr/local/node/bin/node /usr/bin/node
sudo ln -s /usr/local/node/bin/npm /usr/bin/npm
sudo ln -s /usr/local/node/bin/npx /usr/bin/npx

添加到path

在.profile或者.bashrc中添加

1
PATH=$PATH:/usr/local/node/bin

添加镜像源

1
npm config set registry "https://registry.npm.taobao.org"

在shell中执行一个字符串

写shell脚本时经常会拼接一个字串,然后当成命令执行,用到的linux命令是eval ${str}或者echo ${str} | sh,例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env bash

start=1
amount=$1
raceId=$2
api_host=127.0.0.1:8080
str="curl --location --request POST 'http://${api_host}/api/AddBuy'
--header \"'Content-Type':'application/json'\"
--data-raw '{
\"PidStart\":$start,
\"Amount\":${amount},
\"RaceId\":${raceId}
}'"

echo ${str} | sh
# 或者
eval ${str}