linux
文章平均质量分 80
ChaseRaod
这个作者很懒,什么都没留下…
展开
-
shell脚本中空格问题
shell脚本对空格有严格的规定,赋值语句等号两边不能有空格,而字符串比较,等号两边必须有空格赋值时: i=1i=$((i+1)) // =用作赋值时,两边绝对不能有空格比较时: if [ $a = $b ] // =用作比较判断时,两边必须有空格if:if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]… [ else COMMANDS; ] fi整数比较:if原创 2020-07-20 12:09:02 · 2188 阅读 · 0 评论 -
linux系统调用--fcntl函数用法总结
fcntl系统调用可以用来对已打开的文件描述符进行各种控制操作以改变已打开文件的的各种属性函数原型:[objc] view plain copy print?#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd ,str转载 2018-01-05 16:44:03 · 408 阅读 · 0 评论 -
Linux文件特殊权限:SUID,SGID,SBIT(黏滞位)的简单介绍
进入文章正文之前,我么先来看两个文件的属性 之前我们所了解的文件权限只有r、w、x,那上面我们看到的/tmp中“others”的x权限变成了t,以及/usr/bin/passwd中“user”的x权限是s,这又是怎么回事?下面我们来介绍文件的三种特殊权限 1,SetUID 当s出现在文件所有者的x权限时,被称为“Set UID”,简称为SUID。SUID对一个文件的限制与功能包括以下几点:原创 2017-04-10 13:11:52 · 1029 阅读 · 0 评论 -
【linux】:各目录下的内容和作用
文章转自http://blog.csdn.net/ArchyLi/article/details/78437891 一、概述在早期阶段,各个厂家定义了自己的Linux的系统文件目录,非常混乱,但是在后期,FHS标准规定了Linux下根目录各文件夹的名称以及作用,统一了Linux下文件命名混乱的局面。FHS(英文:Filesystem Hierarchy Standar转载 2017-11-05 09:45:25 · 412 阅读 · 0 评论 -
进程和线程的区别和联系
一、进程进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。 注意,进程一般有三个状态:就绪状态、执行状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。进程控制块(PCB):PCB不但可以记录进程的属性信息,转载 2017-11-12 13:56:08 · 298 阅读 · 0 评论 -
linux常用命令
关键字: linux 查进程、杀进程、起进程1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。 ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 ps -e 此参数的效果和指定”A”参数相同。 ps e 列出程序时,显示每个程序所转载 2017-09-01 18:27:43 · 482 阅读 · 0 评论 -
Linux下实现一个简单进度条和shell脚本实现彩色进度条
我们先来看看进度条的实现代码 有读者可能会疑惑,\r和\n有区别吗? 答案是肯定的,“回车”“换行”实际上是两个动作,‘\n’表示换行,’\r’表示回车。再来看看为什么要用usleep? windows下我们最常用的的是sleep,但sleep的单位是秒,用于进度条有些太慢,所以此处我们用usleep微秒。那程序中的fflush又是什么作用? 我们先介绍一下缓冲的基本概念: UNIX里原创 2017-04-22 15:33:43 · 1239 阅读 · 0 评论 -
Cookie和Session的区别
1,什么是Cookie和Session? 我们知道,HTTP是一种无连接无状态的协议,所以浏览器在每一次请求服务器后服务器都不能记住本次请求的状态,导致每一次请求都是独立的。为了使web能产生一些动态信息,就需要记录状态信息,而cookie和session就是为了解决http协议的无状态问题而产生。 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是原创 2017-08-31 14:01:52 · 1908 阅读 · 0 评论 -
linux消息队列实现进程间通信
进程间通信(IPC):进程间通信的本质就是通过让不同的进程看到一份公共的资源来实现通信。 常用的进程间通信的方式有两种:通过管道和systemv标准,今天我们来介绍systemv标准中的一种:消息队列消息队列:消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,每个数据块都认为是有一个类型,接受者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题原创 2017-06-07 22:22:30 · 3588 阅读 · 0 评论 -
进程间通信总结
之前的博客中介绍过进程间通信的机制,这篇文章主要用来总结。进程间通信 理论基础:进程具有独立性,有一份公共的资源让多个进程同时看到。一,管道 1,匿名管道 本质:内核提供的一段内存创建: pipe——fd[0]:读 fd[1]:写销毁: 所有打开了该管道的进程都销毁的时候销毁(引用计数减为0),生命周期随进程。特性: (1)用于有亲缘关系原创 2018-02-05 21:16:49 · 543 阅读 · 0 评论 -
【linux】:信号
什么是linux中的信号呢? 举个栗子: 其实就类似于现实中肚子叫了发出一个信号表示你饿了,而这个时候你正在工作,那么你可以选择忽略它,或者暂停你手中的工作去吃点东西来处理这个信号。信号本质上就是软件层次上对中断机制的模拟用kill -l命令可以查看linux下的信号列表 信号是异步的,一个进程不必通过任何操作来等待信号的到达。产生信号的方式: 1,用户在终端按下某些键时,原创 2018-02-06 23:50:48 · 525 阅读 · 0 评论 -
linux下压缩解压缩命令
linux下解压命令大全.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileN...转载 2018-07-27 17:14:22 · 287 阅读 · 0 评论 -
linux线程池
我们在写服务器的时候,通常需要处理多个客户端的频繁请求,这就需要频繁的创建线程和销毁线程,对CPU的消耗比较大,而线程池就是对这种情况的优化。线程池的思路: 程序启动之前,初始化线程池,启动线程池中的线程,由于还没有任务到来,线程池中的所有线程都处在阻塞状态,当一有任务到达就从线程池中取出一个空闲线程处理,如果所有的线程都处于工作状态,就添加到队列,进行排队。如果队列中的任务个数大于队列的所能容纳原创 2018-03-29 09:51:42 · 447 阅读 · 0 评论 -
高级I/O函数
我们来介绍几个和网络编程相关的高级I/O函数。 用于创建文件描述符的函数:pipe、dup/dup2 用于读写数据的函数:readv/writev、fendfile、mmap/munmap、splice和tee函数。 用于控制I/O行为和属性的函数:fcntl1,pipe pipe函数可用于创建一个管道,以实现进程间通信。 pipe函数的定义如下:#include<un...原创 2018-02-23 03:00:13 · 538 阅读 · 0 评论 -
linux下文件操作
我们知道,在linux下,一切皆文件。那么要管理这些文件,就需要专门的文件操作。 下面的博客是对比文件IO和标准IO的文章文件IO和标准IO的区别【文件描述符fd】 linux默认情况下会有三个打开的文件描述符:标准输入0、标准输出1,标准错误2。 我们知道,linux内核会为每一个进程分配一个task_struct结构体用来管理进程,其中包含管理文件的信息,操作系统用一个file结构体...原创 2018-01-05 16:38:08 · 417 阅读 · 0 评论 -
用GDB调试程序
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺...转载 2018-02-21 14:59:37 · 266 阅读 · 0 评论 -
多线程编程
之前的博客中有介绍过线程,但有些内容不够完整,这篇文章是对线程的总结以及介绍线程安全问题。linux线程基础知识线程的优点: (1)创建一个新线程的代价要比创建一个新进程小的多 (2)与进程之间的切换相比,线程之间的切换需要操作系统所做的工作少的多 (3)线程占用资源要比进程少的多 (4)能充分利用多处理器的可并行数量 (5)在等待慢速I/O操作的同时,程序可执行其他操作 (6...原创 2018-02-08 00:00:16 · 315 阅读 · 0 评论 -
模拟实现sleep函数
先来介绍几个函数:1,sleep 若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数。2,pause pause函数使进程挂起直到有信号递达。如果信号的处理动作是终止进程,则进程终止,pause函数没有机会返回;如果信号的处理动作是忽略,则进程继续处于挂起状态,pause不返回;如果信号的处理动作是捕捉,则调用了信号处理函数后pause返回-1,errno设原创 2018-02-07 15:09:42 · 1192 阅读 · 0 评论 -
Linux:进程控制
这篇博客是我看《linux环境编程+从应用到内核》这本书中的知识点总结,所以基本就是书中的原话,若读者有看不懂的地方,可以参考书籍中的具体内容。1,进程ID的分配 每个进程都会有自己的父进程,父进程又会有自己的父进程,最终都会追溯到init进程(pid=1)。关于init进程请参考链接init进程的前世今生进程ID是唯一的,内核分配进程ID用延迟重用算法: 1>位图记录进程ID的使用情况(0为可原创 2017-09-07 01:26:23 · 620 阅读 · 0 评论 -
linux下的软硬链接及其inode
文件都有文件名与数据,在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文转载 2017-08-06 10:32:26 · 597 阅读 · 0 评论 -
【linux】:模拟实现sleep函数
了解linux中的sleep函数功能:将进程挂起一段时间 函数原型:#include<unistd.h>unsigned int sleep (unsigned int seconds);//n秒来举一个很简单的栗子: 执行以上代码后,输出结果如下: 每隔一秒打印一次,这就是sleep函数的作用。那么如何自己模拟实现sleep呢? 先介绍一些我们会用到的函数: (1)sigaction原创 2017-07-18 23:04:55 · 761 阅读 · 0 评论 -
linux:死锁形成原因以及四个必要条件,避免死锁的方法
前面我们已经介绍过线程的基本概念,我们知道,同一个进程中的多个线程共用一份公共资源,这样就有可能造成互相争夺资源互相等待对方让步的问题,若双方都不肯让步,就会一直等待,这就是死锁。死锁形成的原因: (1)系统资源不足,不能满足进程的资源要求,会导致多个线程争夺同一份资源 (2)进程(线程)推进的顺序不恰当 (3)资源分配不当死锁出现的场景: (1)多个线程:彼此申请对方资源而导致的死锁。A申原创 2017-06-13 09:41:04 · 1856 阅读 · 0 评论 -
linux共享内存
内存共享: 两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。效率: 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次原创 2017-06-08 01:27:01 · 1643 阅读 · 0 评论 -
Linux线程的基础知识
之前我们已经介绍过进程的基本概念,那么线程是什么? 线程是进程内部的一个执行分支,举个栗子:比如一个项目的完成是多个团队之间的合作,和每个团队都是这个项目运行的一个分支。即线程是进程内部的执行分支。进程的特点: (1)系统中程序执行和资源分配的基本单位 (2)每个进程都有自己的数据段、代码段、堆栈区 (3)在进行切换时需要比较复杂的上下文切换线程特点: (1)减少处理机的空转时间,支持多处原创 2017-06-07 01:24:59 · 624 阅读 · 0 评论 -
linux进程描述符、地址空间、文件共享和C语言FILE结构体成员
对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数,当打开一个现有文件或或创建一个新文件时,内核向进程返回一个文件描述符,当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传递给read或write。 按照惯例,UNIX系统shell使用文件描述符0与进程标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与标准出错相关联,这是各种s原创 2017-05-26 15:54:49 · 693 阅读 · 0 评论 -
linux中的孤儿进程和僵尸进程详解及模拟实现
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。unix提供了一种机制可以保证只要父进程想原创 2017-05-23 13:39:41 · 509 阅读 · 0 评论 -
linux中的一条重要命令:find
linux中有很多查找指令,其中find是一个及其重要的查找命令,今天我们对find命令做大概的介绍。 find命令的格式为:find [搜索范围] [匹配条件] 1.find / -name 那如果我想要不缺分大小写来查找文件名称呢? 将-name变成-iname即可。 2.find -size +n -n n根据文件大小查找,查找文件大小为n块的文件,+n表示大于n块,-n表原创 2017-04-22 14:29:46 · 706 阅读 · 0 评论 -
linux中进程的基本概念
进程:进程是程序额一次执行过程,是系统运行资源分配和处理机调度的一个独占单位。1,进程的特征和定义 在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性及不可再现性的特征。这决定了通常的程序是不能参与并发执行的,因为程序执行的结果是不可再现的。这样,程序的运行也就失去了意义。为使程序能并发执行,且为了对并发执行的程序加以描述和控制,便引入了“进程”的概念,(1)结构特征原创 2017-05-23 10:10:27 · 538 阅读 · 0 评论 -
权限与命令间的关系(用户访问文件的基本权限)
权限可以限制用户能不能读取、新建、删除、修改文件或目录。**1.让用户能进入某目录成为“可工作目录”的基本权限是什么? (1).可使用的目录:例如cd等切换工作目录的命令 (2).目录所需权限:用户对这个目录至少有x权限 (3).额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要有r的权限**用户在某个目录内读取一个文件的基本权限是什么? (1).可使用的命令:原创 2017-03-26 00:29:05 · 688 阅读 · 0 评论 -
linux进程间通信:匿名管道和命名管道
进程间通信的本质是让不同的进程看到一份公共的资源 上图中,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制成为进程间通信。(一)匿名管道 管道是一种最基本的IPC(进程间通信)机制,由pipe函数创建#include<unistd.h>int pipe(int filedes)filedes参数传给用户两个文件描述符,filedes[0]指向文件的读原创 2017-06-09 11:41:59 · 784 阅读 · 0 评论 -
linux进程管理与调度:task_struct结构体
日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux-进程管理与调度进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序转载 2017-06-15 10:39:13 · 2015 阅读 · 0 评论 -
Linux:进程、进程组、会话、作业、控制终端的概念
一、进程 传统上,Unix操作系统下运行的应用程序、 服务器以及其他程序都被称为进程,而Linux也继承了来自unix进程的概念。必须要理解下,程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 令(二进制代码)和数据的静态实体;而进程可以认为是已经被OS从磁盘加载到内存上的、动态的、可运行的指令与数据的集合,是在运行的动态实体。这里指的 指令和数据的集合可以理解为Linux上ELF文件格式中转载 2017-07-17 17:41:46 · 812 阅读 · 0 评论 -
linux: NAT技术和代理服务器
一、代理服务器现代社会社会流行一种职业,叫“代购”。相信多数人对这个词都不陌生了,我们要讲的代理服务器的功能与这个“代购”是类似的道理。所谓“代理”就是代而劳之,不需要你自己去做,有人帮你做了这个事情。代理服务器: 当客户端在浏览器中设置好Proxy服务器后,所有使用浏览器访问internet站点的请求都不会直接发给目的主机,而是首先发送至代理服务器,代理服务器接收到客户端的请求以后,由代理服务器原创 2017-07-19 16:07:46 · 627 阅读 · 0 评论 -
Linux:端口的定义和分类
端口的定义: 电脑运行的系统程序 就像一个闭合的圆圈,系统程序设计者把这个 圆圈截成 很多段,这些线段接口就叫端口(通俗讲就是断口,就是中断),系统运行到这些端口时,根据端口是否打开或关闭,如果关闭,就是绳子接通了,系统往下运行,如果端口是打开的,系统就得到命令,有外部数据输入,接受外部数据并执行。端口的分类: 端口在报头中占两个字节,也就是16位。端口号用来表示和区别网络中的不同应用程序。原创 2017-07-19 15:07:26 · 3290 阅读 · 0 评论 -
linux:线程安全与可重入函数
前面我们已经介绍过线程的概念,我们知道,在同一个进程里,可能同时会有多个线程同时运行,这时候我们就需要考虑线程安全问题了。线程安全:多个线程并发执行时,不会产生不确定的结果,其结果是可预知的且与单线程执行结果相同(通常采用加锁机制),或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。线程安全问题通常都是由原创 2017-07-10 01:32:16 · 673 阅读 · 0 评论 -
linux:生产者消费者模型
生产者消费者模型: 如图,我们可以将这个模型理解为:中间的队列相当于一个超市里的货物,生产者是这家超市的供货商,而消费者就是去超市购物的人,即消费者。而供货商不需要关心消费者,消费者也不需要关心供货商,他们都只关心超市中有没有货物。基于上面的描述,我们给出生产者消费者模型的概念:两个进程共享一个缓冲区,一个进程称为生产者向缓冲区中放数据,另一个称为消费者从缓冲取中取数据,当缓冲区中有数据时,生产者原创 2017-07-07 15:20:52 · 890 阅读 · 0 评论 -
Linux:守护进程
什么是守护进程?守护进程是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是个特殊的孤儿进程,这种进程脱离终端。之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于原创 2017-07-17 23:24:00 · 362 阅读 · 0 评论 -
ARP协议和RARP协议
ARP协议地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的MAC地址;收到返回消息后将该IP地址和MAC地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。比如,当边界路由器收到一个数据报时,原创 2017-07-20 22:49:16 · 543 阅读 · 0 评论 -
linux:读者写者模型
前面我们已经介绍过生产者消费者模型,其中提到了“321”原则。而本文中的读者写者模型同样遵循“321”原则。那么,什么是读者写者模型,它和我们介绍的生产者消费者模型又有什么不同呢?读者写者模型:在进程中,对某些资源的访问会存在两种可能的情况:一种是写操作,它是可以独占资源的,即具有排他性。另一种是读操作,可以有多个资源并发地去访问某种资源,它的访问方式是共享的。(一般由于写端操作次数少,读端操作次数原创 2017-07-09 01:15:36 · 5514 阅读 · 2 评论 -
网络基础:TCP协议
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元( MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体 的TCP层。TCP为了保证原创 2017-07-21 00:10:19 · 339 阅读 · 1 评论