[TUTORIAL] Everything about ADB - A reference for everyone

Search This thread

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
TUTORIAL - EVERYTHING ABOUT ADB - Fully Illustrated
adb1.jpg


This will be part of a series of Tutorials compiled to better educate the Beginner-Intermediate users in XDA thread, and help them get rid of the "n00b" or "newbie" tag thrown at them! ;)



1. WHAT IS ADB?

ADB or Android Debug Bridge is a command line program which is used to communicate with your Android phone (or an emulator used by programmers). The use of Adb for Android phone users ranges from using it as a tool to get the logcat- A realtime log of the Android system, which allows one to know the cause of any errors. It is very helpful to app hackers to know exctly what block of code does what, and to modify apps accordingly

2. HOW TO USE ADB - Running adb.exe

adb.exe is part of a package of tools called Android SDK or Software Development Kit. For users, the main applications useful for them are adb.exe, fastboot.exe and aapt.exe.

2.1 Installing adb.exe (Windows)


  1. First, download the Android SDK package(exe file) from here The installer will prompt you to download and install the JDK (Java Development Kit) if you dont have it already installed
  2. Next install the exe file and note the location where you install it to.
  3. After install is over, use Windows explorer and navigate to the folder where you installed the SDK.
  4. Double-click the SDK Manager.exe/SDK Setup.exe file at the root of the Android SDK directory.
  5. This will open up the SDK Installation window, where you can choose from a list of packages to install
  6. If you want to use only adb.exe and fastboot.exe, choose to install only the "Android SDK Tools" from the list (See fig 1 below)
  7. That's it, adb.exe is now installed


Fig1:
sdk_manager_packages.jpg


Take a note of where you install it. It usually installs to a folder named Android-sdk-windows. Once you have it installed, you can copy the entire folder on a portable usb key/CD and use it on any other PC without a need to install it. I recommend that you make it a part of your Android CD (with rooting tools, unrooting tools, gold card etc).

2.2 Using adb.exe-Preparing your PC for running adb.exe quickly

Adding Adb to your Windows Path
Once installed, you should add the location of adb.exe to the* Windows Environment Path variable. To do that, go the subfolder of Android-sdk-windows where adb.exe can be found. Click on the Windows Explorer path displayed on Top, and copy the path to the Clipboard

0.jpg


Go to Start Menu, and Right click Computer, Choose Properties

1.jpg


Choose Advanced System Settings and then Environment variables

2.jpg


Now, add the Location you copied to the Clipboard earlier, to the end of the current path, after adding a ";"(without the quotes) to the end of the current path.

3.jpg


So, in my case, the current path shows:
c:\droidzone\windows; c:\droidzone\blahblah

It now becomes:
c:\droidzone\windows; c:\droidzone\blahblah;C:\Software\Phone\android-sdk-windows\tools

Hit Enter to everything.

From now, whenever you open a Command prompt in Windows, you will be able to execute Adb and Fastboot from there without needing to navigate to the folder where they are installed.


Next step: Elementary Adb commands

Don't forget to Hit the Thanks button to let me know that my posts helped you!
 
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
Elementary Adb commands

Ok, now that you've got adb all setup and prepared your computer to use it, you're ready to learn some basic adb commands. I'll be teaching some of them in this section.


Understanding how adb and the shell works


Let's first check if adb is working by asking it to communicate with our phone. Connect the phone with a usb cable to the PC. Note that you should have installed the HTC drivers already (They come with HTC Sync)

From your Windows Start Menu, Click on Run, then type the following and press enter. That should open a command shell:

Code:
cmd
5.jpg


Once there, type out the following:

Code:
adb devices
This will display a list showing the connected phones with their serial numbers (and emulators-But let us not worry about what these are, right now)

6.jpg


Great, now we have confirmation that adb is working! We're now ready to issue our basic commands.

First thing to note is the basic command to enter the Android custom linux shell. Like Windows has cmd.exe to enter the dos shell, the graphical eyecandy with Sense overlay that you see on your device has a custom linux kernel running, so basically the language of its shell is the Linux shell language.

Accessing the Linux terminal (adb shell) is what we do to issue commands. To enter the shell of our device, the basic command is:

Code:
adb shell
Immediately, you will get a prompt like this:
Code:
sh-3.2#
Now we can type out any (most) linux commands and these will be executed in our device.

The file system on Android is laid out over MTD partitions in your device's NAND (Internal memory), and the SD card. The Nand is strictly organized in a Linux system with Linux file permissions and ownership rights (Just know that these exist, for now)

So, right now, you will be dropped in the "root" of the filesystem, from where you can navigate to other places.

Note! An important difference between Linux and Windows is that while Windows uses the Backslash (\), Linux/Android uses the forward slash (/) to depict directory hierarchies. Another one you shouldnt forget is that in Linux/Android, a file named boot.img is different from Boot.img, BOOT.IMG and BoOt.img, while on Windows, they are all the same.


My tutorial is about adb commands, and not linux, so I'll give only a short summary of elementary linux commands below. I will expand the list and explanation for this at a later date if you require it:
pwd-Shows the current working directory
cp-copy a file
mv-move a file (copy a file and then delete the original file)
chmod-set file permissions
chown-set file ownerships
rm-delete a file
cd-change directory
rmdir-delete a directory

Elementary Adb commands


