演示误删操作

# 查看我们要演示的Java程序(随便一个都可以)
[root@Aspirant file_system]# ll
总用量 28264
-rwxr-xr-- 1 root root 28941538 222 11:20 a.jar
# 在后台运行我们的Java程序,并重定向输出日志到log.txt
[root@Aspirant file_system]# nohup java -jar a.jar > log.txt 2>&1 &
[1] 32008
# 看下我们的Java程序的运行状态
[root@Aspirant file_system]# ps -aux|grep a.jar
root     32008 48.2  8.0 3522708 313460 pts/0  Sl   11:38   0:10 java -jar a.jar
root     32398  0.0  0.0 112824  1000 pts/0    S+   11:38   0:00 grep --color=auto a.jar
# 再看看日志是否OK
[root@Aspirant file_system]# tail -f log.txt
2022-02-22 11:38:31.664  INFO 32008 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/api]    : Initializing Spring embedded WebApplicationContext
2022-02-22 11:38:31.664  INFO 32008 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2127 ms_ _   |_  _ _|_. ___ _ |    _
| | |\/|_)(_| | |_\  |_)||_|_\ /               |         3.3.2
2022-02-22 11:38:33.024  INFO 32008 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2022-02-22 11:38:33.451  INFO 32008 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2022-02-22 11:38:33.515  INFO 32008 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8003 (http) with context path '/api'
2022-02-22 11:38:33.541  INFO 32008 --- [           main] com.company.name.UploadApplication       : Started UploadApplication in 4.794 seconds (JVM running for 5.374)
^C
# 文件信息记录下,我们待会儿恢复后方便对比
[root@Aspirant file_system]# ll
总用量 28268
-rwxr-xr-- 1 root root 28941538 222 11:20 a.jar
-rw-r--r-- 1 root root     2207 222 11:38 log.txt
# 删除程序和日志
[root@Aspirant file_system]# rm a.jar log.txt
rm:是否删除普通文件 "a.jar"?y
rm:是否删除普通文件 "log.txt"?y
# 看看是不是真的删除了
[root@Aspirant file_system]# ll
总用量 0

演示恢复

# 到此,我们开始恢复刚刚删除但还在运行的程序和文件,由我们刚刚查询到的进程id去查看进程的文件使用情况,可以看到我们之前删除的两个文件后面已经被标记删除(deleted)
[root@Aspirant file_system]# lsof -g 32008|grep /home/file_system
COMMAND  PID        USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
java    32008 32008 root  cwd       DIR              253,1      4096    794984 /home/file_system
java    32008 32008 root  DEL       REG              253,1              789089 /home/file_system/a.jar
java    32008 32008 root    1w      REG              253,1      2207    789088 /home/file_system/log.txt (deleted)
java    32008 32008 root    2w      REG              253,1      2207    789088 /home/file_system/log.txt (deleted)
java    32008 32008 root    4r      REG              253,1  28941538    789089 /home/file_system/a.jar (deleted)
java    32008 32008 root    5r      REG              253,1  28941538    789089 /home/file_system/a.jar (deleted)
# 将运行中的Java程序cp到指定位置
[root@Aspirant file_system]# cp /proc/32008/fd/4 /home/file_system/a.jar
# 如果是文本文件,还可以直接通过cat或者tail进行查看
[root@Aspirant file_system]# cat /proc/32008/fd/2
nohup: 忽略输入.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.4.0)2022-02-22 11:38:29.456  INFO 32008 --- [           main] com.company.name.UploadApplication       : Starting UploadApplication v1.0 using Java 1.8.0_211 on Aspirant with PID 32008 (/home/file_system/a.jar started by root in /home/file_system)
2022-02-22 11:38:29.464  INFO 32008 --- [           main] com.company.name.UploadApplication       : The following profiles are active: dev
2022-02-22 11:38:31.565  INFO 32008 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8003 (http)
2022-02-22 11:38:31.583  INFO 32008 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-02-22 11:38:31.583  INFO 32008 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.39]
2022-02-22 11:38:31.664  INFO 32008 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/api]    : Initializing Spring embedded WebApplicationContext
2022-02-22 11:38:31.664  INFO 32008 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2127 ms_ _   |_  _ _|_. ___ _ |    _
| | |\/|_)(_| | |_\  |_)||_|_\ /               |         3.3.2
2022-02-22 11:38:33.024  INFO 32008 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2022-02-22 11:38:33.451  INFO 32008 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2022-02-22 11:38:33.515  INFO 32008 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8003 (http) with context path '/api'
2022-02-22 11:38:33.541  INFO 32008 --- [           main] com.company.name.UploadApplication       : Started UploadApplication in 4.794 seconds (JVM running for 5.374)
# 查看Java程序是否恢复成功
[root@Aspirant file_system]# ls
a.jar
# 再恢复下日志文件
[root@Aspirant file_system]# cp /proc/32008/fd/2 /home/file_system/log.txt
# 看看是否恢复成功,与之前记录的进行对比一下文件信息
[root@Aspirant file_system]# ll
总用量 28268
-rwxr-xr-- 1 root root 28941538 222 11:45 a.jar
-rw-r--r-- 1 root root     2207 222 11:47 log.txt

