2026年3月

Linux C 语言网课学习

[TOC]

L1 C语言

D1 linux 命令和C语言基础

linux 根目录详解见 思维导图

一 、文件和目录命令

查看命令手册 man + 需要查看的命

man ls //查看ls命令使用规则

1 、pwd

功能:查看用户在文件系统中当前位置(绝对路径)

pwd

2、ls

功能:列出当前目录下所有内容

格式:ls【选项】【文件名或目录名】

ls -a  //显示该目录下全部文件(包括隐藏文件)
ls -l  //长列表格式,显示文件详细信息
ls -R  //递归显示文件下的文件

3、cat

功能:查看文件内容

格式:cat 【选项】【文件名】

cat -s // 对文件中多个空行合并成一个空行显示
cat -b // 除空行不编号,其他的行都编号并显示行号
cat -n // 对文件中所有的行进行编号显示(包括空行)

4、cp

功能:文件复制(将一个文件复制到另一个文件下)

格式:cp【选项】 源文件 目标文件

cp -r 源文件夹 目标文件 //递归复制该文件目录及子目录下的内容
cp -i 源文件 目标文件 -i //-i是覆盖文件交互提示
cp 源文件1 源文件2 目标文件 //将多个文件复制到一个文件下   

5 、mv

功能1:移动文件(类似于剪切 粘贴)

功能2:更改文件名

格式: mv 【选项】 源文件 目标文件

mv a.c  ../   //将a.c文件移动到上当前目录下的上一层目录(单纯移动文件)
mv a.c  b.c   //将a.c文件重命名为b.c文件(单纯重命名文件)
mv a.c ../b.c //a.c文件移动到上一级并重命名为b.c文件(移动并重命名文件)

6、touch

功能:创建一个空文件

格式:touch 文件名

7、rm

功能:删除文件,删除文件夹

格式:rm 【选项】 文件名或目录名

rm -i 文件名  //删除提示,询问是否删除
rm -r 目录名 //递归删除目录下的所有文件

8、mkdir

功能:创建一个新的目录

格式:mkdir 【选项】 目录名

mkdir c // 创建一个新的c目录
mkdir -p c/c1 // 创建了一个c目录下的c1目录(一次性创建多级目录 )

二 、vi 编译器的使用

1、vi编译器三种模式

  • 命令模式

使用vi 编辑文件时,最初进入文件界面的模式,就是命令模式。

这个模式下不能编辑文件,可以进行复制和粘贴操作。

  • 插入模式

在文件界面下方出现"Insert "下,才能进行编辑,按【ESC】键回到命令模式

  • 底行模式

确定在命令模式下(ESC键),按下shift + :(冒号),此时光标在屏幕的底行,然后输入wq保存退出即可。

在底行模式下,可以进行文件替换 查找、列出行号等。

2、vi编译器模式切换命令

在命令行模式下进入插入模式时,输入以下命令

