如何取得/etc/hosts 文件的权限对应的数字内容,如-rw-r--r-- 为 644,要求使用命令取得 644 这样的数字...

本文介绍如何使用stat命令查看文件权限,并提供了几种从输出中提取权限数字的方法,包括使用awk、sed和grep等工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题考察的内容是怎么查看文件的权限,以及对权限对应数字的过滤

首先查看权限对应的数字内容使用stat命令来查看

[root@zhang ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 16826902 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-27 19:30:01.140839849 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2019-03-27 19:27:19.304832132 +0800
Birth: -

然后对644进行过滤(方法有多种)

1 awk先取行 再取列

[root@zhang ~]# stat /etc/hosts|awk 'NR==4'
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[root@zhang~]# stat /etc/hosts|awk -F "[0/]" 'NR==4{print $2}'
644

2 sed 先取行 再去掉开头 去掉结尾
(1)[root@zhang ~]# stat /etc/hosts|sed -n 4p
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[root@zhang ~]# stat /etc/hosts|sed -nr '4s#^.(0(.)/-.*$#\1#gp'
644

(2)sed的后向引用

[root@zhang ~]# stat /etc/hosts|sed -n 's#^.*0\(.*\)/-r.*$#\1#gp'
644

3利用grep来进行查找(不建议使用)

[root@zhang ~]# stat /etc/hosts|grep '644'

644

转载于:https://www.cnblogs.com/zqcyunwei/p/10612566.html

<think>好的,我现在需要解决用户在使用ADB命令推送文件到Android设备时遇到的“read-only file system”错误,特别是针对/etc/hosts文件的问题。首先,我应该回忆一下相关的知识,并结合提供的引用内容来整理解决方案。 用户提到他们已获得root权限,但在执行adb push时仍然遇到问题。根据引用[1]和[2],错误是由于目标文件系统处于只读模式导致的。引用[5]进一步说明,/system目录通常以ro(只读)模式挂载,需要重新挂载为rw(读写)模式。这应该是解决这个问题的关键步骤。 接下来,我需要整理具体的解决步骤。首先,用户需要以root权限进入adb shell,然后重新挂载/system分区为可读写。命令应该是`adb shell`进入shell,然后`su`获取root权限,再执行`mount -o remount,rw /system`。完成文件操作后,可能需要重新挂载为只读以确保系统安全,但这一步可能不是必须的,视情况而定。 另外,用户可能没有正确启用root权限,虽然他们提到已经获取,但需要确认设备是否真正授予了root权限。例如,某些设备需要在开发者选项中允许adb root访问,或者使用`adb root`命令重启adbd守护进程。 还有可能涉及到文件系统的其他部分,比如/system分区是否有足够的空间,或者文件是否被锁定。不过根据引用[5],主要的解决方法还是重新挂载分区为可写模式。 此外,引用[4]提到了使用特定的debianfs包,这可能与某些定制环境有关,但用户的问题似乎更普遍,可能不需要这一步。引用[3]提到的外部存储挂载路径可能与当前问题无关,因为用户操作的是/system/etc/hosts,属于系统分区。 综合这些信息,解决方案应包括以下步骤: 1. 确认adb已获取root权限。 2. 重新挂载/system分区为可读写。 3. 执行adb push操作。 4. 恢复挂载为只读(可选)。 同时需要注意,某些设备可能需要解锁bootloader或使用自定义恢复来修改系统分区。如果步骤执行后仍失败,可能需要检查设备的型号和系统版本,是否有其他限制,如SELinux策略等,可能需要临时禁用SELinux或调整策略。 最后,生成相关问题,帮助用户进一步理解或解决潜在的其他问题。</think>### 解决方案:解决ADB推送文件时“read-only file system”错误 #### 1. **确认ADB已获取Root权限** - 执行`adb root`命令,确保adb以root权限运行: ```bash adb root ``` - 若设备提示未授权,需在开发者选项中启用**USB调试(安全设置)**或使用`su`命令手动授权[^1][^5]。 #### 2. **重新挂载文件系统为可读写模式** - 进入adb shell并获取root权限: ```bash adb shell su ``` - 重新挂载`/system`分区为读写模式: ```bash mount -o remount,rw /system ``` 若目标路径为其他分区(如`/vendor`),需替换为对应路径。 #### 3. **执行文件推送操作** - 退出adb shell(输入`exit`两次),执行推送命令: ```bash adb push hosts /etc/hosts ``` - 若仍失败,尝试直接通过adb shell复制文件: ```bash adb shell "cp /sdcard/hosts /etc/hosts" ``` #### 4. **恢复文件系统为只读模式(可选)** - 修改完成后,建议恢复为只读模式以避免系统风险: ```bash mount -o remount,ro /system ``` #### 5. **特殊情况处理** - **SELinux限制**:若设备启用了SELinux,需临时禁用: ```bash adb shell setenforce 0 ``` 操作完成后恢复: ```bash adb shell setenforce 1 ``` - **分区空间不足**:检查`/system`剩余空间: ```bash adb shell df /system ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值