我在 Android 上使用 Termux,并将文件从我的 SD 卡复制到我的 Termux 主文件夹。 (我使用具有 root 权限的文件资源管理器应用程序..)现在,我的主目录中有该文件,我检查了我的用户名和组,并将我设置为该文件的所有者,并将权限设置为 777。
$ whoami
u0_a87
$ groups
u0_a87
$ su -c chown u0_a87:u0_a87 Files.zip
$ su -c chmod 777 Files.zip
$ ls -la
total 7292
drwx------ 2 u0_a87 u0_a87 4096 Jul 22 09:13 .
drwx------ 4 u0_a87 u0_a87 4096 Jul 22 09:13 ..
-rwxrwxrwx 1 u0_a87 u0_a87 7454766 Jul 22 01:24 Files.zip$ unzip
Files.zip
unzip: can't open Files.zip[.zip]
$ cat Files.zip
cat: Files.zip: Permission denied
为什么我还是无法访问?
顺便说一句,这工作得很好:
$ mkdir test
$ zip -r test.zip test
adding: test/ (stored 0%)
$ ls -la
total 7300
drwx------ 3 u0_a87 u0_a87 4096 Jul 22 09:31 .
drwx------ 4 u0_a87 u0_a87 4096 Jul 22 09:13 ..
-rwxrwxrwx 1 u0_a87 u0_a87 7454766 Jul 22 01:24 Files.zip
drwx------ 2 u0_a87 u0_a87 4096 Jul 22 09:31 test
-rw------- 1 u0_a87 u0_a87 160 Jul 22 09:31 test.zip
$ rm -rf test
$ unzip test.zip
Archive: test.zip
$ unzip test.zip
Archive: test.zip
$ ls -la
total 7300
drwx------ 3 u0_a87 u0_a87 4096 Jul 22 09:31 .
drwx------ 4 u0_a87 u0_a87 4096 Jul 22 09:13 ..
-rwxrwxrwx 1 u0_a87 u0_a87 7454766 Jul 22 01:24 Files.zip
drwx------ 2 u0_a87 u0_a87 4096 Jul 22 09:31 test
-rw------- 1 u0_a87 u0_a87 160 Jul 22 09:31 test.zip
我缺少什么,如何在不使用 su/sudo 等的情况下从我的用户帐户访问该文件?
我还尝试找出该文件上是否有任何扩展属性。根据互联网 ls -l 会告诉我有一个+
字符的扩展属性(例如-rwxrwxrwx+
)。正如您在上面看到的,情况并非如此。为了确定,我还使用以下attr
命令进行了检查:
$ attr -l ./Files.zip
Attribute "selinux" has a 28 byte value for ./Files.zip
$ attr -g selinux ./Files.zip
attr_get: No data available
Could not get "selinux" for ./Files.zip
$ su -c attr -l ./Files.zip
sush: attr: not found
$ su -c attr -g selinux ./Files.zip
sush: attr: not found
结果我不清楚。我不明白为什么它告诉我有一个“selinux”属性,但随后拒绝给我该值,然后当我尝试使用su -c
它时甚至没有列出“selinux”属性,更不用说获取该值了失败。
答案1
我遇到了完全相同的问题。虽然我不明白这里到底发生了什么,但解决方法是不使用单独的文件资源管理器来复制文件。相反,请确保 termux 具有相关的 Android 权限(设置 -> 应用程序 -> 权限;和/或执行 termux-setup-storage)。
在您的 termux 主文件夹中应该有另一个名为 storage 的文件夹,它符号链接到您的 SD 卡。
答案2
我有 android 7x - 作为root:restorecon copy_of_file.db
我遇到了同样的问题,并得到了问题中详细说明的相同结果。 termux wiki 提供了足够的线索来解决这个问题:您需要能够运行restorecon
(作为 root,在本例中为tsudo
)。