命令功能
a (小写a)Append 进入编辑状态,从当前的光标移动到下一个光标,进行键盘输入新的字符(比如代码后添加分号)
A (大写A)Append 进入编辑状态 光标跳到行尾转插入。(比如注销掉这一行代码//)
i (小写i)Inster 进入编辑状态,从当前光标开始的位置插入键盘输入(比如直接写代码)
I (大写I)Inster 进入编辑状态,光标跳到行首转插入(比如注释这行代码)
o (小写o)Open 进入编辑状态,在下方插入新的一行,光标停留在该新行的行首,开始输入新的字符(比如头文件和函数空行)
O (大写O)Open 进入编辑状态,在上方方插入新的一行,光标停留在该新行的行首,开始输入新的字符(比如头文件和函数空行)
ESC进入名令模式
:!在vi中 冒号叹号 加命令,(比如!:pwd 显示当前编辑文件位置。 !:date 显示当前时间)

3、vi保存和退出命令

在命令行模式下执行

:qquit 退出没有修改的文件(若文件被修改了,没有保存,则此命令无效)
:q!强制退出,且不保存修改过的部分
:wwrite保存文件,但不能退出
:xexit保存文件并且退出 相当于wq
:w File另存为File给出的文件名 ,不退出
:r FileRead读入File指定的文件内容

4、vi拷贝与粘贴命令

在命令行模式下执行

命令功能
[N]x单个字符删除,N表示多个字符删除(比如3x就是删除3个字符)
[N]dd两种功能 删除和剪切。dd就是从光标开始的位置进行剪切到缓冲区,N表示几行。(比如2dd就是剪切行)
[N]yyyy就是从光标开始的位置进行复制到缓冲区,N表示几行。(比如2yy就是粘贴2行)
p或Pp就是粘贴,小写p是粘贴到下一行,大写P是粘贴到上一行
uundo取消上一次操作(类似撤销)。多次撤销就多按几次u

7、vi光标命令

在命令行模式下执行

命令功能
h方向键 “←” 向左移动
J方向键“↓” 向下移动
k方向键“↑” 向上移动
L方向键“→” 向右移动
:N移动光标当文件的第N行(N待定)(底行模式)
1G移动光标到文件的第一行
G移动光标当文件的最后一行
:set number设置显示行号
:set nonumber取消显示行号

8、vi查找命令

在命名行模式下直接输入 / (要查找的字符串)

/string查找字符串(比如/printf 查找printf字符串)

  • n继续查找 (向下找)
  • N 反向继续查找(向上找)
  • 支持正则表达式 比如:/^the 以the开头的字符串

9、vi替换命令

利用:s 命令可以实现字符串的替换

格式 :冒号(就是范围)s(就是替换)/旧的字符窜/新的字符串

  • :s/str1/str2 //当前行替换第一个字符串
  • :s/str1/str2/g //
  • :.,$ s/str1/str2/g // .当前行 。当了符号是最后一行 。当前行到最后一行 进行替换
  • :1,$ s/str1/str2/g //第一行到最后一行进行替换(全文替换)。逗号前后是从哪到哪
  • :%s/str1/str2/g //全文替换。:%

加g是全部替换,不加g就是第一个字符。

10、块代码复制粘贴命令

​ 在命令行模式下操作,部分行操作

  • y0 将光标至行首的字符拷入剪贴板
  • y$ 将光标至行尾的字符拷入剪贴板
  • range y 块复制

    1,10y //比如1到10块复制(:1,10y)

    1,$y //从第一行到最后一行复制


三 、基础知识

1、计算机基本结构

​ 存储器(内存)

输入设备 运算器(cpu内部) 输出设备

​ 控制器(cpu内部)


四 、数据的表示

1、数值数据的表示

能够进行算术运算,明确数值的数据为数值型数据(比如二进制)

1-1、进制转换

十进制(D)二进制(B)八进制(O)十六进制(H)
00000 000000
10000 000111
20000 001022
30000 001133
40000 010044
50000 010155
60000 011066
70000 011177
80000 1000108
90000 1001119
100000 101012A
110000 101113B
120000 110014C
130000 110115D
140000 111016E
150000 111117F

进制转换

1-3、二进制 (1010)→(八进制 十进制 十六进制)

  • 二转八 :将二进制分割未 3位一组,不够的补位0, 依据421法则计算,之后按顺序排列,得到八进制。

    巧记:

0 0 10 1 0
4 2 14 2 1
12

(1010) B = (12 )O

  • 二转十:二进制从低位到高位(从有到左),分别是2的0次方 1次方....2的8次方,然后将结果相加得到十进制

    也可以直接用 128 64 32 16 8 4 2 1 对应位 0 0 0 0 0 0 0 0 ,相加得到。

1010 B = 1*2^3  +  0*2^2  +  1*2^1  + 0*2^0 = 8 + 0 + 2 + 0 = 10
  • 二转十六:将二进制分割为4位一组,不够的补位0,依据8421法则计算,之后按顺序排列,得到十六进制
1 1 1 00 1 1 1
8 4 2 18 4 2 1
D7

(1110 0111)B = (D7)H

1-4、八进制 →(二进制 十进制 十六进制)

  • 八转二:一分三法,即将一位八进制分解为3个二进制数。

示例(327 )O = ( 1101 0111 )B

327
011010111

从高位到低位 1101 0111

  • 八转十:先将八进制转化为二进制,然后将进制转化为十进制。(8-2-10)
  • 八转十六:先将八进制转化为二进制,然后将二精致转换为十六进制。(8-2-16)

1-5、十进制 →(二进制 八进制 十六进制)

  • 十转二:第一种方法是用短除法,取余数。另一种则是用128 64 32 16 8 4 2 1 去算,进行补位
  • 十转八:先进行十转二,二转八即可(10-2-8)
  • 十转十六:(10-2-16)

1-6、十六进制 →(二进制 八进制 十进制)

  • 十六转二:就是二转十六的逆向,一分四法,将十六进制中的每一位分成4位二进制,

    示例 :(D7)H = (11010111) B

D7
11010111
  • 十六转八:(16-2-8)
  • 十六转十:(16-2-10)

1-7、源码、反码、补码

1原码

原码是人脑最容易理解和计算的表示方式.

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.

比如如果是8位二进制:

[+1]原 = 0000 0001

  [-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

    [1111 1111 , 0111 1111]

即  [-127 , 127]

2反码

反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

    [+1] = [00000001]原 = [00000001]反

    [-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

3补码

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    [+1] = [00000001]原 = [00000001]反 = [00000001]补

    [-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

2、非数值数据的表示

不能进行数值计算的为非数值型数据(比如文字 符号)

2-1 、ASCLL码


五 、程序的编译和调试

1、gcc编译器

语法:gcc -o hello hello.c

  • -o 输出可执行文件
  • -c 只要求编译器输出目标代码
  • -g 用于调试
  • ./hello 查看输出结果

语法二:gcc -o hello hello.c -Wall //注意这里的Wall 首字母大写

  • -wall 是输出警告信息。

2、程序调试

利用__FILE__,__LINE__,__FUNCTION__ 实现函数跟踪测试//注意下划线是2个下划线,FILE是文件 LINE 是行号,FUNCTINO是函数功能

示例程序累加1-10的和

  1 #include<stdio.h>
  2 
  3 int main()
  4 {
  5     int p = 1, i = 2;
  6 
  7     while(i <= 10)
  8     {
  9         p = p + i;
 10         i = i + 1;
 11     }
 12     printf("%s,%s,%d,p=%d\n",__FILE__,__FUNCTION__,__LINE__,p);
 13 
 14     return 0;
 15 
 16 }      

程序结果输出

add.c,main,12,p=55
//add.c文件,对应__FLIE__
// main是main函数,对应__FUNCTION__
//12是行号,对应__LINE__
//P=55,对应P 是输出结果   
    

六 、小知识

1 快捷键 : ctrl + l //linux 终端清屏快捷键 (ctrl + 英文L键)
    
2 命令 :df -T //显示文件磁盘系统信息

3 快捷键 ctrl + shift + n // 再开启一个终端窗口

4 快捷键 ctrl + shift + t // 同一个窗口 开启一个标签