文章目录
一、使用yum安装ntp服务时报错
解决:
# 执行这三步:
yum clean all
# 同步已经安装的软件包到最新可用版本
yum distro-sync
yum update
yum命令补充:
可参考:Linux(centos8)下的yum的基本用法和实例
# 查询安装过的包:
[root@192 docker]# yum list installed | grep docker
docker.x86_64 2:1.13.1-209.git7d71120.el7.centos
docker-client.x86_64 2:1.13.1-209.git7d71120.el7.centos
docker-common.x86_64 2:1.13.1-209.git7d71120.el7.centos
# 删除安装的软件包:
yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64
1. 离线不联网环境下
上面将软件版本更新是在联网的情况下,如果不联网的话,就需要自己去下载 rpm 包安装。rpm 包下载地址:https://rpm.pbone.net/
rpm -qa|grep openssl
rpm -e openssl-1.0.2k-25.el7_9.x86_64 --nodeps
rpm -ivh /opt/openssl-1.0.2k-19.el7.x86_64,rpm
注意:千万不要卸载 glibc 依赖,否则直接各种命令无法使用,也无法 ssh 远程,需要进机房解决(要么重新装该依赖要么就重新装系统),记录我的一次误操作:
[root@localhost ~]# rpm -e glibc-common-2.17-326.el7_9.x86_64 --nodeps
[root@localhost ~]# rpm -ivh /opt/glibc-common-2.17-317.el7.x86_64.rpm
warning: /opt/glibc-common-2.17-317.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a71eb6: NOKEY
error: Failed dependencies:
glibc = 2.17-317.el7 is needed by glibc-common-2.17-317.el7.x86_64
[root@localhost ~]# rpm -e glibc-2.17-326.el7_9.x86_64 --nodeps
warning: /etc/nsswitch.conf saved as /etc/nsswitch.conf.rpmsave
warning: %postun(glibc-2.17-326.el7_9.x86.64) scriptlet failed, exit status 127
warning: %triggerpostun(redhat-lsb-4.1-27.el7.centos.1.x86_64) scriptlet failed, exit status 127
[root@localhost ~]# rpm -qa|grep glibc
-bash: /usr/bin/grep: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
-bash: /usr/bin/rpm: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
# ......然后就是啥也干不了了,解决的话可以参考下面这篇文章,我们当时的办法是重装系统了。
二、inode已满
问题:
ps:在df -h 和df -i 显示使用率100%,基本解决方法都是删除文件。
df -h 是去删除比较大无用的文件-----------大文件占用大量的磁盘容量。
df -i 则去删除数量过多的小文件-----------过多的文件占用了大量的inode号。
解决:需要做的肯定是去删除没用的文件,但是卡在了不知道哪个目录下存在大量的无用小文件。可以使用Linux命令for i in /*; do echo $i; find $i | wc -l | sort -rn ; done
来排查。
1.inode是什么:
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做 inode,中文译名为”索引节点”。
每一个文件都有对应的 inode,里面包含了与该文件有关的一些信息。
所以当 inode 用完也会出现No space left on device
, 造成磁盘的不可写入。
参考:
inodes过载问题解决 :Free inodes is less than 20% on volume /
no space left on device 磁盘空间不足原因及排查方法
三、根目录满了清理
如果你的 Linux 根目录(通常是 “/” )空间不足,可能会导致系统运行缓慢或无法正常工作。在这种情况下,你可以采取以下措施清理根目录,释放磁盘空间。
3.1 查找大文件和目录
使用以下命令查找占用大量空间的文件和目录:
du -sh /* | sort -rh
这个命令会列出根目录下每个子目录的大小,并按照大小进行排序。你可以通过观察结果找到占用空间最多的文件或目录。
3.2 清理日志文件
日志文件通常会占用大量空间。你可以使用以下命令清理不再需要的日志文件:
sudo find /var/log -type f -name "*.log" -exec rm -rf {} \;
这个命令会删除/var/log目录下所有以".log"为扩展名的文件。请确保你不需要这些日志文件,以免误删重要数据。
3.3 清理软件缓存
软件缓存也会占用大量空间。你可以使用以下命令清理软件包缓存:
sudo apt-get clean
这个命令会删除已下载的软件包文件。如果你使用的是其他包管理器,可以根据相应的命令进行清理。
三、查看目录文件(夹)大小并清理磁盘空间
3.1 du -h -x --max-depth=1
du -h
会递归将对应目录下所有文件的大小显示出来,如果需要寻找所有文件中包含 G 的文件,可以执行, M、K 等单位同理:
du -h -x --max-depth=1 | grep G
-x
或--one-file-xystem
以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。---max-depth=<目录层数>
超过指定层数的目录后,予以忽略,如果想先看哪个文件夹大再 cd 进入删除的话,可以执行:du -h -x --max-depth=1
3.2 du -sh *
常用的命令为 du -h -x --max-depth=1
,可以查看当前目录的文件与文件夹总大小,du -sh *
可以实现相同功能, -h 表示查看大小,-s 表示仅显示总计:
显示子目录所占磁盘大小(有时候用 ll -h
并不能正确的显示目录大小如下面的 picture 目录,用 ll -h
却显示的是25M):
[root@hui package]# du -sh ./*
8.2M ./apache-maven-3.3.9-bin.tar.gz
9.1M ./apache-tomcat-8.5.29.tar.gz
9.8M ./maven-3.3.9
50G ./picture
63M ./redis-3.2.8
3.3 du -s * |sort -nr | head -n k
也可以通过 -s + sort
实现排序查看 top-k 占用空间的文件,sort -r
将数字看作字符排序, sort -n/-nr
按照整个数字来排序,-r 控制是否逆序,如果想看 Top 5:
du -s * |sort -nr | head -n 5
3.4 清理磁盘空间
删除一些无关大文件后,执行上述查看空间命令发现磁盘大小并未改变,可能是因为文件被删除而进程还活着,从而造成空间还被占用的假象,可以通过下述命令查看删除的相关进程与进程号 pid:
lsof |grep delete
上述方法查出的 delete 进程可能很多,可以通过下述命令一次性删除:
lsof |grep delete| xargs kill -s 9
这里一定要传参数 9,默认参数下 kill 命令会发送 15-Termination 信号,告诉进程你需要关闭了请自己停止并结束,而 9-kill (can’t be caught or ignored) 则代表你被 kill 了请立即结束,会强制杀死进程。
四、swap 占用过高
在 Linux 操作系统中,swap空间是一种重要的内存管理功能,它允许系统将物理内存(RAM)中不活跃的页面移动到预留的硬盘空间(即 swap 空间)中。
这样做的目的是释放 RAM 空间以供当前运行的应用程序使用。
通过这种方式,swap 空间起到了虚拟内存的作用,增加了系统可用的内存资源,特别是在物理内存资源紧张的情况下。
尽管 swap 空间可以提高系统的灵活性和稳定性,但它的使用也并非没有代价。
由于硬盘的读写速度远低于 RAM,频繁地使用 swap 空间可能会导致系统性能下降。
因此,合理配置和管理swap空间对于保持系统性能至关重要。
查看具体是哪进程在占用 Swap 分区:
[root@localhost ~]# for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr |head
8151 3824.98M
6138 2355.5M
6128 560.109M
27589 401.629M
6126 357.871M
8162 355.5M
8756 217.555M
8919 165.695M
29740 147.574M
8157 75.5625M
具体查看是哪个进程在占用 SWAP:ps -ef | grep 8151
解决办法:1. 如果是无关紧要的程序,可以直接 Kill 掉;2. 修改配置参数 cat /proc/sys/vm/swappiness
;3. 清理 swap 空间:sudo swapoff -a && sudo swapon -a
。注意:这个操作会将所有 swap 中的数据移回 RAM,如果 RAM 使用已经很高,这可能会导致系统变慢或不稳定,严重的话会宕机。
Swappiness 参数是 Linux 内核中的一个重要参数,它可以控制系统中 Swap 空间的使用程度。其取值范围从0(最低倾向)到100(最高倾向),默认值为60。数值越高,表示系统会更早地将内存中的数据写入 Swap 空间,反之,数值越低,表示系统会更晚地将内存中的数据写入 Swap 空间。
# 临时调整
sysctl vm.swappiness=10
# 永久生效,将其写入/etc/sysctl.conf文件中
vm.swappiness=10
# 重新加载配置
sysctl -p
参考:
linux解决swap占用过高
Linux Swap空间利用率过高问题的解决方法和优化技巧
linux中 buff/cache内存占用过多
Linux Swap 空间管理与优化指南:从基础使用到过高处理
Linux Swap空间利用率过高怎么解决
【linux性能优化】系统Swap变高原因分析
Linux下的Swap空间
内存中的swap机制
Linux Swap 介绍
linux 中swap 原理简介
五、解决免密失败
按以前的常规操作给三台服务器进行操作,但始终成功不了需要输入密码,最终是修改了配置文件才解决的:
sudo vim /etc/ssh/sshd_config
# 修改前
# StrictModes yes
# 修改后
StrictModes no
参考:
【踩坑】centos7配置免密不生效
centos7…5配置免密后无法登陆
六、在 Linux 中如何恢复已删除的文件
方法一:从垃圾箱恢复
如果您使用的是图形界面,并且只是简单地删除了文件,那么文件可能只是被移动到了垃圾箱。在这种情况下,您可以打开垃圾箱,找到被删除的文件,然后进行恢复。
方法二:使用 Linux 文件恢复工具
首先简单介绍一下 Linux 文件系统的最基本单元:inode
。inode
译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode
,另一部份是 block
,block
是用来存储数据用的。而 inode
呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode
为每个文件进行信息索引,所以就有了 inode
的数值。linux 操作系统下可以使用 ls –id
命令来查看文件或者目录的 inode
值,一般 root 目录的 inode
值为 2,一个分区挂载到一个目录下时,这个 root 目录的 inode
值为 2。
# mount /dev/sdb2 /tmp
# ls -id /tmp2 /tmp
本文要介绍的命令是通过文件系统的 inode 值(一般是 2 )来获取文件系统信息。在 ext3 和 ext4 文件系统中,每个文件都是通过 inode 来描述其数据存放的具体位置,当文件被删除以后,inode 的数据指针部分被清零,文件目录区没有太多变化。文件的读写都是通过 inode 来实现,当 inode 数据指针被清零以后,即便文件内容还在,也没有办法把文件内容组合出来。当 ext3 和 ext4 文件系统中的元数据 metadata 发生变化时,相应的元数据 metadata 在日志文件会有一份拷贝。比如一个文件被删除了,它的 inode 信息会在日志文件中先保存一份,然后把要删除文件 inode 相关信息清零。这个日志文件是循环使用的,当操作过多时,删除的文件的 inode 日志记录会被新的数据替换,这就彻底丧失了根据 inode 找回数据的机会了。如果是大量文件的删除,这个日志文件会被反复循环利用多次,只留给最后删除的那些文件的恢复机会。
foremost 和 extundelete 简介
formost 是一个基于文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具。这个过程通常叫做数据挖掘(data carvubg)。formost 可以分析由 dd、Safeback、Encase 等生成的镜像文件,也可以直接分析驱动器。文件头和尾可以通过配置文件设置,也可以通过命令行开关使用 formost 内建的文件类型。formost 最初是由美国空军特别调查室(Air Force Office of Special Investigations)和信息系统安全研究中心(The Center for Information Systems Security Studies and Research)开发的,现在使用 GPL 许可。Foremost 支持恢复如下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip。
针对 Linux 下的 ext 文件系统来说,常用的 Linux 文件删除恢复工具有 debugfs、ext3grep、extundelete 等。extundelete 是一个开源的数据恢复工具,支持 ext3、ext4 文件系统,其官方站点位于 http://extundelete.sourceforce.net/
,目前最新稳定版本为 0.2.0
。
上面介绍的两种命令行工具 foremost 和 extundelete 二者相比,foremost 支持的文件系统比较多(包括 ext2、 ext3 、vfat、NTFS、ufs、jfs 等)和 extundelete 支持的文件系统较少(ext3、ext4)文件系统。不过 foremost 只能支持恢复特定格式的文件。
foremost:
[root@localhost xiaoqiangtest]# rpm -Uvh https://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/foremost-1.5.7-1.el7.rf.x86_64.rpm
Retrieving https://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/foremost-1.5.7-1.el7.rf.x86_64.rpm
warning: /var/tmp/rpm-tmp.QukUE1: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:foremost-1.5.7-1.el7.rf ################################# [100%]
[root@localhost xiaoqiangtest]# rm 210.jpg
[root@localhost xiaoqiangtest]# foremost -t jpg -i /dev/mapper/centos-home -o /opt/xiaoqiangtest/backup
# 它居然把这个分区下所有能恢复的 jpg 文件都给恢复了,但我只想恢复 210.jpg 啊,而且恢复后的文件名可读性差
注:-o 参数后面跟的目录 /opt/xiaoqiangtest/backup
还得为空,要不然会报错:
extundelete:
[root@localhost xiaoqiangtest]# yum install extundelete
[root@localhost xiaoqiangtest]# extundelete /dev/mapper/centos-home --restore-file /opt/xiaoqiangtest/test.sh
extundelete: Bad magic number in super-block when trying to open filesystem /dev/mapper/centos-home
# 经查证 extundelete 工具不能对 xfs 文件系统进行数据恢复。已知该工具能够对 ext4 文件系统进行数据恢复。来自:https://blog.csdn.net/qq_44805559/article/details/103715306
testdisk:
上述两款软件还不是很满意,有机会可以尝试下 testdisk
。
TestDisk 是一个开源的、功能强大的数据恢复工具,除了恢复数据之外,还可以重建和恢复引导分区并修复分区表。它从 FAT、exFAT ext3、ext4 和 NTFS 等文件系统中恢复被删除的文件,并将它们复制到另一个位置。TestDisk 是一个命令行数据恢复工具,这是它区别于其他数据恢复工具的特点之一。可参考:我不是网管 - 恢复 Linux 系统下被删除的文件
参考:
centos删除的文件能恢复吗?centos文件恢复详细教程
命令行工具恢复文件 foremost 和 extundelete 简介
在 Linux 中如何恢复已删除的文件
Foremost恢复Linux中已删除的文件
Foremost - 恢复已删除文件的强大工具
七、curl 命令查看 IP 归属地
[root@Ali ~]# curl ip.cn?ip=43.85.6.224
IP:43.85.6.224 来自:香港特别行政区 阿里云
[root@Ali ~]# curl ip.cn?ip=8.8.8.8
IP:8.8.8.8 来自:Google DNS
[root@Ali ~]# curl ip.cn
当前 IP:43.75.29.15 来自:北京市 阿里云
但有时候报错:
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>cloudflare</center>
</body>
</html>
解决:换个地址
curl icanhazip.com
curl ifconfig.me
curl myip.ipip.net
参考:
curl查询公网出口IP
几种Linux 查询外网出口IP的方法
八、Linux 日志分析利器 - journalctl
在 Linux 系统中,日志管理是非常重要的一项任务。而 journalctl 命令则是 Linux 系统提供的一个强大的日志查询工具。它可以帮助我们查找、过滤和分析系统日志。
journalctl 是一个用于查询和管理 Linux 系统日志的命令行工具。它基于 systemd 日志守护进程 (systemd-journald) 的功能,可以查看和操作 systemd-journald 收集的日志信息。这些日志信息包括内核消息、系统服务日志、用户登录和注销信息等。
下面列举了 journalctl 命令的一些常用选项:
-f
:实时追踪日志输出。这对于需要实时监控系统日志的情况非常有用。例如:journalctl -f
-n
:显示指定数量的日志行。例如,如果我们只想查看最近的10条日志:journalctl -n 10
-u unit
:仅显示指定单元的日志。这对于快速找到特定服务的日志非常有用。例如,如果我们只想查看 httpd 服务的日志:journalctl -u httpd.service
-k
:显示内核消息。这对于调试内核相关的问题非常有用。例如:journalctl -k
-b
:显示引导过程的日志。这对于排查系统启动问题非常有用。例如,如果我们只想查看最近一次引导过程的日志:journalctl -b -1
-p priority
:仅显示指定优先级的日志。-e
:直接定位到日志的末尾。--since time
:显示指定时间之后的日志。--until time
:显示指定时间之前的日志。--disk-usage
:显示日志占用的磁盘空间情况。-xe
:查看日志中记录的错误信息。例如:journalctl -xe