Linux基础知识总结

一、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) 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值