服务器运维之Linux
1.磁盘消失的容量
linux中通过df -h 可以查看磁盘的使用量和剩余量
仔细观察发现,使用量和剩余量并不能等于磁盘的总容量,这是什么原因呢?原来ext系统,包括ext2、3、4系统,会有磁盘5%的空间留给root用户,如果一个磁盘有1000G,百分之五的空间,也是很可观的,所以对于一个纯数据盘,完全没有必要留这么多,通过命令 tune2fs 去除保留空间,
1 | ## sda6为想要去除保留空间的磁盘的挂载磁盘 |
结果如图:
2.创建用户
1 | # 创建账号 |
1.Linux 用户和用户组管理
3.切换用户
1 | # 临时切换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 | ## 显示目前在Linux系统上的文件系统的磁盘使用情况统计 |
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 | ## 压缩,限制每个包的大小 |
command操作命令:
- a 添加到压缩文件
- b 基准测试,测试7z当前性能
- d 从压缩文件中删除
- e 从压缩文件中解压缩,但不包含目录结构(即所有各级文件都解压到一个目录里)
- l 列出压缩文件的内容
- t 测试压缩文件
- u 更新文件到压缩文件
- x 从压缩文件中解压缩,包含目录结构
现在有一个需求,就是一系列的文件分开压缩之后,使用一个 e 命令解压之后,因为文件很大,导致整个的磁盘都占满了。
1.linux下解压7z压缩包分卷
2.7z a name.7z filename -v2048m
3.Linux下7z的使用方法
4.Linux zip/unzip分卷压缩,解压 根据情况分卷–4g: zip -s 4g b.zip –out c.zip
5.Zip和7-zip谁更强,如何选择?
6. 7za压缩与解压缩,7-Zip,xx.7z 原创
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 | ## 查看磁盘空间 |
【解决方法】
很多的文章都是说查询 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 | # 打开定时任务配置文件 |
还有一个问题,那就是如果是 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 | # 填充home目录80%的使用空间 |
【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 爆出容器逃逸漏洞,宿主机也危在旦夕。