linux 系统 bin文件误删恢复

linux 系统 bin文件误删恢复,第1张

拿到了新linux服务器,开心地 *** 作linx,行云流水地搭建了nginx前端代理服务,并在nginx服务中部署前端应用。心里开始有点膨胀,于是就乐极生悲,有了这个蛋疼的 *** 作,将linx系统根目录下的bin文件夹中的内容全部给删除了,(当时脑子短路了有一分多钟,心里直冒冷汗)。

误 *** 作过程: 部署前端应用的流程是,先将nginx应用根目录下html文件夹中已经部署的旧版本删除,在删除前端项目时,因为有历史 *** 作,所有没有仔细看文件夹路径,直接ctrl-A删除了当下目录中的所有文件。(前端应用是angular2项目,build出来的项目,所有有文件都是同一级目录,文件有点多,且每个文件名都是随机生成的)。

使用xftp,需要先将html文件夹中的内容全部删除,因为已经 *** 作过这个步骤,所以想当然的以为打开xftp会默认打开html文件夹。于是在 *** 作过程中,直接将xftp默认打开的文件夹下的所有文件给删除了(默认在bin目录)。删除那一瞬间感觉删除文件不对,查看目录路径,果然错了。

当时所有文件都已经删除了,ctrl+c已经迟了。。。

先了解了一下bin目录下文件内容的作用:bin文件夹下的内容文件为常用的shell命令,在下面的截图中可以看到:cat,chmod,cp,login... 等常用命令。看到login也在里面,感觉有点不妙,会不会是这台服务器已经不能再远程登录了?黑人脸问号.png。

使用ssh测试远程连接,果然连接不上了。于是网上搜索补救措施,看了好多网上教程,好多都是使用ssh连接(在没有关闭ssh连接的前提下 *** 作),远程恢复的。网络上的恢复教程大致是: 从其他的相同的linux *** 作系统中复制一份bin文件到已经删除的linux系统中。 但远程ssh登录不了,复制不了文件到这个linux系统中。但是想到有xftp还没有关闭连接,于是就打算采用这个xftp恢复bin目录。

使用虚拟机软件,创建一台相同liunx版本的系统,再将系统中bin文件夹中的内容复制一份。并使用xftp将bin文件内容复制到删除的目录中。

重新测试ssh远程登录连接系统,结果还是不行。继续思考为什么会不行。想到会不会是文件权限引起的问题,还好xftp可以查看文件权限,果然有这个问题,xftp复制进系统的文件权限只有只读权限,可bin目录下的文件都是需要执行权限的啊。还好xftp可以修改文件权限,于是有了以下的修改权限的截图。绿色的文件代表可以执行,也就说先将以下的的文件中比较重要的文件(绿色的文件,修改权限前文件为灰色)权限改为755。然后再ssh远程登录系统,果然ok,可以登录且可以 *** 作系统。接下来将bin文件夹中的所有文件权限改为 755,恢复完成。

1.获取nginx 过程pid

执行

ps aux | grep nginx

你会失去如下输入,找到master的pid

[root@VM-8-3-centos /]# ps aux | grep nginx root 6958 0.0 0.0 112812 968 pts/0 R+ 09:10 0:00 grep --color=auto nginx root 19193 0.0 0.3 109440 6360 ? Ss Jun08 0:00 nginx: master process nginx root 22326 0.0 0.3 112200 7412 ? S 01:47 0:01 nginx: worker process

如上所示,nginx的次要过程pid为19193

2.查找内存映射

接下来咱们须要查看过程正在应用哪些内存映射

sudo cat /proc/19193/maps | grep heap

[root@VM-8-3-centos /]# sudo cat /proc/19193/maps | grep heap 5581bf774000-5581bf8b7000 rw-p 00000000 00:00 0 [heap] 5581bf8b7000-5581bfa50000 rw-p 00000000 00:00 0 [heap]

能够看到有2处中央,咱们只须要关注heap局部。内存位于5581bf774000–5581bf8b7000和5581bf8b7000–5581bfa50000之间。

3.转储堆

而后须要转储堆。确保已gdb装置。应用连贯到过程

sudo gdb -p 19193

你会失去一个(gdb)提醒。当初在这个提醒下应用咱们之前记下的地址,地址前须要加0x

(gdb) dump memory /tmp/nginx-memory 0x5581bf774000 0x5581bf8b7000

4.从转储中获取字符串数据

当初咱们的转储可用/tmp/nginx-memory,当初咱们须要从中获取字符串数据

sudo strings /tmp/nginx-memory >/tmp/nginx-memory.str

5.查找 Nginx 配置

当初有了内存转储。大多数配置都会有http {一行,当初能够测试下/tmp/nginx-memory.str

grep -A 20 "http {" /tmp/nginx-memory.str

[root@VM-8-3-centos /]# grep -A 20 "http {" /tmp/nginx-memory.str http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'gzip on# gzip gzip_min_length 1k# gzip 1-10 gzip_comp_level 6# javascript # mime.types gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png# http header Vary: Accept-Encoding gzip_vary on#

本人批改下格局之类的,就OK了

6.把/tmp/nginx-memory.str下载到本地

放进编辑器查看,会找到之前的配置,同样也是留神下格局


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7319038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存