
Linux
文章平均质量分 67
ricardoleo
韬光养晦,厚积薄发。
展开
-
Linux学习历程(二)
上一篇讲到Linux学习过程中一些最基本最常用的指令,这篇继续对Linux指令进行归纳总结,总结了七个简单的基本指令,话不多说,正文开始。8.cp指令 语法:cp[选项]源文件或目录 目标文件或目录 功能:复制文件或目录 说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时制定多个文件或目录,而最后原创 2018-02-27 09:15:51 · 218 阅读 · 0 评论 -
Linux:环境变量
环境变量我们在编写C代码的时候,在链接的时候,我们从来不知道所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有环境变量帮助编译器进行查找。一、常见环境变量PATH:指定命令的搜索路径HOME:指定用户的主中做目录HISTSIZE:保存历史命令记录的条数SHELL:当前shell,它的值通常是/bin/bash二、查看环境变量env:查看...原创 2018-03-18 15:12:30 · 509 阅读 · 0 评论 -
Linux:浅析进程(二)
在上篇博客浅析进程(一)中,提到了进程的一些概念,以及与进程有关的一些内容。程序在执行时,加载到内存,由操作系统进行描述,然后组织成双链表,进而管理。而这个过程中由操作系统描述后的内容被叫做PCB,而在Linux操作系统下,PCB是一个名字叫做 task_struct的结构体,那这个结构体内到底是什么东西呢?一、进程的调度算法 进程的调度算法是指:根据系统的资源分配策略所规定的资源分配算...原创 2018-03-14 14:01:43 · 193 阅读 · 0 评论 -
Linux :浅析进程(一)
操作系统要说进程必须先讲讲操作系统的问题。1.操作系统概念:任何计算机系统都包含一个基本的程序集合,称为操作系统,笼统的理解,操作系统包括:内核(进程管理、内存管理、文件管理、驱动管理)其他程序(例如shell程序等等)2.为什么要有操作系统? 操作系统可以与硬件交互,管理所有的软硬件资源,并且给应用程序提供一个好的执行环境。由此可见操作系统是...原创 2018-03-13 18:21:25 · 199 阅读 · 0 评论 -
Linux下gcc编译
我们都知道,计算机只能读懂二进制数序列,而我们平常所书写的代码是如何让计算机读懂,然后进行执行的呢? 从一个代码到可执行程序可分为四步:预处理、编译、汇编、链接如何实现这四个步骤呢?预处理:gcc -E hello.c -o hello.i 编译:gcc -S hello.i -o hello.s 汇编:gcc -c hello.s -o hello.o 链接生成可执行文件:gcc hell原创 2018-03-05 15:51:58 · 231 阅读 · 0 评论 -
Linux下权限问题
Linux下有两种用户:管理员用户(root用户)、普通用户。管理员用户:可以做Linux下做任何事情,不受限制。普通用户:在Linux下做有限的事情。管理员用户的命令提示符是“#”,普通用户的命令提示符是“$”。 命令:su - 用户名 功能:切换用户Linux权限管理1.文件访问者的分类 —文件和目录的拥有者:u —文件和目录文件的拥有者所在的组的用户:g —...原创 2018-03-01 15:13:48 · 1968 阅读 · 3 评论 -
Linux学习历程(三)
在本次历程开始之前,我先利用重定位的方法解决一下在“Linux学习历程(二)”中提出的一个问题:有一个文件共有100行内容,请取出第50行的内容?(利用常用的Linux命令)首先我们先利用seq这个命令生成1到100个数字,然后将其重定向到test文件中去。 接着,再用head命令对着100行的数字查看其前50行,并且将其重定位到一个新的文件当中去。 然后再利用tail命令将这个新文件的最后一行原创 2018-02-28 16:27:40 · 211 阅读 · 0 评论 -
Linux下echo命令
echo命令是我们常用的一个命令,它的主要作用功能是在屏幕上显示文字,也可以直接在文件中写入要写的内容,具体如下。一、echo命令我们经常使用到的选项有两个,一个是-n,表示输出之后不换行。另一个是-e,表示对于转义字符按对应的方式进行处理,假设不加-e,那么在输出时转义字符会按照普通字符进行处理,并不会达到自己想要达到的目的。 (转义字符是指,用一些普通字符的组合来代替一些特殊字符,由于其组合改原创 2018-02-28 15:13:52 · 13849 阅读 · 0 评论 -
Linux中根目录下的主要目录介绍
在我们使用Linux的时候,常常只在自己的home目录下进行操作等,所使用创建的文件等,都是在这个目录下进行的。但是有没有人发现,其实在根目录下,存在着许多与home目录并列的目录。比如:bin、root、usr等,下面我们来介绍一下根目录下一些主要的目录。- root:存放root用户(即管理员用户)相关文件的目录。- home:存放普通用户相关文件的用户,也就是我们常用的目录。- bin:存放常原创 2018-02-28 14:04:22 · 679 阅读 · 0 评论 -
基于TCP协议:实现简单的多线程多进程服务器
为什么要多线程多进程服务器?相比于UDP来说,由于UDP是不需要连接的,可直接通信。所以基于UDP协议的服务器,并不需要考虑到多客户端同时访问服务器时接受数据的问题。而TCP协议是需要连接的,在一个客户端连接上服务器后,这个时候服务器就开始于客户端进行消息的发送与接收。那么其它的客户端在这个时候是无法与服务器连接的。这个时候就需要考虑多线程或者多进程的服务器来应对这个问题了。基于TCP协议...原创 2018-05-16 15:41:24 · 550 阅读 · 0 评论 -
Linux:netstat指令
netstatnetstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。选项-a或--all:显示所有连线中的Socket; -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; -c或--continuous:持续列出网络状态; -C或--cache:显示路由器配置...原创 2018-05-16 16:10:31 · 256 阅读 · 0 评论 -
网络基础:TCP协议-如何保证传输可靠性
TCP协议传输的特点主要就是面向字节流、传输可靠、面向连接。这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的。确保传输可靠性的方式TCP协议保证数据传输可靠性的方式主要有:校验和序列号确认应答超时重传连接管理流量控制拥塞控制校验和在数据传输的过程中,将每个发送的数据...原创 2018-05-24 13:04:51 · 82891 阅读 · 22 评论 -
网络基础:TCP协议-如何保证传输的高性能
TCP高性能的保证TCP传输相比于UDP传输,其更具有可靠性,安全性。但是传输效率与速度都比UDP要稍逊一筹。不过TCP协议自身是保证其效率及性能的。TCP协议保证高性能的方式有:滑动窗口快速重传延迟应答捎带应答滑动窗口在保证TCP传输的可靠的性的时候,其中有一条就是确认应答。倘若是每发送一条数据,就等待一次ACK应答的话。大量的时间就会浪费在数据的往返上,这样性能会...原创 2018-05-24 14:43:29 · 2899 阅读 · 0 评论 -
网络基础:TCP协议-粘包问题
面向字节流 创建一个socket的,不仅仅只是申请一个文件描述符,并且还开辟一片发送缓冲区及接收缓冲区。在调用write进行写数据时,先写入发送缓冲区当中,如果数据较大,那么TCP进行分包发送。如果数据较小,那么就现在发送缓冲区内部等待,等到了合适的时候再发出。在接收数据时,首先从网卡驱动程序中将数据读至接收缓冲区,接着调用read进行读数据。由于TCP既有发送缓冲区又有接收缓冲区,所以w...原创 2018-05-24 15:44:21 · 477 阅读 · 0 评论 -
网络基础:浅析IP协议
IP协议概念 IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。 IP协议不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。IP协议报头格式逐一介绍各个字段的含义:4位版...原创 2018-06-05 15:27:25 · 3873 阅读 · 0 评论 -
Linux:程序的地址空间
程序地址空间我们在学习C语言的时候,曾经在对函数调用学习的时候,曾经提到过一个所谓的内存空间,也就是程序地址空间。我们在对程序地址空间学习的时候,了解了在程序地址空间内,从下自上分别是代码区、只读常量区、已初始化全局数据区、未初始化全局数据区、堆区、栈区。 我们知道fork()函数可以创建子进程,而fork()之后产生的子进程,与其父进程共享代码,并且数据各自私有一份,当任意一个写入数据...原创 2018-03-20 13:23:07 · 594 阅读 · 0 评论 -
数据结构之单链表常见面试题(二)
判断两个链表是否相交,若相交返回其交点位置(两链表都不带环)解析:两个不带环的链表要能相交只能是Y字型相交,如下图。 所以判断相交只需要分别让两个链表都走到结束时,判断他们的data值是否相等。//实现LinkNode* HasCross(LinkNode* head1, LinkNode* head2)//判断两个链表是否相交{ if(head1 == NULL)...原创 2018-04-02 14:25:09 · 237 阅读 · 0 评论 -
Linux学习历程(一)
Linux下基本指令总结ls 指令 语法:ls[选项][目录或文件] 功能:对于目录,该命令列出该目录下所有的子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件。包括以“.”开头的隐含文件。 -d 将目录像文件一样显示,而不是显示其下的文件。如:ls -d 指定目录 -k 以k字节的形式表示文件的大小。如:ls -alk 指定文件 -l原创 2018-02-25 17:35:17 · 674 阅读 · 0 评论 -
Linux下Makefile的入门使用(极其初级初级初级的使用!)
Makefile简介:Makefile是一个工具,是帮助我们编译和链接程序的。我们都知道,C程序从源文件到一个可执行文件需要预处理、编译、汇编、链接四个步骤。不过在我们windows下,有各种环境帮助我们完成这些工作,而我们要做的只是点击一个按钮。但在Linux系统下,我们必须用命令行来完成这些操作。比如我们要编译一个hello.c时,需要输入命令:gcc hello.c -o hello。当文件...原创 2018-03-05 17:11:28 · 233 阅读 · 0 评论 -
Linux:进程间通信(信号量)
信号量是什么?在开始知道信号量的这个名词的时候,根本不能从字面上来理解信号量到底是什么?它跟信号有什么关系呢? 其实信号量的实质就是计数器!!! 为什么是计数器呢?接着往下看。信号量原理我们知道,进程在通信的时候会对临界资源进行访问操作等,但这样说来但凡能够访问到这块临界资源的进程都可以对其进行操作。那么会不会出现一种问题,就是当进程A刚刚在临界资源内存放一个数据以备后面使用,...原创 2018-04-06 22:18:33 · 305 阅读 · 0 评论 -
Linux:浅析信号(二)
上篇博客的最后我们说到了进程在接收到信号,信号处于未决的状态是,不是立刻就递达,去处理这个信号的,而是在合适的时候去处理,那这个合适的时候在什么时候呢?由上图可以知道,其实我们前面所说的合适的时候就是在在内核中处理完某些异常或执行完某些系统调用之后,在即将返回用户模式之前,这个时间点去处理能够递达的信号,如果是默认处理,那么则终止该进程,如果是忽略此信号,那么不管它,如果是自定义动作,...原创 2018-04-09 17:23:12 · 213 阅读 · 0 评论 -
Linux:浅析信号(一)
信号,这个元素在我们的生活中可是非常常见的,比如说是红绿灯,比如说是手机铃声。所谓信号就是在人或事情感受到这个元素产生以后会做出相应的处理动作,这就是信号。而在我们Linux下,什么是信号呢?我们知道进程结束情况有三个,也在前面关于进程的博客中说了,分别就是诸葛亮、司马懿、周瑜。先不谈诸葛亮与司马懿的情况,就说说周瑜这个情况。 进程出现周瑜这个情况无例外肯定都是进程崩了,然后挂掉了,进程结束...原创 2018-04-09 14:45:16 · 423 阅读 · 0 评论 -
Linux:浅析进程(三)
进程创建fork函数在Linux中fork非常重要,它可以在一个进程中创建一个新的进程,新的进程为之前进程的子进程,之前的进程称为父进程。当调用fork函数之后,它的返回值有两个,对父进程返回子进程的pid,对子进程返回0,如果调用失败会返回-1。当进程调用fork以后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列...原创 2018-03-22 15:29:10 · 210 阅读 · 0 评论 -
Linux:浅析进程(四)
进程的程序替换替换原理我们在使用fork()函数的时候,会创建一个子进程,一般情况下,子进程会与父进程执行相同的代码,可以用if语句分支开父子进程执行的代码,而这时候可以调用exec函数进行替换,当我们调用exec函数的时候,该进程的代码和数据完全被一个新的程序所替代,从新程序的启动入口执行,但是并不会产生新的进程,所有调用exec之后,进程的id并不会改变。替换函数有六种...原创 2018-03-27 17:02:38 · 167 阅读 · 0 评论 -
Linux:文件描述符
我们之前就知道在Linux操作系统下 “一切皆文件” ,所以在这个条件下,所有研究的对象都变相的相当于研究文件,那么对文件系统的研究也应该是必须的。文件描述符fd我们的内核利用文件描述符来访问文件,每个文件描述符都是非负整数,打开现存的文件或者是新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来指定待读写的文件。这样说来,其实每个打开的文件,都对应属于其本身的一个...原创 2018-03-28 16:18:46 · 516 阅读 · 0 评论 -
Linux:浅析文件系统
inode当我们在终端下输入命令ls -l 我们发现这里显示的信息从左到右依次是文件类型、权限、硬链接数、文件拥有者、文件拥有者组、大小、最后修改时间以及文件名。当我们使用指令 stat linklist查看具体文件的信息时:会发现在这里面有了更详细的一些信息,其中在时间那一栏我们发现有三个时间:Access、Modify、Change,那这三个时间分别代表什么含义呢?...原创 2018-04-01 15:57:24 · 165 阅读 · 0 评论 -
Linux:静态库和动态库
我们指定C程序从代码到一个可执行程序需要经过预处理、编译、汇编、链接。而最后一步链接又分为动态链接与静态链接。静态链接相当于就是讲所要链接的库提前放入链接的文件,这样子的文件体积较大,但是可移植性较高。而动态链接是在运行的时候才去主动链接所需要链接的库,这样的代码体积较小,多个程序共同使用库的代码。我们LInux运用的是动态链接。为了方便我们在接下来的内容中测试静态库与动态库,我们编写一个...原创 2018-04-01 17:13:23 · 194 阅读 · 0 评论 -
Linux:进程间通信(匿名管道)
进程间通信我们知道,进程之间是相互独立的,每个进程拥有自己虚拟地址空间,并且虚拟地址空间根据页表的映射,映射到属于自己的物理内存上。并且各个进程之间互相不影响,执行自己的代码。这样说来进程之间难道没有可能交流联系?显然是不可能的。 一般来说只要让我们互不相干的进程看到同一块公共资源,那么它们就可以在这片公共资源上面交流联系。与我们人一样,每个人都是一个独立的个体,但是到了一个公共场所,人与人...原创 2018-04-03 15:48:53 · 206 阅读 · 0 评论 -
Linux:进程间通信(命名管道)
命名管道上一篇我们说到进程间通信的时候,对匿名管道进行了操作使用,这里我们队命名管道进行操作使用。在我们使用匿名管道的时候,是在fork之后,利用父子进程的关系,在代码中用if语句分流,然后让父子进程分别对匿名管道进行写入读取的操作,达到了父子进程间通信交流的目的。而如果是两个进程之间呢?并非父子进程,它们如何去通信? 这时候就要使用我们的命名管道了。在Linux操作系统下,一切皆文件。而且...原创 2018-04-04 17:08:26 · 325 阅读 · 0 评论 -
Linux:进程间通信(消息队列)
消息队列简介前两篇博客我们讲述了利用匿名管道与命名管道来实现进程间通信的方法。这里我们再对消息队列进行讲述。消息队列,通俗来讲就是一堆消息组合在一起的队列,也就是一个个数据块,并且这些数据块是有类型的,而我们不同进程通过一个消息队里的标记,查询到同一个消息队列,此时的消息队列就相当于一片公共资源(临界资源),这时候通过这个消息队列就可以达到我们进程间的通信。但是消息队列中每个消息的最大长度都是...原创 2018-04-05 16:58:48 · 262 阅读 · 0 评论 -
Linux:进程间通信(共享内存)
共享内存原理共享内存也是我们进程间通信内容当中的一个重点。什么是共享内存呢? 我们在学习虚拟地址空间的时候,在堆与栈之间有一片区域叫做共享区,而共享内存就是在物理内存内,将一片内存通过页表映射的方式映射至虚拟地址空间的共享区内,而不同进程都可以在其自己的虚拟地址空间上面的共享区通过映射访问到这片共享内存,这个时候不同进程相当于看到了同一片公共资源即共享内存,那么他们就可以在这片内存上进行通信...原创 2018-04-06 16:27:37 · 555 阅读 · 0 评论 -
Linux:vfs、signal、task_struct 个人理解图(未完待续)
前序在文章开始,首先要说的是,作者才疏学浅,以下如果有问题,还请各位看官多多指教。此图也是作者自己理解的一些东西。理解可能有些偏差,有不妥之处,还请见谅!如果有需要原图者,可私信作者。如有问题,切要指出,以便改正!...原创 2018-08-21 09:54:51 · 601 阅读 · 0 评论