Linux基本操作

发布时间 2023-09-17 19:21:36作者: Frank23

推荐一个Linux教程:https://subingwen.cn/linux/

1.简单终端操作

  1. 在终端中可以使用tab键来进行自动补全
  2. ctrl shift + 可以放大终端

2.相对路径和绝对路径

  1. cd Lab1表示进入当前文件下的Lab1文件夹
  2. cd ..表示进入上一级目录
    .表示当前目录  , ..表示当前目录的上一级目录)
  3. cd ~表示切换到home目录下的当前用户目录
    (home目录下可以存储多个用户目录,如果这个电脑注册了多个用户)
  4. pwd展示当前所在位置的路径
  5. ls表示list即列出当前目录下的文件和目录
  6. ll表示罗列出当前文件、目录的详情信息,如时间、大小等信息

3.创建目录

mkdir 表示make direction即创建一个目录(文件夹)

  1. mkdir    aaa            在当前目录下创建一个名为aaa的目
  2. mkdir    /usr/aaa     在指定目录下创建一个名为aaa的目录
  3. mkdir  -p  a/b/c   加上参数-p,在当前目录下创建多层目录

4.查找文件

wheris file_name查找文件所在位置

5.删除文件、目录

rm表示remove(移除、删除)
rm a.out 表示删除当前目录下的a.out文件
rm -r testfan 加上-r表示递归操作,删除testfan目录

6.复制文件

  1. 文件拷贝

语法: cp 要拷贝的文件A  得到的文件B

如果B不存在则创建B文件,如果B存在那么原来的B文件将被覆盖

  1. 目录拷贝

拷贝目录需要参数-r表示递归

A是需要被拷贝的目录

场景1:B目录原来不存在,通过拷贝创建出目录B

$ cp 目录A 目录B  -r

场景2: 目录B原来存在, 执行下边的拷贝 ==> 目录A会被拷贝并被放到目录B中

$ cp 目录A 目录B -r

场景3: 把A目录里的一个或者多个文件拷贝到B目录中

# 拷贝 A目录中的 a.txt 到目录B中
$ cp A/a.txt B 
# 拷贝 A目录中的所有文件(*表示所有)到目录B中。不能确定A中是否有子目录, 因此需要加-r
$ cp A/* B -r  

7. 文件移动、重命名

mv就是move,这个命令可以对文件、目录进行移动,也可以改名

  1. 移动文件、目录
move A  B

A可以是文件或目录,B是一个存在的目录

这个命令表示把A移动到B

  1. 改名文件、目录、
  move A B

A是文件或目录 B是一个不存在的新名字

move English.txt eng.txt 表示把English.txt改名为eng.txt

  1. 文件覆盖
 move A B

A和B必须都是已经存在的文件,不能是目录!!!
A文件中的内容覆盖B文件中的内容, A文件被删除, 只剩下B文件

8. 查看文件

  1. more
$ more 文件名

快捷键

  • 回车: 显示下一行
  • 空格: 向下滚动一屏
  • b: 返回上一屏
  • q: 退出more
  1. cat
cat 文件名

适合看比较小型的文件

  1. head/tail
head -20 文件名    # 查看文件的前20行
tail -30 文件名    # 查看文件的后30行

9.压缩和解压缩

  1. 使用tar压缩文件:
tar  zcvf  all.tar.gz  *

参数
tar是一种打包工具,可以把文件打包,但不会压缩

  • c: 创建压缩文件
  • z: 使用 gzip 的方式进行文件压缩
  • j: 使用 bzip2 的方式进行文件压缩
    (z和j是互斥的,只能选取一个压缩工具进行当前的压缩操作)
  • v: 压缩过程中显示压缩信息,可以省略不写
  • f: 指定压缩包的名字

上面的指令指定为all.tar.gz,使用gzip进行压缩后缀名需要加上.gz

  1. 使用tar解压缩文件
tar zxvf all.tar.gz -C temp

参数

  • 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

  1. 作用
    Makefile文件相当于把需要执行的gcc命令放到Makefile文件中
    这样不需要重复地在命令行执行gcc命令,直接在命令行写make就可以了
    在命令行输入make clean 可以删除Makefile中clean操作指定的文件(一般是.o文件和可执行程序等)
  2. 先编写链接依赖关系,再编写编译依赖关系
    如下图:
    img
    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