LinuxC开发环境

在这里插入图片描述

一、Linux

在这里插入图片描述

Linux安装

Linux Mint 20.3安装教程

Linux系统目录结构

在这里插入图片描述

目录名称解释
/bin/Binaries,存放系统命令,普通用户和root都可以执行。
/boot/系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/Device,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。该目录下的/null目录等价于一个只写文件,并且所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到,但/dev/null对命令行和脚本都非常的有用,相当于windows中的回收站。
/etc/Etcetera,这个目录用来存放系统管理所需要的配置文件和子目录,如用户信息、服务的启动脚本、常用服务的配置文件等。
/home/普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在/home/下建立一个和用户名相同的目录
/lib/Library,系统使用的函数库的目录,这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的.dll文件,几乎所有的应用程序都需要用到这些共享库。
/media/Linux系统会自动识别一些设备,当识别后,Linux会把识别的设备挂载到这个目录下。
/mnt/早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备。
/opt/Optional,第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中,默认是空的。
/root/root的主目录。普通用户主目录在/home/下,root 主目录直接在/下。
/sbin/Superuser Binaries,保存与系统环境设置相关的命令,只有root可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看。
/srv/该目录存放一些服务启动之后需要提取的数据。
/tmp/Temporary,临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。
/usr/Unix Software Resource,Linux 系统中,所有系统默认的软件都存储在/usr目录下,/usr目录类似Windows系统中C:\Windows\+C:\Program files\两个目录的综合体。
/var/Variable,这个目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。
/run/是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
/lost+found/当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份恢复目录。
/proc/Processes,虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo是保存 CPU 信息的,/proc/devices是保存设备驱动的列表的,/proc/filesystems是保存文件系统列表的,/proc/net是保存网络协议信息的。
/sys/虚拟文件系统。和/proc/目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息。

Linux中mnt、media以及dev目录的区别:
/mnt/目录存放手动挂载的硬件,/media/目录存放自动挂载的硬件,载点都是由系统自动建立和删除的,二者没有本质的区别。
/dev/不是存放设备的驱动程序,而是作为访问外部设备文件的接口。比如U盘插入linux系统后,用fdisk -l查看分区,显示文件为/dev/sda1。则我们可以将U盘挂载到/mnt/usb0下,mount /dev/sda1 /mnt/usb0即可。

Linux常用命令

adduser命令 – 创建用户

adduser atreus #增加用户

apt-get命令 – 安装软件

sudo apt-get remove gcc #卸载gcc
#对于Linux中的[Y/n],回车即表示选择Y,输入n表示选择n

cat命令 – 在终端设备上显示文件内容

cat -n file.txt #查看文件内容,同时显示行号
cat /dev/null > file.txt #清空文件内容
#concatenate[kɔn'kætəneit]

chmod命令 – 改变文件或目录权限

chmod u+r hello.c #对属主增加读权限
chmod g+w hello.c #对组用户增加写权限
chmod o+x hello.c #对其他用户增加执行权限
chmod a-r hello.c #对所有用户去掉读权限
chmod 655 hello.c #r:4、w:2、x:1

clear命令 – 清除屏幕

clear #清空屏幕

cp命令 – 复制文件或目录

