服务器运维之Linux

标签: 无 分类: 未分类 创建时间:2019-05-19 04:47:40 更新时间:2024-11-24 10:04:01

1.磁盘消失的容量

linux中通过df -h 可以查看磁盘的使用量和剩余量

仔细观察发现,使用量和剩余量并不能等于磁盘的总容量,这是什么原因呢?原来ext系统,包括ext2、3、4系统,会有磁盘5%的空间留给root用户,如果一个磁盘有1000G,百分之五的空间,也是很可观的,所以对于一个纯数据盘,完全没有必要留这么多,通过命令 tune2fs 去除保留空间,

1
2
## sda6为想要去除保留空间的磁盘的挂载磁盘
tune2fs -m 0 /dev/sda6

结果如图:

2.创建用户

1
2
3
4
5
6
7
8
# 创建账号
useradd 选项 用户名
# 例子,创建用户,并增加用户目录
useradd -d /home/hj -m hj
# 删除账号,userdel 选项 用户名,删除用户及其家目录
userdel -r 用户名
# 修改用户密码
passwd 选项 用户名

3.切换用户

1
2
# 临时切换root用户,输入当前用户的密码
sudo su - root
参考文章:
1.Linux切换到root用户 sudo su - root
2.linux中如何将身份临时转换为root
3.Linux下临时切换用户 su - root 输入root密码后切换之root用户但是pwd目录/root;su root 输入root密码后切换之root用户但是pwd目录不变

4.磁盘管理

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
32
33
34
35
## 显示目前在Linux系统上的文件系统的磁盘使用情况统计
df -h
## 查看所有磁盘的文件系统类型(type)
df -T

## 列出块设备信息(df -h不能看到的卷),显示文件系统
lsblk -f

## 查看全部磁盘
fdisk -l

## 设置文件系统
mkfs.ext4 /dev/vdb

#挂载命令 将磁盘vdb1 挂载到 /home/hj 目录下
mount /dev/vdb1 /home/hj

## 卸载
umount /home/hj

## 编辑 /etc/fstab 文件,永久挂载分区:设备 挂载点 文件系统类型 挂载参数 是否备份 是否检测
vi /etc/fstab

## 检查是否挂载成功
mount -a

## 永久挂载
# fdiks -l 命令查询到你要挂载的硬盘盘符,比如:/dev/sdb
# blkid /dev/sdb 命令查询你要挂载的硬盘的UUID
# 将UUID写入配置文件 /etc/fstab
UID=afab653d-7620-49df-ba66-f956c372ef93 /home/mkky/data4 ext4 defaults 0 0
# 第一列是 UUID 第二列是挂载的目录 第三列是文件系统 第四列是参数 第五列0表示不备份 第六列必须为0或者2 引导区为1

## 查看硬盘是否正确挂载
df -h
参考文章:
1.linux查看系统未被挂载的磁盘空间的方法 1.查看linux下的硬盘挂载的空间、使用空间:df -h。2.查看没有挂载的硬盘是否检测在系统中:lsblk。3.挂载 (挂载完,要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了)
2.Linux查看文件系统、磁盘、目录的容量(df、du命令)
3.如何给Linux硬盘分区? 硬盘分区,格式化Linux硬盘分区,临时挂载分区,永久挂载分区
4.Linux下/etc/fstab永久挂载
5.linux lost+found文件是什么文件夹? 这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将一些遗失的片段放置到这个目录下。
6.本文目的: 熟悉Linux的基本磁盘分区、格式化、目录挂载。
7.Ubuntu永久挂载硬盘

5.7za压缩和解压

最常见的指令是a, l和x.

1
2
3
4
5
6
## 压缩,限制每个包的大小
7z a name.7z filename -v2048m
## 解压,使用参数e有可能丢失目录结构
7z e xxx.7z.001
# 解压缩
7z x xxx.7z.001

command操作命令:

  • a 添加到压缩文件
  • b 基准测试,测试7z当前性能
  • d 从压缩文件中删除
  • e 从压缩文件中解压缩,但不包含目录结构(即所有各级文件都解压到一个目录里)
  • l 列出压缩文件的内容
  • t 测试压缩文件
  • u 更新文件到压缩文件
  • x 从压缩文件中解压缩,包含目录结构

现在有一个需求,就是一系列的文件分开压缩之后,使用一个 e 命令解压之后,因为文件很大,导致整个的磁盘都占满了。

6.ping

1
ping -S 192.168.254.200 172.18.85.133

7.生成ssl证书

1
openssl req -utf8 -days 1095  -new -nodes -sha256 -newkey rsa:2048 -keyout ~/.ssh/id_rsa.pub -out rsa.csr 
参考文章:
1.如何制作CSR文件
2.在Windows平台下自己生成crt证书
3.https的页面内嵌入http页面报错的问题
4.使用 OpenSSL 生成 CSR 文件以申请 SSL 证书 会创建一个 RSA 的 2048 位私钥并在当前目录保存为 server.key 并生成一个域名为 yoursite.com 的 CSR 并保存为 server.csr.一般这样生成的 CSR 即可用于申请大多数 CA 的数字证书。

