Linux基本操作
推荐一个Linux教程:https://subingwen.cn/linux/
1.简单终端操作
- 在终端中可以使用
tab
键来进行自动补全 ctrl shift +
可以放大终端
2.相对路径和绝对路径
cd Lab1
表示进入当前文件下的Lab1文件夹cd ..
表示进入上一级目录
(.
表示当前目录 ,..
表示当前目录的上一级目录)cd ~
表示切换到home目录下的当前用户目录
(home目录下可以存储多个用户目录,如果这个电脑注册了多个用户)pwd
展示当前所在位置的路径ls
表示list即列出当前目录下的文件和目录ll
表示罗列出当前文件、目录的详情信息,如时间、大小等信息
3.创建目录
mkdir
表示make direction即创建一个目录(文件夹)
mkdir aa
在当前目录下创建一个名为aaa的目mkdir /usr/aaa
在指定目录下创建一个名为aaa的目录mkdir -p a/b/c
加上参数-p,在当前目录下创建多层目录
4.查找文件
wheris file_name
查找文件所在位置
5.删除文件、目录
rm
表示remove(移除、删除)
rm a.out
表示删除当前目录下的a.out文件
rm -r testfan
加上-r表示递归操作,删除testfan目录
6.复制文件
- 文件拷贝
语法: cp 要拷贝的文件A 得到的文件B
- 如果B不存在则创建B文件,如果B存在那么原来的B文件将被覆盖
- 目录拷贝
拷贝目录需要参数-r
表示递归
A是需要被拷贝的目录- B目录原来不存在,通过拷贝创建出目录B
cp 目录A 目录B -r
- 目录B原来存在, 执行下边的拷贝 ==> 目录A会被拷贝并被放到目录B中
cp 目录A 目录B -r
- 把A目录里的一个或者多个文件拷贝到B目录中
# 拷贝 A目录中的 a.txt 到目录B中 cp A/a.txt B
# 拷贝 A目录中的所有文件(*表示所有)到目录B中。不能确定A中是否有子目录, 因此需要加-r cp A/* B -r
7. 文件移动、重命名
mv
或move
,对文件、目录进行移动,也可以改名
- 移动文件、目录
# A可以是文件或目录,B是一个存在的目录
# 把A移动到B
move A B
- 重命名文件、目录
# A是文件或目录 B是一个不存在的新名字
# 如`move English.txt eng.txt` 表示把English.txt改名为eng.txt
move A B
- 文件覆盖
move A B
A和B必须都是已经存在的文件,不能是目录!!!
A文件中的内容覆盖B文件中的内容, A文件被删除, 只剩下B文件
8. 查看文件内容
- more
more 文件名
快捷键
- 回车: 显示下一行
- 空格: 向下滚动一屏
- b: 返回上一屏
- q: 退出
- cat
cat 文件名
适合看比较小型的文件
- head/tail
head -20 文件名 # 查看文件的前20行
tail -30 文件名 # 查看文件的后30行
9.文件压缩和解压
- 使用tar压缩文件:
tar zcvf all.tar.gz *
参数:
tar是一种打包工具,可以把文件打包
- c: 创建压缩文件
- z: 使用 gzip 的方式进行文件压缩
- j: 使用 bzip2 的方式进行文件压缩
(z和j是互斥的,只能选取一个压缩工具进行当前的压缩操作) - v: 压缩过程中显示压缩信息,可以省略不写
- f: 指定压缩包的名字
上面的指令指定为all.tar.gz,使用gzip进行压缩后缀名需要加上.gz
- 使用tar解压文件
tar zxvf all.tar.gz -C dir_name
参数:
- x: 释放压缩文件内容,也就是解压
- z: 使用 gzip 的方式进行文件压缩,压缩包后缀为.tar.gz
- j: 使用 bzip2 的方式进行文件压缩,压缩包后缀为.tar.bz2
- v: 解压缩过程中显示解压缩信息
- f: 指定压缩包的名字
- c :指定解压目录
10.gcc
gcc hello.c表示编译.c文件,编译链接后默认文件名是a.out
gcc后加-o可以命名可执行程序,如gcc hello.c -o hello
./hello
表示运行指定的可执行文件
下面是一些gcc参数
- -c (compile)只编译生成中间同名目标文件,也就是.o文件,不链接
- -o (output)指定生成文件名字,不加-o会默认生成a.out
- -g 可以通过gdb进行调试
- -l 在程序编译的时候,指定使用的库
- -L 指定编译的时候,搜索的库的路径。
- -I 指定头文件所在的目录
- -fPIC/fpic 生成与位置无关的代码
- -shared 生成共享目标文件。通常用于建立共享库时
- -D 在程序编译的时候,指定一个宏,例如可以在编译的时候定义Debug这个宏,这样就不需要在代码里面定义Debug
gcc与g++的异同
- gcc, g++ 都可以编译C程序,编译程序的规则和参数都相同
- g++可以直接编译C++程序,gcc 编译C++程序需要添加额外参数-lstdc++
- gcc ,g++ 都可以定义 __cplusplus 宏
11.Makefile
- 作用
- Makefile文件相当于把需要执行的gcc命令放到Makefile文件中,直接在命令行写
make
或make all
即可 - 在命令行输入
make clean
可以删除Makefile中clean操作指定的文件(一般是.o文件和可执行程序等)
- 先编写链接依赖关系,再编写编译依赖关系
3.定义变量
- 不定义变量
calc:add.o div.o main.o
gcc add.o div.o main.o -o calc
- 自定义变量
# 定义obj变量
obj=add.o div.o main.o
# 定义target变量
target=calc
#$表示取出变量的值
$(target):$(obj)
gcc $(obj) -o $(target)
12.GDB
gdb bomb 调试可执行程序bomb
- q 退出gdb
- r 执行程序,即run
- l 查看c语言代码
- x/10i main 查看main函数的反汇编代码
- x/10i $rip rip是用来存放下一条即将用来执行的指令的地址,又称为PC
- b 5 在指定位置设置断点
- n 执行下一条程序指令
- ni 执行下一条反汇编指令
- c 继续执行,即continue
- x/s 0x405780 查看指定位置的字符串(s表示字符串)
- si 进入函数单步执行
- info reg 查看寄存器的内容
- layout asm 查看汇编代码
- layout regs 查看寄存器
- set args haha 设置命令行参数为haha
- show args 查看命令行参数
13.edb
edb –run bomb