출처
: http://arabiannight.tistory.com/97
: http://fussion.egloos.com/10652959
: http://siamdaarc.tistory.com/101
: http://droid-tip.blogspot.kr/2013/06/android-adb-shell.html
: http://zzikjh.tistory.com/entry/adb-명령어-정리
adbshell 에서 쓸수 있는 명령어 모음 입니다.
adb logcat -v time [filter]
시스템 기본정보: 하드웨어, 커널 등
cat /proc/version : 커널 버전
cat /proc/cpuinfo : 프로세서 정보, CPU타입, 모델 제조사 등
cat /porc/meminfo : 메모리 정보, 실제 메모리 및 가상 메모리
cat /proc/devices : 현재 커널에 설정되어 있는 장치 목록
mount : 마운트된 모든 장치 정보
df : 하드디스크 사용량
cat /porc/filesystems : 커널에 설정되어 있는 파일시스템 목록
cat /proc/swaps : 스왑 파티션의 크기와 사용량
cat /proc/interrupts : 장치가 사용중인 인터럽트(IRQ)목록 표시
cat /proc/ioports : 현재 사용중인 input/output 포트
cat /proc/partitions : 파티션 정보
cat /proc/uptime : 시스템이 얼마나 살아있었는지
cat /proc/stat : 시스템 상태에 관한 다양한 정보, CPU 사용 통계, 부팅이후 page fault 발생 횟수 등
cat /proc/zoneinfo : ZONEINFO
dmesg : 시스템 부팅시 나왔던 메시지
ps : 실행중인 프로세스 정보
ps -p - t : 프로세스와 쓰레드 목록
set or printenv : 환경설정값 출력
시스템 리소스 사용 현황
vmstat : 시스템 리소스 상황 모니터, CPU, I/O, Memory 등
cat /proc/diskstats : 디스크 utilization과 throughput. 즉 디스크 I/O현황
top : 시스템 프로세스 상황 모니터링/ 프로세스별 CPU사용량, 메모리와 스왑 사용량 등
procrank : 프로세스별 메모리
dumpsys meminfo [PID] : 해당 프로세스 메모리 상세 정보
cat /proc/[PID]/stat : 해당 프로세스에 대한 정보, 시작시간, 상태, CPU 사용량 등
cat /proc/[PID]/maps : 해당 프로세스의 메모리 맵 정보
cat /proc/vmstat : 버추얼 메모리 통계?
librank : 라이브러리별 메모리 사용량?
네트워크 관련
cat /proc/net/netlink : 네트워크 정보
netcfg : 네트워크 인터페이스와 IP주소 목록
netstat : 네트워크 연결상태 확인
nc : 네트워크용 cat 명령어(netcat)
ifconfig : 네트워크 인터페이스 설정 정보. 장치명을 파라미터로 받음. ip 주소. 서브넷마스크 등
tcpdump : 실시간 패킷 모니터링
iftop : 네트워크를 위한 top
route : 해당 호스트까지 연결하는 중간 경로 정보인 라우팅 테이블 표시
ping : 원격 호스트와의 연결 테스트
cat /proc/net/route : Route
안드로이드 제공
logcat : 로그캣 보기
pm : package manager의 약자. 패키지/permission/instrumentation/feature 목록, 패키지 설치/제거 등
am : activity manager의 약자, 액티비티 시작, Intent 브로드캐스팅, Instrumentation 시작, profiling 시작 / 중지 등
service : 안드로이드 서비스 목록 표시, 서비스에 명령 전달
monkey : 애플리케이션에 랜덤 이벤트 발생시킴. 사용자 이벤트, 시스템 이벤트의 무작위 발행
cat /data/anr/traces.txt : VM TRACES (쓰레드 덤프)
cat /proc/binder/proc/[PID] : 바인더 프로세스 상태
cat /proc/binder/xxx : 바인더 관련 정보(xxx은 transaction, transaction_log, failed_transaction_log, stats 등)
cat /data/system/packages.xml : 설치된 패키지 세팅 정보
setprop : system property 셋팅
getprop : 셋팅된 system property 목록 출력
종합 리포트
dumpsys [service] : app/service 상태정보 덤프, 서비스별로 추가 파라미터 받을 수 있음
dumpstate : device 상태정보 덤프. 상태정보를 추출하는 여러 명령어들의 조합으로 구성
dumpcrash : 애플리케이션이 crach될 때의 상태정보 덤프
bugreport : logcat + dumpsys + dumpstat
ADB Shell Command - 15가지 팁
Basic Android Terminal and ADB Shell Command List
1. How to open a cmd in Android Phone
Method 1: “Start” ? “”Program”-” “Accessories” ? “” Command Prompt ”
Method 2: “Start” ? “” Run “, type cmd ENTER
2. How to restart Android Phone
When the phone and Computer is connected to the data cable, you can enter the following command
adb shell reboot === ENTER
3. Restart Android into Recovery Mode
With the data cable connected to your phone and computer, enter the following command
adb shell reboot recovery === ENTER
4. Convert back to ext2 partition
Restart the phone into Recovery mode, press “Alt + X” into the console. Open cmd and enter the following command
adb shell === ENTER
tune2fs-O ^ has_journal / dev/block/mmcblk0p2 === carriage return
e2fsck / dev/block/mmcblk0p2 === carriage return (optional, can be a problem area in section 2, when used)
5. Pulling applications from Android phone to computer
adb pull /system/sd/app app
adb pull /system/sd/app-private app-private
6. Pushing applications back to android phone from the computer
adb push app /system/sd/app
adb push app-private /system/sd/app-private
7. Delete existing apps on Android SD
adb shell rm -r /system/sd/app
adb shell rm -r /system/sd/app-private
8. Repair gravity System or switch to screen
Sometimes frequent brushing of phone can cause gravity system or switch to screen failure. Just follow the steps below-
Restart the phone into Recovery mode, press “Alt + X” into the console
Open cmd and enter the following command
mount / data === carriage return
rm / data / misc / akmd * / data / misc / rild * === ENTER
9. Ext2/ext3/ext4 formatted partition
Enter the following command in the cmd
adb remount === ENTER
adb shell === ENTER
rm-r / system / sd / * === carriage return
10. Remove/ system / app under the application
Under normal circumstances / system / app is not under an application.
Use the following methods to remove these applications.
Open cmd and enter the following command
adb remount === ENTER
adb rm / system / app / Stocks.apk === Enter
11. If the start Time is too Long
Just enter the following command in order to view the boot process.
adb logcat === ENTER
12. Through Terminal Partition SD card
It will erase everything on your SD card
$ su
# cd /data
# wget http://64.105.21.209/bin/lib/droid/sdsplit
# chmod 555 sdsplit
# /data/sdsplit -fs *size* (add -nc to the end for JFv1.5ADP)
13. From the Recovery Screen, send an update file to your SD card.
adb shell mount /sdcard
adb shell rm /sdcard/update.zip
adb push *filename* /sdcard/update.zip
14. Restoring a nandroid backup via Fastboot
Start command-prompt/terminal cd to the nandroid folder and enter following commands
fastboot erase boot
fastboot erase recovery
fastboot flash system system.img
fastboot flash boot boot.img
fastboot flash userdata data.img
fastboot flash recovery recovery.img
fastboot reboot
15. Clear Search History in Android
Search History is accounted for Mobile Memory. It can also leak your privacy information as well.
Just follow the steps below to clear android history.
Steps are as follows:
1. Make sure your mobile phone has Root authority.
2. Open the super-terminal.
3. Enter the following command
su
rm / data / data / com.android.vending / databases / suggestions.db
4. Exit Hyper Terminal and restart the phone.
adb devices
adb 서버가 인식한 휴대폰과 에뮬레이터 목록을 보여준다.
연결된 devices의 TCP/IP 포트 번호를 알아낼 때 도움이 된다.
다른 명령어를 사용할 때, -s나 -e 옵션은 여러 개의 장치를 연결했을 때 특정한 디바이스를 지정할 때 사용한다.
예)
디바이스 검색
adb devices
adb shell
타겟 시스템의 쉘에 연결하고 # 프롬프트를 띄운다. 쉘은 간소한 유닉스 쉘 같아서 간단한 명령으로 타겟 시스템을 탐색하고 수정할 수 있다.
예)
여러 단말기 중에 하나를 선택해서 접속할 때,
adb -s emulator-5554 shell
adb install [-l][-r] file_spec
app을 설치하거나 재설치할 때 사용한다.
-l : 다른 장치로 복사돼 넘어가는 것을 막는다.
-r: 이미 존재하는 app 데이터를 지우지 않은 채 어플리케이션을 재설치 한다.
file_spec: 설치할 app의 .apk 파일
예)
파일 설치시
adb install c:\download\HangulKeyboard.apk
adb uninstall [-k] package
패키지 이름을 가진 app을 제거하다.
-k : app의 데이터를 보존한다.
package: 패키지의 전체 경로, .apk 확장자는 빼야 한다.
예)
패키지 삭제시
adb unstall com.falinux.android.hello
adb push local remote
개발자 컴퓨터에 있는 local이란 이름을 가진 파일을 타겟 시스템에 remote란 이름으로 복사한다.
예)
com.falinux.android.rose.apk 파일을 안드로이드 기기 /data/app/ 폴더 안으로 집어넣을 때,
adb push c:\com.falinux.android.rose.apk /data/app/
adb pull remote local
타겟 시스템에 있는 remote라는 파일을 개발자 컴퓨터에 local이란 이름으로 복사한다.
예)
안드로이드 기기 /data/app/com.falinux.android.rose.apk 파일을 C 드라이브로 가져올 때,
adb pull /data/app/com.falinux.android.rose.apk c:\com.falinux.android.rose.apk
adb reboot
안드로이드 시스템을 리부팅 시킨다.
adb kill-server
adb 에 문제가 있을 경우, adb를 종료시킨다.
adb start-server
종료된 adb를 실행 시킨다.
server가 시작되면 TCP의 5037 port로 binding해서 adb client로부터의 command를 받아들이는데,
모든 client는 server와 communication 하기 위해 5037 port를 사용.
형식
device의 port를 forwarding 하고 싶을 때 사용하는 명령
adb push <local> <remote>
USB device가 하나 이상이면 error return
logcat [<option>] [<filter-specs>]
bugreport
jdwp
Data
Ports and Networking
get-state
wait-for-device
Server
adb [-d | -e | -s <serialNumber>] shell로 remote shell을 실행한 후에 shell을 종료하고 싶으면 Ctrl + D or exit 입력
User event의 random stream을 생성해 device에서 실행시키는 tool (stress test 용도)
Other Shell Commands
logcat [<option>]...[<filter-spec>]
Using logcat Commands
Android에서 모든 log message는 tag와 priority를 가지고 있음
logcat 실행 후에 나타나는 log message에서 tag와 priority가 첫 column에 priority/tag 형태로 표시
입력한 priority와 상위 priority의 log들을 표시
default filter expression
-v option을 사용해서 출력되는 log의 format 변경 가능
ex : adb logcat -v thread
Android logging system은 log message들을 위해 여러 개의 circular buffer를 가지고 있고
default circular buffer가 모든 log를 보관하지 않기 때문에 다른 circular log buffer의 내용을 보고 싶을 때에는
-b option을 사용해서 circular buffer를 변경해주어야 한다.
Android에서는 default로 stdout과 stderr ouput을 /dev/null로 내보내는데, file에 쓰도록 변경 가능하고
이 경우 변경 전에 device를 stop 후 setprop shell command를 실행해서 redirection 설정해야 한다.
device start 이후에는 stop 전까지 설정이 유지된다. default로 설정을 유지하고 싶다면, /data/local.prop에 기록
ex :
log file을 <kbytes>씩 rotate. default는 16, -f option 필요
Android adb shell 시스템 점유 보는 법
-----------------------------------------------------
- ■ 관련 명령어 요약 (아래 상세 설명에서 나오는 명령어들)
-----------------------------------------------------
adb shell cat /proc/meminfo
adb shell procrank -p
adb shell top -m 10 -s cpu
adb shell dumpsys meminfo 242
-----------------------------------------------------
- ■ procrank and top
-----------------------------------------------------
adb shell procrank -p
adb shell top -m 10 -d 1 -s cpu
Usage: procrank [ -W ] [ -v | -r | -p | -u | -h ]
-v Sort by VSS.
-r Sort by RSS.
-p Sort by PSS.
-u Sort by USS.
(Default sort order is PSS.)
-R Reverse sort order (default is descending).
-w Display statistics for working set only.
-W Reset working set of all processes.
-h Display this help screen.
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
-m num Maximum number of processes to display.
-n num Updates to show before exiting.
-d num Seconds to wait between updates.
-s col Column to sort by (cpu,vss,rss,thr).
-t Show threads instead of processes.
-h Display this help screen.
-----------------------------------------------------
- ■ 시스템 메모리 사용 현황
-----------------------------------------------------
우선 전체 시스템의 메모리부터 파악하자.
$> adb shell 로 접속한 후 /proc/meminfo 를 열어본다.
adb pull /proc/meminfo /tmp 명령으로 꺼내서 봐도 되고.
adb shell cat /proc/meminfo 명령으로 봐도 된다.
-----------------------------------------------------
- ■ VSS 와 RSS
-----------------------------------------------------
이론적으로(?) 프로세스가 차지하는 정확한 메모리의 크기를 알 수는 없다고 한다.
다만, 프로세스에 매핑되는 page 수를 해석하는 다양한 방법이 있는데, VSS, RSS, USS, PSS 등이 그것이다.
VSS(Virtual Set Size)
프로세스와 관련된 버추얼 메모리(virtual memory) 크기.
메모리 맵이 1M이면 프로세스가 어떤 리소스도 사용하지 않아도 VSS는 1MB가 된다.
의미있는 수치라고 볼 수 없음.
RSS(Resident Set Size)
프로세스와 관련된 물리적 페이지(physical pages) 수.
여러 프로세스 사이에서 공유된 페이지(shared pages) 수를 확인할 수 없어 별 의미없음.
A프로세스의 RSS가 2MB, B프로세스의 RSS가 2MB일 때 실제 물리 페이지 수는 4MB이거나 2MB일 수 있다.
어쨌거나 프로세스별 VSS 와 RSS 값은 top 명령어로 구할 수 있다.
-----------------------------------------------------
- ■ USS 와 PSS
-----------------------------------------------------
VSS나 RSS보다 조금 더 의미있는 수치는 USS와 PSS인데,
procrank 명령어로 구할 수 있다.
USS(Unique Set Size)
프로세스만의 고유한 페이지 수.
공유되지 않는 프로세스에 private한 메모리 크기이다.
PSS(Proportional Set Size)
USS + (공유 페이지 / 공유하는 프로세스 수).
즉, 프로세스 고유 메모리 사용량 + 하나의 프로세스가 차지하는 공유 메모리 비율이다.
만약 A프로세스가 6MB 메모리를 사용하고 그 중 2MB가 그 프로세스의 고유 영역이라면,
나머지 4MB는 공유 메모리이다. 4MB의 공유메모리를 4개의 프로세스가 공유하고 있다면
PSS는 2MB + (4MB/4) = 3MB가 된다.
PSS는 공유되는 페이지를 공유 프로세스의 수로 나누어서 좀 더 정확한 메모리 사용량을 파악할 수 있게 해준다.
이게 프로세스가 사용하는 실제 메모리 크기에 가장 근접한 값이라고 볼 수 있다.
프로세스별 PSS 수치는 "DDMS 의 Sysinfo 탭" 을 통해서도 볼 수 있다.
파이그래프로 비주얼하게 보여주므로, 메모리 사용 비율을 쉽게 파악할 수 있다.
-----------------------------------------------------
- ■ 조금 더 상세한 메모리 정보
-----------------------------------------------------
top과 procrank를 통해 애플리케이션의 개략적인 메모리 사용량을 알수 있었다면,
dumpsys meminfo <PID(프로세스 ID)> 명령어로 약간 더 상세한 메모리 사용 정보를 구할 수 있다.
dumpsys meminfo 명령어는 프로세스가 사용하는 native(C/C++)와 dalvik(JAVA) 영역을
구분하여 보여주므로 달빅 VM 만의 메모리 크기를 알 수 있다.
- Pss 필드 : procrank에 나온 PSS 값과 동일
- shared dirty : 다른 프로세스와 공유하는 dirty pages(디스크로부터 페이징 불가능?)
- private dirty : 프로세스 고유의 dirty pages
Objects와 SQL 섹션에는 View/Context/Activity 등의 개수와 SQL 페이지 크기 등
중요한 정보를 제공하므로 활용가치가 높다.
dumpsys meminfo PID 명령
dumpsys meminfo 출력 결과에 나온 dalvik 컬럼의
size, allocated, free 필드값은 DDMS의 VM Heap 탭을 통해서도 확인할 수 있다.
각각 VM Heap 탭의 Heap Size, Allocated, Free 컬럼에 해당한다.
DDMS의 VM Heap 탭의 정보는 달빅 VM만의 메모리 정보일 뿐,
애플리케이션의 native 라이브러리가 사용하는 메모리 정보는 제외되었다.
= 참고 원문 =
http://ecogeo.tistory.com/255
http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html
*** Android Debug ***
* Kernel Debug
=====================================================
* adb shell
- cat proc/kmsg : kernel 로그 메세지를 볼 수 있음.
adb devices 로 폰 연결확인
adb shell
> cat /proc/kmsg& 커널메시지 나옴 ex: <number>형식
> logcat& 플랫폼메시지 나옴
adb logcat -b radio > xxx.txt 릴 로그
dmesg : 가장 최근 메세지 출력
=====================================================
* kernel message 찍기 (파일이름, 함수이름, 라인넘버)
=====================================================
printk(KERN_ERR "%s : %s : %d \n, __FILE__, __func__, __LINE__)
=====================================================
* 부팅시 Serial 로 메세지 찍는 방법
=====================================================
setenv SWITCH_SEL 3
saveenv
로그 레벨 변경하는 방법
----
setenv CMDLINE console=ttySAC2,115200 loglevel=7
saveenv
현재 상태 보는 방법
----
printenv
=====================================================
* emergency mode 들어가는 법: anyway function 부분 2,6번 내리고 폰연결하면 들어간다.
- wake lock 보는 방법
---------
#cat /sys/power/wake_lock
- wake unlock 보는 방법
---------
#cat /sys/power/wake_unlock
- wake lock setting 방법
---------
#echo test > /sys/power/wake_lock
- wake unlock setting 방법
---------
#echo test > /sys/power/wake_unlock
- 현재 wake lock 보는 방법
---------
#cat /proc/wakelocks
- Threads 보는 방법
---------
#ps
#ps -t
- Thread 죽이는 방법
---------
#kill "PID"
#kill -9 "PID"
- dumpsys 보는 방법
---------
#dumpsys power
#dumpsys alarm
- 의심되는 Thread 가 있을 경우에 확인 방법
의심되는 Thread의 PID를 확인후에
#cd proc
#cd "PID"
#cat wchan (현재 상태 확인)
#cat cmdline (매개변수 확인)
-속성 변경하는 방법 (read, write)
-----------------------------
chown system system /data
chmod 0771 /data
-----------
위 부분의 속성을 system으로 바꿔서 read write 가능하게 하려면~
-----------------------------
chown system system /system
chmod 0771 /system
-----------
이렇게 하면 apk 파일을 지울수 있다.
adb logcat -v time -b main -b radio -b events -b system 2>&1|tee 00_logcat.log
'IT_Programming > Android_Java' 카테고리의 다른 글
[펌] 실질적인 안드로이드 디자인 (0) | 2015.08.24 |
---|---|
[펌] Android Design Support Library를 소개합니다 (0) | 2015.08.19 |
[펌] windowTranslucentStatus 설정 후 adjustResize 안될 때 / Android FullScreen + AdjustResize (0) | 2015.08.07 |
[펌] Play Store 앱 등록시 Multiple APK 지원 (0) | 2015.08.06 |
android.os.TransactionTooLargeException 오류 대응 및 시스템 앱 구별방법 (0) | 2015.08.01 |