Installing applications with adb
You can install any apk from your PC to the phone very easily. Open a cmd shell, and then type in:
Code:
adb install
followed by a space. Now drag an apk file in Windows explorer to the shell we have opened. Immediately, the path of the file becomes inserted in our prompt that it becomes:

Code:
adb install C:\Desktop\TitaniumBackup.apk
assuming that the file TitaniumBackup.apk was present in the location C:\Desktop. Hit enter and you will notice that it gets installed.

Transferring files to the sdcard without connecting the device as Disk drive:

Code:
adb push C:\Desktop\TitaniumBackup.apk /sdcard/
will trasfer the file C:\Desktop\TitaniumBackup.apk to the root (main) directory of your sdcard. Likewise, you can transfer any file from the PC to any location on your device.

Eg: I want to transfer a file called wallpaper.zip to a location /data/local. The command would be:

Code:
adb push C:\Desktop\wallpaper.zip /data/local/
Contd..

Don't forget to Hit the Thanks button to let me know that my posts helped you!
 
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
More elementary adb commands:

Getting a file from your phone to your PC:

To get a file /system/etc/init.d/01data to your PC, you would type out the following:

Code:
adb pull /system/etc/init.d/01data
which will transfer the spcified file to the location on your pc where you have opened the cmd.exe shell.

Mounting the system partition as Read Write to transfer files to your /system partition:

Method 1:

Code:
adb remount
Method 2:
This can also be accomplished with the more advanced mount command in the adb shell. First we need to know the mount point of the partitions.

Type:
Code:
adb shell
mount
For me, it displays:
Code:
rootfs / rootfs rw,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
/sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /app-cache tmpfs rw,relatime,size=8192k,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
[B]/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0[/B]
/dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock5 /system/data yaffs2 rw,nosuid,nodev,noatime,nodiratime 0 0
/dev/block/mmcblk0p2 /data ext4 rw,nosuid,nodev,noatime,nodiratime,commit=50,bar
rier=0,stripe=64,data=ordered,noauto_da_alloc 0 0
/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,u
id=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset
=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:1 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relat
ime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,ioch
arset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
sh-3.2#
Note that the entry for system partition shows:
/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0

The ro means that /system is mounted as RO-i.e Read Only. The whole line means that the Nand MTD block device on /dev/block/mtdblock3 is mounted on the mount point /system, to use technical jargon.

We need to mount it as RW (Read Write)
The command is:
Code:
mount -o rw,remount /dev/block/mtdblock3 /system
This essentially mounts the /system as Read Write so that you can write to it (Normally you cant write to the /system partition), which is what "adb remount " also does. However the commands above can be executed from a Terminal Emulator application too.

Next: Getting an Adb logcat

Don't forget to Hit the Thanks button to let me know that my posts helped you!
 
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
Getting an adb logcat

Many a time, you might have heard people telling you to get a logcat to report your error with a Rom installation.

What is a logcat?

A logcat is a report from the Android logging system, which takes place in the background the whole time your phone is on. It starts the moment you switch on the phone, and continues till you shut it down completely. This log is extremely useful for finding out what went wrong with your system. It is useful to find out why your phone is having bootloops or force closes. It is infact useful for all errors!

How to get the logcat?
Basically, you can view the logcat log with the following command:
Code:
adb logcat
But that means getting overwhelmed by an endless haze of output flowing at a rate that you cant read and will overwhelm your command shell's capacity very soon.

So the system we normally use is to output the log to a file from which we can read later. This is done by the following command:
Code:
adb logcat > log.txt
My Technique
As a Rom developer and apk patcher, I have to constantly check for errors in my system. So I've devised an ingenous method to easily log logcat, and view them readily. I use a combo of commands executed in succession:

Code:
adb kill-server
echo "" > log.txt
start log.txt
adb logcat > log.txt
These commands essentially create a blank file named log.txt in the same path as the command shell you've opened. Then, it opens the file log.txt (which is blank at this point of time. Then it logs logcat output to that file. Once you refresh the opened file, it will show the output of logcat to this point of time. Refresh it once again, and it updates once more. You should install Notepad++ and associate .txt files with it, to get best results.

Instead of executing these four commands, you can download the batch file getlog.cmd and extract it from the zip file to the folder containing adb.exe. Once you type in the following command (from anywhere in Windows), you will achieve the same result as typing the four commands as above! Ingenious, eh? :D

Don't forget to Hit the Thanks button to let me know that my posts helped you!

 

Attachments

  • getlog.zip
    191 bytes · Views: 838
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
Summary of other adb commands

The following is the partial list of commands supported by adb. You can obtain this list by the following command:

Code:
adb /?
Code:
C:\Users>adb /?
Android Debug Bridge version 1.0.26

 -d                            - directs command to the only connected USB devic
e
                                 returns an error if more than one USB device is
 present.
 -e                            - directs command to the only running emulator.
                                 returns an error if more than one emulator is r
unning.
 -s <serial number>            - directs command to the USB device or emulator w
ith
                                 the given serial number. Overrides ANDROID_SERI
AL
                                 environment variable.
 -p <product name or path>     - simple product name like 'sooner', or
                                 a relative/absolute path to a product
                                 out directory like 'out/target/product/sooner'.

                                 If -p is not specified, the ANDROID_PRODUCT_OUT

                                 environment variable is used, which must
                                 be an absolute path.
 devices                       - list all connected devices
 connect <host>:<port>         - connect to a device via TCP/IP
 disconnect <host>:<port>      - disconnect from a TCP/IP device

