Unix 常用工具命令笔记

一些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

Alt text

其中的两个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
2
3
4
5
6
7
8
file info.plist
输出:info.plist: Apple binary property list

file SsjjCoreSdk
输出:
SsjjCoreSdk: Mach-O universal binary with 2 architectures: [arm_v7: current ar archive] [arm64]
SsjjCoreSdk (for architecture armv7): current ar archive
SsjjCoreSdk (for architecture arm64): current ar archive

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