8.mv文件后磁盘空间未释放

我通过mv命令进行移动的时候,发现磁盘没有足够的空间移动了,但是我通过 df 和 du 命令得出的结果好像不一致。

1
2
3
4
5
## 查看磁盘空间
df -h

## 对/目录进行磁盘占用量进行排序
du -sh /* | sort -nr

【解决方法】
很多的文章都是说查询 deleted 的命令,看看有没有占用文件,没有删除的,但是对于我的情况,我并没有从删除的文件中取到这个东西,而且本身我没有删除,我只是移动了文件。

后来我重启电脑之后,还是没有释放掉文件。我把移动后的文件,包括cp后的文件,全部删除,这样这个问题就解决了。

参考文章:
1.mv移动文件后磁盘未释放
2.linux 删除文件后磁盘空间不释放的原因
3.mv移动文件后磁盘未释放 也是通过 杀死deleted进程解决
4.Linux 磁盘已满但找不到对应的大文件的问题
5.linux删除文件未释放空间问题处理 1.先df -lh查看一下磁盘使用状况;2.找到被删除文件所在的分区,eg.opt分区;3.查看被删除了的所有文件:lsof -n /opt |grep deleted;4.kill 进程
6.Linux磁盘空间被未知资源耗尽 lsof -n | grep deleted
7.Linux 磁盘空间被吃掉了?这样排查不背锅! 1.使用 lsof +L1 命令。2.我们可以通过tune2fs修改预留空间的比例:tune2fs -m 1 /dev/vda1
8.du 与df 统计系统磁盘不一致原因与解决方法 常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。
9.Linux清理临时文件

9.定时任务

我这里的需求就是 从晚上18点到早上 8点,每隔5分钟执行一次程序。经过多次尝试,用了很多的方法,还看了很多的资料,最后还是写出来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 打开定时任务配置文件
crontab -e
# 在配置文件中写入定时任务的操作, 这里就是指定每天18点定时执行开启脚本, 18点-早上8点,每隔五分钟执行一次
# 因为边界值是包含的,所以 0-7,其实是包含了 7点59分的,又因为前面的值要小于后面的值,所以要是快0点的时候,需要改成两个
*/5 8-23 * * * /bin/bash /usr/local/rclone/start.sh > /usr/local/rclone/logs/crontab.log 2>&1 &
*/5 0-7 * * * /bin/bash /usr/local/rclone/start.sh > /usr/local/rclone/logs/crontab.log 2>&1 &

# 指定每天8点定时执行关闭脚本
0 8 * * * /bin/bash /usr/local/rclone/stop.sh

# 八点半到10点半,每隔五分钟,这种写法不正确
*/5 8:30-10:30 * * *

还有一个问题,那就是如果是 8点30分到第二天8点30分,每隔5分钟执行一次该如何写呢?或者说是8点30分,到8点40分,每隔5分钟执行一次。

参考文章:
【1】.Quartz 定时任务设置某个时间区间每隔一定时间触发的cron表达式
【2】.crontab 8点半到10点半,每隔5分钟执行一次,怎么写 */5 8:30-10:30 * * * 这种写法也是错误的
【3】.crontab 上午8点到晚上12点怎么写?
【4】.在线crontab晚上11点到早上8点之间每两个小时和早上八点解析验证 这个有很多的都是错误的,比如写了 23-7 这种形式
【5】.Cron 作业格式和时区 如需匹配一系列值,请指定起始值和停止值,并用连字符 (-) 分隔。请勿在范围中包含空格。范围包含边界值。第一个数字必须小于第二个数字。
【6】.linux crontab 24点,linux crontab实现自动化任务
【7】.crontab 脚本错误日志和正确的输出写入到文件
【8】.定时任务执行shell脚本中 grep -v grep 中的坑
【10】.crontab定时任务执行未成功,手动执行却可以的问题解决
【11】.Crontab 实例 因为各种时间点坐标的进位周期各不相同(60分、24小时、30天、12月),所以一些只关注周期而忽略时间点坐标的需求,仅靠原生的 cron 语法就不能达到目的了。这时候,需要 test 命令配合完成.

10.利用率

在电信信创云上申请了一台服务器,结果利用率总是上不去,然后数据局就开始通报了,现在为了保住这个东西,只能是先把这个利用率用上去了,只能想办法了。最后我选择了阿里开源的 chaosblade 工具。

(1) 安装
下载相应的安装包,直接复制到服务器上,然后进入相应的目录即可。

