Linux _C语言网课学习L1_D1_linux基本命令
Linux C 语言网课学习
[TOC]
L1 C语言
D1 linux 命令和C语言基础
linux 根目录详解见 思维导图
一 、文件和目录命令
查看命令手册 man + 需要查看的命
man ls //查看ls命令使用规则1 、pwd
功能:查看用户在文件系统中当前位置(绝对路径)
pwd2、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保存和退出命令
在命令行模式下执行
| :q | quit 退出没有修改的文件(若文件被修改了,没有保存,则此命令无效) |
|---|---|
| :q! | 强制退出,且不保存修改过的部分 |
| :w | write保存文件,但不能退出 |
| :x | exit保存文件并且退出 相当于wq |
| :w File | 另存为File给出的文件名 ,不退出 |
| :r File | Read读入File指定的文件内容 |
4、vi拷贝与粘贴命令
在命令行模式下执行
| 命令 | 功能 |
|---|---|
| [N]x | 单个字符删除,N表示多个字符删除(比如3x就是删除3个字符) |
| [N]dd | 两种功能 删除和剪切。dd就是从光标开始的位置进行剪切到缓冲区,N表示几行。(比如2dd就是剪切行) |
| [N]yy | yy就是从光标开始的位置进行复制到缓冲区,N表示几行。(比如2yy就是粘贴2行) |
| p或P | p就是粘贴,小写p是粘贴到下一行,大写P是粘贴到上一行 |
| u | undo取消上一次操作(类似撤销)。多次撤销就多按几次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) |
|---|---|---|---|
| 0 | 0000 0000 | 0 | 0 |
| 1 | 0000 0001 | 1 | 1 |
| 2 | 0000 0010 | 2 | 2 |
| 3 | 0000 0011 | 3 | 3 |
| 4 | 0000 0100 | 4 | 4 |
| 5 | 0000 0101 | 5 | 5 |
| 6 | 0000 0110 | 6 | 6 |
| 7 | 0000 0111 | 7 | 7 |
| 8 | 0000 1000 | 10 | 8 |
| 9 | 0000 1001 | 11 | 9 |
| 10 | 0000 1010 | 12 | A |
| 11 | 0000 1011 | 13 | B |
| 12 | 0000 1100 | 14 | C |
| 13 | 0000 1101 | 15 | D |
| 14 | 0000 1110 | 16 | E |
| 15 | 0000 1111 | 17 | F |
1-3、二进制 (1010)→(八进制 十进制 十六进制)
二转八 :将二进制分割未 3位一组,不够的补位0, 依据421法则计算,之后按顺序排列,得到八进制。
巧记:
| 0 0 1 | 0 1 0 |
|---|---|
| 4 2 1 | 4 2 1 |
| 1 | 2 |
(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 0 | 0 1 1 1 |
|---|---|
| 8 4 2 1 | 8 4 2 1 |
| D | 7 |
(1110 0111)B = (D7)H
1-4、八进制 →(二进制 十进制 十六进制)
- 八转二:一分三法,即将一位八进制分解为3个二进制数。
示例(327 )O = ( 1101 0111 )B
| 3 | 2 | 7 |
|---|---|---|
| 011 | 010 | 111 |
从高位到低位 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
| D | 7 |
|---|---|
| 1101 | 0111 |
- 十六转八:(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 // 同一个窗口 开启一个标签