device commands:
  adb push <local> <remote>    - copy file/dir to device
  adb pull <remote> [<local>]  - copy file/dir from device
  adb sync [ <directory> ]     - copy host->device only if changed
                                 (see 'adb help all')
  adb shell                    - run remote shell interactively
  adb shell <command>          - run remote shell command
  adb emu <command>            - run emulator console command
  adb logcat [ <filter-spec> ] - View device log
  adb forward <local> <remote> - forward socket connections
                                 forward specs are one of:
                                   tcp:<port>
                                   localabstract:<unix domain socket name>
                                   localreserved:<unix domain socket name>
                                   localfilesystem:<unix domain socket name>
                                   dev:<character device name>
                                   jdwp:<process pid> (remote only)
  adb jdwp                     - list PIDs of processes hosting a JDWP transport

  adb install [-l] [-r] [-s] <file> - push this package file to the device and i
nstall it
                                 ('-l' means forward-lock the app)
                                 ('-r' means reinstall the app, keeping its data
)
                                 ('-s' means install on SD card instead of inter
nal storage)
  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories
)
  adb bugreport                - return all information from the device
                                 that should be included in a bug report.

  adb help                     - show this help message
  adb version                  - show version num

DATAOPTS:
 (no option)                   - don't touch the data partition
  -w                           - wipe the data partition
  -d                           - flash the data partition

scripting:
  adb wait-for-device          - block until device is online
  adb start-server             - ensure that there is a server running
  adb kill-server              - kill the server if it is running
  adb get-state                - prints: offline | bootloader | device
  adb get-serialno             - prints: <serial-number>
  adb status-window            - continuously print device status for a specifie
d device
  adb remount                  - remounts the /system partition on the device re
ad-write
  adb reboot [bootloader|recovery] - reboots the device, optionally into the boo
tloader or recovery program
  adb reboot-bootloader        - reboots the device into the bootloader
  adb root                     - restarts the adbd daemon with root permissions
  adb usb                      - restarts the adbd daemon listening on USB
  adb tcpip <port>             - restarts the adbd daemon listening on TCP on th
e specified port
networking:
  adb ppp <tty> [parameters]   - Run PPP over USB.
 Note: you should not automatically start a PPP connection.
 <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
 [parameters] - Eg. defaultroute debug dump local notty usepeerdns

adb sync notes: adb sync [ <directory> ]
  <localdir> can be interpreted in several ways:

  - If <directory> is not specified, both /system and /data partitions will be u
pdated.

  - If it is "system" or "data", only the corresponding partition
    is updated.
I will add notes for these if you require them.
 
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
How to get Kernel error messages

You can get debug messages from a running kernel with:

Code:
adb shell
dmesg
If you have reboots due to kernel panic, you should make users capture the last_kmsg log from /proc immediately on the reboot.

Note that dmesg can be disabled by the kernel maintainer, and hence some roms/kernels may not support the command.

Code:
adb shell 
cat /proc/last_kmsg > /sdcard/last_kmsg
Should be done immediately after the reboot..Otherwise it will just get overwritten by newer kernel message.

So in brief, if you'd like to look at what the kernel is doing right now (any errors etc), you should use dmesg. If you want to know why your kernel rebooted, use the file proc/last_kmsg


It's extremely useful!

Don't forget to Hit the Thanks button to let me know that my posts helped you!
 
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
Guys, part of the tutorial is over.. Hope it is helpful. Will add more useful and advanced stuff later.. Hope it helps the newbies and some more seasoned users.

Feel free to ask any doubt that you think is silly, without fear of being ridiculed or being asked to search the thread! It should be related to adb though! ;)
 
Last edited:
D

Deleted member 4123551

Guest
Impressive tutorial. You'll get my thanks when im back at my home pc :)

Sent from my HTC Desire S using XDA App
 

coolexe

Retired Recognized Developer
Aug 17, 2008
2,371
5,371
Thanks bro.. I thought that might scare away newbies, plus since I havent done any actual development.. :D

Hi,

there is lots of thread in dev. section which doesn't belong to development...anyway nice tutorial for noobs...if possible add QtADB tool...:D

EDIT: Added to my threads
 
Last edited:
  • Like
Reactions: Droidzone

jesseuy

Member
Jul 29, 2011
16
5
Hi there.

Well this is a nice tut for android newbies like me :D

can you also add a basic symlinking tut? (especially how to symlink a folder to an already existing symlink :rolleyes:)

thanks!
 

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
Hi there.

Well this is a nice tut for android newbies like me :D

can you also add a basic symlinking tut? (especially how to symlink a folder to an already existing symlink :rolleyes:)

thanks!


Does this answer your query?

From http://uw714doc.sco.com/en/SDK_sysprog/_Using_Symbolic_Links.html


Code:
[B]Creating symbolic links[/B]

 To create a symbolic link, the new system call [URL="http://uw714doc.sco.com/en/man/html.2/symlink.2.html"]symlink(2)[/URL]  is used and the owner must have write permission in the directory where the link will reside. The file is created with the user's user-id and group-id but these are subsequently ignored. The mode of the file is created as 0777. 
