截止到目前,我们上面提到的查看文件内容命令cat、tac、ln、more、less、head、tail,这些命令都是在查阅纯文本文件的内容。 linux下还有很多文件并非纯文本文件,比如linux命令二进制可执行文件binary file。 如果用上面的命令查看这些文件的内容,就会产生乱码。那么像这样的文件,该如果读取查看呢?可以通过od命令. od命令可以将文件以指定的形式显示出来。od命令可以读取的文件类型不限于二进制文件,也可以读取文本文件。命令常用格式如下:

              [root@initroot ~]# od [-t TYPE] 文件
              选项或参数:
              -t:后面指定文件输出的类型,例如:
              a :利用默认的字符输出;
              c :使用ASCII字符输出
              d[size] :利用十进制(decimal)来输出数据,每个整数占用size bytes ;
              f[size] :利用浮点数(floating)来输出数据,每个数占用size bytes ;
              o[size] :利用八进制(octal)来输出数据,每个整数占用size bytes ;
              x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用size bytes ;
            
用whereis命令查看passwd命令的可执行文件路径:
              root@peter-VirtualBox:~# whereis passwd
              passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz /usr/share/man/man1/passwd.1ssl.gz           
            
通过上面我们发现passwd命令对应的可执行文件为/usr/bin/passwd,用od命令将该文件的内容以ASCII方式输出:
              root@peter-VirtualBox:~# od -t c /usr/bin/passwd
              0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
              0000020 003  \0   >  \0 001  \0  \0  \0       J  \0  \0  \0  \0  \0  \0
              0000040   @  \0  \0  \0  \0  \0  \0  \0   8 342  \0  \0  \0  \0  \0  \0
              0000060  \0  \0  \0  \0   @  \0   8  \0  \t  \0   @  \0 033  \0 032  \0
              0000100 006  \0  \0  \0 004  \0  \0  \0   @  \0  \0  \0  \0  \0  \0  \0
              0000120   @  \0  \0  \0  \0  \0  \0  \0   @  \0  \0  \0  \0  \0  \0  \0
              0000140 370 001  \0  \0  \0  \0  \0  \0 370 001  \0  \0  \0  \0  \0  \0
              0000160  \b  \0  \0  \0  \0  \0  \0  \0 003  \0  \0  \0 004  \0  \0  \0
              0000200   8 002  \0  \0  \0  \0  \0  \0   8 002  \0  \0  \0  \0  \0  \0
              ....省略...
            
最左侧是文件的位置字段,以8进制数表示,单位为bytes。例如第二行0000020表示该行内容的第一个字节位于文件的16字节处.0000020对应的十进制数为16. 将/etc/issue文件的内容以8进位显示文件内容与ASCII的对照表:
              root@peter-VirtualBox:~# od -t oCc /etc/issue
              0000000 114 151 156 165 170 040 115 151 156 164 040 061 071 056 063 040
                        L   i   n   u   x       M   i   n   t       1   9   .   3    
              0000020 124 162 151 143 151 141 040 134 156 040 134 154 012 012
                        T   r   i   c   i   a       \   n       \   l  \n  \n
              0000036
            
文件中的每个字符都对应一个ASCII码值,例如上面的L对应的ASCII码值为114,注意该值为八进制数。 转换成十进制数即为:1×8^2+1×8^1+4×8^0=64+8+4=76。如果你手头有一份ASCII码对照表,可以看到L对应的ASCII码正是76.
od命令可能对普通用户来说用处不大,但是对于c/c++软件工程师来讲,有很多大的作用, 研发工程师可以通过观察生成的二进制可执行文件的内容来调试程序。
直接查看www.initroot.com这段字符串对应的ASCII值:
              root@initroot:~# echo www.initroot.com | od -t oCc
              0000000 167 167 167 056 151 156 151 164 162 157 157 164 056 143 157 155
                        w   w   w   .   i   n   i   t   r   o   o   t   .   c   o   m
              0000020 012
                       \n
              0000021
            

initroot编辑整理,转载请注明www.initroot.com