(1)gcc编译 gcc [options][filenames]
options:
-c 只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件
-o output_filename确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out
-ggdb调试用
-O对程序进行优化编译、链接
对于test.c :
gcc test.c将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out
gcc test.c -o test 将test.c预处理、汇编、编译并链接形成可执行文件test
对于两个源文件为test.c和testfun.c
1. 多个文件一起编译用法:#gcc testfun.c test.c -o test作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接
用法:#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
对于test.cpp:
g++ test.cpp -o test
其实也是分三步:
-E 让GCC在预处理结束后停止编译 g++ -E hello.cpp -o hello.i
-c 将hello.i编译成目标代码 g++ -c hello.i -o hello.o
将目标文件连接成可执行文件 g++ hell.o -o hello
(2)gdb调试
有一个test.c
编译: gcc -g test.c -o test
gdb test
出现一堆版本...信息以(gdb)结束,输入help可以看命令类别 ;help 类别 可以看一类中有哪些命令
list命令: list(或l) 列出源代码,接着上次的位置往下列,每次列10行
list 行号 列出从第几行开始的源代码
list 函数名 列出某个函数的源代码
quit(或q) 退出gdb调试环境
start 开始执行程序,停在main函数第一行语句前面等待命令
step(或s) 执行下一行语句,如果有函数调用则进入到函数中
next(或n) 执行下一行语句(在提示符下直接敲回车表示重复上一条命令,故而可以直接回车表示逐条执行)
backtrace(或bt) 查看各级函数调用及参数
info(或i) locals 查看当前栈帧局部变量的值
print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
finish 连续运行到当前函数返回为止,然后停下来等待命令
set var 修改变量的值(在找到某个赋值出错后,可以先改正确继续运行,看还有没有其他的错误)
(3)netstat命令:显示网络状态
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项(-at所有与tcp相关)
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l(小写L)仅列出有在 Listen (监听) 的服務状态(-lt ,-lu结合使用)
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
(4)chmod的两种使用方式:
chmod 777(或者其他数字,三个权限一组)文件或目录名(目录的话可以前面加-R表递归)
chmod u(g,o,a)+(-,=)r(w,x)文件或目录
u:文件拥有者,g同组用户,o:other用户,a:all用户;
+:加入权限,-:除去权限,=:设置权限
(5)关于数据流重定向
ll / > ~/rootfile 和 ll / >> ~/rootfile的区别:
前者将根目录内容列表写入~/rootfile,写的方式是文件不存在则创建,存在则先清空再写;
后者与上类似,只不过写的方式变成不存在则创建,存在则在文件最下方累加;
执行find /home -name .bashrc时,屏幕上会有一些输出,有的是无权限的错误输出,有的是正常输出,此时如果要进行数据重定向就需要使用> 和 2>分别重定向正确输出和错误输出,标准格式如下:
find /home -name .bashrc > list_right 2> list_error
(6)
Ctrl+C终止目前命令
Ctrl+Z暂停目前命令
Ctrl+D输入结束,有的时候,输入有多行内容,最后一行之后接Ctrl+D表示输入结束
Ctrl+S暂停屏幕输出
Ctrl+Q恢复屏幕输出
(7)grep -n[可选参数] '正则表达式'文本名
可选参数:
-v:反向选择,选出没有正则表达式的那一行
-i:忽略大小写
(8)sed [-nefr][动作]
-n:安静模式
-e:直接在命令行模式进行sed
-f filename 执行filename里面的 sed动作
-i 直接修改读取文件的内容,而不是由屏幕输出
动作:[n1[,n2]]function
n1和n2表示进行sed操作的行数,有的时候并不存在
function:
a:新增,a后面接字符串,在新的一行出现,目前行的下一行
c:替换,c后面的内容替换n1,n2之间的行
d:删除某两行之间的内容
i:插入,后面的 内容插在目前行的上一行
p:打印
s:替换,可以搭配正则表达式使用
一般都是接在管道后面,例:cat /etc/passwd | sed '2,5d' 删除2到5行之间的内容
(9)top命令
top命令经常用来监控linux的系统状况,比如cpu、内存的使用
可用内存计算:free+buffer+swap中的cache
空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少。
其他的一些与性能有关的命令
uptime 系统已经运行的时间
free 内存相关
(10)lsof命令
列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
(11)文件夹和文件大小df、du
df查看一级文件夹大小,使用比例,却不能查看文件
du查询文件或者文件夹的磁盘使用空间
du -h --max-depth= 可以指定深入的层数