Linux指令集合

磁盘相关命令

df//查看磁盘整体状况

在这里插入图片描述

df -h //查看磁盘整体状况

在这里插入图片描述

du //查看磁盘使用情况,如果不加目录,默认为当前目录

在这里插入图片描述

du -h -d 0//表示我们只希望看当前目录磁盘使用情况,不会继续展示这层目录的下一级目录
du -h -d 1//表示展示当前目录的下一级目录磁盘使用情况,-d是可以指定查看层数的

在这里插入图片描述

远程拷贝

实现文件的上传和下载,把远程机器的文件拷贝的本地(下载),以及把本地的文件上传到远程机器(上传)
scp(secure copy):使用的协议是ssh协议
本地路径比较好写:可以使用绝对路径和相对路径
远程路径比较难处理:用户名@远程服务器IP:目标路径路径 (这是一种指定远程路径的方法)

示例,使用windows上传文件到ubuntu虚拟机

  1. 最开始没有上传时ubunt虚拟机一个普通用户家目录文件
    在这里插入图片描述
  2. 使用windows将本地文件上传到Ubuntu系统中mask用户的根目录下
    scp FileName UserName@TargetIP: targetfile
scp 要上传的文件名 目标机器的用户名@目标机器的IP:上传文件的目标位置

在这里插入图片描述

  1. 登录Ubuntu服务器可以查看到上传的文件
    在这里插入图片描述

  2. 从Ubuntu服务器下载文件
    在这里插入图片描述

除了上面这样使用用户名和密码进行验证实现上传和下载功能,我们还可以使用密钥和公钥的方式进行验证登录,在验证身份时我们会用自己的密钥和别人传过来的公钥进行配对,如果匹配成功,那么就可以实现登录等一系列操作

  1. 生成自己的公钥和私钥,先cd 到自己目录下的 .ssh/ 目录
    在这里插入图片描述

  2. 查看自己的公钥和私钥,id_rsa就是我们创建的私钥,id_rsa.pub就是我们创建的公钥
    在这里插入图片描述

  3. 有了公钥我们就可以让其他设备直接使用公钥和我们建立连接,这里使用的时gitee代码管理仓库来实现我们的对接,查看公钥并且将公钥配置在我们的gitee仓库之后,我们就可以不用输入密码直接在gitee仓库上push,clone,pull代码
    在这里插入图片描述

在这里插入图片描述
此时我们就可以在Ubuntu上快乐的实现操作gitee仓库的代码啦

如果我们使用公钥密钥进行传输,需要通过ssh进行,如果在使用此方法上传或者下载文件时在保证你网络,以及虚拟机正常开启的情况下无法进行传输,那么我们可以使用ps -elf|grep sshd命令来查看我们是否在虚拟机上开启sshd服务
在这里插入图片描述
如果出现/usr/sbin/sshd这条记录那么说明我们已经开启sshd服务
如果我们ping虚拟机IP,无法联通那么我们需要用vmnet8开启

c在linux上的编译过程

c语言程序在linux上运行,首先编译器会将 *.h文件和 *.c文件进行预处理形成预处理后文件 *.i文件,然后 *.i 文件会经过编译形成 *.s 汇编文件 ,然后再经过汇编形成 *.o 目标文件 ,最后再进行引导代码和库函数的链接 形成没有后缀的 * 可执行文件

在这里插入图片描述

预处理指令
g++ -E hello.c -o hello.i
// -E代表执行预处理
// -o是指定输出文件

1. 预处理的作用

执行预处理指令,预处理指令包含如下指令
(1)#include 文件包含
(2)#define M 5 宏定义(简单的文本替换)
(3)#define size(a)(sizeof(a) / sizeof(a[0])) 宏定义

宏开关
#if #else #endif(不常用)

源代码在这里插入图片描述
执行代码进行预处理

`g++ -E hello.c -o hello.i`

预处理之后生成的代码
在这里插入图片描述

#ifdef N #else #endif(常用)
防御式声明,为了避免重复包含多个头文件
源代码
在这里插入图片描述
执行代码进行预处理

g++ -E hello.c -o hello.i

预处理之后的代码
在这里插入图片描述
重新执行一下代码进行编译,后面的 -D表示添加define宏定义 后面的N表示添加的宏定义名称叫做N

g++ -E hello.c -o hello.i -D N

编译之后的代码
在这里插入图片描述
我们可以看到相同的代码但是再我们执行不同的编译指令之后,预处理出来的代码都是不一样的,这样子就给我们后面进行移动开发进行不同设备之间的代码编译时提供了便捷

#ifndef #else #endif
执行是上面的相反结果

2. 编译

将c语言代码编译成汇编代码
两种风格的汇编代码
(1)AT&T汇编
(2)x86/x86_64
他俩的区别就是目标寄存器和原寄存器位次不一样,他俩刚好反过来的
源代码
在这里插入图片描述
执行以下代码(先将源代码进行预处理再进行编译)
gcc -E hello.c -o hello.i
gcc -S helli.c -o hello.s
或者一步到位,直接将源代码编译成 *.s 汇编代码
gcc -S hello.c -o hello.i
在这里插入图片描述

pushq %rbp  //会将%rbp寄存器的值保存在栈帧中
movq %rsp , %rbp //会将%rsp 的值移动到%rbp中,这样他们相减为0,说明main函数的栈帧大小为0
leaq .LC0(%rip),%rdi //%rip中存储的是hello world字符串的地址,会将此地址赋值给 %rdi ,%rdi一般是存储第一参数
call puts@PLT //调用printf内置函数
movl $0,%eax //执行return 0 的操作,将0 存储在%eax寄存器中
popq  %rbp //恢复%rbp寄存器的值
push 入栈		mov 移动(赋值)		pop 出栈		lea (load effictive address)相当于&,加载有效地址
call 函数调用		ret 函数返回                     
%rbp -->base pointer 栈帧基址寄存器
%rsp -->stack pointer 栈顶寄存器
%eax -->存储返回值

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值