NXP产品

rm -rf 恢复 「精华」rm-rf删除数据后还能恢复?

小编 2024-10-06 NXP产品 23 0

「精华」rm-rf删除数据后还能恢复?

背景

之所以写这篇文章,是因为切身体会,刚入门的时候做了一次在mount的情况下直接rm -rf的操作,一下子删了700G的附件,那时候直接懵了,后来跟小伙伴连夜补救,还好项目还没上线,重新做了次数据迁移~

因为上面的原因,后来专门研究了rm -rf后怎么去补救?用虚拟机 做了以下的实验,采用的是extundelete 这套方案,切实可行。不过小伙伴们千万别拿生产环境去试,恢复不回来不要说认识我啊!

原理

在Linux下可以通过“ls -id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:

查看inode

在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。

然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块、间接块等信息。

最后利用dd命令将这些信息备份出来,从而恢复数据文件。

介绍extundelete

1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复。

2. 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。

3. extundelete还是有很大的不完整性,基于整个磁盘的恢复功能较为强大,基于目录和文件的恢复还不够强大。

4. extundelete执行完毕后在当前目录生产一个RECOVERED_FILES目录,里面即是恢复出来的文件,还包括文件夹。

5.任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用。

umount /dev/partition

mount -o remount,ro /dev/partition

安装extundelete

extundelete 主页:http://extundelete.sourceforge.net/

1、下载extundelete

下载地址:http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 --0.2.4版本

[root@node1 opt]# cd extundelete/

[root@node1 extundelete]# ll

总用量 108

-rw-r--r-- 1 root root 108472 5月 24 05:04 extundelete-0.2.4.tar.bz2

[root@node1 extundelete]# tar -xvf extundelete-0.2.4.tar.bz2

extundelete-0.2.4/

extundelete-0.2.4/acinclude.m4

extundelete-0.2.4/missing

extundelete-0.2.4/autogen.sh

extundelete-0.2.4/aclocal.m4

extundelete-0.2.4/configure

extundelete-0.2.4/LICENSE

extundelete-0.2.4/README

extundelete-0.2.4/install-sh

extundelete-0.2.4/config.h.in

extundelete-0.2.4/src/

extundelete-0.2.4/src/extundelete.cc

extundelete-0.2.4/src/block.h

extundelete-0.2.4/src/kernel-jbd.h

extundelete-0.2.4/src/insertionops.cc

extundelete-0.2.4/src/block.c

extundelete-0.2.4/src/cli.cc

extundelete-0.2.4/src/extundelete-priv.h

extundelete-0.2.4/src/extundelete.h

extundelete-0.2.4/src/jfs_compat.h

extundelete-0.2.4/src/Makefile.in

extundelete-0.2.4/src/Makefile.am

extundelete-0.2.4/configure.ac

extundelete-0.2.4/depcomp

extundelete-0.2.4/Makefile.in

extundelete-0.2.4/Makefile.am

2、编译安装

[root@node1 extundelete]# cd extundelete-0.2.4

[root@node1 extundelete-0.2.4]# ll

总用量 356

-rw-r--r-- 1 1000 1000 3283 11月 3 2012 acinclude.m4

-rw-r--r-- 1 1000 1000 0 1月 4 2013 aclocal.m4

-rwxr-xr-x 1 1000 1000 372 12月 31 2012 autogen.sh

-rw-r--r-- 1 1000 1000 4780 1月 4 2013 config.h.in

-rwxr--r-- 1 1000 1000 231557 1月 4 2013 configure

-rw-r--r-- 1 1000 1000 5357 12月 31 2012 configure.ac

-rwxr-xr-x 1 1000 1000 20334 1月 4 2013 depcomp

-rwxr-xr-x 1 1000 1000 13998 1月 4 2013 install-sh

-rw-r--r-- 1 1000 1000 17987 11月 3 2012 LICENSE

-rw-r--r-- 1 1000 1000 916 12月 31 2012 Makefile.am

-rw-r--r-- 1 1000 1000 23644 1月 4 2013 Makefile.in

