【Android】根目录探索,acct目录是什么?

462 阅读6分钟

前言

讲完内部存储,现在从安卓根目录开始讲,尽量讲些有用的。还是那句话,如果有错误请指出。

根目录/

/acct/

虽然我知道的不多,但是这个目录肯定不是网上所说的"系统回收站",太离谱了这写的。

熟悉linux的人可能知道,原生linux并不拥有这个目录(根目录没有)。没错,这是一个专属于安卓的目录(大概只是和linux地址不同吧)。

下面是一个wsl的根目录,可以看到没有acct目录

1.png

acct是"accounting"的缩写,表示对进程资源使用情况的统计和记录。在该目录下,会有"uid_"开头的一堆文件夹,一个用户一个目录。

在安卓系统中,每个应用程序都运行在一个独立的进程中,并具有自己的用户身份和权限。

所以以上的目录都属于一个应用程序。而在安卓中,0号uid为root,大家都知道,1号为deamon,守护进程,2号为bin,即binary意为二进制可执行文件,后面1000号为system,往后直到9999都是系统的用户,应该是和linux的系统用户是一个道理(也叫伪用户)。

到10000号,u0_a0,从这里开始基本上是大家熟知的系统应用的用户号,比如什么日历啊时钟啊之类的。10000号之后都是应用了(为人熟知的印象中的系统应用以及第三方应用)。

扯得有点远了,我们回到正题。

不知道为什么我的MIUI14(Android 13)的acct目录大小为0,里面没有文件。

于是我使用Android 11的类原生进行研究。

如果应用的用户名为u0_a157,那么对应的uid就是10157,在acct里面显示的就是uid_10157。我们进入对应的目录,可以看到对应的pid进程目录。

以下纯测试,没有什么实际意义,感兴趣且有root权限可以也试一下。

那么我们来试一下。打开一个比较专业的,能看进程的软件,比如爱玩机工具箱、scene、Thanox

我先使用”爱玩机工具箱“来举例。

  1. 先查看一个进程。

4.png

可以看到pid为2026,而user也就是用户名为u0_a157,按照我们前面的理论,其对应的uid为10157,于是乎,对应的目录名称为uid_10157

  1. 来到/acct/目录下 5.png

找到uid_10157

进到目录中

6.png

进来果然看到了对应的进程目录。


  • 使用Thanox查看进程

假如你像下图一样只能看到进程号Pid和进程名称Name

2.jpg

那么你可以在终端中(比如耳熟能详的mt管理器的mt终端)使用如下命令来查看一个具体的进程的相关信息。

首先su获取root权限

su
cat /proc/<PID>/status

把替换成具体pid即可

比如

cat /proc/18535/status

这个进程是"MIUI SDK"

2.jpg

可以看到uid为10204,那么对应的用户名为u0_a204(虽然找目录不用用户名),对应的目录为

/acct/uid_10204

然后再进去就能看见一个对应pid的目录了,比如pid_18535。


其下的文件显然普通用户去了解也没有什么必要,下面的内容随便看看就是了。

  1. cgroup.clone_children

老实说我不清楚这个文件是干什么的,但是我找到了比较合理的解释。

该文件内部文本有两个取值

  • 1表示新进程会和父进程在同一个cgroup中。
  • 0表示新进程会被放到父进程cgroup的根cgroup中。

也就是说,cgroup.clone_children控制clone()的进程是否继承父进程的cgroup成员资格。

而cgroup是什么呢

在 Linux 系统中,cgroup 是一种用于限制、隔离和管理进程资源使用的机制。cgroup 允许您将进程分组,并为每个组设置资源限制,例如 CPU 时间、内存使用、网络带宽等。

  1. cgroup.procs

将pid写入cgroup.procs,则该pid所在的线程组及该pid的子进程等都会自动加入到cgroup中。

  1. cpuacct.stat

统计cgroup中所有任务的用户和内核分别使用CPU的时长

  1. cpuacct.usage

报告一个cgroup中所有任务(包括其子孙层级中的所有任务)使用CPU的总时间(纳秒),该文件时可以写入0值的,用来进行重置统计信息。

  1. cpuacct.usage_all

详细输出文件cpuacct.usage_percpu_user和cpuacct.usage_percpu_sys的内容。

  1. cpuacct.usage_percpu

报告一个cgroup中所有任务(包括其子孙层级中的所有任务)在每个CPU使用CPU的时间(纳秒)。

  1. cpuacct.usage_percpu_sys

报告一个cgroup中所有任务(包括其子孙层级中的所有任务)在每个CPU上使用内核态CPU的时间(纳秒)。

  1. cpuacct.usage_percpu_user

报告一个cgroup中所有任务(包括其子孙层级中的所有任务)在每个CPU上使用用户态CPU的时间(纳秒)。

  1. cpuacct.usage_sys

报告一个cgroup中所有任务(包括其子孙层级中的所有任务)使用内核态CPU的总时间(纳秒)。

  1. cpuacct.usage_user

报告一个cgroup中所有任务(包括其子孙层级中的所有任务)使用用户态CPU的总时间(纳秒)。

  1. notify_on_release

notify_on_release 是一个与文件系统监视相关的配置选项,它用于指定在文件或目录被释放(即被删除或移动到其他位置)时是否发送通知。

  1. tasks

tasks 文件是一个特殊的文件,它列出了属于该进程的所有线程的 PID。

结语

到这里技术性方面的东西就写完了,后面都是些不太重要的废话,赶时间就不用看了。

由于之前没注意过根目录下的文件,现在不清楚是MIUI搞特殊不使用acct,还是说Android 13换用了其他目录。

说要讲些有用的却没有做到,主要是写着写着就发现没什么时间了,索性就稍微深挖一下这个目录,至于那些文件(配置文件),我也感到很头大,就当记录一下,回不回来看那就另说了。