一些Unix/Linux 和 Mac/iOS 的命令行工具,用于学习、测试 iOS 开发和后端开发的常用命令,持续更新中…
gnu套装工具
gcc 编译器
生成目标文件 (二进制机器代码)1
gcc -c
生成可执行文件 (链接器重定位)1
gcc -o
打开gcc所有警告1
gcc -Wall
ld 链接器
将多个目标文件合并成一个目标文件1
ld -r
cat (文本文件查看和连接工具)
一次显示整个文件1
cat 文件名
创建一个文件1
cat > 文件名
将几个文件合并成一个文件1
cat 文件名1 文件名2 > 文件名3
ar (压缩工具——用于静态库)
查看静态库文件包含了那些目标文件1
ar -t libc.a
解压静态库文件,得到对目标文件进行编号和索引的 __.SYMDEF文件1
ar -x libc.a
将目标文件打包成静态链接库1
ar crv libmylib.a my_print.o my_match.o
删除静态链接库中的某个目标文件1
ar -d lib.a my_print.o
要替换或添加新成员到库中1
ar -v -r lib.a strlen.o strcat.o
1 | -v : 将建立新库的详细的逐个文件的描述写至标准输出。当和 -t 标志一起使用时,它给出类似于 ls -l 命令给出的长列表。当和 -x 标志一起使用时,它在每个文件前加一个名称。当和 -h 标志一起使用,它列出成员名称和更新的修改时间。 |
grep (文本搜索工具)
搜索 services 文件内的 telnet 字段1
grep telnet /etc/services
netstat (内核中访问网络及相关信息的程序)
查看本机的路由表1
netstat -nr
显示所有socket,包括正在监听的1
netstat -a
显示协议名查看某协议使用情况 netstat -p 协议名1
netstat -p tcp
arp
用于查看高速缓存中的所有项目1
arp -a
或1
arp -g
dns
查看DNS服务器地址
这个文件内存放DNS服务器的IP地址1
cat /etc/resolv.conf
其中的两个IP地址分别是首选DNS服务器地址和备选DNS服务器地址。文件中的注释语句“Generated by Network Manager”告诉我们,这两个DNS服务器地址是由网络管理程序写入的。
将查询传递给DNS服务器,并显示返回的结果1
host baidu.com
tcpdump
lipo
因为苹果在 mac 上使用的静态库都是一些通过多个不同架构的静态库合成的压缩文件格式,所有有了 lipo 工具来操作这个压缩文件
查看 mac os系统中静态库中包含了那些架构1
lipo -info lib.a
解压出指定架构的静态库1
lipo lib.a -thin armv7 -output lib-armv7.a
合并模拟器库文件和真机库文件1
lipo -create -output lib.a lib-armv6.a lib-i386.a
dwarfdump (用于查看 dSYM 符号集合文件)
* 为文件名
查看 .dSYM 符号文件中的所有符号1
dwarfdump SocialDevApp.app.dSYM > text
查看地址为 0x0024d6a5 所对应的符号1
dwarfdump --lookup=0x0024d6a5 SocialDevApp.app.dSYM :
查看 .dSYM 文件 UUID 是否跟 .crash 文件是否一致1
dwarfdump --uuid /*.app.dSYM
symbolicatecrash 符号化 .crash 文件
首先要找到 symbolicatec 这个 shell 在哪里,进入 xcode.app, 使用如下命令1
find . -name symbolicatecrash
符号化 .crash 1
./symbolicatecrash /*.crash /*.app.dSYM > /*.crash
如果发生错误1
"DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
使用如下1
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
xcode 中所有 dSYM 文件的位置1
~/Library/Developer/Xcode/Archives
objdump
用于查看 目标文件(.o) 或 可 执行的目标文件(.out) 构成的 GCC 工具
反汇编目标文件1
objdump -d main.o > text
显示符号表入口1
objdump -t main.o
尽可能反汇编出源代码1
objdump -S main.o
file
用于查看文件编码的命令
1 | file info.plist |
lsof (一切皆文件)
lsof(list open files)是一个查看当前系统文件的工具。在Unix 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。
查看系统中端口占用情况1
lsof -i
查看某一端口的占用情况:lsof -i:端口号1
lsof -i:21
查找某个文件相关的进程:lsof 文件名1
lsof /bin/bash
ps (查看进程)
显示所有进程信息1
ps -A
ps 与grep 组合使用,查找特定进程1
ps -ef|grep ssh
列出目前所有的正在内存中的程序1
ps aux | egrep '(nginx|PID)'
查找进程详细信息1
sudo ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
otool (Mac上的objdump)
反汇编 mach-o 目标文件1
otool -tV main.out