(2) 使用
常用命令如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 填充home目录80%的使用空间
./blade create disk fill --path /home/hj/test --percent 80 --retain-handle
# cpu 负载到80%
./blade create cpu load --cpu-percent 80
# 占用80%的ram内存
./blade create mem load --mode ram --mem-percent 80

# 执行成功,会返回一个id,如需撤销故障注入,执行如下命令
./blade d {id}

# 查询曾经注入的故障id,便于删除
./blade s --type c

# 查看cpu使用率,%us:表示用户空间程序的cpu使用率;%sy:表示系统空间的cpu使用率,主要是内核程序;%ni:表示用户空间且通过nice调度过的程序的cpu使用率;%id:空闲cpu;%wa:cpu运行时在等待io的时间;%hi:cpu处理硬中断的数量。%si:cpu处理软中断的数量;%st:被虚拟机偷走的cpu
top -bn 1 -i -c

# 查看内存使用率
free -h

# 查看磁盘利用率
df -h
参考文章:
【1】.Linux-提高CPU、内存使用率shell脚本 介绍了阿里的一个工具 chaosblade,这里的cpu、磁盘还有内存使用方法都有示例。
【2】.Linux提高CPU、内存的使用率 cpumit
【3】.ChaosBlade 工具使用快速入门
【4】.Linux系统查看CPU使用率的几个命令 1.top,在第三行有显示CPU当前的使用情况:top -bn 1 -i -c;2.vmstat,每1秒收集一次,共5次:vmstat 1 5;3.sar,每1秒收集一次,共5次:sar -u 1 5;4.mpstat,每1秒收集一次,共5次:mpstat 1 5;5.iostat,这个命令主要用来查看io使用情况,也可以来查看cpu:iostat -c 1 2;6.dstat,每秒cpu使用率情况获取;7.
【5】.Linux 下查看内存使用情况方法总结 1./proc/meminfo;2.atop;3.free 命令;4.GNOME System Monitor;

11.kdevtmpfsi

我在一次使用 top 命令查看,发现有一个进程一直在占用 cpu 和 内存,是 kdevtmpfsi。后来看了下,这个竟然是一个挖矿病毒。

【尝试方案】

  • 清除 Redis
    (1) crontab -l 命令先看看 crontab 的定时任务列表
    (2) ps -ef|grep kdevtmpfsi 命令查看 kdevtmpfsi 的进程,并且使用 kill -9 PID 杀死kdevtmpfsi 对应的进程
    (3) ps -ef|grep kinsing 命令查看kdevtmpfsi程序的守护进程kinsing ,并且使用 kill -9 PID 杀死对应的进程
    (4) find / -iname kdevtmpfsi 命令再次确定kdevtmpfsi文件所在位置以便删除,使用 rm -rf 所在位置 删除 kdevtmpfsi 程序
    (5) find / -iname kinsing 命令再次确定 kinsing 文件所在位置以便删除,使用 rm -rf 所在位置 删除 kdevtmpfsi 程序
    (6) cat ~/.ssh/authorized_keys 查看是否有陌生的的公钥,有则删除掉,
    (7) cd 命令切换到自己 Redis 的安装目录下,然后删除该目录下的 red2.so 文件以及以 kinsing 开头的所有文件。
  • 清除 Docker
    (1) 查询病毒所在的容器并进入
    (2) 查询病毒的进程和文件路径
    (3) 查询定时任务并清除
    (4) 禁止下载病毒的IP
    (5) 重启容器

  • 防护措施
    (1) 把异常的IP地址,入站及出站全部封禁
    (2) 不定期更新 Redis 服务密码,禁止使用默认端口,非必要不暴露在公网或绑定指定IP
    (3) 启用ssh公钥登陆,禁用密码登陆。
    (4) 完善安全策略,入口流量,非必要一般只开放 80 443 端口就行,出口流量默认可以不限制,如果有需要根据需求来限制。
    (5) 防火墙能用的尽量用起来,有条件可以上付费的。

【解决方案】
最后的解决方案,
(1) 直接把 Docker PHP 镜像删除,然后重启镜像。
(2) 关闭 9000 默认端口。

参考文章:
【1】.清除Docker中的kdevtmpfsi挖矿病毒 这里是Docker中的方法
【2】.kdevtmpfsi 处理(挖矿病毒清除) kdevtmpfsi 是一个挖矿病毒,大多数都是 redis 程序侵入,而且受害者还不少。
【3】.记一次 Docker 容器内 PHP 感染 kdevtmpfsi 挖矿病毒 这是PHP的docker的病毒,乍一看似乎毫无问题,但是9000:9000和没有任何防备的防火墙形成了非常致命的漏洞,攻击者虽然无法获取到宿主机的权限,但是依然可以利用容器来挖矿,耗尽你的系统资源;而且万一之后 Docker 爆出容器逃逸漏洞,宿主机也危在旦夕。
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。