CAUTION: No checking is done when a symbolic link is created. There is nothing to stop a user from creating a symbolic link that refers to itself or to an ancestor of itself or several links that loop around among themselves. Therefore, when evaluating a pathname, it is important to put a limit on the number of symbolic links that may be encountered in case the evaluation encounters a loop. The variable MAXSYMLINKS is used to force the error ELOOP after MAXSYMLINKS symbolic links have been encountered. The value of MAXSYMLINKS should be at least 20.   
 To create a symbolic link, the ln command is used with the -s option (see [URL="http://uw714doc.sco.com/en/man/html.1/ln.1.html"]ln(1)[/URL]). If the -s option is not used and a user tries to create a link to a file on another file system, a symbolic link will not be created and the command will fail. 
 The syntax for creating symbolic links is as follows:  
   ln -s sourcefile1 [ sourcefile2 ... ] target  With two arguments: 
[LIST] 
[*] sourcefile1 may be any pathname and need not exist.  
[*] target may be an existing directory or a non-existent file.  
[*] If target is an existing directory, a file is created in directory target whose name is the last component of sourcefile1 (`basename sourcefile1`). This file is a symbolic link that references sourcefile1.  
[*] If target does not exist, a file with name target is created and it is a symbolic link that references sourcefile1.  
[*] If target already exists and is not a directory, an error is returned.  
[*] sourcefile1 and target may reside on different file systems.
[/LIST]
 With more than two arguments: 
[LIST] 
[*] For each sourcefile, a file is created in target whose name is sourcefile or its last component (`basename sourcefile`) and is a symbolic link to sourcefile.  
[*] If target is not an existing directory, an error is returned.  
[*] Each sourcefile and target may reside on different file systems.
[/LIST]
  [B]Examples[/B]

  The following examples show how symbolic links may be created. 
   ln -s /usr/src/uts/sys  /usr/include/sys  In this example /usr/include is an existing directory. But file sys does not exist so it will be created as a symbolic link that refers to /usr/src/uts/sys. The result is that when file /usr/include/sys/x is accessed, the file /usr/src/uts/sys/x will actually be accessed.  This kind of symbolic link may be used when files exist in the directory /usr/src/uts/sys but programs often refer to files in /usr/include/sys. Rather than creating corresponding files in /usr/include/sys that are hard links to files in  /usr/src/uts/sys, one symbolic link can be used to link the two directories. In this example /usr/include/sys becomes a symbolic link that links the former /usr/include/sys directory to the /usr/src/uts/sys directory. 
   ln -s  /etc/group  .  In this example the target is a directory (the current directory), so a file called group (`basename /etc/group`) is created in the current directory that is a symbolic link to /etc/group.    ln -s  /fs1/jan/abc  /var/spool/abc  In this example we imagine that /fs1/jan/abc does not exist at the time the command is issued. Nevertheless, the file /var/spool/abc is created as a symbolic link to /fs1/jan/abc. Later, /fs1/jan/abc may be created as a directory, regular file, or any other file type.  The following example illustrates the use of more than two arguments: 
   ln -s  /etc/group  /etc/passwd  .  The user would like to have the group and passwd files in the current directory but cannot use hard links because /etc is a different file system. When more than two arguments are used, the last argument must be a directory; here it is the current directory. Two files, group and passwd, are created in the current directory, each a symbolic link to the associated file in /etc.  [B]Removing symbolic links[/B]

  Normally, when accessing a symbolic link, one follows the link and actually accesses the referenced file. However, this is not the case when one attempts to remove a symbolic link. When the [URL="http://uw714doc.sco.com/en/man/html.1/rm.1.html"]rm(1)[/URL] command is executed and the argument is a symbolic link, it is the symbolic link that is removed; the referenced file is not touched.  
[B]Accessing symbolic links[/B]

  Suppose abc is a symbolic link to file def. When a user accesses the symbolic link abc, it is the file permissions (ownership and access) of file  def that are actually used; the permissions of abc are always ignored. If file def is not accessible (that is, either it does not exist or it exists but is not accessible to the user because of access permissions) and a user tries to access the symbolic link abc, the error message will refer to abc, not file def. 
[B]Copying symbolic links[/B]

   This section describes the behavior of the [URL="http://uw714doc.sco.com/en/man/html.1/cp.1.html"]cp(1)[/URL] command when one or more arguments are symbolic links. With the [URL="http://uw714doc.sco.com/en/man/html.1/cp.1.html"]cp(1)[/URL] command, if any argument is a symbolic link, that link is followed. Suppose the command line is 
   cp sym file3  where sym is a symbolic link that references a regular file test1 and file3 is a regular file. After execution of the command, file3 gets overwritten with the contents of the file test1.  If the last argument is a symbolic link that references a directory, then files are copied to that directory. Suppose the command line is 
   cp file1 sym symd   where file1 is a regular file, sym is a symbolic link that references a regular file test1, and symd is a symbolic link that references a directory DIR. After execution of the command, there will be two new files, DIR/file1 and DIR/sym that have the same contents as file1 and test1.   