恢复方法

  • 方法一(使用lsof命令)
    1. 首先检查一下你的Linux是否有此命令,如果没有则如下安装,已有则跳过

         yum -y install lsof
      
    2. 查看指定进程id的文件使用情况

         lsof -g [GID]
      

      lsof输出各列信息的意义如下:

      • COMMAND:进程的名称 PID:进程标识符
      • USER: 进程所有者
      • FD: 文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
      • TYPE: 文件类型,如DIR、REG等
      • DEVICE: 指定磁盘的名称
      • SIZE: 文件的大小
      • NODE: 索引节点(文件在磁盘上的标识)
      • NAME: 打开文件的确切名称

      ​ FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。

    3. 根据这些信息来恢复文件或程序

      # 拷贝到指定位置path
      cp /proc/[GID]/fd/[FD列前面的数值] [path]
      
  • 方法二(通过系统解析的文件)
    1. 直接进入文件夹,你就会看待很多数字命名的文件,lsof命令也是这样实现的

      cd /proc/[GID]/fd
      
    2. 然后执行ll 或者 ls -l,就可以看到对应文件的映射指向哪里

    3. 将对应的文件映射指向的文件拷贝到你想要的位置即可

Linux误删文件或程序如何恢复相关推荐

  1. linux误删文件咋恢复,恢复Linux误删文件

    恢复Linux误删文件 目录方法一 方法二 不小心执行了rm删除了某些文件,是有点倒霉.不过我一般都会设置alias rm='rm -i'在删除的时候需要输入Y才能真正删除,当然此时用rm -f那也会 ...

  2. linux 误删文件恢复

    linux 误删文件恢复 文档太给力了!误删了几个重要文件,抖抖嗦嗦偷偷恢复了,救了我!!! http://jingyan.baidu.com/article/2f9b480d6c2bcd41cb6c ...

  3. linux命令删除的文件怎么找回来,linux误删文件怎么恢复 linux误删命令行文件怎么恢复...

    linux误删文件怎么恢复 linux误删命令行文件怎么恢复 linux系统是不同于windows系统和mac系统的,它独特的系统操作深受广大网友喜爱.有的朋友在使用linux系统的时候,不小心把一些 ...

  4. Linux无文件木马程序渗透测试复现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是Linux无文件木马程序渗透测试复现. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强 ...

  5. 介绍一下Linux 误删文件恢复命令及方法

    无论在哪个系统中,删除文件都是必须谨慎的操作.因为如果不小心删除了重要文件,就会导致个人或公司出现重大的损失.类似于windows系统误删了文件,可以使用一些软件进行恢复操作.Linux也是有几款软件 ...

  6. Linux 误删文件恢复命令及方法!

    前言 无论在哪个系统中,删除文件都是必须谨慎的操作. 因为如果不小心删除了重要文件,就会导致个人或公司出现重大的损失. 类似于windows系统误删了文件,可以使用一些软件进行恢复操作.Linux也是 ...

  7. 超全!Linux 误删文件恢复命令及方法

    点击上方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 前言 无论在哪个系统中,删除文件都是必须谨慎的操作. ...

  8. 飞刀篮球搜众神推球,Linux 误删文件恢复命令及方法

    无论在哪个系统中,删除文件都是必须谨慎的操作. 因为如果不小心删除了重要文件,就会导致个人或公司出现重大的损失. 类似于windows系统误删了文件,可以使用一些软件进行恢复操作.Linux也是有几款 ...

  9. Linux 误删文件恢复命令及方法

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 http://r6d.cn/JzNf 推荐:https://www.xttblo ...

最新文章

  1. 嵌入式linux结构框图,嵌入式linux系统的结构
  2. Halcon初学者知识 【11】自定义算子和应用实例
  3. ajax点评wnv冠军,对话wNv高层探知焦点 剑指世界冠军铸就王者路
  4. 信息收集——Office钓鱼
  5. 计算机需要 更新 无法卸载,电脑更新变卡顿,只要卸载它就能解决?
  6. GCD之线程挂起与恢复
  7. 腾讯第一季度总收入1353亿元 净利润478亿元
  8. Spring学习总结(19)——Spring概念详解
  9. Ubuntu 15.04 或更新版 更新源/Ubuntu 15.04 Vivid Vervet更新源已可用
  10. Java_API文档
  11. 百度离线地图——瓦片地图下载
  12. 【pdanet】免流热点共享 破解pdanet
  13. 免费、可商用的素材网站
  14. Excel常用电子表格公式大全【汇总篇】
  15. Linux云计算架构-设置计划任务与管理日志
  16. Linux如何制作efi启动盘,教你制作macOS+Ubuntu+WindowsPE超级启动盘(仅支持UEFI)
  17. 求字符串的全排列的递归实现(对字符串中有相同字符也适用)
  18. 离散数学之数理结构推理理论
  19. 程序员如何实现35岁完美退休
  20. jQuery(二十二)

热门文章

  1. Qt项目移植出现的问题(No rule to make target ‘……’, needed by ‘……’. Stop.)
  2. RocketMQ5.0.0事务消息
  3. 实现正六边形、圆形及带倒角正六边形的头像显示
  4. 电脑重置能解决大部分问题_重置所有Internet Explorer 8设置以解决稳定性问题
  5. GoJS去除水印方法
  6. java设计模式总结1
  7. !!. 与 ?. 的区别
  8. 曲面显示器和平面显示器玩游戏买哪个好
  9. python广告营销平台_python微信开发平台
  10. 微信网页开发问题汇总