
linux很好玩的
文章平均质量分 60
记录Linux相关配置
编程一时爽Cxx
温故知新
展开
-
【git clone error:no matching key exchange method found】
git报错未找到匹配的密钥交换方法,不同的密钥交换方法 //无法读取远程仓库。git又能愉快的玩耍了原创 2023-08-16 09:53:25 · 970 阅读 · 0 评论 -
linux下脚本实现 切换root用户并执行
借助一个工具 expectsudo apt-get install expect编写脚本:vim root.sh#!/usr/bin/expectspawn sudo /home/b/run.sh #执行run.shexpect {"password*" { send "root密码\r" exp_continue }}你要执行的脚本run.sh#!/bin/bashecho "your root ./sh"sudo ./hello确保脚本有执原创 2021-07-16 17:24:43 · 4109 阅读 · 1 评论 -
C语言类型别名typedef与宏定义#define
#指针变量的初始化int a = 5;int *p = &a;原创 2021-06-21 23:07:36 · 1889 阅读 · 1 评论 -
结构体、结构体变量、结构体指针、字符串
结构体数组是用于保存一组相同类型数据的, 而结构体是用于保存一组不同类型数组的在使用结构体之前必须先定义结构体类型, 因为C语言不知道你的结构体中需要存储哪些类型数据, 我们必须通过定义结构体类型来告诉C语言, 我们的结构体中需要存储哪些类型的数据struct 结构体名{ 类型名1 成员名1; 类型名2 成员名2; …… 类型名n 成员名n; };结构体变量占用存储空间大小 struct Person{ int age; // 4 第原创 2021-06-12 18:16:52 · 1771 阅读 · 1 评论 -
指针、数组指针、字符串指针、函数指针、 const指针
指针与数组理论加强:指针变量的初始化定义的同时进行初始化int a = 5;int *p = &a;先定义后初始化int a = 5;int *p;p=&a;把指针初始化为NULLint *p=NULL;int *q=0;不合法的初始化://指针变量只能存储地址, 不能存储其它类型int *p;p = 250; // 错误写法//给指针变量赋值时,指针变量前不能再加“*”int *p;*p=&a; //错误写法指针注意事项指针的指向是原创 2021-06-12 17:48:48 · 209 阅读 · 0 评论 -
程序返回return与系统退出exit
程序返回return与系统退出exitreturn是语言级别的,它表示了调用堆栈的返回;exit则是系统调用级别的,它表示了一个进程的结束。return是返回函数调用,如果返回的是main函数,则为退出程序 。 exit是在调用处强行退出程序,运行一次程序就结束 。exit(1)与 exit(0)区别 exit(1)表示异常退出。 exit(0)表示正常退出 该值返回给操作系统的,0是正常退出,其他值是异常退出,该值会被写入环境变量ERRORLEVEL,其它程序可以由此判断原创 2021-06-06 00:10:26 · 1043 阅读 · 6 评论 -
Linux 选择题一百道
cron 后台常驻程序 (daemon) 用于:A. 负责文件在网络中的共享B. 管理打印子系统C. 跟踪管理系统信息和错误D. 管理系统日常任务的调度在大多数Linux发行版本中,以下哪个属于块设备 (block devices) ?A. 串行口==B. 硬盘 ==C. 虚拟终端D. 打印机原文链接:https://blog.youkuaiyun.com/qq_36130482/article/details/806168333. 下面哪个Linux命令可以一次显示一页内容?A. ..原创 2021-05-31 13:58:42 · 7983 阅读 · 1 评论 -
Linux系统之 Shell 脚本
一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。if 语法如何嵌套?if [ 条件 ]then命令1命令2…..elseif [ 条件 ]then命令1命令2….else命令1命令2…..fifi在 Shell 脚本中如何比较两个数字?在 if-then 中使用测试命令( -gt 等)来比较两个数字。例如:#!/bin原创 2021-05-27 07:14:58 · 327 阅读 · 0 评论 -
程序编译链接
gcc -o hello hello.c预处理阶段:处理以 # 开头的预处理命令;编译阶段:翻译成汇编文件;汇编阶段:将汇编文件翻译成可重定位目标文件;链接阶段:将可重定位目标文件和 printf.o 等单独预编译好的目标文件进行合并,得到最终的可执行目标文件。静态链接静态链接器以一组可重定位目标文件为输入,生成一个完全链接的可执行目标文件作为输出。链接器主要完成以下两个任务:符号解析:每个符号对应于一个函数、一个全局变量或一个静态变量,符号解析的目的是将每个符号引用与一个符号定义关联起来原创 2021-05-27 07:11:15 · 127 阅读 · 0 评论 -
缓冲区buffer与缓存区cache
①buffer 就是写入到磁盘。 Buffer 是为了提高内存和硬盘(其他 I/O 设备) 之间的数据交换的速度而设计的。 buffer 将数据缓冲下来, 解决速度慢和快的交接问题; 速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。 例如: 从内存中将数据往数据往硬盘中写入, 并不是直接写入, 而是缓冲到一定大小之后刷入硬盘中。②cache: cache 就是从磁盘读取数据然后存起来方便以后使用。 cache 实现数据的重复使用, 速度慢的设备需要通过缓存将经常要用到的数据缓存起来, 缓存原创 2021-05-24 08:30:20 · 413 阅读 · 0 评论 -
网络字节序、大小端模式
网络字节序、大小端模式学习记录:用共用体的方式来测试:可以通过下面的小程序测试自己的机器是大端字节序还是小端字节序#include <stdio.h>union{ char ch; int i;}un;int main(void){ un.i = 0x12345678; if(un.ch == 0x12){ printf("big endian\n"); } else{ printf("small e原创 2021-05-08 23:47:24 · 222 阅读 · 0 评论 -
指针和引用的不同之处?何时用用指针?何时用引用?
指针与引用:看如下C++代码:int a = 1;int b = 2;int *c = nullptr;c = &a;int &d = b;指针是用来表示内存地址的,而指针这个整数正是被指向的变量地址。而引用就是给变量重新起了一个名字,引用也就是 “别名”。不同之处指针在声明时可以暂时不初始化,当然每次使用指针时都要做检查,以防出现空指针异常的问题。而引用永远都不会为空,它一定得代表着某个对象, 所以 引用 不用做安全性检查。```cppvoid funcPtr(转载 2021-05-08 17:56:31 · 738 阅读 · 2 评论 -
编译器优化、volatile关键字
编译器的优化:程序运行的优化可以分为硬件和软件。硬件:在CPU和内存中间增加缓存区 (cache)来解决CPU和内存之间运行速率差异过大的问题。软件上则分为 编译器优化和程序员优化:程序员优化: 程序员对程序算法、逻辑顺序进行合理安排。程序员优化是程序员在编写代码时,对代码的算法、逻辑顺序进行合理安排,提升效率;编译器优化: 编译器编译时会调整代码的执行顺序或者删掉一些无用的语句。编译器优化则是程序员写好的代码,在编译链接时由编译器进行优化,会调整代码的执行顺序或者删掉一些无用的语句。编译原创 2021-05-07 09:18:46 · 720 阅读 · 0 评论 -
计算机操作系统基本特征、基本功能、系统调用、宏内核、微内核、中断
认识Linux系统的并发机制:并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。并发容易导致竞争的问题。竞争就是两个或两个以上的进程同时访问一个资源,同时引起资源的错误。因此操作系统中,内核提供并发控制机制,对共享资源进行保护。...转载 2021-05-06 10:21:22 · 381 阅读 · 1 评论 -
Linux进程与线程之 进程间通信IPC
进程间通信:管道,FIFO,消息队列, 信号量, 共享内存管道管道, 通常指无名管道, 是 UNIX 系统 IPC 最古老的形式①特点1. 半双工(即数据只能在一个方向上流动) , 具有固定的写端和读端2. 它只能用于具有亲缘关系的进程之间的(父子进程或兄弟进程之间)3. 万物皆文件, 可以被看成是一种特殊的文件, 可以使用普通的读些 write,read等函数。 但它不是普通文件, 并不属于其他文件系统, 只存于内存中。②原型4. #include <unistd.h>5.原创 2021-05-04 18:30:25 · 353 阅读 · 0 评论 -
Linux驱动之 内核最常见的自旋锁及死锁示例
内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择:一种是原地等待,一种是挂起当前进程,调度其他进程执行(睡眠)。Spinlock是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方式解决资源冲突的,即一个线程获取了一个自旋锁后,另外一个线程期望获取该自旋锁,获取不到,只能够原地“打转”。(忙等待)。自旋锁优点:自旋锁不会使线程状态发生切换一直处于用户态,即线程—直都是active的;不会使线程进入阻塞状态,减少了不必要的上下文切换,执行速度快。非自旋锁在获取不到锁的时候会进入原创 2021-05-04 17:12:26 · 2376 阅读 · 0 评论 -
git 使用
Git基本常用命令如下:mkdir XX (创建一个空目录 XX指目录名)pwd 显示当前目录的路径。git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。git add XX 把xx文件添加到暂存区去。git commit –m “XX” 提交文件 –m 后面的是注释。git status 查看仓库状态git diff XX 查看XX文件修改了那些内容git log 查看历史记录git reset --hard HEAD^ 或者 git reset --hard原创 2021-05-02 16:33:33 · 136 阅读 · 0 评论 -
函数值传递、地址传递、引用传递,指针与引用
1.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。函数返回后,函数栈帧销毁,拷贝也会自动被回收,所以对形参的操作不会影响原来的值。2.指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址(32位系统)。传指针就是为实参创建一个指针变量,指针变量里面存的就是实参的地址,对形参进行操作也会通过指针的间接访问对实参进行修改,所以对形参的操作会影响原来的值。3.引用传递:传引用什么也没创建,只是给实转载 2021-05-01 17:26:06 · 523 阅读 · 0 评论 -
Linux驱动之 read、write 接口使用
#include <linux/init.h>#include <linux/module.h>#include <linux/kdev_t.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/uaccess.h>#define NEWCHRDEV_CNT 1 /* 设备号个数 */#define NEWCHRDEV_NAME "hello"原创 2021-04-27 17:50:49 · 1818 阅读 · 0 评论 -
Makefile
Makefile 由一系列的规则组成的,这些规则格式如下:目标…… : 依赖文件集合……命令 1命令 2命令列表中的每条命令必须以 TAB 键开始,不能使用空格!命令列表中的每条命令必须以 TAB 键开始,不能使用空格!make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。make 工具就是在 Makefile 中一层一层的查找依赖关系,并执行相应的命令。编译出最终的可执行文件。Makefile中规则用来描述在什么情况下使用什么命令来构建一个原创 2021-04-26 21:25:40 · 276 阅读 · 0 评论 -
Makefile模板一
#程序版本号VERSION = 1.0.0 #定义变量,使用变量:$(变量名)CC=gcc #定义变量srcs,表示需要编译的源文件,需要表明路径,如果直接写表示这些cpp文件和makefile在同一个目录下,如果有多个源文件,每行以\结尾#其中函数wildcard和patsubst为关键字不同目录下c文件,$(wildcard *.c /xxx/xxx/*.c), 替换所有的c为o表示 $(patsubst %c,%o,$(SRCS)) SRCS=$(wildcard ./*.c)原创 2021-04-23 23:25:04 · 149 阅读 · 0 评论 -
Linux下一切皆文件,文件描述符,文件权限r=4,w=2,x=1 ,系统根目录文件结构学习记录
Linux的文件权限有以下设定:Linux下文件的权限类型一般包括读,写,执行对应字母为 r、w、xLinux下权限的属组有 拥有者 、群组 、其它组 三种。读,写,执行对应数字权限 r=4,w=2,x=1 。-rw------- (600) 只有拥有者有读写权限。-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。-rwx------ (700) 只有拥有者有读、写、执行权限。-rwxr-xr-x (755) 拥有者有读、写、执行权原创 2021-04-23 16:56:53 · 408 阅读 · 0 评论 -
vs Code环境配置Better Comments、koroFileHeader 插件
一、koroFileHeaderkoroFileHeader安装重启即可使用:保存文件:自动生成:还提供有一些注释图案:二、注释行小插件Better Comments:打开配置文件:看自己喜欢添加或修改注释类型、颜色(重启生效):如:"better-comments.tags": [ { "tag": "!", "color": "#FF2D00", "strikethrough": f原创 2021-04-23 00:59:19 · 2741 阅读 · 0 评论 -
内存分区、数据段、存储类、变量、static、const、引用和一些常见问题
程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的,共享的、只读不可更改全局区:存放全局变量和静态变量以及其他常量(静态存储区)栈区stack:由编译器自动分配释放,存放函数的参数值,局部变量等堆区heap:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程普通变量:每次调用都重新初始化数据类型生存周期作用域代码段中位置修饰词全局变量程序运原创 2021-04-20 00:16:21 · 681 阅读 · 0 评论 -
Linux系统之 常见基本系统数据类型 (xx _t) 学习
常见的基本系统数据类型 在头文件<sys/types.h>中定义了某些与实现有关的数据类型,它们被称为基本系统数据类型( primitive system data type)。 还有很多这种数据类型定义在其他头文件中。在头文件中,这些数据类型都是用C的typedef来定义的。 它们绝大多数都以_t 结尾。用这种方式定义了这些数据类型后,就不再需要考虑因系统不同而变化的程序实现细节。常见类型说明dev_t设备号(包含主设备与次设备号)mode_t文件类型,原创 2021-04-08 21:45:01 · 642 阅读 · 0 评论 -
C程序 存储空间布局学习
C程序的存储空间布局历史沿袭至今,C程序一直由下列几部分组成:1.正文段。这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和 shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其指令。2.初始化数据段。通常将此段称为数据段,它包含了程序中需明确地赋初值的变量。例如,程序中任何函数之外的声明:int maxcount = 99;使此变量以其初值存放在初始化数据段中。3.未初始化数据段。通常将此原创 2021-04-04 22:59:19 · 189 阅读 · 0 评论 -
Linux系统之 开机自启动程序脚本 编写
Linux系统启动加载程序最近完成了项目,来个开机自启运行。找到已编译好的程序(以下是我编译的house)$ ls -l|grep house-rwxr-xr-x 1 pi pi 31104 Mar 26 16:11 house输出程序所在路径$ pwd/home/pi/httpOrc/smartHouseV15编写脚本Start.sh$ sudo vi startHouse.sh 脚本内容:#!/bin/shcd /home/pi/httpOrc/smartHouse原创 2021-03-26 21:42:00 · 1967 阅读 · 6 评论