[B]Linking symbolic links[/B]

  This section describes the behavior of the [URL="http://uw714doc.sco.com/en/man/html.1/ln.1.html"]ln(1)[/URL] command when one or more arguments are symbolic links. To understand the difference in behavior between this and the [URL="http://uw714doc.sco.com/en/man/html.1/cp.1.html"]cp(1)[/URL] command, it is useful to think of a copy operation as dealing with the contents of a file while the link operation deals with the name of a file. 
 Let us look at the case where the source argument to ln is a symbolic link. If the -s option is specified to ln, the command calls the symlink system call (see [URL="http://uw714doc.sco.com/en/man/html.2/symlink.2.html"]symlink(2)[/URL]). symlink does not follow the symbolic link specified by the source argument and creates a symbolic link to it. If -s is not specified, ln invokes the [URL="http://uw714doc.sco.com/en/man/html.2/link.2.html"]link(2)[/URL] system call. link follows the symbolic link specified by the source argument and creates a hard link to the file referenced by the symbolic link. 
 For the target argument, ln invokes a stat system call (see [URL="http://uw714doc.sco.com/en/man/html.2/stat.2.html"]stat(2)[/URL]). If stat indicates that the target argument is a directory, the files are linked in that directory. Otherwise, if the target argument is an existing file, it is overwritten. This means that if the second argument is a symbolic link to a directory, it is followed, but if it is a symbolic link to a regular file, the symbolic link is overwritten. 
 For example, if the command line is 
   ln sym file1   where sym is a symbolic link that references a regular file foo, and file1 is a regular file, file1 is overwritten and hard-linked to foo. Thus a hard link to a regular file has been created. 
 If the command is 
   ln -s sym file1  where the files are the same as in first example, file1 is overwritten and becomes a symbolic link to sym.  If the command is 
   ln file1 sym  where the files are the same as in the first example, sym is overwritten and hard-linked to file1.  When the last argument is a directory as in 
   ln file1 sym symd  where symd is a symbolic link to a directory DIR, and file1 and sym are the same as in the first example, the file DIR/file1 is hard-linked to file1 and DIR/sym is hard-linked to foo.  [B]Moving symbolic links[/B]

  This section describes the behavior of the [URL="http://uw714doc.sco.com/en/man/html.1/mv.1.html"]mv(1)[/URL] command. Like the [URL="http://uw714doc.sco.com/en/man/html.1/ln.1.html"]ln(1)[/URL] command, [URL="http://uw714doc.sco.com/en/man/html.1/mv.1.html"]mv(1)[/URL] deals with file names rather than file contents. With two arguments, a user invokes the [URL="http://uw714doc.sco.com/en/man/html.1/mv.1.html"]mv(1)[/URL] command to rename a file. Therefore, one would not want to follow the first argument if it is a symbolic link because it is the name of the file that is to be changed rather than the file contents. Suppose that sym is a symbolic link to /etc/passwd and abc is a regular file. If the command 
   mv sym abc  is executed, the file sym is renamed abc and is still a symbolic link to /etc/passwd. If abc existed (as a regular file or a symbolic link to a regular file) before the command was executed, it is overwritten.  Suppose the command is 
   mv sym1 file1 symd  where sym1 is a symbolic link to a regular file foo, file1 is a regular file, and symd is a symbolic link that references a directory DIR. When the command is executed, the files sym1 and file1 are moved from the current directory to the DIR directory so that there are two new files, DIR/sym1, which is still a symbolic link to foo, and DIR/file1.  In UnixWare, the [URL="http://uw714doc.sco.com/en/man/html.1/mv.1.html"]mv(1)[/URL] command uses the [URL="http://uw714doc.sco.com/en/man/html.2/rename.2.html"]rename(2)[/URL] system call. If the first argument to [URL="http://uw714doc.sco.com/en/man/html.2/rename.2.html"]rename(2)[/URL] is a symbolic link, [URL="http://uw714doc.sco.com/en/man/html.2/rename.2.html"]rename(2)[/URL] does not follow it; instead it renames the symbolic link itself. In System V prior to Release 4, a file was moved using the [URL="http://uw714doc.sco.com/en/man/html.2/link.2.html"]link(2)[/URL] system call followed by the [URL="http://uw714doc.sco.com/en/man/html.2/unlink.2.html"]unlink(2)[/URL] system call. Since [URL="http://uw714doc.sco.com/en/man/html.2/link.2.html"]link(2)[/URL] and [URL="http://uw714doc.sco.com/en/man/html.2/unlink.2.html"]unlink(2)[/URL] do not follow symbolic links, the result of those two operations is the same as the result of a call to [URL="http://uw714doc.sco.com/en/man/html.2/rename.2.html"]rename(2)[/URL].
 

DroidMayu