cp file1.txt file2.txt file3.txt dir/ #多个文件复制到目录dir中
cp -r dir1/*.c dir2/ #将目录/dir1/中的所有.c文件复制到目录dir2中

deluser命令 – 删除用户

deluser atreus #删除用户

diff命令 – 比较文件的差异

diff test1.c test2.c -y -W 100
#-y:并列显示
#-w 100:在使用-y参数时,指定栏宽100
#"|"表示两行不同,"<"表示前面多一行,">"表示后面多一行

在这里插入图片描述

dpkg命令 – 管理deb包

dpkg -i code_1.63.2-1639562499_amd64.deb #安装软件包
#dpkg是Debian package的简写,是为Debian专门开发的套件管理系统,用于软件的安装、更新和移除
#所有源自Debian的Linux的发行版都使用dpkg,例如Ubuntu

echo命令 – 输出字符串或提取Shell变量的值

echo $PATH #查看PATH环境变量

export命令 – 设置或显示环境变量

export -p #显示所有环境变量

file命令 – 识别文件类型

file test.c #查看文件类型

find命令 – 查找和搜索文件

find dir/ -name *.c #查找指定目录下的.c文件

gedit命令 – GNOME桌面的文本编辑器

gedit file.txt #使用gedit打开文件

grep命令 – 强大的文本搜索工具

grep str dir/text.txt #在指定文件中进行字符串模式匹配

在这里插入图片描述

history命令 – 显示与操纵历史命令

history 10 #显示最近的10条命令

ifconfig命令 – 显示或设置网络设备

ifconfig

在这里插入图片描述

ipcs命令 – 多进程间通信常用的工具

ipcs -a #打印出所有进行进程间通信的信息
ipcs -q #打印出使用消息队列进行进程间通信的信息

kill命令 – 杀死进程

kill -9 4428 #以SIGKILL信号终止PID为4428的进程

ln命令 – 为文件创建链接

ln -s dir/ link-dir #为目录建立符号链接

ls命令 – 显示指定工作目录下的内容及属性信息

{ L i n u x 四大类文件 { − :普通文件 d :目录文件 c / b :设备文件 l :链接文件 L i n u x 三小类文件 { − s :共享文件 − f :堆栈文件 − p :管道文件 \begin{cases} Linux四大类文件\begin{cases} -:普通文件\\ d:目录文件\\ c/b:设备文件\\ l:链接文件\\ \end{cases}\\ Linux三小类文件\begin{cases} -s:共享文件\\ -f:堆栈文件\\ -p:管道文件\\ \end{cases} \end{cases} Linux四大类文件 :普通文件d:目录文件c/b:设备文件l:链接文件Linux三小类文件 s:共享文件f:堆栈文件p:管道文件

man命令 – 查看命令帮助信息

man 1 printf #查看用户命令printf
man 2 open #查看系统调用open
man 3 printf #查看库函数printf

mkdir命令 – 创建目录

mkdir -m 666 dir/ #以666权限创建目录
mkdir -p dir1/dir2/dir3 #递归创建多级目录

mv命令 – 移动或改名文件

mv file1.txt file2.txt file3.txt -t dir/ #将三个文件同时移动到目标目录
mv file1.txt file2.txt #文件重命名

ping命令 – 测试主机间网络连通性

ping -c 5 120.78.188.0 #连续ping五次

ps命令 – 显示进程状态

ps -ef
#UID:进程拥有者
#PID:进程ID
#PPID:父进程ID
#C:进程所占CPU百分比
#STIME:进程开始时间
#TTY:该进程在哪个终端上运行,若与终端无关显示'?'。若为pts/0等,则表示由网络连接的主机进程
#TIME:进程启动到现在的时间
#CMD:命令的名称和参数

pwd命令 – 显示当前路径

pwd #默认显示逻辑路径
#-L:logical首字符缩写,表示显示逻辑路径(忽略软连接文件),取pwd系统环境变量的值
#-P:physical首字符缩写,表示显示物理路径时如果当前目录路径时软链接文件,则会显示软连接文件对应的源文件
#注意区分[逻辑路径-物理路径]与[绝对路径-相对路径]

在这里插入图片描述

rm命令 – 移除文件或目录

rm -r dir/ #递归删除,常用于目录
rm -i file.txt #删除前询问,防止误删

rmdir命令 – 删除空目录

rmdir dir #直接删除空目录
rmdir -p dir #递归删除非空目录

su命令 – 切换用户

su - root #切换至root用户

sudo命令 – 以系统管理者的身份执行指令

sudo ./test #以root身份执行文件

systemctl命令 – 管理系统服务

systemctl start ssh #启动ssh服务
#在主机中开启了openssh服务,那么就对外开放了远程连接的接口
#openssh的服务端:sshd
#openssh的客户端:ssh
#ssh---------->sshd
#client        server

在这里插入图片描述

tar命令 – 打包和备份的归档工具
{ 必选 { − c :建立压缩文档 − x :解压 − t :查看内容 − r :向压缩归档文件末尾追加文件 − u :更新原压缩包中的文件 可选 { − z :有 g z i p 属性的 − j :有 b z 2 属性的 − Z :有 c o m p r e s s 属性的 − v :显示所有过程 − O :将文件解开到标准输出 − f :指定文件,这个参数必选且为最后一个参数 \begin{cases} 必选\begin{cases} -c:建立压缩文档\\ -x:解压\\ -t:查看内容\\ -r:向压缩归档文件末尾追加文件\\ -u:更新原压缩包中的文件\\ \end{cases}\\ 可选\begin{cases} -z:有gzip属性的\\ -j:有bz2属性的\\ -Z:有compress属性的\\ -v:显示所有过程\\ -O:将文件解开到标准输出\\ \end{cases}\\ -f:指定文件,这个参数必选且为最后一个参数 \end{cases} 必选 c:建立压缩文档x:解压t:查看内容r:向压缩归档文件末尾追加文件u:更新原压缩包中的文件可选 z:有gzip属性的j:有bz2属性的Z:有compress属性的v:显示所有过程O:将文件解开到标准输出f:指定文件,这个参数必选且为最后一个参数

tar -zcvf test.tar.gz test.c #压缩test.c文件为test.tar.gz
tar -ztvf test.tar.gz #列出压缩文件内容
tar -zxvf test.tar.gz #解压文件

time命令 – 指令执行时所消耗的时间

time ps -ef #显示指令执行时间
#real是指令实际执行时间
#user是指令在用户空间花费时间
#sys是指令在Kernel space中花费的时间

在这里插入图片描述

touch命令 – 创建文件

touch file.txt #创建空文件

tree命令 – 以树状图列出目录内容

tree -L 1 #只显示第一层文件及目录

在这里插入图片描述

二、编辑器vim

基本命令

命令对应操作
i,I进入输入模式:i为从目前光标所在处输入;I为在目前所在行的第一个非空格符处开始输入
a,A进入输入模式:a为从目前光标所在的下一个字符处开始输入;A为从光标所在行的最后一个字符处开始输入
o,O进入输入模式:o为在目前光标所在的下一行处输入新的一行;O为在目前光标所在的上一行处输入新的一行
r,R进入取代模式:r只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下ESC为止
:w将编辑的文件写入硬盘
:q离开
:q!强制离开不存储
:wq存储后离开
ZZ保存并退出
ZQ不保存强制退出
:w[filename]另存新文档
:v[filename]将目标文档写至光标后
:!command执行shell命令
dd剪切游标所在行
yy复制游标所在行
p,Pp为将已复制的数据粘贴在光标下一行,P则粘贴在游标当前行并将当前行下移
u撤销
.重复上一操作
gg移到第一行
G移到最后一行
nGn为数字,移动到这个档案
/word向光标之下寻找一个名称为word的字符串
?word向光标之上寻找一个字符串名称为word的字符串
n重复前一个搜寻的动作
n反向重复前一个搜寻的动作

自定义vim

三、编译器gcc

gcc概述

gcc是GNU计划提供的编译器。

交叉编译

交叉编译是在宿主机上生成目标机上的可执行代码
1.预处理:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef),生成预处理文件(.i)
2.编译:检查语法、转成汇编、生成汇编文件(.s/.S)
3.汇编:编译汇编文件、生成目标文件(.o)
4.链接:链接所有目标文件、生成符号表、生成可执行文件
注:这里的文件扩展名只是标注给gcc看的,在Linux中文件没有扩展名

gcc编译选项

1.-ogcc hello.c -o hello,o是output的意思,用于文件重命名,这里是将生成的可执行文件重命名为hello
2.-Egcc -E hello.c > hello.i,预处理,因为预处理信息正常会在终端输出,不会生成对应文件,所以这里通过重定向符输出到*.i文件
3.-Sgcc -S hello.c -o hello.s,生成汇编文件
4.-cgcc -c hello.c -o hello.o,生成目标文件,不进行链接
5.-Idirgcc -I./mm/nn hello.c -o hello,指定头文件第三方搜索路径
6.-Wallgcc -Wall hello.c -o hello,显示全部警告

四、函数库

Linux中静态库与动态库及其制作与使用

五、调试器gdb

编译生成可执行文件

使用参数-g,即gcc -g hello.c -o hello,加上参数-g后,gcc会额外做以下两件事:
1.创建符号表,符号表包含了程序中使用的变量名称的列表
2.关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行

调试

生成可执行文件后通过gdb hello启动gdb。

1.list:查看程序,后面可以加函数名行号,即list mainlist 15
2.break:添加断点,后面同样可以加函数名行号,即break mainbreak 15 if i = 1
3.info break:查看断点信息
4.delete:删除断点,后面加断点编号,即delete 3删除三号断点
5.run:断点设置完毕便可通过run命令运行程序
6.next:单步运行,不进入子函数
7.step:单步运行,进入子函数

next与step区别:
如果下一条要执行的语句是一个函数调用语句,

step就会进入到这个函数之中:
7	int main() {
(gdb) next #输入next
8		fun();
(gdb) step #输入step
fun () at hello.c:3
3	void fun() {

next就会直接越过这个函数(GDB在背地里悄悄地把这个函数执行完):
7	int main() {
(gdb) next #输入next
8		fun();
(gdb) next #输入next
Sakura.
10		return 0;

8.watch:为指定变量设置硬件观察点,当对应变量值发生改变时会进行提示,要与continue配合使用,而且要在run之后执行

watch的使用:
(gdb) break 6 #设置断点
Breakpoint 1 at 0x1155: file main.c, line 6.
(gdb) run #运行程序
Starting program: /home/atreus/0117/gdb/main 

Breakpoint 1, main () at main.c:6
6		int sum = 0;
(gdb) watch sum #设置硬件观察点
Hardware watchpoint 2: sum
(gdb) continue #继续运行
Continuing.

Hardware watchpoint 2: sum

Old value = 0
New value = 1
main () at main.c:8
8		for(int i = 1; i <= 10; i++)

9.continue:继续运行至下一个断点或硬件观察点
10.print:查看指定变量值,后面加变量名,即print sum
11.display:查看指定变量值,会一直显示
12.finish:运行程序直到当前函数执行结束,一般用于子函数跳出,无法在主函数中执行

调试完毕后可通过quit退出gdb。

六、工程管理器make

makefile概述

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因此makefile就像一个Shell脚本一样,也可以执行操作系统的命令。

makefile的使用

在这里插入图片描述

此外,在makefile中,还存在系统默认的自动化变量:

  1. $^:代表所有的依赖文件
  2. $@:代表目标
  3. $<:代表第一个依赖文件
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值