学习转载:Android中常用shell命令详解
https://blog.csdn.net/Z_HUALIN/article/details/77878609
?
設置adb環境變量
其實就是將adb.exe的路徑放到Path中,目的是cmd直接可以使用adb命令?
比如我的adb.exe路徑G:\tools\adt-bundle\sdk\platform-tools\adb.exe?
我的電腦》高級》設置》環境變量》Path》增加G:\tools\adt-bundle\sdk\platform-tools?
(注意不要adb.exe)
檢測環境變量
打開cmd窗口,輸入adb看效果?
如果出現一堆adb信息說明配置成功?
如果出現’adb’ is not recognized as an internal or external command
進入shell
adb shell?
如果有多個設備怎么辦??
adb devices查看你的設備;?
adb -s xiaomi shell:-s命令表示選擇設備,這里是選擇xiaomi設備進shell
ls查看文件
ls -l /system/app/Demo.apk?
rwxr-xr-x root root 48550 2016-02-22 21:55 CertificateInstallerProviders.apk?
Linux的文件基本上分為三個屬性:可讀(r),可寫(w),可執行(x)。?
對rwxr-xr-x 的解讀:?
rwx(Owner)r-x(Group)r-x(Other)?
這個例子表示的權限是:使用者自己可讀,可寫,可執行;同一組的用戶可讀,不可寫,可執行;其它用戶可讀,不可寫,可執行。?
命令中r=4,w=2,x=1,比如?
chmod 644 system/app/Demo.apk命令執行以后,查看這個文件發現權限被修改了?
ls -l /system/app/Demo.apk?
-rw-r–r– root root 48550 2016-02-22 21:55 Demo.apk(將這個apk放在了system下面,而且還讓它具有root權限了)
ls -a 列出當前目錄下的所有文件
cd切換路徑
cd /mnt/sdcard 切換到內存卡
mount掛載
mount -o remount,rw /system 將/system目錄掛載,設置為可以讀寫?
實例:?
127|shell@android:/mnt/sdcard $ mount -o remount,rw /system?
mount -o remount,rw /system?
mount: Operation not permitted?
如果出現mount: Operation not permitted說明沒有root權限
su獲取ROOT權限
前提是你的手機已經root了?
su命令表示切換ROOT用戶下運行(就是說你有了root權限啦)?
下面先獲取root,獲取root成功的時候$變成了#
255|shell@android:/mnt/sdcard $ su?
su?
root@android:/storage/sdcard0 # mount -o remount,rw /system?
mount -o remount,rw /system?
此時在執行掛載就可以成功
注意:$表示普通權限用戶;#表示ROOT權限用戶。
cp復制文件
cp -f /sdcard/SDKLongRrs.apk /system/app/SDKLongRrs.apk##?
如果 cp: not found,說明該手機中cp命令不存在,換cat復制試試?
127|root@android:/storage/sdcard0 # cat /sdcard/SDKLongRrs.apk> /system/app/SDKLongRrs.apk?
rs.apk> /system/app/SDKLongRrs.apk <?
右箭頭>指明拷貝的方向哈
獲取md5值
md5 /system/app/SDKLongRrs.apk?
獲取一個目錄下所有文件的md5?
md5 /system/app/*
chmod修改文件權限
讓apk變成可以安裝的?
chmod 644 /system/app/SDKLongRrs.apk
pm安裝apk卸載應用
pm install -r /system/app/SDKLongRrs.apk?
pm uninstall com.baidu.map.location
cmd安裝apk卸載應用
adb install C:\Users\Administrator\Desktop\Root.apk?
這個將電腦桌面的Root.apk安裝到手機上?
有可能不成功,直接看信息,對照英文找原因,比如小米的需要點擊允許安裝,在比如空間不足,在比如應用已經存在手機上
adb uninstall com.baidu.map.location(你需要知道應用的包名哈)
啟動應用
(1)啟動Activity?
am start -n com.googleplayapp.storerootsuaction/.MainActivity( 你得知道對應的界面的Activity路徑以及包名哈)
adb shell am start -n com.test.provider/.MainActivity
1
2
(2)啟動service
<service
android:name=".MyService"
android:description="@string/Desciption"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.nandhan.myservice" />
</intent-filter>
</service>
1
2
3
4
5
6
7
8
9
adb shell am startservice com.nandhan.myservice/.MyService
?
查看正在運行的 Services
adb shell dumpsys activity services [<packagename>]
包名是必須的、不需要寫完整的包名、支持模糊匹配
例如adb shell dumpsys activity services com.linux.example
1
2
3
查看正在運行的 activity
adb shell dumpsys activity [<packagename>]
包名是必須的、不需要寫完整的包名、支持模糊匹配
例如adb shell dumpsys activity com.linux.example
1
2
3
clear 清除應用數據
pm clear com.googleplayapp.storerootsuaction
cmd下直接使用adb shell命令
如果不進入shell的,如何執行以上命令?
cmd下面直接使用adb shell 后面跟上對應的命令就好?
比如清除應用數據?
adb shell pm clear com.googleplayapp.storerootsuaction
電腦輸入文字到手機
比如手機要上百度,手機打開瀏覽器,點擊地址欄,輸入法切換到英文,cmd命令
adb shell input text "www.baidu.com"
1
你會看到手機瀏覽器的網址變成百度了
文件傳輸
電腦復制文件到手機?
方法1:cmd下面使用push命令?
adb push “C:\Users\Administrator\Downloads\Root.apk” /mnt/sdcard/goodRoot/?
將電腦下載里面的Root.apk復制到手機sdcard的goodRoot文件夾下面?
方法2:直接使用eclipse里面的File Explorer(對android程序員而言的哈)?
復制手機文件到電腦?
adb pull /sdcard/packages.xml C:\Users\linux\Desktop\packages.xml
快速獲取文件路徑
打開cmd,將文件拖進來,你就可以看到文件的路徑哈
eclipse中File Explorer的使用
手機調試模式連接電腦,使用File Explorer可以查看手機文件;?
root以后的手機可以查看data下面的文件?
如果已經root,但是data打不開,使用以下命令?
cmd下面?
adb shell?
shell@android:/ $ su root?
chmod -R 755 /data?
(R必須大寫,linux命令區分大小寫的,cmd命令不區分大小寫,shell命令是一種linux命令)?
點擊這里查看chmod 755的含義
rm 刪除命令
rm -r /mnt/sdcard/AppFolder/a.mp3 移除a.mp3文件?
刪除文件夾的時候需要加上-r參數?
rm -r /mnt/sdcard/AppFolder
關閉程序
adb shell am force-stop 包名
一次卸載多個應用
adb uninstall com.android.a
adb uninstall com.android.b
adb uninstall com.android.c
adb uninstall com.android.d
adb uninstall com.android.e
1
2
3
4
5
將這多條命令寫成一個.bat文件,直接點擊bat就可以卸載多個應用了。
reboot重啟手機
adb reboot 重啟?
adb reboot recovery 重啟進入recovery模式
cat查看文件
cat error.txt 這個命令可以查看error.txt文件的內容
批量執行多條adb shell命令
adb命令帶參數,cmd下面帶上參數,先獲取su,然后做其他事?
演示在cmd下面可以直接使用su權限來刪除/system/bin/testa文件和/system/xbin/testb?
adb shell “su -c ‘rm -r -f /system/bin/testa’”?
adb shell “su -c ‘rm -r -f /system/xbin/testb’”?
如果是直接一條條執行shell命令將是下面的4條命令?
adb shell?
su?
rm -r -f /system/bin/testa?
rm -r -f /system/xbin/testb?
如何批量執行多條命令呢?
寫一個.bat文件,文件內容如下:?
adb shell “su -c ‘rm -r -f /system/bin/testa’”?
adb shell “su -c ‘rm -r -f /system/xbin/testb’”?
pause?
保存為bat文件,直接點擊執行.(windows系統下)。?
(pause表示不關閉cmd窗口,這樣就可以看到執行的結果了)
查看進程加載的庫
可以根據進程id,查看進程加載了哪些庫,cat /proc/pid/maps
kill 干掉進程
adb shell am force-stop?
作用:強制關閉一個應用程序?
舉例:adb shell am force-stop com.lt.test?
adb shell am force-stop比使用 kill -9 要方便?
參考http://blog.sina.com.cn/s/blog_6294abe70101275q.html?
ps可以查看到進程的pid?
kill -s 9 pid干掉指定pid的進程?
批量干掉進程?
busybox pkill -9 父進程?
ps?
USER PID PPID VSIZE RSS WCHAN PC NAME?
u0_a145 10608 134 292960 26816 ffffffff 4019ca70 S com.ex.thre?
u0_a146 10755 134 302420 32152 ffffffff 4019ca70 S com.ex.two?
使用kill -s 9 134,就可以干掉 PID =134. PID =10608. PID =10755三個進程
查看內存信息
看手機內存信息cat /proc/meminfo?
查看應用的內存信息 dumpsys meminfo 應用包名
查看應用是否安裝
查看應用的安裝路徑 pm path 應用包名?
獲取手機上已經安裝的所有的程序 pm list packages
過濾grep 和findstr
引用塊內容
在windows上直接使用findstr來過濾你想要的信息
adb shell ps|findstr baidu
1
這個命令找出手機上正在運行并且這個名字包含baidu的進程
//下面的寫法也對
adb shell ps baidu
adb shell ps|findstr -i baidu
1
2
3
引用塊內容
對應的android或者linux中的shell命令是grep
ps|gerp baidu
1
引用塊內容
提示 :有的手機上沒有grep命令,這時候可以采用findstr;或者往手機里放一個busybox文件,然后使用busybox grep命令,效果一樣
查看運行的程序
查看手機正在運行的程序 ps?
查看自己的程序是否在運行 ps | grep 應用包名?
如果沒有grep命令,可以放置一個busybox工具到手機?
查看360對應的程序是否在運行 ps | busybox grep m.qihoo*
刪除多個文件
cd dir?
rm * 刪除dir中所有文件
adb獲取手機參數
adb獲取手機所有參數參考這個?
adb shell getprop?
adb獲取iccid?
service call iphonesubinfo 4(需要權限android.permission.READ_PHONE_STATE)?
adb獲取imei?
adb -d shell dumpsys iphonesubinfo?
adb獲取androidid?
androidid藏在這里[net.hostname]: [android-b33f3ac550112627]?
命令:getprop net.hostname?
adb獲取serialno?
命令:getprop ro.boot.serialno或者getprop ro.serialno?
adb獲取imei?
service call iphonesubinfo 1?
更多信息參考這個?
http://stackoverflow.com/questions/27002663/adb-shell-dumpsys-iphonesubinfo-not-working-since-android-5-0-lollipop
使用”讀取proc的方式”獲取正在運行的進程
// 1,遍歷”/proc”文件夾下面的文件夾,其中有些”文件夾名稱”就是進程id(PID)?
ls /proc?
// 2,cat命令獲取對應進程的名字(cat /proc/PID/cmdline)?
cat /proc/1/cmdline 得到結果/init
查看進程具體的信息
(實例:12073是要查看的進程的PID)?
cat /proc/12073/maps 查看進程的文件結構?
cat /proc/12073/status 查看進程的狀態
通過packages.xml文件查看app安裝信息
在/data/system/packages.xml文件中,找到你應用相關內容?
我在小米上使用cat /data/system/packages.xml命令得到以下數據
<package name="com.trafficctr.miui" codePath="/system/app/TrafficControl" nativeLibraryPath="/system/app/TrafficControl/lib" flags="540229" ft="152fdda2cc0" it="152fdda2cc0" ut="152fdda2cc0" version="29" userId="10069">
.....
</package>
1
2
3
顯然name就是包名,codePath就是安裝的路徑
使用shell啟動和終止模擬器
adb shell stop//停止?
adb shell start//啟動
多設備選擇
adb devices//顯示處于調式模式的devices?
adb -s emulator-5554 shell??//表示選擇5554模擬器的進入shell?
42.busybox的安裝?
查看進程優先級
假設要查看程序com.test.app.a的進程優先級?
adb shell(進入shell)?
ps|grep com.test.app.a(列出這個進程)
u0_a37 28155 164 909516 36900 ffffffff b75baa27 S com.test.app.a
1
cat /proc/28155/oom_adj(獲取這個進程的adj值)?
adj值則在ProcessList中定義,adj的取值范圍[-17,16],取值越大說明優先級越低。adj取值說明參考這里
dumpsys 查看內存,cpu,電量信息
1)查看所有內存信息?
命令:dumpsys meminfo?
2)查看某個包的內存信息?
命令:dumpsys pkg_name?
3)查看CPU信息?
命令:adb shell dumpsys cpuinfo?
4)查看電量信息?
命令:dumpsys battery?
參考這里:Android 通過adb shell命令查看內存,CPU,啟動時間,電量等信息
findstr 和grep過濾搜索
1)cmd下搜索包名為com.linux.test的進程?
adb shell ps|findstr /i “com.linux.test”?
2)shell下面搜索?
先使用adb shell進去,然后使用grep命令過濾?
ps|grep “com.linux.test”
查看最上層成activity名字
adb shell dumpsys activity | findstr "mFocusedActivity"
1
查看最上層窗口信息
adb shell dumpsys window windows | findstr mCurrent
1
修改host翻墻
1,電腦下載一個android版本的hosts,地址http://laod.cn/hosts/2016-google-hosts.html?
2,將hosts放入手機中
adb push C:\Users\Administrator\Downloads\Android安卓跟Linux系列\hosts /data/local/tmp/
3138 KB/s (154351 bytes in 0.048s)
1
2
3,修改hosts文件(需要root權限)
C:\Users\Administrator>adb shell
shell@android:/ $ su
su
shell@android:/ # mount -o remount,rw /system
mount -o remount,rw /system
shell@android:/ # cat /data/local/tmp/hosts>/system/etc/hosts
cat /data/local/tmp/hosts>/system/etc/hosts
shell@android:/ # ls -l /system/etc/hosts
ls -l /system/etc/hosts
-rw-r--r-- root root 154351 2016-09-28 17:53 hosts
shell@android:/ #
1
2
3
4
5
6
7
8
9
10
11
修改完畢,手機隨便連接一個wifi或者打開數據流量就可以上google和facebook等等網站了。
查看端口
顯示已連接的端口:netstat -ntup?
顯示正監聽的端口:netstat -ntupl?
查詢端口進程應關系cat /proc/net/tcp6?
?
如果查詢14752端口被那個進程占用??
(1)16進制39A0=10進制14752;?
(2)39A0對應的進程ID(也叫uid)是10096?
sl local_address remote_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode?
0: 00000000000000000000000000000000:39A0 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 10096 0 8887 1 00000000 100 0 0 2 -1?
(3)使用ps命令?
在android中,uid大于10000的是應用程序創建的用戶。?
ps的第一列是uid,大于10000的uid會以u0_a開頭,10096 顯示為u0_a96,最后一列就是進程名。
adb發送廣播
adb shell am broadcast -n com.lt.test/.MyBroadcast?
adb shell am broadcast -a “MyBroadcastAction”
轉載于:https://www.cnblogs.com/jodyccf/p/11150799.html
總結
以上是生活随笔為你收集整理的学习转载:Android中常用shell命令详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LC-1237. 找出给定方程的正整数解
- 下一篇: Meta带头甩卖 VR头显打起价格战