Linux系统运维问题解决(一)

2022-09-28 16:34:34 浏览数 (1)

[TOC]

主要记录工作和学习中遇到的一些问题;

Q:挂载的目录进行卸载挂载繁忙,如:umount: /var: device is busy A:解决方法

代码语言:javascript复制
fuser -m -v /dev/mapper/vg_zabbix-LogVol02
fuser -m –k /dev/mapper/vg_zabbix-LogVol02
#注:上面是使用kill直接杀掉挂载点上面的进程,建议使用daemon的方式停掉进程。
/etc/init.d/rsyslog stop 
fuser -m -v /dev/mapper/vg_zabbix-LogVol02
#停止上面显示的守护进程
[root@zabbix ~]# /etc/init.d/crond stop
root@zabbix ~]# /etc/init.d/auditd stop

#重新卸载
umount /dev/mapper/vg_zabbix-LogVol02

Q: CentOs6.x误卸载自带python和yum后的解决办法 A:解决方法:

代码语言:javascript复制
Step1. 卸载python(以免有些同学没有卸载干净)
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps #强制删除已安装程序及其关联
whereis python|xargs rm -frv #删除所有残余文件 #xargs,允许你对输出执行其他某些命令

Step2. 卸载yum
rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps
rm -rf /etc/yum.repos.d/*
whereis yum|xargs rm -frv<br>

step3. 验证是否删除干净
whereis python 
whereis yum

Step4.重新安装python和yum
#在以下链接的镜像站中找到你系统对应版本的python rpm包,选择系统对应的位数,32位选i386,64位选择x86_64,进入Packages文件夹
http://vault.centos.org/
#进去之后你会看到很多rpm文件,下载如下文件:
python-2.6.6-66.el6_8.x86_64.rpm
python-devel-2.6.6-66.el6_8.x86_64.rpm
python-iniparse-0.3.1-2.1.el6.noarch.rpm
python-libs-2.6.6-66.el6_8.x86_64.rpm
python-pycurl-7.19.0-9.el6.x86_64.rpm
python-urlgrabber-3.9.1-11.el6.noarch.rpm
rpm-python-4.8.0-55.el6.x86_64.rpm
yum-3.2.29-81.el6.centos.noarch.rpm
yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
yum-plugin-fastestmirror-1.1.30-40.el6.noarch.rpm

Step5.登录服务器,在你喜欢的地方建一个python文件夹,这里我local的src下
mkdir /usr/local/src/python
cd /usr/local/src/python
rz -be  #出现弹框,上传文件


Step6.#这里建议先安装 python-*的文件,再安装rpm-python-*的文件,最后安装yum-*的文件
rpm -ivh python-*
rpm -ivh rpm-python-*
rpm -ivh yum-*

#这里博主没有用rpm -ivh python-*命令安装是怕以防万一会漏掉,所以还是乖乖的输入全名安装,安装yum的时候同理
#rpm -ivh python-2.6.6-66.el6_8.x86_64.rpm python-devel-2.6.6-66.el6_8.x86_64.rpm python-iniparse-0.3.1-2.1.el6.noarch.rpm python-libs-2.6.6-66.el6_8.x86_64.rpm python-pycurl-7.19.0-9.el6.x86_64.rpm python-urlgrabber-3.9.1-11.el6.noarch.rpm


Step7.测试安装,测试有版本信息就成功了
yum --version
python -V

注意事项:

(1) 一定要选对应自己系统版本的文件,

(2) 当安装依赖包错误的时候进行一起安装即可(不知道谁与谁有依赖关系,就都一起安装就好了,亲测有效))

Q:Centos6.x安装/升级到python2.7 A:因为在linux机器上用yum安装的默认是2.6.6版本的想升级到2.7。 测试环境:CentOS release 6.10 (Final) 2.6.32-754.10.1.el6.i686 安装过程:

代码语言:javascript复制
#安装相应的依赖
yum -y install gcc openssl-devel bzip2-devel

#下载最新Python 2.x 版本
cd /opt && wget https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz
tar xvzf Python-2.7.15.tgz

#检测脚本中加上enable-optimizations优化,主要是在这个版本上能启用PGO优化,让Python在运行时能变得更快
make 加altinstall参数,避免覆盖原来安装在/usr/bin/python 的版本
cd Python-2.7.15
./configure --enable-optimizations
make && make altinstall

#安装是否成功
/usr/local/bin/python2.7 -V

#建立软连接,使系统默认python指向2.7版本
mv /usr/bin/python /usr/bin/python2.6.6    #这一步重要
ln -s /usr/local/bin/python2.7 /usr/bin/python


#直接用vi编辑/usr/bin/yum把头部的python换成2.6.6。
#ps:编辑前记得备份。
sed -i 's/python/python2.6.6/' /usr/bin/yum


#安装升级pip (因为2.7.16版本已经内建了ensurepip模块)
python -m ensurepip

pip -V
-->pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

CentOS7 Failed to start LSB: Bring up/down networking 问题 虚拟机复制机器并且更改了网卡名称,服务器更换了主板之前配置的静态IP发现启动网卡出现异常

代码语言:javascript复制
#在centos7系统下执行:
#显示有标题的错误信息。《Failed to start LSB: Bring up/down networking.》 原因是mac地址的问题
systemctl status network。


#解决方案如下:
1. 查看服务对应网卡最新的mac地址 命令:ip addr  下图 圈出来就是最新的mac地址
ip addr | grep "link/ether" | awk '{print $2}'

2. cd /etc/sysconfig/network-scripts/
#修改ifcfg-XXX文件了,只修改HWADDR就可以了。接下来执行service network restart 就正常了。
echo HWADDR=08:00:27:46:9b:14 >> ifcfg-eth0
echo HWADDR=08:00:27:36:63:b1 >> ifcfg-eth1
echo HWADDR=08:00:27:0b:01:7d >> ifcfg-eth2

3. #前提是上面得都不行得时候
systemctl enable NetworkManager-wait-online.service
systemctl stop NetworkManager
systemctl disable NetworkManager

##完美解决
[root@data2 ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]
  1. 不小心执行 rm -rf该如何恢复? 在什么情况下,文件才是可恢复的? 答:有先决条件,就是在进程中被打开,在内存中被分配资源;

恢复原理: 在Linux系统中,每个运行中的程序都有一个宿主进程彼此隔离,以/proc/进程号来体现(Linux本质上就是一个文件系统) 比如:ls -l /proc/13067 查看进程PID为13067的进程信息;当程序运行时操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件; 当我们执行 rm -f 删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件。

执行步骤:

代码语言:javascript复制
#1.使用lsof查看打开该文件进程
#2.再使用cat /proc/进程号/fd/文件描述符 查看恢复数据
#3.最后使用I/O重定向的方式来恢复文件

常见模拟:

代码语言:javascript复制
#1.误删除文件
> rm -f /root/selenium/Spider/MySql.Data.dll
> ll /root/selenium/Spider/MySql.Data.dll
ls: cannot access /root/selenium/Spider/MySql.Data.dll: No such file or directory

#2.恢复
yum install lsof -y  #没有的请自行安装
(1)、使用lsof命令查看当前是否有进程打开/root/selenium/Spider/MySql.Data.dll文件:
> lsof | grep /root/selenium/Spider/MySql.Data.dll
root 86r REG 253,1 702464 141324 /root/selenium/Spider/MySql.Data.dll

(2)、查看是否存在恢复数据:
/proc/13067/fd:进程操作的文件描述符目录。
86:文件描述符。
> cat /proc/13067/fd/86

(3)、使用I/O重定向恢复文件
> cat /proc/23778/fd/86 > /root/selenium/Spider/MySql.Data.dll
> ls -l /root/selenium/Spider/MySql.Data.dll
-rw-r--r-- 1 root root 702464 Feb 10 12:03 /root/selenium/Spider/MySql.Data.dll

补充方法:

代码语言:javascript复制
#找到删除的文件的进程PID 
pid=25499

#获取进程映射地址
cat /proc/$pid/maps | awk '$6 !~ "^/" {split($1,addrs,"-"); print "dump memory mem_" addrs[1] "0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands

#dump地址中数据
gdb -p $pid -x gdb-commands

比如查找mysql参数信息, grep datadir ./mem_* 会显示所有包含datadir字符串二进制文件。
vim ./mem_7f18284af000 查找datadir如下,跟进程信息获取参数有部分重复

WeiyiGeek.

0 人点赞