android文件系统目录结构

安卓下的文件系统

安卓的存储

一部Android手机存在不同的存储空间类型。512MB ROM和512MB RAM,还有一个SDHC的扩展槽,标配2G内存卡,最大可支持32G内存卡。那么这些数据都是什么意思呢?

RAM:

RAM是Random Access Memory的缩写,中文名称是随机存取存储器。对于大多数的计算机和智能手机来说,RAM可以使一个软件快速并直接地读取和写入数据。当断电的时候RAM中的内容就会丢失,比如手机关机。RAM的大小决定了你能同时运行几个程序,也决定了你最大能加载多大的文件。当RAM不足的时候就会提示“Out of memory”错误。因为Android 2.2能提前预测当需要内存的时候,哪一个程序将要被从RAM中去除,所以RAM的信息并没有显示到“设置”菜单里。Android 2.2之前的版本最大只支持256MB内存,但是Android 2.2可以支持大容量内存,比如512MB RAM。

ROM:

相当于c盘
ROM是Read-Only Memory的缩写。以前常用来表示一旦出厂后上面存储的数据就不能被修改,同时即使没有电,数据也不会丢失。后来,一种新型的ROM——EEPROM,代替了原来的ROM。这种EEPROM允许用高一点的电压改写数据以便用于升级。以后Flash Memory(闪存)代替了EEPROM,闪存可以很容易的修改内容。现在我们说智能手机中的ROM一般指的是Flash Memory了。
手机中的ROM一般被分成若干区域。在Android中,有一部分被分给了操作系统,分给操作系统的这部分通常被保护起来,用户不能向里面写入数据。通常我们说Rooting指的就是获得操作系统的最高权限,因此我们可以读取和写入到这部分区域。比如替换系统默认的图片。
另外ROM还分了一部分空间给用户作为存储数据用,用于存储下载应用程序,保存用户数据等。这部分区域已经完全脱离了“Read-Only”,不再“只读”。在Android 2.2版本中,这部分空间被挂载到/mnt/asec目录下,我们可以进入查看下载的应用程序的APK文件。这部分空间有时被称作“手机内部存储”,想一下Windows中的C盘,windows的文件夹是不可见的并且在系统分区。在我的LG Optimus中,最初有180MB可用,这些可用的空间随着安装的程序的增多而变小。我们可以通过“设置”-“SD卡和手机内存”-“手机内部存储”来查看剩余的空间大小。最后强调一点,当可用空间变得非常小的时候,就不能再下载或者安装应用程序了。

Micro SD/SDHC

这是增加手机存储空间的唯一方法。他相当于一个计算机的外部硬盘。LG Optimus出厂的时候配置了一个2GB SD卡,我们用32GB及以下的内存卡替换掉他。SD卡目录挂载到/mnt/sdcard目录下,可以去“设置”-“SD卡和手机内存”-“SD卡”查看。
在SD卡上,你可以存储任何的数据,电影,音乐,照片等随你。如果你喜欢你可以把手机作为一个(非常昂贵的)读卡器^_^。在Android 2.2手机中,一部分应用程序可以从手机内部存储移动到SD卡上,以便节约宝贵的内部存储空间。不过你得记住,不是所有的程序或者程序的一部分能被移动到SD卡上的。所以,如果你的手机内部存储空间几乎没有空闲,通过一味的增大SD卡的容量,并不会对你有帮助。
当你想替换一个SD卡的时候,记得在抠下老的SD卡之前,先去“设置”-“SD卡和手机内存”-“SD卡”-“卸下SD卡”(别忘了Android是基于Linux的)。新插入的SD卡会自动的被加载。

文件夹

cache:是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。

sdcard:是Android手机中SD卡的文件夹路径。

etc:指向 /system/etc ,众所周知的配置文件存放目录。

sys:用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构。将设备的层次结构形象的反应到用户空间中,用户空间可以修改sysfs中的文件属性来修改设备的属性值 。

sbin:只放了一个用于调试的adbd程序。

proc:/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。

data:存放用户安装的软件以及各种数据。

root:空。

dev:Linux系统常规文件夹,里面的文件很多都是设备模拟的文件系统,一般用户无需理会。

system:是一个很重要的目录,系统中的大部分东西都在这里了

udisk/flash/udiskint:都是到/mnt相应目录的软链接(挂载目录)。

sqlite_stmt_journals:一个根目录下的tmpfs文件系统,用于存放临时文件数据。(Android原生态系统下存在)

/system目录的结构

xbin:下放了很多系统管理工具,这些工具不是到toolbox的链接,每个都是可执行程序。如果你看 到这些命令你会发现他们根本不常用,他们都是为系统管理员准备的,是一些系统管理和配置工具。这个文件夹的作用相当于标准Linux文件系统中的 /sbin。我的手机此目录下有busybox,肯定是改过的,应该是破解者加上的。

modules:使用来存放内核模块(主要是fs和net)和模块配置文件的地方。

framework: 是JAVA平台的一些核心文件,属于JAVA平台系统框架文件。里面的文件都是.jar和.odex文件。

fonts:很显然,这是字体库文件的存放目录。

etc:这里存放了系统中几乎所有的配置文件,根目录下的/etc就链结于此。

build.prop:是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似于/etc中的文件。

media:里面主要是存放了系统的铃声的,分为 notifications(通知)、ui(界面)、alarms(警告)和ringtones(铃声),里面都是.ogg音频文件。

bin:众所周知,是存放用户常用的工具程序的,其中大部分是到toolbox的链接(类似嵌入式Linux中的busybox)。toolbox应该是google简化版的busybox,我还没深入研究过。

usr :用户的配置文件,如键盘布局、共享、时区文件等等。您可以cat 来看看。

app:顾名思义,存放的是Android系统自带的JAVA应用程序。在这里的程序会随开机启动。(勒索软件)

lost+found:yaffs文件系统固有的,类似回收站的文件夹,只有是yaffs文件系统都会有。

lib:存放几乎所有的共享库(.so)文件。

sd:SD卡中的EXT2分区的挂载目录。

init.rc:一个初始化脚本,用于将/system/modules和/system/xbin挂载为cramfs,避免系统被无意破坏。

非目录的文件:

runme.sh用于 SD 卡中 EXT2文件系统的自动挂载动作的脚本。

init.trout.rc,init.rc,init.goldfish.rc 是初始化文件.

init是系统启动到文件系统的时候第一个运行的程序。

从以上的根目录分析来看,Android的根文件系统并非标准的Linux文件系统,所以以后还得仔细分析一下启动过程,才能认识Android系统。

linux下的文件结构

待补充