一. 基础命令部分
1. 基础命令
(1) ps:显示正在运行的进程;
(2) mpstat:实时监测多处理器系统上的每个CPU使用情况;
(3) vmstat:实时输出系统各个资源的使用情况;
(4) tcpdump:用于过滤数据包或制定打开格式;
(5) lsof:列出当前系统打开的文件描述符;
(6) ipcs:查看信号量;
(7) ipcsm:查看已经销毁的信号量;
(8) poweroff:立即关机;
(9) reboot:立即重启;
(10)locate:查找包含指定字符串的文件或目录;(locate + 字符串);
(11)more:分屏显示文件内容;
(12)nl:可以显示文件内容和行号;
(13)eject:将光盘驱动中的光盘弹出和收回
(14)fdisk:列出系统中所有的储存设备;
具体归纳:
(1)操作文件的命令:tail:默认在屏幕上显示指定文件的最后10行;
more:以全屏方式按页显示文本文件的内容;
vi:编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令;
find:在给定目录下查找符合给定条件的文件;
grep:筛选过滤文本文件的行。(1.在test.txt文件中,筛选包括mother的行:grep mother test.txt;2.在test.txt文件中,筛选不包含mother的行:grep -v mother test.txt;3.查找以特定字符串结尾的行:grep "\.$" test.txt[这里\表示转义,这里查找以.结尾的行]);
awk:在文件或者字符串中基于指定浏览和抽取信息;(工作流程:读入有“\n”换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0表示所有域;$1表示第一个域,$n表示第n个域。默认域分割符是“空白键”或【tab】键);
(2)与进程相关的:ps:显示正在运行的进程;
kill:用来删除执行中的程序或者工作
top:用来监控linux的系统状况,比如cpu、内存的使用情况
jobs:用于显示linux中任务列表以及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号
(3)系统用户管理类:useradd:用来建立用户账户号和创建用户的起始目录,使用权限是超级用户
passwd:用来更改使用者的密码
(4)网络方面:netstat:用于显示各种网络相关信息,如网络连接,路由表,接口状态等;
lsof:列出当前系统打开的文件描述符
tcpdump:根据使用者的定义对网络上的数据包进行截获的包分析工具。可以将网络中 传送的数据包的“头”完全截获下来提供分析;
2. gdb调试命令
(1) 调试多进程
gdb set follow-fork-mode mode
*mode 可以选择为parent 或者 child
(2)调试多线程
a.利用info threads查看线程信息;
b.thread id 调试目标id指定的线程;
c.set scheduler-locking off | on | step
*“off”表示不锁定任何线程;
“on”只有当前被调试的线程继续运行;
“step”在单步执行的时候,只有当前线程会执行;
(3)普通调试
-l:显示代码;
-r:运行;
-p:打印;
-s:进入到函数;
-b:加上断点;
-bt:查看函数执行到那块;
-n:单步执行;
-c:程序继续向下一个执行
3.makefile文件
(1)功能:实现自动化编译整个工程;
(2)简单的编写步骤:
现在有5个文件,分别为:main.c my1.h my2.h my1.c my2.c
现在编写makefile文件,名称为makefile.过程如下:
a. main: main.o my1.o my2.o
gcc –o main main.o my1.o my2.o
main.o:main.c my1.h my2.h
gcc –c main.c
my1.o:my1.c my1.h
gcc –c my1.c
my2.o:my2.c my2.h
gcc –c my2.c
clean:
rm –f *.o main
b.执行命令:make 就可以生成可执行文件main.如果要删除可执行文件以及所有的中间目标文件,只需要执行下 make clean .
**clean不是一个文件,它只是一个动作的名字。
(3)文件说明
在上面的makefile文件当中,目标文件包括:执行文件main 和中间目标文件(*.o),依赖文件(就是冒号后面的那些文件)。每一个 .o 文件都有一组依赖文件,而这些 .o 文件又是执行文件main的依赖文件。依赖关系的实质上就是说明了目标文件是由那些文件生成的。
(4)make的工作原理
当我们输入make时:
a. make首先会在当前目录下寻找makefile文件。
b. 如果找到,它会找到文件中的第一个目标文件main,并把这个文件作为最终的目标文件。
c. 如果main文件不存在或者是main所依赖的后面的 .o 文件的修改时间要比main这个文件新,那么,他就会执行后面所定义的命令来生成main这个文件。
d. 如果main所依赖的 .o 文件也存在,那么make会在当前文件中找目标为 .o 文件的依赖性,如果找到则再根据那一个规则生成 .o 文件。
e. 由于我的c文件和h文件都是存在的,所以make会生成 .o 文件,然后再用 .o 文件声明make的最终文件,也就是执行文件main.
(5)make和makefile的联系
make是一个命令,makefile是一个文件,当makefile 文件写好后,只需要一个make命令就可以将makefile文件运行起来。
4.库
(1)库是什么?
预先编译好的方法的集合。
(2) 分类
a. 静态库
I 特点:程序在链接的过程当中,连接器从库文件中取得所需代码,复制到生成的可执行文件当中。因此,静态库
是在程序的链接阶段被复制到程序当中,和程序的执行过程没有关系。
II 创建
Eg:有两个源文件:main.c max.c
a) gcc –c main.c max.c (得到main.o 和max.o)
b) 使用ar将目标文件归档
ar crv libxxx.a main.o max.o
**libxxx.a即为我们创建的静态库。
a. 动态库
I 特点:动态库在链接阶段并没有被加载到程序当中,而程序在运行时被系统动态加载到内存当中供程序使用
II 创建
Eg:有一个源文件 max.c
a) gcc –fPIC –shared –o libxx.so max.c
上行代码等价与:gcc –c –fPIC max.c
gcc –shared –o libxx.so max.o
(3) 区别
静态库的可执行文件当中包含了库代码的一份完整的拷贝,因此,当它被多次使用时就会有多份没用的拷贝在内存当中,所以它比较占内存;而动态库系统只需载入一次动态库,不同的程序可以得到内存当中相同的动态库的副本,因此会节省很多内存。