-rwxr-xr-x 1 1000 1000 10346 1月 4 2013 missing

-rw-r--r-- 1 1000 1000 1666 11月 3 2012 README

drwxr-xr-x 2 1000 1000 4096 1月 4 2013 src

[root@node1 extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete

Configuring extundelete 0.2.4

configure: error: Can't find ext2fs library

报错:configure: error: Can't find ext2fs library

由于extundelete依赖e2fsprogs,需要先安装e2fsprogs

[root@node1 extundelete-0.2.4]# yum -y install e2fsprogs e2fsprogs-devel

Loaded plugins: product-id, refresh-packagekit, security, subscription-manager

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Setting up Install Process

Package e2fsprogs-1.41.12-18.el6.x86_64 already installed and latest version

......

安装e2fsprogs后再次configure 成功。

[root@node1 extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install

Configuring extundelete 0.2.4

Writing generated files to disk

make -s all-recursive

Making all in src

extundelete.cc:571: 警告:未使用的参数‘flags’

Making install in src

/usr/bin/install -c extundelete '/usr/local/extundelete/bin'

3.查看工具版本

[root@node1 extundelete-0.2.4]# cd /usr/local/extundelete/bin/

[root@node1 bin]# ll

总用量 1160

-rwxr-xr-x 1 root root 1187055 5月 24 05:09 extundelete

[root@node1 bin]# ./extundelete -v

extundelete version 0.2.4

libext2fs version 1.41.12

Processor is little endian.

rm -rf 恢复实验

1. 创建文件系统

mkfs -t ext4 /dev/sdb1

2.查看文件系统类型

[root@node1 ~]# fdisk -l

Disk /dev/sda: 64.4 GB, 64424509440 bytes

255 heads, 63 sectors/track, 7832 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000d2842

Device Boot Start End Blocks Id System

/dev/sda1 * 1 26 204800 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2 26 287 2097152 82 Linux swap / Solaris

Partition 2 does not end on cylinder boundary.

/dev/sda3 287 7833 60611584 83 Linux

[root@node1 ~]# blkid /dev/sda1

/dev/sda1: UUID="14e9f1ea-0326-47ef-8c35-325a6fb7186d" TYPE="ext4"

[root@node1 ~]# blkid /dev/sda3

/dev/sda3: UUID="faab01ae-3d46-49dd-932f-837c8f45e5c0" TYPE="ext4"

[root@node1 ~]# blkid /dev/sda2

/dev/sda2: UUID="48b4bdaa-460e-468e-9102-fc3d4d3ca69b" TYPE="swap"

也可以用下面方法查看

[root@node1 ~]# file -s /dev/sda1

/dev/sda1: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (huge files)

[root@node1 ~]# file -s /dev/sda3

/dev/sda3: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (large files) (huge files)

[root@node1 ~]# file -s /dev/sda2

/dev/sda2: Linux/i386 swap file (new style) 1 (4K pages) size 524287 pages

3.创建一个delete目录,并挂载到刚创建的文件系统上,并创建文件,然后删除文件

[root@node1 home]# mkdir delete

[root@node1 home]# mount /dev/sda1 /home/delete/

[root@node1 home]# mount

/dev/sda3 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

.host:/ on /mnt/hgfs type vmhgfs (rw,ttl=1)

vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)

/dev/sr0 on /mnt/cdrom type iso9660 (ro)

gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)

/dev/sda1 on /home/delete type ext4 (rw)

[root@node1 delete]# ll

总用量 28333

-rw-r--r--. 1 root root 105195 11月 11 2013 config-2.6.32-431.el6.x86_64

drwxr-xr-x. 3 root root 1024 2月 6 23:46 efi

drwxr-xr-x. 2 root root 1024 2月 7 00:37 grub

-rw-------. 1 root root 17533084 2月 9 21:43 initramfs-2.6.32-431.el6.x86_64.img

-rw-------. 1 root root 4505771 2月 7 00:38 initrd-2.6.32-431.el6.x86_64kdump.img

