一、补充知识
Linux内核指的是可提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。
Debian最大的特点是集成了数万个软件包,用户可以在网络中非常方便地管理和升级所需要的软件。
Windows使用的是FAT32或NTFS格式的分区系统,而Linux使用的是Ext2或Ext3格式的分区系统。
Ext2是Linux系统中标准的文件系统,特点是极快的访问速度和极小的CPU占用率。用途:硬盘、软盘、移动硬盘、闪存等设备。
Ext3是一种日志式文件系统,特点是将整个磁盘的写入动作以日志的形式完整的记录在磁盘的某个区域上,以便在需要时回溯追踪。使文件的存储非常稳定,广泛用于Linux中。
Swap是Linux系统专门用于内存交换的硬盘分区,相当于Windows系统中的虚拟内存。Swap交换分区的大小一般是内存的两倍。在内存不够时,Linux会将不活动的内存数据存储在交换分区中。
C程序的代码就是普通的文本。编写C程序就是在文本编辑器中编写源代码。
编译就是把高级语言编写的程序代码,翻译成计算机可以执行的二进制代码。
二、简单C程序
#include <stdio.h>
int main()
{
printf("hello,world.\n");
}
上述代码用文本编辑器进行编辑保存为hello.c
gcc hello.c#Linux命令行执行,同一目录会生成可执行文件a.out
./a.out#打印出hello,world.
三、目录与文件命令
命令 | 含义 |
pwd | 当前所在目录,/root表示root用户的根目录 |
cd | 打开一个目录,例如:cd ~打开用户的主目录 |
ls | 查看目录; ls -a显示所有文件和目录,包含隐藏文件,以点开头的是隐藏文件; ls -F在列出的可执行文件后面加*,目录则加/ ls -l显示文件详细列表 *可以匹配文件名中的任意字符串 ?可以匹配一个字符 |
touch | 建立空文件,touch已存在的文件,可以改变该文件创建时间为touch时间,内容不变。 |
mkdir | 创建目录,mkdir -p 可以创建层级目录 |
rmdir | 删除目录,rmdir -p 可以删除没有文件的层级目录 |
cp | 将文件或目录复制到另一个文件或目录中 -a:复制目录时使用,它保留链接、文件属性,并复制目录下所有属性。 -d:复制时保留链接。 -f:覆盖已经存在的目标文件而不给出提示 -i:覆盖文件之前给出提示 -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 -r:如果复制的是目录,则复制该目录下所有的子目录和文件 -l:不复制文件,只是生成链接文件 |
mv | 移动文件,例如mv *.c /c移动所有.c结尾的文件到目录c中 -b:如需覆盖文件,则覆盖前先备份 -f:若目标文件或目录与现有的文件或目录同名,则直接覆盖已有的文件或目录 -i:覆盖前先询问用户 -S:与-b参数一并使用,可指定备份文件所要附加的字尾 -u:移动或文件更名时,若目标文件已经存在,且其文件日期比源文件新,则不覆盖目标文件 -v:执行时显示详细信息 -V:与-b参数一并使用,指定备份的方法。 |
rm | 删除文件与目录 -d:把删除的目录的硬链接删除,并删除目录 -f:强制删除文件或目录 -i:删除文件或目录之前询问用户 -r:递归处理,将指定目录下的所有文件及子目录全部删除 -v:显示命令执行过程 |
ln | 创建链接 -b:覆盖目标文件之前备份 -d:建立目录的硬链接 -f:强行建立文件或目录的链接 -i:覆盖已有文件之前先询问用户 -n:把符号链接的目的目录视为一般文件 -s:对源文件建立符号链接,而非硬链接 注:硬链接与原文件一样,指文件系统中的文件。建立硬链接时,链接文件和被链接文件必须位于同一个分区中,并且不能建立指向目录的硬链接。 软链接即符号链接,只是建立一个简单的快捷方式。用户打开这个快捷方式时,会自动打开被链接的文件。 ln -s 00.c 01.c建立的是一个软链接 |
wc | (word count)可以查看一个文件的行数、字数、字符数的信息。 -l:显示文件的行数 -w:显示文件的单词数 -c:显示文件的字符数 |
cat | 可以输出文件的内容 -n:由1开始对所有输出的行进行编号 -b:和-n相似,但对空白行不编号 -s:当遇到有两行以上的空白行时,就转换为一行
|
head与tail | head -n5 a.txt#查看文件的前5行 head 400b a.txt#查看文件的前400个字节的内容 head 4k a.txt#查看文件的前4KB的内容 head 3m a.txt#查看文件的前3MB的内容 tail -n5 a.txt#查看文件的后5行内容 类推。。。 |
chmod | 文件权限设置 所有者:用u表示,创建这个文件的用户 群组 :用g表示,所有者同一群组中的用户 其他:用o表示,除了所有者和同组用户以外的用户 权限字符r表示可读,w表示可写,x表示可执行,权限的更改需要使用权限设定符+表示增加权限,-表示取消权限,=表示唯一设定权限 -c:若文件权限已经更改,则显示其更改动作 -f:若文件权限无法被更改,则不显示错误信息 -v:显示文件更改的详细资料 -R:对目录下的所有文件与子目录进行相同的权限设置。
|
find | 查找文件命令(从目录和子目录中搜索文件) find 目录 文件名 这个命令支持*和?等通配符 |
四、系统帮助命令
1、man是manual的缩写,意思是“在线帮助手册”,可以帮助用户查找某个命令的帮助信息。
默认终端使用less的文件阅读器来查阅帮助手册,以下是less的使用方式:
man ls
“q”键:退出手册页
上下键:可以一次一行的上下移动手册
“Page Up"和“Page Down”键:可以上下翻页
“Enter”键:一次向下移动一行
“/”+需要搜索的内容:搜索文本
2、man帮助手册是系统标准帮助手册,info手册通常是自由软件的帮助手册。info手册的内容一般比man的内容更加丰富和精确。
info ls
n(next):到相邻的下一个节点
p(previous):到相邻的上一个节点
l(last):到上一次浏览的节点
u(upper node):到上层节点
d(directory node):到info手册的根节点
t(top node):到当前手册的顶层节点
i(search in index):在标题中搜索指定字符串
s(search):全文检索,也可以用“/”来搜索
五、文本编辑器的使用
1、VIM(Visual Interface Improved)文本编辑器
普通模式(Esc键):可以输入命令比如": q"退出
插入模式(I或者A键):可以修改文件内容
可视模式(V键):进行复制粘贴操作
命令 | 意义 |
i | 在光标前插入 |
I | 在当前行首插入 |
a | 在当前光标后插入 |
A | 在当前行尾插入 |
o | 在当前行之下新开一行 |
O | 在当前行之上新开一行 |
r | 替换当前字符 |
R | 替换当前字符及其后的字符,直至按“Esc”键 |
s | 从当前光标位置处开始,以输入的文本替代指定数目的字符 |
S | 删除指定数目的行,并以所输入文本代替 |
ncw/nCW | 修改指定数目的字符 |
nCC | 修改指定数目的行 |
在普通模式下键入i后,进入插入模式,此时按“Esc”键,会返回普通模式。“a“命令用来在当前光标处追加内容,”o“命令可以在当前行的下面新起一行,在新行中输入内容。
2、删除
命令 | 意义 |
x | 删除光标后的一个字符 |
ndw或ndW | 删除从光标处开始及其后的n-1个单词 |
do | 删除当前行光标以前的所有字符 |
d$ | 删除当前行光标以后的所有字符 |
dd | 删除光标所在的行 |
ndd | 删除当前行及其后的n-1行 |
X | 删除光标前的一个字符 |
Ctrl+u | 删除使用当前输入方式所输入的文本 |
4x可以删除4个字符
3、取消
命令 | 意义 |
.(英文句号) | 重复上一次修改 |
u | 取消上一次修改 |
U | 将当前行恢复到修改前的状态 |
u可以多次执行取消操作,.可以多次执行重复操作,U第二次操作即是撤销前一个U的操作。
4、保存
命令 | 意义 |
:w | 保存文件。这个命令需要文件已经保存过 |
:x | 保存文件并退出。这个命令需要文件已经保存过 |
:w file2 | 将内容写入文件file2,覆盖以前的文件 |
:w >>file2 | 将缓冲区内容附加保存到文件file2的后面 |
如果不指定文件名,则默认保存到正在编辑的文件;指定文件名则会另存为新文件。
5、退出
命令 | 意义 |
:q | 退出VIM,如果文件没有保存,则不会退出 |
:q! | 不保存文件,强制退出 |
zz | 保存并退出 |
6、查找
/string用于搜索一个字符串,从光标开始处向文件尾搜索所有string
?string用于从光标开始向文件首搜索所有的string
.*[]^%/?~$特殊字符,如需要查找内容包含这些字符,则需在前面加一个“\”转义字符
*匹配任意字符
?匹配一个字符
n命令在同一方向上重复上一次搜索命令,N反方向
7、替换
:s/p1/p2/g:将当前行中所有字符串p1用字符串p2替换
:n1,n2s/p1/p2/g:将第n1~n2行中所有字符串p1用字符串p2替换
:g/p1/s//p2/g:将文件中所有p1均用p2替换
8、选项设置
选项 | 作用 |
all | 列出所有选项的设置情况 |
term | 终端类型 |
ignorance | 在搜索中忽略大小写 |
list | 显示制表位(Ctrl+I)和行尾标志($) |
number | 显示行号 |
nomagic | 允许在搜索模式下使用前面不带“\”的特殊字符 |
nowrapscan | 禁止VIM在搜索到达文件两端时,又从另一端开始 |
mesg | 允许VIM显示其他用户用write写到自己终端上的信息 |
例如::set all,可以设置:set option(=value)来设置环境变量,不过只在当前窗口有效。
9、调用shell命令
命令格式 | 说明 |
:!cmd | 执行cmd命令 |
:m,n w!cmd | 执行cmd命令,文本中m到n行的内容作为cmd的参数 |
:r!cmd | 执行cmd命令,cmd命令的结果插入到当前文本中 |
:ls /root#vim中会显示root目录下的文件列表
:r! ls /root#把文件列表插入当前编辑的文本中
GVIM图形化的VIM,可以使用鼠标进行操作。输入的命令是gvim
gedit是Linux中常用的图形化界面编辑器,gedit /root/03.c可以打开该文件 。有打印的功能。
六、编译与调试
1、gcc对源文件的扩展名约定如下:
- .c为扩展名的文件,为C语言源代码文件
- .a为扩展名的文件,是由目标文件构成的库文件
- .C、.cc或.cpp为扩展名的文件,标识为C++源代码文件
- .h为扩展名的文件,说明文件是程序所包含的头文件
- .i为扩展名的文件,标识文件是已经预处理过的C源代码文件,一般为中间代码文件
- .ii为扩展名的文件,是已经与处理过的C++源代码文件,也是中间代码文件
- .o为扩展名的文件,是编译后的目标文件,源文件生成的中间目标文件
- .s为扩展名的文件,是汇编语言源代码文件
- .S为扩展名的文件,是经过预编译的汇编语言源代码文件
- .o为扩展名的文件,是编译以后的程序目标文件,目标文件经过链接成为可执行文件
当编译文件扩展名不是.c的C程序时,需要使用-x参数
gcc -x 'c' a.u
gcc --help#查看gcc编译器的帮助
-E参数可以完成程序的预处理工作而不进行其他的编译工作。
gcc -E -o a.cxx a.c#发现新生成的a.cxx文件包含的文件头已经展开
-S参数可以控制gcc在编译C程序时只生成相应的汇编程序文件,而不继续执行后面的编译指令
gcc -S -o a.s a.c
-c参数可以使gcc在编译程序时只生成目标代码而不生成可执行程序
gcc -c -o a.o a.c #生成一个可重定位的目标代码文件
file a.o#查看a.o文件信息,可以看到是可重定向文件
gcc a.o -o aa.out#链接生成可执行文件
2、gdb调试工具
gcc -g -o a.debug a.c #加入调试所用的信息
gdb#启动gdb
#调试gdb程序前需要先加载程序a.debug
file a.debug
#gcc工具编译程序时加入-g参数,就可以在编译后的a.debug程序中自动加入断点
list 1#显示程序第一个断点以前的代码,Enter显示下一个断点以前的代码
#程序的第六行增加一个断点
break 6
#查看程序中设置的断点(所有断点)
info breakpoint
info breakpoint 2#查看第二个断点信息
run#使文件以调试模式运行
next跳一个断点;
continue再一个断点;
step跳一步,可以进行到函数内部;
print i显示变量i的值;
q退出。
help#显示帮助信息
help all#显示所有帮助信息
help file#显示file命令的帮助信息
gdb常用命令
命令 | 含义 |
backtrace | 显示程序的当前位置和表示如何到达当前位置的栈跟踪 |
breakpoint | 在程序中设置一个断点 |
cd | 改变当前工作目录 |
clear | 删除刚才停止处的断点 |
commands | 命中断点时,列出将要执行的命令 |
continue | 从断点处开始继续执行 |
delete | 删除一个断点或监测点,也可与其他命令一起使用 |
display | 程序停止时显示变量和表达式 |
down | 下移栈帧,使得另一个函数成为当前函数 |
frame | 选择下一条continue命令的帧 |
info | 显示与该程序有关的各种信息 |
info break | 显示当前断点清单,包括到达断点处的次数等 |
info files | 显示被调试文件的详细信息 |
info func | 显示所有的函数名称 |
info local | 显示当前函数中的局部变量信息 |
info prog | 显示被调试程序的执行状态 |
info var | 显示所有的全局和静态变量名称 |
jump | 在源程序中的另一点开始运行 |
kill | 异常终止在gdb控制下运行的程序 |
list | 列出相应于正在执行的程序的源文件内容 |
next | 执行下一个源程序行,从而执行其整体中的一个函数 |
显示变量或表达式的值 | |
pwd | 显示当前工作目录 |
pype | 显示一个数据结构(如一个结构或C++类)的内容 |
quit | 退出gdb |
reverse-search | 在源文件中反向搜索正规表达式 |
run | 执行该程序 |
search | 在源文件中搜索正规表达式 |
set variable | 给变量赋值 |
signal | 将一个信号发送到正在运行的进程 |
step | 执行下一个源程序行,必要时进入下一个函数 |
undisplay display | 命令的反命令,不要显示表达式 |
until | 结束当前循环 |
up | 上移栈帧,使另一个函数成为当前函数 |
watch | 在程序中设置一个检测点(即数据断点) |
whatis | 显示变量或函数类型 |