前言
讲完内部存储,现在从安卓根目录开始讲,尽量讲些有用的。还是那句话,如果有错误请指出。
根目录/
/acct/
虽然我知道的不多,但是这个目录肯定不是网上所说的"系统回收站",太离谱了这写的。
熟悉linux的人可能知道,原生linux并不拥有这个目录(根目录没有)。没错,这是一个专属于安卓的目录(大概只是和linux地址不同吧)。
下面是一个wsl的根目录,可以看到没有acct目录
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
我先使用”爱玩机工具箱“来举例。
- 先查看一个进程。
可以看到pid为2026,而user也就是用户名为u0_a157,按照我们前面的理论,其对应的uid为10157,于是乎,对应的目录名称为uid_10157
- 来到/acct/目录下
找到uid_10157
进到目录中
进来果然看到了对应的进程目录。
- 使用Thanox查看进程
假如你像下图一样只能看到进程号Pid和进程名称Name
那么你可以在终端中(比如耳熟能详的mt管理器的mt终端)使用如下命令来查看一个具体的进程的相关信息。
首先su获取root权限
su
cat /proc/<PID>/status
把替换成具体pid即可
比如
cat /proc/18535/status
这个进程是"MIUI SDK"
可以看到uid为10204,那么对应的用户名为u0_a204(虽然找目录不用用户名),对应的目录为
/acct/uid_10204
然后再进去就能看见一个对应pid的目录了,比如pid_18535。
其下的文件显然普通用户去了解也没有什么必要,下面的内容随便看看就是了。
- cgroup.clone_children
老实说我不清楚这个文件是干什么的,但是我找到了比较合理的解释。
该文件内部文本有两个取值
- 1表示新进程会和父进程在同一个cgroup中。
- 0表示新进程会被放到父进程cgroup的根cgroup中。
也就是说,cgroup.clone_children控制clone()的进程是否继承父进程的cgroup成员资格。
而cgroup是什么呢
在 Linux 系统中,cgroup 是一种用于限制、隔离和管理进程资源使用的机制。cgroup 允许您将进程分组,并为每个组设置资源限制,例如 CPU 时间、内存使用、网络带宽等。
- cgroup.procs
将pid写入cgroup.procs,则该pid所在的线程组及该pid的子进程等都会自动加入到cgroup中。
- cpuacct.stat
统计cgroup中所有任务的用户和内核分别使用CPU的时长
- cpuacct.usage
报告一个cgroup中所有任务(包括其子孙层级中的所有任务)使用CPU的总时间(纳秒),该文件时可以写入0值的,用来进行重置统计信息。
- cpuacct.usage_all
详细输出文件cpuacct.usage_percpu_user和cpuacct.usage_percpu_sys的内容。
- cpuacct.usage_percpu
报告一个cgroup中所有任务(包括其子孙层级中的所有任务)在每个CPU使用CPU的时间(纳秒)。
- cpuacct.usage_percpu_sys
报告一个cgroup中所有任务(包括其子孙层级中的所有任务)在每个CPU上使用内核态CPU的时间(纳秒)。
- cpuacct.usage_percpu_user
报告一个cgroup中所有任务(包括其子孙层级中的所有任务)在每个CPU上使用用户态CPU的时间(纳秒)。
- cpuacct.usage_sys
报告一个cgroup中所有任务(包括其子孙层级中的所有任务)使用内核态CPU的总时间(纳秒)。
- cpuacct.usage_user
报告一个cgroup中所有任务(包括其子孙层级中的所有任务)使用用户态CPU的总时间(纳秒)。
- notify_on_release
notify_on_release 是一个与文件系统监视相关的配置选项,它用于指定在文件或目录被释放(即被删除或移动到其他位置)时是否发送通知。
- tasks
tasks 文件是一个特殊的文件,它列出了属于该进程的所有线程的 PID。
结语
到这里技术性方面的东西就写完了,后面都是些不太重要的废话,赶时间就不用看了。
由于之前没注意过根目录下的文件,现在不清楚是MIUI搞特殊不使用acct,还是说Android 13换用了其他目录。
说要讲些有用的却没有做到,主要是写着写着就发现没什么时间了,索性就稍微深挖一下这个目录,至于那些文件(配置文件),我也感到很头大,就当记录一下,回不回来看那就另说了。