drwx------. 2 root root 12288 2月 6 23:37 lost+found

-rw-r--r--. 1 root root 193758 11月 11 2013 symvers-2.6.32-431.el6.x86_64.gz

-rw-r--r--. 1 root root 2518236 11月 11 2013 System.map-2.6.32-431.el6.x86_64

-rwxr-xr-x. 1 root root 4128944 11月 11 2013 vmlinuz-2.6.32-431.el6.x86_64

[root@node1 delete]# vi index.txt #添加数据

[root@node1 delete]# rm -rf index.txt

4.卸载分区

注意如果是/ 根目录的删了,把磁盘挂载到其他机器做恢复

[root@node1 bin]# fuser -m -v /home/delete/

[root@node1 bin]# fuser -k /home/delete/ <-- 结束使用某分区的进程树

[root@node1 bin]# umount /home/delete/ <-- 卸载分区

[root@zw_test_26_74 ~]# umount /dev/sdb3

5.使用extundelete查看分区上存在的文件

extundelete --inode 2 /dev/sdb2

# --inode 为查找某i节点中的内容,使用2则说明为搜索,如果需要进入目录搜索,只须要指定目录I节点即可

[root@node1 bin]# ./extundelete --inode 2 /dev/sda1

NOTICE: Extended attributes are not restored.

WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.

The partition should be unmounted to undelete any files without further data loss.

If the partition is not currently mounted, this message indicates

it was improperly unmounted, and you should run fsck before continuing.

If you decide to continue, extundelete may overwrite some of the deleted

files and make recovering those files impossible. You should unmount the

file system and check it with fsck before using extundelete.

Would you like to continue? (y/n)

y

Loading filesystem metadata ... 25 groups loaded.

Group: 0

Contents of inode 2:

0000 | 6d 41 00 00 00 04 00 00 ae a4 24 59 97 a3 24 59 | mA........$Y..$Y

0010 | 97 a3 24 59 00 00 00 00 00 00 05 00 04 00 00 00 | ..$Y............

0020 | 00 00 00 00 1b 00 00 00 23 11 00 00 00 00 00 00 | ........#.......

0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

0060 | 00 00 00 00 00 00 00 00 31 11 00 00 00 00 00 00 | ........1.......

0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................

Inode is Allocated

File mode: 16749

Low 16 bits of Owner Uid: 0

Size in bytes: 1024

Access time: 1495573678

Creation time: 1495573399

Modification time: 1495573399

Deletion Time: 0

Low 16 bits of Group Id: 0

Links count: 5

Blocks count: 4

File flags: 0

File version (for NFS): 0

File ACL: 4401

Directory ACL: 0

Fragment address: 0

Direct blocks: 4387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Indirect block: 0

Double indirect block: 0

Triple indirect block: 0

File name | Inode number | Deleted status

. 2

.. 2

lost+found 11

grub 12

efi 19

.index.txt.swp 24 Deleted

.vmlinuz-2.6.32-431.el6.x86_64.hmac 14

System.map-2.6.32-431.el6.x86_64 15

config-2.6.32-431.el6.x86_64 16

symvers-2.6.32-431.el6.x86_64.gz 17

vmlinuz-2.6.32-431.el6.x86_64 18

initramfs-2.6.32-431.el6.x86_64.img 23

initrd-2.6.32-431.el6.x86_64kdump.img 39

index.txt 41 Deleted

上面标记为deleted的index.txt 就是误删的数据

6. 恢复

[root@node1 bin]# ./extundelete --restore-all /dev/sda1

NOTICE: Extended attributes are not restored.

WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.

The partition should be unmounted to undelete any files without further data loss.

If the partition is not currently mounted, this message indicates

it was improperly unmounted, and you should run fsck before continuing.

If you decide to continue, extundelete may overwrite some of the deleted

files and make recovering those files impossible. You should unmount the

file system and check it with fsck before using extundelete.

Would you like to continue? (y/n)

y

Loading filesystem metadata ... 25 groups loaded.

Loading journal descriptors ... 89 descriptors loaded.

