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

记录问题

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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
    #停止上面显示的守护进程
    [[email protected] ~]# /etc/init.d/crond stop
    [email protected] ~]# /etc/init.d/auditd stop

    #重新卸载
    umount /dev/mapper/vg_zabbix-LogVol02
  2. CentOs6.x误卸载自带python和yum后的解决办法
    A:解决方法:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    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) 当安装依赖包错误的时候进行一起安装即可(不知道谁与谁有依赖关系,就都一起安装就好了,亲测有效))

  1. 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
    安装过程:
    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
    #安装相应的依赖
    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)


  1. CentOS7 Failed to start LSB: Bring up/down networking 问题
    虚拟机复制机器并且更改了网卡名称,服务器更换了主板之前配置的静态IP发现启动网卡出现异常
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #在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

    ##完美解决
    [[email protected] ~]# service network restart
    Restarting network (via systemctl): [ OK ]


  1. 不小心执行 rm -rf该如何恢复?
    在什么情况下,文件才是可恢复的?
    答:有先决条件,就是在进程中被打开,在内存中被分配资源;

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

执行步骤:

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

常见模拟:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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

补充方法:

1
2
3
4
5
6
7
8
9
10
11
#找到删除的文件的进程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.

WeiyiGeek.