Android 에서 hosts 파일 을 수정 하 는 절차 에 대한 자세 한 설명

머리말
개발 할 때 안 드 로 이 드 의 hosts 파일 을 수정 해 야 할 수도 있 습 니 다.Android 의 hosts 파일 경 로 는/system/etc/hosts 입 니 다.이 파일 을 수정 하기 전에 먼저 Android 핸드폰 에서 루트 권한 을 가 져 와 야 합 니 다.루트 당신 의 휴대 전화 에 대해 서 는 자세히 설명 하지 않 고 인터넷 에서 찾 을 수 있 습 니 다.많은 것 도 간단 합 니 다.
본 고 는 명령 행 에서 adb 프로그램 을 통 해 루트 의 휴대 전 화 를 방문 하여 hosts 를 컴퓨터 에 끌 어 다 수정 한 다음 에 다시 휴대 전 화 를 복사 하여 hosts 를 수정 하 는 방법 을 논술 하고 자 한다.
다음은 구체 적 인 절 차 를 시작 하 겠 습 니 다.

C:\tools>adb pull /system/etc/hosts hosts.mod
[100%] /system/etc/hosts
위의 명령 은 휴대 전화의 hosts 파일 을 컴퓨터 에 끌 어 다 놓 는 것 이다.[100%]는 파일 이 전송 되 었 음 을 나타 내 고 hosts 파일 을 수정 할 수 있다.수정 이 완료 되면 다음 명령 을 사용 하여 휴대 전화 에 업로드 합 니 다.

C:\tools>adb push hosts.mod /system/etc/hosts
adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system
리 턴 메 시 지 를 보면 파일 시스템 은 읽 기만 하기 때문에 직접 업로드 할 수 없습니다.
성공 할 수 있 는 지 아래 의 명령 을 시험 해 보 자.!

C:\tools>adb root #            adbd      root  
C:\tools>adb push hosts.mod /system/etc/hosts
adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system
안 되 나 봐 요./system 디 렉 터 리 를 다시 마 운 트 해 야 할 것 같 아 요.

C:\tools>adb remount
remount failed: Operation not permitted
권한 없 음?이것 은 반드시 셸 대 법 에 제 사 를 지내 야 하 는 리듬 이 야!

C:\tools>adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
shell@maguro:/ $ ls -al /system/etc/hosts
-rw-r--r-- root root  25 2013-08-14 07:00 hosts
위의 마지막 줄 에서 알 수 있 듯 이 hosts 라 는 파일 은 소유자 만 쓸 수 있 고 다른 사람들 에 게 는 읽 기 전용 입 니 다.다른 사람 도 수정 할 수 있 도록 하려 면 다음 명령 을 사용 하여 권한 을 부여 하고 hosts 파일 의 속성 을 바 꿔 야 합 니 다.

shell@maguro:/ $ su
이 명령 을 처음 실행 하면 휴대 전화 가 켜 지고 슈퍼 수 앱 은 권한 배분 에 동의 하 는 지 여 부 를 알려 준다.여 기 는 당연히 동의 해 야 지!이 어 터미널 에 있 는 프롬프트 가$에서\#로 바 뀌 었 고@앞의 문자 도 셸 에서 root 로 바 뀌 었 음 을 볼 수 있 습 니 다.그리고 hosts 파일 의 권한 속성 을 수정 할 수 있 습 니 다.

root@maguro:/ # chmod +666 /system/etc/hosts
Bad mode
root@maguro:/ # chmod 666 /system/etc/hosts
Unable to chmod /system/etc/hosts: Read-only file system
또 Read-only file system!다음 명령 을 입력 하여/system 디 렉 터 리 의 파일 시스템 정 보 를 보십시오.

root@maguro:/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...
ext 4 뒤에 ro 보이 시 나 요?그것 은 read only 의 줄 임 말,즉 읽 기만 한 다 는 뜻 이다.이것 은/system 디 렉 터 리 가 읽 기 전용 이라는 것 을 설명 합 니 다.이어서 우 리 는 그것 을 읽 고 쓸 수 있 는 것 으로 바 꿔 야 한다.

