![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 87
小魏同学i
这个作者很懒,什么都没留下…
展开
-
mac下国内安装Homebrew教程
mac下国内安装Homebrew教程Homebrew是一款包管理工具,目前支持macOS和linux系统。主要有四个部分组成: brew、homebrew-core 、homebrew-cask、homebrew-bottles。名称说明brewHomebrew 源代码仓库homebrew-coreHomebrew 核心源homebrew-cask提供 macOS 应用和大型二进制文件的安装homebrew-bottles预编译二进制软件包本文主要介绍转载 2020-11-12 22:40:42 · 963 阅读 · 0 评论 -
【Linux】对文件及目录权限的理解与重要命令
一. 对文件及目录权限的理解在Linux中,文件及目录的权限是非常重要的。我们可以通过ls -al 查看所有文件详细的权限与属性。可以看到:第一列表示文件的类型与权限:这里有10个字符(1)第一个字符表示这是它的文件类型 - 普通文件 d 目录文件 p 管道文件 l 软链接 b 块设备 c 字符设备 ...原创 2017-11-19 19:40:11 · 417 阅读 · 0 评论 -
VIM使用
转载地址:https://www.runoob.com/linux/linux-vim.html 1、什么是 vim? Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是...转载 2020-09-30 16:12:28 · 719 阅读 · 0 评论 -
【Linux】进程概念
操作系统:任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(函数库,Shell程序等)什么是进程?从用户的角度看:进程是程序的一次动态执行过程,正在执行的程序。从内核的角度看:进程是操作系统分配资源的基本单位进程有自己的状态和独立的地址空间,进程会被切换,有生命周期,动态运行,有PCB,状态 ...原创 2018-05-24 20:26:39 · 198 阅读 · 0 评论 -
【Linux】网络编程套接字——UDP协议
一.认识ip地址IP地址是在IP协议中,用来表示网络中不同主机的地址;IP协议有两个版本,IPv4和IPv6,但是通常我们使用的都是IPv4;对于IPv4,IP地址是一个4字节,32位的整数。我们通常用“点分十进制”的字符串表示IP地址,比如:192.168.2.250在IP数据包头部中,有两个IP地址,分别是源IP地址和目的IP地址。 我们要怎么理解这个地址呢?举一例子:就像唐...原创 2018-05-13 00:01:31 · 425 阅读 · 0 评论 -
【Linux】网络编程套接字——TCP协议
上一次,我们介绍了套接字的概念及简单的UDP网络程序;今天,我们介绍一个简单的TCP网络程序。一. 地址转换函数在IPv4的socket网络编程中,sockaddr_in中的成员dtruct in_addr sin_addr表示的是32位的IP地址,但是我们通常却是用点分十进制的字符串表示。因此,我们在使用时,经常需要互相转换。 1. 字符串转in_addr的函数:#include ...原创 2018-05-14 22:20:56 · 299 阅读 · 0 评论 -
网络基础
转自https://www.jianshu.com/p/21b5cbac0849 作者写的很好,通俗易懂,供大家学习,复习使用。转载 2018-04-24 23:08:30 · 228 阅读 · 0 评论 -
UDP协议与TCP协议的对比
UDP协议的特点(1)无连接,就像发短信一样,不需要建立连接,直接传输 (2)UDP尽最大努力交付,不保证可靠性,没有确认机制,没有重传机制 (3)UDP是面向报文的,应用层交付给UDP的报文,UDP原样发送,不会拆分和合并 (4)UDP首部只有8个字节,开销小 (5)UDP支持一对一、一对多、多对多的交互通信 (6)如果校验和出错,直接丢弃 (7)UDP没有真正意义上的发送缓冲区...原创 2018-06-06 23:41:52 · 375 阅读 · 0 评论 -
正则表达式
grep工具grep是Linux中常用的文本过滤工具,按照关键字或者正则表达式进行过滤,它是按行匹配的,通常是Linux中处理文本的第一步。grep工具采用的是贪婪匹配,即:匹配当前行中所有的匹配内容。grep工具如果匹配到了,它的退出码是0,如果没有匹配到,它的退出码是1。选项-i 忽略大小写的不同-n 同时输出行号-v 反向选择,显示出没有'搜寻字符串'内容的一行-o ...原创 2018-07-08 10:37:46 · 474 阅读 · 0 评论 -
IO多路转接之select
五种IO模型阻塞IO,在内核将数据准备好之前,系统会一直在等待,所有的套接字,默认都是阻塞方式非阻塞IO:如果内核还没有将数据准备好,系统会调用仍然直接返回,并且返回EWOULDBLOCK错误码,非阻塞IO需要程序员循环的方式反复尝试读写文件描述符,看数据是否准备好,这个过程称为轮询,,这对CPU来说是很大的浪费信号驱动IO:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO...原创 2018-07-09 23:43:30 · 194 阅读 · 0 评论 -
Shell截取字符串
Shell脚本中截取字符串的方法一共有8种,分别如下:1.#*n截取,删除左起第一个n及其以左的字符, 2.##*n表示删除左起最后一个n及其以左的字符(n表示字符串中的某一个字符) 3.%n*截取,删除右起第一个n及其以右的字符, 4.%%n*表示删除右起最后一个n及其以右的字符 5.${str:n:m}表示截取,左起从第n个字符开始,共m个字符 6.${str:n}表...原创 2018-07-04 17:13:47 · 1666 阅读 · 0 评论 -
Shell脚本中的$()和``及eval
1. ``和$()有什么区别?在shell脚本中,``和$()是用来完成命令替换的,先执行反引号或括号里面的内容,将结果代换到当前命令。 例如: 区别:对于转义字符的处理有些不同 ``中的转义没有成功,$()中\将$转义成普通字符``中两个\\将$转义成了普通字符,$()中\\的输出结果是\,和一般的转义结果一样$()中的转义字符和我们平时使用的是一样的,``中...原创 2018-07-04 17:27:43 · 6006 阅读 · 0 评论 -
Shell脚本工作原理
我们知道Shell脚本是一种解释性的语言,是不用编译的,那么它是如何执行程序的呢?chmod u+x test.sh./test.sh Shell会fork()一个子进程,然后调用exec()执行,exec()会用把子进程的代码段替换成test.sh程序的代码段,然后开始执行,父进程等待子进程终止; 但是由于test.sh是一个文本文件,并没有代码段和_start函数,这是...原创 2018-07-11 22:21:02 · 4056 阅读 · 2 评论 -
Shell基本语法练习
Shell脚本语法练习1. 计算1+2+3+4+…+100#!/bin/bashi=1sum=0while [ $i -le 100 ]do let sum+=i let i++doneecho $sum2. 计算1+2+3+4+…+100,并将执行过程打出#!/bin/bashi=1sum=0echostr=''while [ $i -le ...原创 2018-07-05 16:46:00 · 377 阅读 · 0 评论 -
【Linux】环境变量
环境变量环境变量是指在操作系统中用来指定操作系统运行环境的一些参数,它具有某些特殊用途,通常在系统中具有全局性。例如:在编程C语言代码,在链接的时候,我们从来没有关心过程序所链接的动态库静态库在哪里,但是却可以连接成功,这就是因为有相关的环境变量帮助编译器查找库。查看环境变量的方法:echo $NAME //NAME环境变量的名字 常见的环境变量:PATH:存放系统搜索...原创 2018-05-28 00:08:50 · 369 阅读 · 0 评论 -
静态库与动态库
一. 静态库与动态库1. 静态库:程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候将不再需要静态库。 静态库命名格式是libxxx.a2. 动态库:程序在运行的时候才去链接动态库的代码多个程序共享使用库的代码。一个与动态链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。 动态库命名格式是libxxx.so动态库可以在多个程...原创 2018-04-27 22:37:44 · 258 阅读 · 0 评论 -
【Linux】进程间关系及守护进程
进程组、作业、会话1.进程组 我们知道每个进程都有自己的pid,但是除此之外,还属于一个进程组。进程组是一个或多个进程的集合。进程组与作业相关联,可以接受来自一个终端的各种信号。每一个进程组都有一个进程组ID,进程组中有一个进程组长,组长的进程ID与进程组的ID相同。这与Linux中线程组相似,多线程的进程称为线程组,线程组的ID与线程组组长的ID相同。 举一个例子:由上面...原创 2018-04-19 23:43:26 · 298 阅读 · 0 评论 -
【Linux】gcc及gdb命令用法总结
在linux中编译C语言程序,那么就一定会用到gcc预处理:进行宏替换,去除注释,条件编译,包含头文件,保留pragma gcc -E test.c -o test.i//将test预处理输出test.i文件编译:进行词法分析,语法分析,语义分析,优化等处理,生成汇编代码 gcc -S test.i//将预处理输出文件test.i汇编成test.s汇编:生成test.o机器...原创 2017-12-02 18:15:28 · 510 阅读 · 0 评论 -
【Linux】一个简单的进度条
我们都知道缓冲区,缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。比如:我们从磁盘中读取数据,先将数据放置缓冲区,计算机直接从缓冲区中读取数据,等缓冲区数据读取万,再去磁盘继续读取,这样可以减少磁盘的读取次数,同时加快了计算机的运行速度。 我们所熟知的printf函数也是如此,...原创 2017-12-02 21:36:41 · 191 阅读 · 0 评论 -
【Linux】管道实现进程间通信
一. 进程间通信(IPC) 我们知道进程之间都是相互独立的,任何一个进程的全局变量在另一个进程中是看不到的,如果进程之间需要交换数据就要通过内核。进程间通信(InterProcess Communication)的本质就是让两个进程看到共同的资源。进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一...原创 2018-03-22 20:29:08 · 5619 阅读 · 3 评论 -
【Linux】进程间通信之消息队列
在上一篇博客里,我们学习了进程间通信的一种方式,那就是管道,今天我们继续学习另一种方式消息队列。消息队列一. 什么是消息队列? 消息队列是消息的链表,存放在内核中并由消息队列标识符表示。 消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接受者接受的数据块可以有不同的类型。 但是同管道类似,它有一个不足就是每个消息的最大...原创 2018-03-22 23:32:28 · 35393 阅读 · 10 评论 -
【Linux】进程间通信——共享内存
在之前的博客中我们已经认识了管道和消息队列,今天我们学习进程层间通信的另一种方式,共享内存。什么是共享内存? 在对个处理器的计算机系统中,可以被不同的CPU访问的大容量空间。就是说一块物理内存被映射到两个进程的地址空间,两个进程都可以访问这段空间,从而实现进程间通信。 示意图: 共享内存的特点:共享内存是最快的IPC形式,因为内存映射到共享它的进程的地址空间,这些进...原创 2018-03-24 17:04:15 · 404 阅读 · 0 评论 -
【Linux】信号
什么是信号? 信号在我们生活中是非常常见的,比如路口的红绿灯等等。信号给我们传递了一种信息,让我们做出相应的处理动作。那么在Linux中的,信号也是类似的。比如:Ctrl+C可以给前台进程发送信号,终止进程。 可以使用kill -l命令查看Linux中的信号列表。 1. 可以看到每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到。 2. 这...原创 2018-03-31 13:59:54 · 200 阅读 · 0 评论 -
【Linux】模拟实现sleep函数
先认识一下sleep函数#include <unistd.h>unsigned int sleep(unsigned int seconds);函数说明:sleep()会令目前进程暂停,直至达到参数seconds所指定的时间,或被信号中断。返回值:若进程暂停到参数seconds所指定的时间则返回0,若有信号中断则返回剩余秒数。这里再简答介绍一下模拟实现sleep...原创 2018-03-31 23:53:43 · 198 阅读 · 0 评论 -
【Linux】进程间通信——信号量
1. 信号量的基本概念信号量主要用于同步与互斥的,先简单的说几个概念吧原子性:表示一个事件的两种状态,要么做了,要么没有做,没有第三种状态;同步:在多道程序环境下,进程是并发执行的,不同进程之间存在着不同相互制约的关系;互斥:在一段时间内,资源只允许被一个进程访问;临界资源:像打印机这类一次只允许一个进程使用的资源;临界区:多个进程访问临界资源的那一段代码。 那么...原创 2018-03-26 23:12:26 · 412 阅读 · 1 评论 -
【Linux】makefile是什么?
Makefile是Linux中很常用的一个工具,会不会写makefile可以显示出一个人是否具备完成大型工程的能力。 通常,我们一个工程中的源文件可能还会很多很多,可能放在不同的目录中,那么这时我们要怎么编译程序呢,Makefile就可以帮助我们解决这个问题,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件后编译,甚至更复杂的动作,一旦将makefile文件写好,只需...原创 2018-03-26 23:21:10 · 1790 阅读 · 1 评论 -
【Linux】读者写者模型
前面我们已经学过了生产者消费者模型,那本文就来介绍一个与它有些相似却又不同的读者写者模型。什么是读者写者模型? 一个数据文件或记录可以被多个进程共享,我们把只要求读文件的进程称为Reader进程,其他进程则被称为Write进程。允许多个进程同时读一个共享对象,但是不允许一个Write进程和其他Reader进程或Writer进程同时访问对象。因为这样可能会造成混乱。所谓“读者写者问题”只是...原创 2018-04-15 22:44:51 · 639 阅读 · 0 评论 -
【Linux】对线程的认识
一. 什么是线程在一个程序里的一个执行路线叫做线程,线程是一个进程内部的控制序列。一个进程可以拥有多个线程,但是至少都有一个执行线程(单线程进程),线程的执行粒度比进程更细致,线程资源共享。在Linux中并不存在真正的线程,Linux的线程是使用进程模拟的。我们在Linux系统中,线程的创建是在内核外进行的,有POSIX提供的线程库实现。因此链接这些线程函数库时要使用编译器命令的”-lpt...原创 2018-04-10 21:17:00 · 256 阅读 · 0 评论 -
【Linux】生产者消费者模型
什么是生产者-消费者模型? 生产者-消费者是非常著名的一个问题。它的描述是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费,为使生产者与消费者能并发的执行,在两者之间设置了具有n个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品。他们之间必须保持同步,即:不允许消费者到一个空的缓冲区中去取产品,也不允许生产者向一个已经装满产品的缓...原创 2018-04-11 23:07:10 · 1256 阅读 · 0 评论 -
gdb调试多进程与多线程
本文转自https://blog.csdn.net/snow_5288/article/details/72982594 一,gdb的基础知识1>介绍: gdb是Linux环境下的代码调试工具。 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: ...转载 2018-04-12 21:00:56 · 168 阅读 · 0 评论 -
【Linux】vim的配置及常用指令总结
vim是Linux中非常重要的文本编辑器,有太多Linux上的命令都默认使用vi作为数据编辑的接口,否则很多命令无法操作。vim可以分为三种模式,命令模式(一般模式),编辑模式,末行模式(底行模式)下面是在vim中常用的指令的总结:(1)yy:复制光标所在的一行 nyy:n为数字,复制光标所在的向下n行 y1G:复制光标所在行至第一行 yG:复制光标所在行...原创 2017-11-29 10:32:58 · 255 阅读 · 0 评论