Linux 常用基本命令:
文件 —— cp rm mv tail mv more find grep
进程 —— ps kill jobs top
管理 —— useradd userdel passwd shutdown init halt reboot
网络 —— ping tcpdump netstat
/*************************************************************************************/
目录结构:
/boot 系统启动所需文件、内核文件
/etc 系统配置
/bin 二进制可执行文件
/lib 库文件
/mnt 临时挂载点
/dev 设备文件
/home 普通用户家目录
/root 管理员目录
/proc 虚拟文件系统、进程信息
/*************************************************************************************/
文件类型:
- 普通文件
d 目录文件
l 符号链接(类似快捷方式)
b 块设备文件 / 二进制文件
c 字符设备文件
p 命名管道文件
s 套接字文件
改变文件权限 chmod r(4) w(2) x(1)
chmod u+x file
chmod 777 file
/*************************************************************************************/
gcc / g++:
工具集合的入口,其中会调用其他工具
编译 .c 文件
以 gcc 编译 -- 按照C语言编译(以 nm 查看逻辑地址偏移量,函数签名为函数名)
以 g++编译 -- 按照Cpp编译(函数签名为_Z3addii)
以 gcc 编译 -- 按照 Cpp 解析(产生链接错误,因为 gcc 不会主动链接c++标准库,需要手动指定)
以 g++ 编译 -- 按照 Cpp 解析,通过 ldd 命令查看所依赖的库
/* gcc不仅仅能编译 .c 文件,同时也能编译 .cpp 文件;但C与C++混合编译时应该使用 g++ 来链接,否则会因为C和C++的编译链接符号不同而链接失败 */
/*****************************************************1********************************/
gdb调试:
l 列出代码
s 进入函数
finish 跳出
n 执行下一步
b 设置断点
p/display 查看变量
x 查看内存
例:x/<n/f/u> <addr>
n表示显示内存的长度——即当前地址向后显示几个地址的长度;
f表示显示的格式——字符串s、十六进制x、十进制d;
u表示将多少字节当做一个值取出来——默认4byte,b单字节、h双字节、w四字节、g八字节
core调试(查看函数崩溃点 / 段错误)
ulimit -c ulimited 将core文件大小设为无限大
bt 查看函数调用栈
/*************************************************************************************/
库:
* 预先编译好的方法的集合
共享库(动态库):
gcc -shared -fPIC -o add.o
运行程序中动态装载库,调用其中的方法
静态库:
ar crv libadd.a add.o
编译完成后将库中包含的所有方法都嵌入程序中
通常将源文件编译成动态/静态库后,使同一个文件分别链接动态/静态库,链接静态库的文件大小会比链接静态库的文件要大一些(假设库中包含大量方法,且程序只调用了部分方法);
* 用nm查看可执行文件中的函数地址
// TODO
动态库 / 静态库的特点
链接 / 装载的过程
/*************************************************************************************/
进程 / 线程:
/*************************************************************************************/
网络: