Linux基础学习

来源:互联网 发布:sql拒绝访问 编辑:程序博客网 时间:2024/05/29 09:16

一、gcc工具链

编译指令:
gcc test.c -o test  /  gcc   -o  test  test.c
生产test可执行文件

编译:四个部分:预处理

                           编译

                           汇编

                           连接

1.预处理:
gcc -E test.c -o test.i 或 gcc -E test.c
可以输出test.i文件中存放着test.c经预处理之后的代码。
gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。


2.编译:

预处理之后,可直接对生成的test.i文件编译,生成汇编代码:
gcc -S test.i -o test.s
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件


3.汇编:

gcc -c test.s -o test.o

编译成二进制文件


4.连接:

对于生成的test.o,将其与C标准输入输出库进行连接,最终生成程序test
gcc test.o -o test
在命令行窗口中,执行./test


多个文件:例:gcc  test.c  print.c  -o 

常用指令:

-I dir:在头文件的搜索路径列表中添加dir目录
-L dir  :在库文件的搜索路径列表中添加dir目录


二、make,Makefile

一个Makefile文件包含五个方面的内容:
 具体规则
 隐含规则
 定义变量
 指令
 注释 

规则的基本格式是:
target: dependency
(Tab字符)command


三、gdb调试

被调试的应用程序在编译时最好使用-g参数将调试信息编入目标文件中:
gcc -g app.c -o app
用以下命令启动对程序app的调试:
gdb app

如果程序app运行时需要参数,则用以下命令:
gdb --args app arg1 arg2 

arg1和arg2被视为app的参数,而不是gdb的参数 


GDB交互界面

list        l       列出原码
break       b       设置断点
run         r       从头开始运行,在断点处停止
continue    c       从停止处继续运行程序
next        n       向前执行一句(不进入被调用函数)
step        s       向前执行一句(进入被调用函数)
print       p       打印变量值
quit        q       退出gdb



四、shell使用基础

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:
#!/bin/sh
#comments
Your commands go here

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。
编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。执行脚本的时候,要先将脚本文件的属性改为可执行

chmod +x filename.sh
执行脚本的方法是:

./filename.sh


在shell编程中,所有的变量都由字符串组成,并且不需要预先对变量进行声明,例s1:
#!/bin/sh
#set varible a
a="hello world"
#print a
echo "A is:"
echo $a

默认变量:

$#:传入脚本的命令行参数个数
$*:所有命令行的参数值,在各个参数值之间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数


条件判断命令:

test n1 -参数 n2(或 –参数 表达式)

真返回0,假返回1。

参数:

-lt 小于

-le小于等于

-gt  大于

-ge 大于等于

-eq 等于

-ne 不等于


整数

test1 -lt  4

判断1<4

test语句的等价形式[ 1 –lt 4 ]


seq命令

产生1-9的数字序列

例:seq 1 4

表达式求值:

$ expr 1+3

$ expr 1 \* 3

$ echo `expr 1 + 3`


for:输出100内10的倍数

for  i  in `seq  1  9`

do

echo  ` expr  $ i  \*1 10 `

done


read:

read 变量1【变量2 ....】

可以从键盘上读取多个变量的值

例:输出a到b序列各数的10倍数

read  a  b

for  i  in `seq   $a   $b `

do

echo  `expr  $i   \*   10`

done


while:求1-100的和

i=1

sum=0

while     [    $i  -le   100]

do

sum=$[$sum  +  $i]

i=$[$i+1]

done

echo   $sum


原创粉丝点击