root@maguro:/ # mount -o rw,remount /system
위의-o 는 파일 시스템 을 불 러 올 때의 옵션 을 지정 합 니 다.이 옵션 들 은 다음 을 포함 합 니 다:
4.567917.reount 장 치 를 다시 불 러 옵 니 다.보통 장치 의 설정 상 태 를 바 꾸 는 데 사 용 됩 니 다
  • ro 는 읽 기 전용 모드 로 불 러 옵 니 다
  • 읽 기와 쓰기 모드 로 불 러 옵 니 다다시 보면 원래 ro 의 위치 가 rw 로 변 한 것 을 볼 수 있 습 니 다.
    
    root@maguro:/ # mount | grep system
    /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...
    그러나 이 곳 에 서 는 hosts 파일 을 휴대 전화 로 복사 할 수 없습니다.hosts 파일 의 권한 속성 이 아직 바 뀌 지 않 았 기 때문에 강제로 업로드 하면 다음 과 같은 오류 메 시 지 를 받 을 수 있 습 니 다.
    
    C:\tools>adb push hosts.mod /system/etc/hosts
    adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Permission denied
    다음 명령 실행:
    
    root@maguro:/ # chmod 666 /system/etc/hosts
    그리고 hosts 파일 의 속성 을 봅 니 다.
    
    root@maguro:/ # ls -al /system/etc/hosts
    -rw-rw-rw- root  root   25 2013-08-14 07:00 hosts
    모두 가 hosts 파일 을 읽 고 쓸 수 있 는 것 을 볼 수 있 습 니 다.
    모든 준비 가 다 되 었 으 니 수 정 된 hosts 파일 을 올 려 보 세 요.
    
    C:\tools>adb push hosts.mod /system/etc/hosts
    adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system
    어떻게 된 거 야?왜 복사 에 실 패 했 지?파일 시스템 을 읽 기와 쓰기 로 바 꾸 지 않 았 습 니까?
    그리고 원인 을 찾 는 과정 에서 이상 한 일 도 발견 되 었 다.루트 모드 에 서 는/system 디 렉 터 리 를 읽 고 쓸 수 있 지만 셸 모드 에 서 는/system 만 읽 습 니 다.
    
    root@maguro:/ # mount | grep system
    /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...
    root@maguro:/ # exit
    shell@maguro:/ # mount | grep system
    /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...
    또한 휴대 전화의 Terminal Emulator 에서/system 디 렉 터 리 mount 를 읽 기 가능 한 쓰기 로 한 후,adb 셸 의 root 모드 에서/system 의 상 태 를 보 는 것 은 읽 기 전용 으로 표 시 됩 니 다.
    인터넷 에서 찾 아,찾 아,찾 아,절망 할 지경 이 었 는데,마침내 가능 한 문 제 를 찾 았 다.바로 이 댓 글 입 니 다.mount namespace 라 는 대답 이 있 습 니 다.그리고 나 서 야 알 았 다.
    A mount namespace is the set of filesystem mounts that are visible to a process.
    모든 프로 세 스 의 마 운 트 지점 은 다른 프로 세 스 에 보이 지 않 습 니 다.Terminal Emulator 에서 mount 후의 마 운 트 점 은 이 프로 세 스 에 속 하고 adb 셸 에 서 는 셸 모드 와 루트 모드 의 마 운 트 점 은 각각 프로 세 스 에 속 합 니 다.이것 이 바로 앞의 루트 모드 에서/system 디 렉 터 리 를 읽 기 전용 으로 수정 한 후 셸 모드 에서 읽 기 전용 으로 표시 하 는 이유 입 니 다.
    문제 의 원인 을 알 았 으 니 어떻게 해결 합 니까?
    SuperSu 에 적 용 된 설정 에 mount namespace separation 옵션 이 있 습 니 다.아래 그림 과 같 습 니 다.

    체크 를 취소 하고 mount 의 마 운 트 지점 은 전역 적 입 니 다.mount 프로 세 스에 만 있 는 것 이 아 닙 니 다.하지만 휴대 전 화 를 다시 켜 야 수정 이 가능 하 다 는 점 을 기억 해 야 한다.
    다음은 mount namespace separation 을 취소 하고 업로드 한 결과 입 니 다.
    
    C:\tools>adb push hosts.mod /system/etc/hosts
    [100%] /system/etc/hosts
    [100%]의 리 턴 을 볼 수 있 고 파일 이 업로드 되 었 음 을 설명 합 니 다.
    hosts 파일 의 속성 보기:
    
    root@maguro:/ # ls -al /system/etc/hosts
    -rw-rw-rw- root  root  137679 2017-02-16 00:20 hosts
    파일 의 크기 가 25 에서 137679 로 바 뀌 었 다 는 것 은 파일 이 바 뀌 었 다 는 것 을 의미한다.
    다음은 휴대 전 화 를 원래 의 상태 로 회복 하 는 것 이다.
    
    root@maguro:/ # chmod 644 /system/etc/hosts
    root@maguro:/ # ls -al /system/etc/hosts
    -rw-r--r-- root  root  137679 2017-02-16 00:20 hosts
    root@maguro:/ # mount -o ro,remount /system
    이로써 hosts 파일 을 수정 하 는 작업 은 큰 성 과 를 거 둔 셈 이다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

    좋은 웹페이지 즐겨찾기