一、Linux终端
1. Linux终端打开方式
Linux开发,从打开终端开始,以下介绍两种打开终端的方式:
(1)在Linux桌面右键“Open Terminal”,即可打开一个终端。
图1.1 右键打开终端
(2)点击菜单栏的“搜索”图标,输入“ter”进行搜索。
图1.2 直接搜索打开终端
打开终端后,我们可以看见一行文字,各段的释义如下图:
图1.3 命令提示
2. Linux终端界面调整
快捷键 | 功能 |
ctrl + shift +“+” | 放大字体 |
ctrl + “-” | 缩小字体 |
ctrl + "L" | 清空终端 |
二、文本编辑器vi
1. vi概述
图2.1 vim标志
如同windows操作系统中的“记事本”,vi是Linux操作系统中的一种文本编辑器。
文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice,文本模式下的编辑器有vi、vim(vi的增强版本)。vi和vim是我们在Linux中最常用的编辑器。
输入下面指令可以vi打开所指定的文件:
vi 文件名
2. vi常用命令汇总
与记事本不同,vi编辑器中没有菜单栏,需要我们键盘输入指令来实现文件的编辑和保存,常见的vi操作指令如下表:
指令 | 释义 |
:w | 保存当前文件 |
:q | 退出当前正在编辑的文件 |
:q! | 强制退出当前正在编辑的文件,并且放弃之前的更改 |
:wq | 保存文件并退出 |
三、开发圣经man
1. man手册概述
进行Linux开发离不开man手册,它有我们所需的所有内容,在Linux终端输入以下指令可以查看man手册目录:
man man //进入man手册目录
q //退出man手册
图3.1 man手册目录(执行“man man”后的界面)
2. man语法
(1)man选项参数
man x name //x就表示man的选项参数
man的选项参数用于指定不同的查找功能,man的选项参数总结如下表:
选项参数 | 释义 |
-a(或者无选项参数) | 在所有的man帮助手册中搜索 |
-f | 等价于whatis指令,显示给定关键字的简短描述信息 |
-P | 指定内容时使用分页程序 |
-M | 指定man手册搜索的路径 |
数字 | 指定从哪本 man 手册中搜索帮助 |
关键字 | 指定要搜索帮助的关键字 |
3. man手册应用实例
我们常用man手册查询一些系统函数和库函数的内容,这里以查阅库函数sleep为例,执行以下命令:
man 3 sleep //在第3本man手册查找库函数sleep
man man //使用man命令来查看man本身
man 1 ls //通过第一本手册来查看ls命令的详细解析
man 2 open //通过第二本手册来查看open系统函数的使用
man 3 fopen //通过第三本手册来查看fopen库函数的使用
man -f printf //查看printf 在哪个手册
于是我们就看到了关于库函数sleep的所有信息(包括函数定义,头文件,函数功能,返回值,参数说明......)
图3.2 man 3 sleep效果
四、Shell命令
1. Shell概述
图4.1 壳
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。能够将用户输入的命令解析成电脑所认知的,这样我们就能通过shell指令来控制Linux系统。
2. Shell常用命令汇总
(1)显示文件信息ls
指令 | 释义 |
ls | 罗列当前目录的内容 |
ls -a | 显示所有的文件,包括隐藏文件(.fileName) |
ls -l | 显示详细信息 |
ls -la | 显示所有文件的详细信息 |
<1>Linux文件详细信息
执行“ls -l”指令,可以查看文件的详细信息,具体内容如下:
图4.2 文件详细信息
<2>常见的文件类型(7个)
- | 普通文件,(ppt/txt/c/mp4/mp3...等不同格式的文件) |
d | directory,目录文件,(相当于文件夹,但本质上有区别) |
l | link,链接文件,(相当于快捷方式) |
p | pipe,管道文件,(用于进程间通信的一种方式) |
s | socket,套接字文件,(用于网络编程【跨主机的进程间通信,即两程序间的通信】) |
b | block,块设备文件,(硬件的设备文件【驱动程序生成】) |
c | char,字符设备文件(硬件的设备文件【驱动程序生成】) |
<3>文件权限
“rw-r--r--”每3位表示一种用户的权限,用户包括:文件的拥有者、同组用户、其他用户。共有3种权限:读(r)、写(w)、执行(x),权重比是r:w:x = 4:2:1。
<4>文件的连接数
对于普通文件,表示该文件的链接(访问的方法)数量有多少个(连接数为0表示已删除);对于目录文件,表示该目录内部还有几个目录文件。
(2)切换路径cd
指令 | 释义 |
cd . | 切换到当前路径(相当于没切换) |
cd .. | 切换到上一级路径 |
cd ~ 或 cd | 切换到当前用户的根目录 |
cd / | 切换到文件系统的根目录 /home |
cd - | 返回上一次所在的路径 |
pwd | 打印当前的路径 |
(3)文件编辑
指令 | 释义 |
touch | touch 文件名 //创建文件 touch 路径 文件名 //在指定路径创建文件 |
mkdir | mkdir 目录名 //创建文件夹 mkdir 路径 目录名 //在指定路径创建文件夹 |
cp | 复制文件 (1)cp 要复制的文件名 副本的名字 //复制文件,并更改新的文件名 (2)cp 路径文件名 要复制到的路径 //将文件复制到其他路径 |
mv | 移动文件 (1)mv 文件所在路径 目标路径 移动后文件的名字 //移动文件并重命名 (2)mv 文件所在路径 目标路径 //移动文件 (3)mv 旧文件名 新文件名 //重命名 |
rm | 删除文件 (1)rm 文件名 //删除文件 (2)rm 目录名 -r //删除目录(文件夹) (-r表示递归,一级一级地删除树状结构) |
(4)文件查看
指令 | 释义 |
cat | 不打开的情况下查看某个普通文件的内容(偷看文件),把文件内容直接打印输出到终端。 |
head | head -数值 文件名 //指定查看文件的头部(默认前10行) |
tail | tail -数值 文件名 //指定查看文件的尾部(默认后10行) |
find | find -name 文件名 //在当前路径开始查找指定文件,返回文件所在的相对路径 |
grep | grep 关键字 文件名 -n(显示行号) //查找文件关键字所在行,并打印出来 |
clear | 清空终端 |
(5)文件权限
指令 | 释义 |
chmod | 修改文件/目录的访问权限 |
sudo | 临时使用超级用户的权限做某事 exit:退出超级用户,返回到普通用户 |
chmod 567 code.c //修改文件code.c的访问权限
//5表示文件拥有者的额权限(r-x)
//6表示同组用户的权限(rw-)
//7表示其他用户的权限(rwx)
sudo touch code.txt //临时使用超级用户权限来创建文件code.txt
图4.3 文件权限参数
chmod a+x abc.c //让abc.c文件的所有用户增加可执行的权限
chmod u-r abc.c //让abc.c文件的拥有者失去可读的权限
(6)压缩和解压缩
<1>系统自带的压缩工具:tar
例如要压缩成gz文件:
压缩 | tar zcvf 压缩包的名字 压缩目标 |
解压缩 | tar zxvf 压缩包的名字 -C 解压到的路径 |
<2>关键字详解
参数 | 功能 | 关键字解析 |
1 | 压缩/解压缩的格式 | z:指定gz格式压缩 可替换为: j:指定为bz2格式压缩解压 J:指定为xz格式压缩解压 |
2 | 压缩还是解压 | c:压缩(打包) 可替换为: x:解压(解包) |
3 | 是否显示压缩/解压的过程 | v:显示压缩或者解压的过程 |
4 | 压缩/解压缩文件的名字 | f:用来指定压缩包的名字,所以压缩包的名字一定要在f的后面 |
五、Makefile
1. Makefile概述
在进行Linux开发时,一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
2. Makefile的创建
其实很简单,新建一个普通文件,将其命名为“Makefile”即可。
图5.1 VScode资源管理器中的Makefile文件
3. Makefile的编写
下面给出了一个Makefile模板,了解含义后直接套用即可:
#Makefile文件要放在和bin,src等同级的目录中
# 1、编译生成的可执行文件所在的路径
TAR = bin/project #(生成的可执行文件是bin目录下的project文件)
# 2、编译用到的.c文件
SRC = src/add.c src/sub.c src/mul.c src/dec.c #(指定src目录下的多个.c文件)
SRC = $(wildcard src/*.c) #(指定source文件下的所有.c文件 -> src/*.c)
# 3、主函数(main文件下的main.c文件)
SRC_MAIN = main/project.c
# 4、引用的头文件的路径
INC = -I ./include # "-I 路径 .h文件(引用的头文件)"
# 5、引用的库文件的路径
LIB = -L ./lib -lbling # "-L 路径 库文件(引用的库文件)" 或 "-l库文件"(如-lpthread)
# 6、用到的编译器
CC = gcc
# 7、编译
$(TAR):$(SRC_MAIN) # 编译可执行文件project用到的主函数project.c
$(CC) $^ -o $@ $(INC) $(LIB) # 格式:编译器 *.c project.c -o 头文件 库文件
# 8、定义run指令
run:
./$(TAR) #如果输入run命令,则相当于执行./project
# 9. 定义clean指令
.PHONY:clean
clean:
$(RM) $(TAR) #如果输入clean命令,则相当于执行./rm project
比如,笔者要完成一个网络聊天室的项目,Makefile是这样写的:
图5.2 工程文件目录
TAR = client/client1 client/client2 client/client3 server/server #生产的可执行文件(4个)
INC = -I ./include #头文件
LIB = -lpthread #库文件(线程)
CC = gcc #编译器
all: $(TAR) #编译生产所有的可执行文件(4个)
#客户1
client/client1 : client/client1.c src/*.c #可执行文件client1用到的.c文件
$(CC) $^ -o $@ $(INC) $(LIB) #格式:gcc client/client1.c src/*.c -o 头文件 库文件
#客户2
client/client2 : client/client2.c src/*.c
$(CC) $^ -o $@ $(INC) $(LIB)
#客户3
client/client3 : client/client3.c src/*.c
$(CC) $^ -o $@ $(INC) $(LIB)
#服务器
server/server : server/server.c src/*.c
$(CC) $^ -o $@ $(INC) $(LIB)