English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
서론
개발 중에 Android의 hosts 파일을 수정할 수가 있습니다. Android의 hosts 파일 경로는/시스템/etc/hosts 파일을 수정하기 전에 먼저 Android 기기에 루트 권한을 획득해야 합니다. 어떻게 루트를 설정할지에 대해 자세히 설명하지 않을 것입니다. 네트워크에서 찾아보면 많이 있으며 간단합니다.
이 문서에서 설명할 것은 명령 프롬프트에서 adb 프로그램을 통해 root된 휴대폰에 접근하여 hosts 파일을 컴퓨터에 드래그앤드롭하고 수정한 후 다시 휴대폰으로 복사하여 hosts 파일을 수정하는 방법입니다.
이제 구체적인 단계를 시작합니다:
C:\tools>adb pull /시스템/etc/hosts hosts.mod [100%] /시스템/etc/hosts
위의 명령어는 휴대폰의 hosts 파일을 컴퓨터에 드래그앤드롭하는 것입니다. [100%]은 파일이 전송이 완료되었음을 의미하며, hosts 파일을 수정할 수 있습니다. 수정이 완료되면 다음 명령어를 사용하여 휴대폰으로 업로드합니다:
C:\tools>adb push hosts.mod /시스템/etc/hosts 모든 것이 준비되었으므로, 수정된 hosts 파일을 업로드해 보세요./시스템/etc/adb: 오류: 'hosts.mod'를 ''로 복사하는 데 실패했습니다-hosts': 읽기
반환 메시지에서 파일 시스템이 읽기 전용임을 볼 수 있으며, 따라서 직접 업로드할 수 없습니다.
다음 명령어를 시도해 보세요. 성공할 수 있을까요?!
C:\tools>adb root # 도움말 문서에 따르면 이 명령어는 adbd 가드를 root 권한을 얻게 합니다 C:\tools>adb push hosts.mod /시스템/etc/hosts 모든 것이 준비되었으므로, 수정된 hosts 파일을 업로드해 보세요./시스템/etc/adb: 오류: 'hosts.mod'를 ''로 복사하는 데 실패했습니다-hosts': 읽기
아직도 안되나요? 다시 로드해야 할 것 같습니다/system 디렉토리만이 가능합니다.
C:\tools>adb remount remount 실패: 허용되지 않은 작업
권한이 없습니다? shell의 대법을 사용해야 할 때입니다!
C:\tools>adb shell * 데몬이 실행 중이 아닙니다. 지금 바로 해당 포트에서 시작합니다 5037 * * 데몬이 성공적으로 시작되었습니다 * shell@maguro:/ $ ls -al /시스템/etc/hosts -rw-r--r-- root root 25 2013-08-14 07그런 다음 hosts 파일의 속성을 확인합니다.
위의 마지막 줄에서 보면 hosts 파일은 파일 소유자만이 쓸 수 있으며, 다른 사람들은 읽기 전용입니다. 다른 사람들도 수정할 수 있도록 하려면, 다음 명령어를 사용하여 권한을 부여하고, hosts 파일의 속성을 변경해야 합니다.
shell@maguro:/ $ su
이 명령어를 처음으로 실행하는 경우, 휴대폰이 켜지고, SuperSU 앱이 권한 할당에 동의할지 여부를 묻습니다. 당연히 동의해야 합니다! 그런 다음, 터미널의 표시기는 $에서 #으로, @ 앞의 문자는 shell에서 root로 바뀙니다. 그런 다음 hosts 파일의 권한 속성을 수정할 수 있습니다.
root@maguro:/ # chmod +666 /시스템/etc/hosts Bad mode root@maguro:/ # chmod 666 /시스템/etc/hosts chmod에 실패했습니다 /시스템/etc/hosts: Read-hosts': 읽기
다시 Read-파일 시스템만이 읽기 전용입니다! 다음 명령어를 입력하여 확인해 보세요/system 디렉토리의 파일 시스템 세부 정보는 어디에 있나요?
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/시스템 /system ext4 ro, seclabel, relatime...
ext를 볼 수 있습니다.4그 뒤의 ro는 무엇인가요? read only의 약자로, 읽기 전용을 의미합니다. 이는 다음과 같은 의미를 가집니다:/system 디렉토리는 읽기 전용입니다. 이제 그것을 읽기와 쓰기가 가능하게 변경해야 합니다.
root@maguro:/ # mount -로, remount /시스템
위의-로드할 파일 시스템의 옵션을 지정하는 데 사용됩니다. 이 옵션들은 다음과 같습니다:
rw로 읽기 쓰기 모드로 로드됩니다.
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/시스템 /system ext4 rw, seclabel, relatime...
다시 확인해 보면, 원래 ro의 위치가 rw로 바뀌었다는 것을 볼 수 있습니다.
C:\tools>adb push hosts.mod /시스템/etc/hosts 모든 것이 준비되었으므로, 수정된 hosts 파일을 업로드해 보세요./시스템/etc/그러나 여기까지는 우리는 hosts 파일을 휴대폰으로 복사할 수 없습니다. 왜냐하면 hosts 파일의 권한 속성이 아직 변경되지 않았기 때문입니다. 강제로 업로드하면 다음과 같은 오류 메시지를 받을 것입니다:
hosts': 권한 거부
root@maguro:/ # chmod 666 /시스템/etc/hosts
다음 명령어를 실행합니다:
root@maguro:/ # ls -al /시스템/etc/hosts -rw-rw-rw- root root 25 2013-08-14 07그런 다음 hosts 파일의 속성을 확인합니다.
:00 hosts
모든 사람이 hosts 파일을 읽기 쓰기로 할 수 있음을 볼 수 있습니다.
C:\tools>adb push hosts.mod /시스템/etc/hosts 모든 것이 준비되었으므로, 수정된 hosts 파일을 업로드해 보세요./시스템/etc/adb: 오류: 'hosts.mod'를 ''로 복사하는 데 실패했습니다-hosts': 읽기
파일 시스템만 있습니다
어떻게 되었는지, 왜 복사가 실패하나요? 파일 시스템을 읽기 쓰기로 바꾸었지 않았나요?/그리고 원인을 찾는 과정에서奇妙한 일이 발견되었습니다. root 모드에서/system은 읽기 쓰기로 마운트되었지만, shell 모드에서
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/시스템 /system ext4 rw, seclabel, relatime... root@maguro:/ # exit shell@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/시스템 /system ext4 ro, seclabel, relatime...
또한 휴대폰의 Terminal Emulator에서/system 디렉토리가 읽기 쓰기로 마운트된 후, adb shell의 root 모드에서 확인합니다/system의 상태는 여전히 읽기 전용으로 표시됩니다.
온라인에서 찾아 찾아 찾아 절망에 가까워졌다가, 문제의 원인이 있을 가능성이 있는 이 포스트를 찾았습니다:shell에서 사용자나 root로 마운트하면 다른 출력 결과가 나타납니다다른 답변에서 mount namespace라는 것에 대해 언급되었습니다. 그런 다음 알게 되었습니다:
mount namespace는 프로세스에 보이는 파일 시스템 마운트의 집합입니다.
각 프로세스의 마운트 포인트는 다른 프로세스에게는 보이지 않습니다. Terminal Emulator에서 마운트된 마운트 포인트는 해당 프로세스에 속하며, adb shell의 shell 모드와 root 모드의 마운트 포인트는 각각의 프로세스에 속합니다. 이것이 앞서 root 모드에서 수정한/system 디렉토리가 쓰기가 가능해졌음에도 불구하고 shell 모드에서 여전히 읽기 전용으로 표시되는 이유는 무엇인가요?
문제의 원인을 알았다면, 어떻게 해결해야 하나요?
SuperSu 애플리케이션의 설정에서 mount namespace separation 옵션이 있습니다. 다음과 같이 보입니다:
체크를 해제한 후, mount의 마운트 포인트는 전역적이며, mount를 하는 프로세스에 독점적이지 않습니다. 그러나 이 수정은 스마트폰을 재부팅한 후에만 유효합니다.
mount namespace separation을 취소한 후 업로드 결과는 다음과 같습니다:
C:\tools>adb push hosts.mod /시스템/etc/hosts [100%] /시스템/etc/hosts
다음은 [100%]의 반응을 받아 파일이 업로드되었음을 나타냅니다.
hosts 파일의 속성을 확인하세요:
root@maguro:/ # ls -al /시스템/etc/hosts -rw-rw-rw- root root 137679 2017-02-16 00:20 hosts
파일의 크기는 다음과 같이 변경되었습니다:25변경됨137679파일이 대체되었음을 나타내는 메시지가 표시됩니다.
다음은 스마트폰을 원래 상태로 복구하는 방법입니다:
root@maguro:/ # chmod 644 /시스템/etc/hosts root@maguro:/ # ls -al /시스템/etc/hosts -rw-r--r-- root root 137679 2017-02-16 00:20 hosts root@maguro:/ # mount -o ro,remount /시스템
이제 hosts 파일을 수정하는 작업이 큰 성공을 거두었습니다.
결론
이 문서의 전체 내용이 끝납니다. 이 문서의 내용이 여러분의 학습이나 업무에 도움이 되길 바랍니다. 의문이 있으면 댓글을 통해 교류해 주세요.
성명: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있으면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(보고할 때는 #을 @으로 변경하십시오.)를 통해 신고하시고 관련 증거를 제공하시면, 실제로 확인되면 이 사이트는 즉시 저작권 침해 내용을 삭제할 것입니다.