Member
May 18, 2011
29
5
Colombo, Sri Lanka
Thanks a lot for the tutorial. Basic stuff nicly explained. i tried the push method via adb to push a font into system/fonts directory still it says read only permission :(

C:\Users\Mayu>adb shell
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 rw 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block/vold/179:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,n
id=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,io
1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:0 /mnt/secure/asec vfat rw,dirsync,nosuid,no
000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp4
8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,size=0k,mode=000 0 0

error mesg
C:\Users\Mayu>adb push E:\soft\Android\Indic\DroidSansFallback.ttf \system\fonts

failed to copy 'E:\soft\Android\Indic\DroidSansFallback.ttf' to '\system\fonts':
Read-only file system

PS: pull works like charm. please guide me if u hav time. Thanks.
 
Last edited:

Droidzone

Inactive Recognized Developer
Sep 24, 2010
5,531
2,283
Kochi
www.droidzone.in
OnePlus 9 Pro
Thanks a lot for the tutorial. Basic stuff nicly explained. i tried the push method via adb to push a font into system/fonts directory still it says read only permission :(



error mesg


PS: pull works like charm. please guide me if u hav time. Thanks.

Yup, on an s on system, even though system can be mounted as rewrite, writing isn't allowed. You have to execute the commands in recovery mode

Sent from my HTC Desire using XDA App
 
  • Like
Reactions: DroidMayu

Talon26

Senior Member
Sep 14, 2011
285
76
London
Great tutorial! Thanks for that, definitely noob friendly...

Have a question about the following,

DATAOPTS:
(no option) - don't touch the data partition
-w - wipe the data partition
-d - flash the data partition

I have the Samsung Galaxy S I9000 (not sure if that makes a difference) and if my screen breaks or i have some sort of hardware problem. After flashing the stock rom back on do i use the above commands to wipe the evidence of any programs that suggest the device was previously rooted. If so which one wipe or flash?

Thanks
 

puncha1580

Senior Member
Aug 8, 2011
240
121
Mumbai
Thank You!!!

Hey Droidzone,

I'm really in awe of you, and need to thank you for the amazing work you're doing here - at XDA.

I just can't find the thank you button on the forums.(I could be blind :confused: :eek: !!!)

Thanks a zillion!!!
 

Top Liked Posts

  • There are no posts matching your filters.
  • 121
    TUTORIAL - EVERYTHING ABOUT ADB - Fully Illustrated
    adb1.jpg


    This will be part of a series of Tutorials compiled to better educate the Beginner-Intermediate users in XDA thread, and help them get rid of the "n00b" or "newbie" tag thrown at them! ;)



    1. WHAT IS ADB?

    ADB or Android Debug Bridge is a command line program which is used to communicate with your Android phone (or an emulator used by programmers). The use of Adb for Android phone users ranges from using it as a tool to get the logcat- A realtime log of the Android system, which allows one to know the cause of any errors. It is very helpful to app hackers to know exctly what block of code does what, and to modify apps accordingly

    2. HOW TO USE ADB - Running adb.exe

    adb.exe is part of a package of tools called Android SDK or Software Development Kit. For users, the main applications useful for them are adb.exe, fastboot.exe and aapt.exe.

    2.1 Installing adb.exe (Windows)


    1. First, download the Android SDK package(exe file) from here The installer will prompt you to download and install the JDK (Java Development Kit) if you dont have it already installed
    2. Next install the exe file and note the location where you install it to.
    3. After install is over, use Windows explorer and navigate to the folder where you installed the SDK.
    4. Double-click the SDK Manager.exe/SDK Setup.exe file at the root of the Android SDK directory.
    5. This will open up the SDK Installation window, where you can choose from a list of packages to install
    6. If you want to use only adb.exe and fastboot.exe, choose to install only the "Android SDK Tools" from the list (See fig 1 below)
    7. That's it, adb.exe is now installed


    Fig1:
    sdk_manager_packages.jpg


    Take a note of where you install it. It usually installs to a folder named Android-sdk-windows. Once you have it installed, you can copy the entire folder on a portable usb key/CD and use it on any other PC without a need to install it. I recommend that you make it a part of your Android CD (with rooting tools, unrooting tools, gold card etc).

    2.2 Using adb.exe-Preparing your PC for running adb.exe quickly

    Adding Adb to your Windows Path
    Once installed, you should add the location of adb.exe to the* Windows Environment Path variable. To do that, go the subfolder of Android-sdk-windows where adb.exe can be found. Click on the Windows Explorer path displayed on Top, and copy the path to the Clipboard

    0.jpg


    Go to Start Menu, and Right click Computer, Choose Properties

    1.jpg


    Choose Advanced System Settings and then Environment variables

    2.jpg


    Now, add the Location you copied to the Clipboard earlier, to the end of the current path, after adding a ";"(without the quotes) to the end of the current path.

    3.jpg


    So, in my case, the current path shows:
    c:\droidzone\windows; c:\droidzone\blahblah

    It now becomes:
    c:\droidzone\windows; c:\droidzone\blahblah;C:\Software\Phone\android-sdk-windows\tools

    Hit Enter to everything.

    From now, whenever you open a Command prompt in Windows, you will be able to execute Adb and Fastboot from there without needing to navigate to the folder where they are installed.


    Next step: Elementary Adb commands

    Don't forget to Hit the Thanks button to let me know that my posts helped you!
    110
    Elementary Adb commands

    Ok, now that you've got adb all setup and prepared your computer to use it, you're ready to learn some basic adb commands. I'll be teaching some of them in this section.


    Understanding how adb and the shell works


    Let's first check if adb is working by asking it to communicate with our phone. Connect the phone with a usb cable to the PC. Note that you should have installed the HTC drivers already (They come with HTC Sync)

    From your Windows Start Menu, Click on Run, then type the following and press enter. That should open a command shell:

    Code:
    cmd
    5.jpg


    Once there, type out the following:

    Code:
    adb devices
    This will display a list showing the connected phones with their serial numbers (and emulators-But let us not worry about what these are, right now)

    6.jpg


    Great, now we have confirmation that adb is working! We're now ready to issue our basic commands.

    First thing to note is the basic command to enter the Android custom linux shell. Like Windows has cmd.exe to enter the dos shell, the graphical eyecandy with Sense overlay that you see on your device has a custom linux kernel running, so basically the language of its shell is the Linux shell language.

    Accessing the Linux terminal (adb shell) is what we do to issue commands. To enter the shell of our device, the basic command is:

    Code:
    adb shell
    Immediately, you will get a prompt like this:
    Code:
    sh-3.2#
    Now we can type out any (most) linux commands and these will be executed in our device.

    The file system on Android is laid out over MTD partitions in your device's NAND (Internal memory), and the SD card. The Nand is strictly organized in a Linux system with Linux file permissions and ownership rights (Just know that these exist, for now)

    So, right now, you will be dropped in the "root" of the filesystem, from where you can navigate to other places.

    Note! An important difference between Linux and Windows is that while Windows uses the Backslash (\), Linux/Android uses the forward slash (/) to depict directory hierarchies. Another one you shouldnt forget is that in Linux/Android, a file named boot.img is different from Boot.img, BOOT.IMG and BoOt.img, while on Windows, they are all the same.


    My tutorial is about adb commands, and not linux, so I'll give only a short summary of elementary linux commands below. I will expand the list and explanation for this at a later date if you require it:
    pwd-Shows the current working directory
    cp-copy a file
    mv-move a file (copy a file and then delete the original file)
    chmod-set file permissions
    chown-set file ownerships
    rm-delete a file
    cd-change directory
    rmdir-delete a directory

    Elementary Adb commands


    Installing applications with adb
    You can install any apk from your PC to the phone very easily. Open a cmd shell, and then type in:
    Code:
    adb install
    followed by a space. Now drag an apk file in Windows explorer to the shell we have opened. Immediately, the path of the file becomes inserted in our prompt that it becomes:

    Code:
    adb install C:\Desktop\TitaniumBackup.apk
    assuming that the file TitaniumBackup.apk was present in the location C:\Desktop. Hit enter and you will notice that it gets installed.

    Transferring files to the sdcard without connecting the device as Disk drive:

    Code:
    adb push C:\Desktop\TitaniumBackup.apk /sdcard/
    will trasfer the file C:\Desktop\TitaniumBackup.apk to the root (main) directory of your sdcard. Likewise, you can transfer any file from the PC to any location on your device.

    Eg: I want to transfer a file called wallpaper.zip to a location /data/local. The command would be:

    Code:
    adb push C:\Desktop\wallpaper.zip /data/local/
    Contd..

    Don't forget to Hit the Thanks button to let me know that my posts helped you!
    56
    Getting an adb logcat

    Many a time, you might have heard people telling you to get a logcat to report your error with a Rom installation.

    What is a logcat?

    A logcat is a report from the Android logging system, which takes place in the background the whole time your phone is on. It starts the moment you switch on the phone, and continues till you shut it down completely. This log is extremely useful for finding out what went wrong with your system. It is useful to find out why your phone is having bootloops or force closes. It is infact useful for all errors!

    How to get the logcat?
    Basically, you can view the logcat log with the following command:
    Code:
    adb logcat
    But that means getting overwhelmed by an endless haze of output flowing at a rate that you cant read and will overwhelm your command shell's capacity very soon.

    So the system we normally use is to output the log to a file from which we can read later. This is done by the following command:
    Code:
    adb logcat > log.txt
    My Technique
    As a Rom developer and apk patcher, I have to constantly check for errors in my system. So I've devised an ingenous method to easily log logcat, and view them readily. I use a combo of commands executed in succession:

    Code:
    adb kill-server
    echo "" > log.txt
    start log.txt
    adb logcat > log.txt
    These commands essentially create a blank file named log.txt in the same path as the command shell you've opened. Then, it opens the file log.txt (which is blank at this point of time. Then it logs logcat output to that file. Once you refresh the opened file, it will show the output of logcat to this point of time. Refresh it once again, and it updates once more. You should install Notepad++ and associate .txt files with it, to get best results.

    Instead of executing these four commands, you can download the batch file getlog.cmd and extract it from the zip file to the folder containing adb.exe. Once you type in the following command (from anywhere in Windows), you will achieve the same result as typing the four commands as above! Ingenious, eh? :D

    Don't forget to Hit the Thanks button to let me know that my posts helped you!

    53
    More elementary adb commands:

    Getting a file from your phone to your PC:

    To get a file /system/etc/init.d/01data to your PC, you would type out the following:

    Code:
    adb pull /system/etc/init.d/01data
    which will transfer the spcified file to the location on your pc where you have opened the cmd.exe shell.

    Mounting the system partition as Read Write to transfer files to your /system partition:

    Method 1:

    Code:
    adb remount
    Method 2:
    This can also be accomplished with the more advanced mount command in the adb shell. First we need to know the mount point of the partitions.

    Type:
    Code:
    adb shell
    mount
    For me, it displays:
    Code:
    rootfs / rootfs rw,relatime 0 0
    tmpfs /dev tmpfs rw,relatime,mode=755 0 0
    devpts /dev/pts devpts rw,relatime,mode=600 0 0
    proc /proc proc rw,relatime 0 0
    sysfs /sys sysfs rw,relatime 0 0
    /sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
    none /acct cgroup rw,relatime,cpuacct 0 0
    tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
    tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
    tmpfs /app-cache tmpfs rw,relatime,size=8192k,mode=755,gid=1000 0 0
    none /dev/cpuctl cgroup rw,relatime,cpu 0 0
    [B]/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0[/B]
    /dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
    /dev/block/mtdblock5 /system/data yaffs2 rw,nosuid,nodev,noatime,nodiratime 0 0
    /dev/block/mmcblk0p2 /data ext4 rw,nosuid,nodev,noatime,nodiratime,commit=50,bar
    rier=0,stripe=64,data=ordered,noauto_da_alloc 0 0
    /dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,u
    id=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset
    =iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
    /dev/block/vold/179:1 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relat
    ime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,ioch
    arset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
    tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
    sh-3.2#
    Note that the entry for system partition shows:
    /dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0

    The ro means that /system is mounted as RO-i.e Read Only. The whole line means that the Nand MTD block device on /dev/block/mtdblock3 is mounted on the mount point /system, to use technical jargon.

    We need to mount it as RW (Read Write)
    The command is:
    Code:
    mount -o rw,remount /dev/block/mtdblock3 /system
    This essentially mounts the /system as Read Write so that you can write to it (Normally you cant write to the /system partition), which is what "adb remount " also does. However the commands above can be executed from a Terminal Emulator application too.

    Next: Getting an Adb logcat

    Don't forget to Hit the Thanks button to let me know that my posts helped you!
    35
    Summary of other adb commands

    The following is the partial list of commands supported by adb. You can obtain this list by the following command:

    Code:
    adb /?
    Code:
    C:\Users>adb /?
    Android Debug Bridge version 1.0.26
    
     -d                            - directs command to the only connected USB devic
    e
                                     returns an error if more than one USB device is
     present.
     -e                            - directs command to the only running emulator.
                                     returns an error if more than one emulator is r
    unning.
     -s <serial number>            - directs command to the USB device or emulator w
    ith
                                     the given serial number. Overrides ANDROID_SERI
    AL
                                     environment variable.
     -p <product name or path>     - simple product name like 'sooner', or
                                     a relative/absolute path to a product
                                     out directory like 'out/target/product/sooner'.
    
                                     If -p is not specified, the ANDROID_PRODUCT_OUT
    
                                     environment variable is used, which must
                                     be an absolute path.
     devices                       - list all connected devices
     connect <host>:<port>         - connect to a device via TCP/IP
     disconnect <host>:<port>      - disconnect from a TCP/IP device
    
    device commands:
      adb push <local> <remote>    - copy file/dir to device
      adb pull <remote> [<local>]  - copy file/dir from device
      adb sync [ <directory> ]     - copy host->device only if changed
                                     (see 'adb help all')
      adb shell                    - run remote shell interactively
      adb shell <command>          - run remote shell command
      adb emu <command>            - run emulator console command
      adb logcat [ <filter-spec> ] - View device log
      adb forward <local> <remote> - forward socket connections
                                     forward specs are one of:
                                       tcp:<port>
                                       localabstract:<unix domain socket name>
                                       localreserved:<unix domain socket name>
                                       localfilesystem:<unix domain socket name>
                                       dev:<character device name>
                                       jdwp:<process pid> (remote only)
      adb jdwp                     - list PIDs of processes hosting a JDWP transport
    
      adb install [-l] [-r] [-s] <file> - push this package file to the device and i
    nstall it
                                     ('-l' means forward-lock the app)
                                     ('-r' means reinstall the app, keeping its data
    )
                                     ('-s' means install on SD card instead of inter
    nal storage)
      adb uninstall [-k] <package> - remove this app package from the device
                                     ('-k' means keep the data and cache directories
    )
      adb bugreport                - return all information from the device
                                     that should be included in a bug report.
    
      adb help                     - show this help message
      adb version                  - show version num
    
    DATAOPTS:
     (no option)                   - don't touch the data partition
      -w                           - wipe the data partition
      -d                           - flash the data partition
    
    scripting:
      adb wait-for-device          - block until device is online
      adb start-server             - ensure that there is a server running
      adb kill-server              - kill the server if it is running
      adb get-state                - prints: offline | bootloader | device
      adb get-serialno             - prints: <serial-number>
      adb status-window            - continuously print device status for a specifie
    d device
      adb remount                  - remounts the /system partition on the device re
    ad-write
      adb reboot [bootloader|recovery] - reboots the device, optionally into the boo
    tloader or recovery program
      adb reboot-bootloader        - reboots the device into the bootloader
      adb root                     - restarts the adbd daemon with root permissions
      adb usb                      - restarts the adbd daemon listening on USB
      adb tcpip <port>             - restarts the adbd daemon listening on TCP on th
    e specified port
    networking:
      adb ppp <tty> [parameters]   - Run PPP over USB.
     Note: you should not automatically start a PPP connection.
     <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
     [parameters] - Eg. defaultroute debug dump local notty usepeerdns
    
    adb sync notes: adb sync [ <directory> ]
      <localdir> can be interpreted in several ways:
    
      - If <directory> is not specified, both /system and /data partitions will be u
    pdated.
    
      - If it is "system" or "data", only the corresponding partition
        is updated.
    I will add notes for these if you require them.
Our Apps
Get our official app!
The best way to access XDA on your phone
Nav Gestures
Add swipe gestures to any Android
One Handed Mode
Eases uses one hand with your phone