Searching for recoverable inodes in directory / ...

2 recoverable inodes found.

Looking through the directory structure for deleted files ...

Unable to restore inode 24 (.index.txt.swp): Space has been reallocated.

0 recoverable inodes still lost.

[root@node1 bin]# ll

总用量 1164

-rwxr-xr-x 1 root root 1187055 5月 24 05:09 extundelete

drwxr-xr-x 2 root root 4096 5月 24 05:18 RECOVERED_FILES

[root@node1 bin]# ll RECOVERED_FILES/

总用量 4

-rw-r--r-- 1 root root 47 5月 24 05:18 index.txt

可以看到index.txt 已经恢复到RECOVERED_FILES 目录下了。

总结

当发现某个分区的数据被误删除后,要做的第一件事是立刻卸载被误删除文件所在的分区,或者重新以只读方式挂载此分区。

这么做的原因其实很简单:删除一个文件,就是将文件inode节点中的扇区指针清除,同时,释放这些数据对应的数据块,而真实的文件还存留在磁盘分区中。但是这些被删除的文件不一定会一直存留在磁盘中,当这些释放的数据块被操作系统重新分配时,那些被删除的数据就会被覆盖。 因此,在数据误删除后,马上卸载文件所在分区可以降低数据块中数据被覆盖的风险,进而提高成功恢复数据的机率。

最后,祝大家永远不要用到extundelete!

觉得有用的就走波关注吧 ~

不小心执行了 rm -rf 怎么办?

优质文章,第一时间送达

作者 | 老周

链接 | cnblogs.com/zhouyu629/p/3734494.html

经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据。对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错。也希望遇到问题的朋友能找到一丝灵感解决问题。

事故背景

安排一个妹子在一台生产服务器上安装Oracle,妹子边研究边安装,感觉装的不对,准备卸载重新安装。从网上找到卸载方法,其中要执行一行命令删除Oracle的安装目录,命令如下:

rm -rf $ORACLE_BASE/*

如果ORACLE_BASE这个变量没有赋值,那命令就变成了

rm -rf /*

等等,妹子使用的可是root账户啊。就这样,把整个盘的文件全部删除了,包括应用Tomcat、MySQL数据库 and so on。

MySql数据库不是在运行吗?linux能删除正在执行的文件?反正是彻底删除了,最后还剩一个tomcat的log文件,估计是文件过大,一时没有删除成功

看着妹子自责的眼神,又是因为这事是我安排她做的,也没有跟她讲清厉害关系,没有任何培训,责任只能一个人背了,况且怎么能让美女背负这个责任呢?

打电话到机房,将盘挂到另一台服务器上,ssh上去查看文件全部被清,这台服务器运行的可是一个客户的生产系统啊,已经运行大半年了,得尽快恢复啊。于是找来脱机备份的数据库,发现备份文件只有1kb,里面只有几行熟悉的mysqldump注释(难道是crontab执行的备份脚本有问题),真是屋漏偏逢连夜雨啊。

想起来一位领导说过的案例:当一个生产系统挂掉以后,发现所有备份都有问题,刻录的光盘也有划痕,磁带机也坏了(一个业界前辈,估计以前还用光盘做备份了),没想到今天真的应验到我的身上了,怎么办?

部门领导知道情况后,已经做了最坏的B计划:领导亲自带队和产品AA周日赶到客户所在的地市,星期一去领导层沟通;BB和CC去客户管理员那边想办法说服客户。

救命稻草: ext3grep

赶快到网上去查资料进行误删数据恢复,还真找到一款ext3grep能够恢复通过rm -rf删除的文件,我们磁盘也是ext3格式,且网上有不少的成功案例。于是燃起了一丝希望,赶快对盘umount,防止重新写入补删文件扇区。下载ext3grep,安装(编译安装过程艰辛暂且不表)。

先执行扫描文件名命令:

ext3grep /dev/vgdata/LogVol00 --dump-names

打印出了所有被删除文件及路径,心中狂喜,不用执行B计划了,文件都在呢。

这款软件不能按目录恢复文件,只能执行恢复全部命令:

ext3grep /dev/vgdata/LogVol00 --restore-all

结果当前盘空间不足,没办法只能恢复文件,尝试了几个文件,居然部分成功部分失败

ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/aqsh/tb_b_attench.MYD

心里不禁一凉,难道是删除磁盘上被写过文件了?恢复机率不大了啊,能恢复几个算几个吧,说不定重要数据文件刚好在能恢复的MYD文件中。于是先将所有文件名重定向到一个文件文件中

ext3grep /dev/vgdata/LogVol00 --dump-names >/usr/allnames.txt

过滤出来所有mysql数据库的文件名存成,mysqltbname.txt

编写脚本恢复文件:

while read LINEdo echo "begin to restore file " $LINE ext3grep /dev/vgdata/LogVol00 --restore-file $LINE if [ $? != 0 ] then echo "restore failed, exit" # exit 1 fidone < ./mysqltbname.txt

执行,大概运行了20分钟,恢复了40多个文件,但不够啊,我们将近100张表,每张表frm,myd,myi三个文件,怎么说也有300多个左右啊!!将找回来的文件附到现有数据库上,更要文件权限为777后,重启mysql,也算是找回一部分数据了,但客户重要的考勤签到数据、手机端上报数据(据说客户按这些数据做员工绩效的)还没找回来啊。

咋 办?中间又试了另一款工具extundelete,跟ext3grep语法基本一致,原理应该也一样了,但是据说能按目录恢复,好吧试一试。

extundelete /dev/vgdata/LogVol00 --restore-directory var/lib/mysql/aqsh

果然不出所料,恢复不出来!那些文件已被破坏了。跟领导汇报,执行B计划吧。无奈之下下班回家(周末了,回去休息一下,想想办法吧)

灵机一动: binlog

第二天早晨一早就醒了(心里有事啊),背上电脑,去公司(这个周末算是报销了,不挨批,通报,罚款,开除就不错了,还过什么周末啊)。

依旧运行ext3grep,extundelete,也就那几招啊,把系统架到测试服务器上,看看数据能不能想办法补一补吧。在测试服务器上进行mysqldump,恢复文件,覆盖恢复回来的文件,给文件加权限,重启mysql。

wait,wait,不是有binlog吗?我们服务都要求开启binlog,说不定能通过binlog里恢复数据呢?

于是从dump出来的文件名里找到binlog的文件,一共三个,mysql-binlog0001,mysql-bin.000009,mysql-bin.000010,恢复一下0001

ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/mysql-bin.000001

居然失败了。

再看另两个文件,mysql-bin.000010大概几百MB,应该靠谱一点,执行还原命令,居然成功了!

赶快scp到测试服务器。执行binlog还原。

mysqlbinlog /usr/mysql-bin.000010 | mysql -uroot -p

输入密码,卡住了(好现象),经过漫长的等待,终于结束了。打开应用,哦,感谢cctv,mtv,数据回来了!

事故总结

经过此次事故,虽然数据很幸运能找回来了,但是过程却是惊心动迫。也为自己的错误所带来的后果,给同事和领导带来的连带责任而后怕。也希望谨记此次事故,以后不再犯同样的错误。事故反思如下:

1、 本次安排MM进行服务器维护时没有提前对她进行说明厉害情况,自己也未重视,管理混乱,流程混乱。一个在线的生产系统,任何一个改动一定要先谋而后动。2、 自动备份出现问题,没有任何人检查。脱机备份人员每次从服务器上下载1k的文件却从未重视。需要明确大家在工作岗位上的责任。3、 事故发生后,没有及时发现,造成部分数据写入磁盘,造成不可恢复问题。需要编写应用监控程序,服务一旦有异常,短信告警相关责任人。

根据评论提醒,再加一条:

4、 不能使用root用户来操作。应该在服务器上开设不同权限级别的用户。

通过本次事故,几位跟这个项目和事故没有任何关系的同事,主动前来帮忙,查资料,帮测试,有一位同事还帮忙到晚上1点多钟进行数据恢复测试。同时产品经理在想到面向客户的巨大压力的情况下,没有慌乱而责怪开发人员和具体操作人,而让大家能静下心来想解决方案。部门领导也积极主动的帮忙想办法,陪我们加班测试,实时跟踪事情进程。

通过大家的共同努力,终于事情相对圆满结束,接下来,周一上午进行集体反思,总结经验教训,这类事故一定尽量大努力进行避免。

工具链接:

1、ext3grep:

https://code.google.com/p/ext3grep

编译安装依赖包比较多,可以到网上搜索如何安装。可惜的是作者给出的howto被墙了,我翻墙将how to 的pdf文档下载下来了,读完后你将会对linux的文件系统有进一步的认识。下载howto。

这个工具有一个bug,出错后不会向下执行

ext3grep:init_directories.cc:534:voidinit_directories:Assertionlost_plus_found_directory_iter!=all_directories.end' failed

从而造成恢复失败,作者放出了一个补丁。不明白为什么作者新版没有把这个补丁加进去。

https://dwz.cn/f3uJ6m1x

2、extundelete:

http://extundelete.sourceforge.net

功能跟ext3grep差不多,原理应该也差不多。只是号称可以还原目录,我这里没有试验成功。

如果喜欢本篇文章,欢迎转发、点赞。关注订阅号「Web项目聚集地」,回复「全栈」即可获取 2019 年最新 Java、Python、前端学习视频资源。

相关问答

rm rf 怎么 恢复- ZOL问答

恢复举报电源海盗船6人讨论6388次围观关注问题写回答讨论回答(6)chenchenhr删除的文件可以用软件恢复的,你可以用全能文件恢复。懂得数据恢复原理知...

rm-rf 执行以后,怎么办?

1立即停机,不要指望能够进入以前的系统。千万千万不要重新安装系统后再试图用软件恢复,那个时候不管用任何方式都是徒劳,切记切记!!2下面是方法,如果系...

linux rm rf 什么命令都没法使用-ZOL问答

rm-rf*删除当前目录下的所有文件这个命令很危险,应避免使用。所删除的文件,一般都不能恢复!所以文件的都没有了,命令也就都没有了有用(0)回复carol_we...

如何 恢复 LINUX中意外删除的文件?

Linux系统是比较特殊的,不像Windows系统自带就有回收站的功能。所以在Linux系统下我们是不建议大家直接使用rm-rf这类指令的,因为太危险了。所以有人质疑,...

xcode select有什么用?

xcode-select当安装多个xcode的版本,使用该工具使用指定的版本。Printorchangethepathtotheactivedeveloperdirectory....

linux不小心手动删除了dev/sda,怎么处理-ZOL问答

删除设备文件不会损坏你的分区表。方法1,重新启动方法2,查看sda1的设备号,比如#ls-al/dev/sda1brw-rw----1rootdisk8,1Jul71...

为什么佳能 RF 镜头不能转接给单反机身使用?反之可以?-ZOL问答

都买得起佳能RF镜头了,有什么必要转接到佳能单反上使用呢?一、佳能单反的镜头,虽然很多很多,但是,马上就是2020年了其实,很多佳能单反镜头,都已经过时了,真的...

连接WLAN时只显示已保存,连接不上是什么原因?

恢复出厂设置之后一般能解决。或者尝试一下root之后执行adbshell"rm-rf/data/misc/wifi",这样会删除大部分的wifi配置文件,也有很大概率解决这...

怎么判断题目问的是 Rm ,还是 Rm-Rf 呢有没有什么技巧呀_会计学堂

怎么判断题目问的是Rm,还是Rm-Rf呢有没有什么技巧呀_会计学堂

财务管理中 Rm 中是不是包含着 Rf _会计学堂

[回答]Rm是市场平均的收益率:可以理解成市场上的一个平均水平Rf是无风险利率Rm-Rf是市场风险溢价:市场减去无风险,就是市场平均风险带来的溢价Rm是市场...

猜你喜欢