![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
ZWE7616175
这个作者很懒,什么都没留下…
展开
-
设置定时任务删除指定的日志文件
我们经常会遇到这种问题,服务器上不断增加日志文件,导致磁盘满了,无法登陆到服务器上。遇到这种问题,只需要写一个脚本文件,定时删除这些日志文件就可以轻松解决。步骤:1、创建脚本文件touch auto-del-3days-ago-log.sh2、开启科执行文件权限chmod -x auto-del-3days-ago-log.sh3、编辑文件vim auto-del-3days-...原创 2019-09-26 15:12:54 · 1023 阅读 · 0 评论 -
理解inode,以及软硬链接
一、inode查看命令1.stat 功能:列出文件大小,文件占有的块数,块的大小,主设备号,次设备号,inode number,链接数,访问权限,uid,gid,atime(最近访问),mtime(最近更改),ctime(最近改动) 2.df -l 功能:查看硬盘的i结点总数和使用的个数文件系统,总块数,已用块数,可用块数,已用所占比例,挂载点 3.ls -i 功能:查看目录...原创 2018-04-18 22:27:16 · 304 阅读 · 0 评论 -
Linux线程同步---条件变量(生产者消费者模型)
我们来理解一下条件变量,通俗的来讲就是条件变量的作用在于给多个线程提供了一个汇合的场所。举个例子说明一下,运动会赛跑中,所有选手都会等到发令枪响后才开跑,把选手比作其他线程,发令员比作主线程,意思就是所有的线程都等待主线程给予一个可以运行的信号,如果没有给信号,那么将会阻塞下去。1.条件变量的概念上一篇中我们介绍的是互斥量,而条件变量与互斥量不同,互斥量是防止多线程同时访问共享的互斥变...原创 2018-04-12 21:32:12 · 346 阅读 · 0 评论 -
Linux线程同步---互斥量
在日常生活中,为了避免在火车站、电影院排队购票,网上购买火车票、电影票也越来越普遍。我们首先实现一个购票系统,每当有人购买一张票的时候,总票数就会减1,而此时的“总票数”就是一个共享变量。代码实现简单的网上购票系统:#include <stdio.h> #include <stdlib.h>#include <...原创 2018-04-12 12:46:28 · 299 阅读 · 0 评论 -
守护进程
我们经常使用的各种APP,像淘宝、京东等购物APP,在晚上的时候,程序员不可能一直守在计算机前操作,但晚上有人想买一件物品的时候也是得提供服务的,因此就有了守护进程,它的作用十分强大,不受用户登录和注销的影响,是一个非常有用的进程。Linux大多数服务器就是守护进程实现的,例如:ftp服务器、ssh服务器、Web服务器等。 守护进程又称精灵进程(Daemon),是运行在后台的一种特殊进程。其本质...原创 2018-04-17 23:14:23 · 246 阅读 · 0 评论 -
进程间关系(进程组、作业、会话、作业控制有关信号、终端)
我们之前认为在终端下./test就相当于创建了一个进程,那么对应的就创建了一个PCB,这个PCB指向一块虚拟地址空间,而虚拟地址空间上的地址通过页表映射到物理地址空间。这样的认为在现在看来是不准确的,其实每个进程除了有一个进程ID外,还属于一个进程组。通常情况,进程组与同一作业相关联,可以接收来自同一终端的各种信号。一、进程组1.每个进程都属于唯一的一个进程组。 2.每个进程组都有一...原创 2018-04-17 19:58:55 · 379 阅读 · 0 评论 -
Linux 线程ID
在没有谈到线程前,我们认为一个进程对应的是一个进程描述符PCB,对应一个进程ID。但现在我们引入了线程的概念后,一个用户进程可以包含多个用户态线程,每个线程作为一个独立的调度实体在内核态都有自己的进程描述符PCB,因此Linux内核为了处理以上关系,引入线程组的概念。我们之前在学习进程的过程中,学过一个函数getpid,作用是获得当前进程的ID,同样,也有一个函数gettid可以获得线程ID,...原创 2018-04-03 23:18:45 · 2525 阅读 · 1 评论 -
线程终止、等待、分离
一、线程终止线程终止有三种方式,包括: 1.从线程函数return(对主线程不可使用),从main函数return相当于调用exit。 2.线程可以调用pthread_exit终止自己。 3.一个线程可以调用pthread_cancel终止同一进程中的另外一个线程。我们来认识几个函数: pthread_exit函数 用来终止进程,参数是void*类型,无返回值。 注意:retu...原创 2018-04-10 17:06:42 · 558 阅读 · 0 评论 -
system,popen函数与fork的区别
1.system函数 说明: ①system函数在执行的过程中经过fork—>exec—>wait,但system在执行的过程中会一直等待,直到shell运行完才退出,所以system为串行执行②system在执行的过程中对SIGCHLD、SIGINT、SIGQUIT都做了处理③SIGCHLD是子进程在退出的时候给父进程发的一个信号,system中屏蔽了SIGCHLD信...原创 2018-03-27 22:54:47 · 534 阅读 · 0 评论 -
实现简单的shell
写一个shell,需要循环以下几个过程: 1.获取命令行 2.解析命令行 3.建立一个子进程 4.替换子进程 5.父进程等待子进程退出代码: #include <unistd.h> #include <sys/wait.h> #include <stdio.h> #include ...原创 2018-03-27 21:08:59 · 342 阅读 · 0 评论 -
用读写锁实现--读者写者模型
读者写者模型读者写者模型是操作系统中的一种同步与互斥机制,与生产者消费者模型类似,但不同的是在生产者消费者模型中,多个读者间没有关系,而且消费者会让临界资源的个数减少,而读者不会改变临界资源的个数。 读者写者模型应该具备的条件1.写者是排他性的,即有多个写者的情况下,只有一个写者占有仓库。 2.读者可以一起读,采取并行机制。 3.读者和写者是同步且互斥的,如果读者占有了仓库,则写...原创 2018-04-14 22:35:31 · 625 阅读 · 0 评论 -
深入理解线程安全和可重入函数
线程安全一个线程当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。反之,就是不安全的。四类线程不安全的函数: 1.不保护共享变量的函数; 2.函数状态随着调用改变的函数; 3.返回指向静态变量指针的函数; 4.调用线程不安全函数的函数。线程安全的问题基本上是由全局变量及静态变量引起的,因为同一进程中的多线程是在同一个地址空间中运行,而全局变量和静态变量就属于多线程共享的...原创 2018-04-13 21:25:24 · 557 阅读 · 0 评论 -
浅析惊群效应
什么是“惊群效应”? 举个例子,当你往一群鸽子中间扔一块食物,所有的鸽子都被惊动来抢夺这块食物,但是最终只能有一只鸽子可以抢到食物,没有抢到食物的鸽子只能回去继续睡觉,等待下一块食物的到来。这里我们可以将鸽子看做是进程(线程),食物就是等待处理的事件。网络编程的时候经常会用到多进程或多线程模型,就是父进程创建socket,bind、listen后,通过fork创建多个子进程,每个子进程继承了...原创 2018-04-13 21:28:41 · 527 阅读 · 0 评论 -
OSI七层模型---网络层(IP协议、网段划分、IP地址分类、子网划分、子网掩码、路由转发)
网络层中一个重要的协议:IP协议IP协议作用:有能力将数据从A主机送往B主机。 理解三个基本概念: 主机:配有IP地址,但是不进行路由控制设备。 路由器:配有IP地址,又能进行路由控制。 节点:主机和路由器的统称。IP协议格式 字段 解释 4位版本号 指定IP协议的版本,若是IPV4,该字段为4. 4位首部长度 单位为4...原创 2018-05-26 23:38:10 · 1653 阅读 · 0 评论 -
rm删除文件后磁盘仍然占用
rm删除文件后磁盘仍然占用在Linux中,当我们使用rm删除大文件,但是如果有进程打开这个大文件,却没有关闭这个文件的句柄,那么Linux内核还是不会释放这个文件的磁盘空间,最后会造成磁盘空间占用100%,整个系统无法运行。解决方法:1、df -lh 查看磁盘使用情况2、找到删除文件所在的分区,查看被删除的所有文件lsof -n /opt | grep deleted里边有进程号3、...原创 2019-09-11 10:11:48 · 2063 阅读 · 0 评论 -
Linux下基本的命令
Linux系统不像Windows系统那样图形界面做的那么美观漂亮,点击图标即可。Linux下都是使用命令行的形式来进行系统交互,熟练使用Linux下的基本命令,就可以在Linux环境下操作游刃有余了。一、常见的目录/文件操作命令1.cd:切换目录 2.pwd:查看当前目录 3.ls:显示文件/目录 4.mkdir:创建目录 5.rmdir:删除空目录 6.touch: 创建目...原创 2018-09-05 21:26:14 · 407 阅读 · 0 评论 -
进程和线程的区别
进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。进程是承担分配系统资源的实体,而线程是调度的基本单位。线程是进程的一个实体,是CPU调度和分配的基本单位,是比进程小的能独立运行的基本单位,线程本身不拥有...原创 2018-08-19 15:39:06 · 173 阅读 · 0 评论 -
Linux修改文件产生.swp文件
我们用vim编辑一个文件时,由于某种原因导致异常退出时,再次进入就会报出如下信息: 遇到这个问题之前很头大,不知道如何去解决,下边有选项,无论选择哪个选项,下一次进入时也会出现同样的问题。 原因是文件异常退出时,linux会针对这个文件生成一个.swp文件,用于保存数据。下次再打开这个文件就会提示,这个.swp文件是用于恢复文件。 .swp文件是一个隐藏文件,可以用ls -a选项查看。...原创 2018-08-04 16:03:36 · 1378 阅读 · 0 评论 -
I/O多路转接---epoll服务器
epoll是改进的poll,几乎结合了poll的所有优点,并将poll的缺点加以改进,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。epoll主要做三件事情:1.创建一个红黑树红黑树结点内容,保存了用户想要告诉操作系统要监控的哪些文件描述符上的哪些事件。2.从驱动到操作系统的回调机制回调机制不需要操作系统一直在等,在事件就绪时,驱动会告诉操作系统,有事...原创 2018-06-09 19:29:56 · 248 阅读 · 0 评论 -
I/O多路转接---poll服务器实现
poll其实和select服务器实现的功能是一样的,但是poll中有具体的函数来帮助我们实现I/O多路转接。我们来认识一下这些函数。poll函数#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout)pollfd 结构struct pollfd{ int fd; ...原创 2018-06-07 16:18:43 · 273 阅读 · 0 评论 -
I/O多路转接---select服务器
I/O多路复用是通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪,就能通知应用进程进行相应的读写操作。select函数作为一种I/O多路复用的机制,程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态变化。select函数 #include <sys/select.h> #include <sys/time.h> #inclu...原创 2018-06-07 10:29:12 · 261 阅读 · 0 评论 -
高级IO中的一些重要的概念(fcntl、dup、dup2)
高级IO相关的概念1.用户空间&amp;内核空间现在的操作系统都是采用虚存储器,对于32位的存储器而言,虚拟存储空间为4G(2^32)。操作系统的核心是内核,独立于普通应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,另一部分为用户空间。对于Linux而言,将最...原创 2018-06-06 20:51:56 · 503 阅读 · 0 评论 -
五种IO模型(详解+形象例子说明)
在网络环境下,通俗的讲,将IO分为两步: 1.等; 2.数据搬迁。 如果要想提高IO效率,需要将等的时间降低。五种IO模型包括:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接、异步IO。其中,前四个被称为同步IO。在介绍五种IO模型时,我会举生活中钓鱼的例子,加深理解。1.阻塞IO(blocking I/O)A拿着一支鱼竿在河边钓鱼,并且一直在鱼竿前等,在等的时候不做其...原创 2018-06-06 10:39:48 · 45921 阅读 · 15 评论 -
进程创建(fork和vfork的区别)
关于进程创建,系统提供三个系统调用fork()、vfork()、clone()。一、fork()头文件:#include 父子进程的区别:fork的返回值进程ID具有不同的父进程ID子进程的tms_utime、tms_stime、tms_cutime、tms_ustime均被设置为0父进程设置的文件锁不会被子进程继承子进程的未处理闹钟被清理子进程的未处理信号集被设...原创 2018-05-24 13:04:28 · 886 阅读 · 0 评论 -
Linux线程同步--POSIX信号量(生产者消费者问题)
POSIX信号量POSIX信号量有两种:有名信号量和无名信号量,无名信号量也可被称为基于内存的信号量,有名信号量通过IPC名字进行进程间同步,而无名信号量如果不是放在进程的共享内存区中,是不能用来进行进程间同步的,只能用于线程同步。POSIX信号量还可以分为: 1.二值信号量 信号量的值只有0和1,和互斥量类似。若资源被锁住,信号量的值为0,若资源可用,信号量的值为1. 2.计数信号...原创 2018-04-14 17:49:10 · 1068 阅读 · 0 评论 -
进程创建、终止、等待
一、进程创建首先,我们需要认识一下fork函数 返回值:子进程返回0,父进程返回子进程的id,出错返回-1. 进程调用fork,当控制转移到内核中的fork代码,内核做下面几件事情: 1.分配新的内存块和内核数据结构给子进程 2.将父进程部分数据结构内容拷贝给子进程 3.添加子进程到系统进程列表中 4.fork返回,开始调度器调度 一个进程fork后,会有两个相同的二进制...原创 2018-03-26 22:01:32 · 298 阅读 · 0 评论 -
[教你一招]设置Linux下中文显示
在编译一个程序的时候,我们往往会出现或多或少的错误,在Linux下默认的是英文显示,对于查错就不是很方便了,此篇博客重在给大家介绍一个简单的方法,来更改Linux下的显示为我们熟悉的中文显示。首先在command输入locale,可以看到Linux下默认的系统语言的是英文 vim ~/.bashrc打开这个文件夹,该文件夹相当于系统配置文件 打开后,将后三行命令输入到文档中,最后保...原创 2018-03-18 11:01:05 · 21077 阅读 · 4 评论 -
进程概念
冯诺伊曼体系结构 注意: 1.这里的存储器指的是内存 2.不考虑缓存情况,这里的CPU只能对内存进行读写操作,不能访问外设(输入和输出设备) 3.外设输入或输出数据只能通过写入内存或存内存中读取操作系统(简称OS) OS 的作用: 1.管理所有的软硬件资源 2.为用户提供一个良好的执行环境 进一步理解,OS 可以被看作是一个管理软硬件的软件,操作系统管理软硬件是通过驱动程序...原创 2018-03-11 20:20:25 · 261 阅读 · 0 评论 -
编写一个makefile
什么是makefile? 对于大多数的Windows程序员来讲,makefile可能不是那么重要,因为Windows的IDE都为程序员做好了这个工作。但是在Linux下编程,会不会写makefile,从侧面上说明一个人是否具备完成大型工程的能力。makefile的作用 makefile是用来自动编译和链接的,一个大的工程会有很多的文件组成,每一个文件的改变都会导致工程的重新链接,但不一定所...原创 2018-03-14 21:10:35 · 323 阅读 · 0 评论 -
正则表达式
1.基本概念正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串。简单的说,正则表达式就是处理字符串的方法,是以行为单位来进行字符串的处理行为。2.语系对正则表达式的影响举个例子,在英文大小写的编码顺序中,zh_CN.big5及C这两种语系的输出结果分别入下: LANG=C: 0 1 2 3 4……A B C……a b c……z LANG=zh_CN: 0 ...原创 2018-02-14 15:25:29 · 263 阅读 · 0 评论 -
认识shell
一、shell的初步认识 只要能够操作应用程序的接口都称为shell,狭义的shell是指命令行方面的软件,包括bash等。广义的shell则包括图形界面的软件,图形界面也可以操作各种应用程序来调用内核工作。二、bash shell的功能 1.命令记忆功能 只要在命令行中按上下键就可以找到前/后执行过的命令 2.命令与文件补全功能 [Tab]键接在一串命令的第一个字的后面,为命令补全...原创 2018-02-03 19:13:17 · 277 阅读 · 0 评论 -
进程控制
一、进程切换(上下文切换) 1.进程切换* 暂停当前运行进程,从运行态变成其他状态* 调度另一个进程从就绪态变成运行状态2.要求* 切换前,保存进程的上下文* 切换后,恢复进程上下文快速切换(通常情况下,由汇编执行) 3.进程生命周期信息* 寄存器(PC,SP,……)* CPU状态* 内存地址空间4.进程控制块PCB:内核的进程状态记录 内核为每个进程维...原创 2018-02-13 16:57:02 · 187 阅读 · 0 评论 -
LIinux下的目录与路径
1.目录的相关操作.:此层目录 ..:上一层目录 -:前一个工作目录 ~:目前用户身份所在主文件夹 ~account:account用户的主文件夹(其中account为账号名称)2.常见的处理目录的命令cd:切换目录 pwd [-p]:显示当前目录 参数: -p:显示当前路径而非使用连接路径 mkdir [-m/p]:新建一个目录 参数: -m:配置文件案的权限,直...原创 2018-02-13 16:50:53 · 325 阅读 · 0 评论 -
Linux下文件与目录管理
1.查看文件与目录:ls基本语法: ls [-a/A/d/D/f/F/i/l/n/r/R/S/t] 目录名称 ls [–color={never,auto,always}] 目录名称 ls [–full-time] 目录名称 参数: -a:全部文件,包括隐藏文件(即开头为.的文件) -A:全部文件,包括隐藏文件,但不包括.与..这两个目录 -d:仅列出目录本身,而不是列出文件数据...原创 2018-02-13 16:48:48 · 214 阅读 · 0 评论 -
进程和线程
一、进程的概念 1.进程概念 进程是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。 源代码通过编译链接形成可执行文件,再通过加载到进程的地址空间。 2.进程组成 进程包含了正在运行的一个程序的所有状态信息。* 代码* 数据* 状态寄存器* 通用寄存器* 进程占用系统资源3.进程特点* 动态性:可动态的创建、结束进程* 并发性:可交替执行多个程序,多原创 2018-01-27 18:37:38 · 316 阅读 · 0 评论 -
什么是vim,vim常用的按键说明
一、vim的概述 vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。二、vim的三种模式及转换* 命令模式(一般模式)以vim打开一个文件就进入到了命令模式,在此模式下,可以使用原创 2018-01-31 20:33:57 · 391 阅读 · 0 评论 -
进程间通信(一)
进程间通信的目的1、数据传输 一个进程将数据发送给另一个进程 2、资源共享 多个进程之间共享相同的资源 3、通知事件 第一个进程需要向另一个进程发送消息,通知发生的事件 4、进程控制 有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够知道它的状态改变进程间通信的本质就是两个互不相干的进程看到同一份资源,该资源一定是操作系统提供的。...原创 2018-03-18 22:00:51 · 232 阅读 · 0 评论 -
man的使用
大家都知道在Unix/Linux系统中有man命令,用于查找,可是对于函数名的查找,有时候会出现下列问题: man read,我们原意是想要看read的函数原型和说明,然而看到的是BASH命令的说明。这是为什么? 原因是read本身就是man命令的一个参数,输入man系统会以为你要使用read的功能,而不是查看read函数,那么问题又来了,我们该如何查看read函数呢?首先,我们需要清...原创 2018-03-13 08:20:51 · 275 阅读 · 0 评论 -
ps命令查看进程状态
在Linux下进程有5种状态:运行状态(R) 正在运行或在运行队列中等待 睡眠状态(S) 休眠中, 进程在等待事件的完成 不可中断睡眠状态(D) 指的并不是CPU不影响外部硬件中断,而是指进程不影响异步信号。进程通常会等 待IO的结束 僵尸状态(Z) 进程已经终止,但进程的描述符存在,直到父进程调用wait或waitpid系统调用后释放 停止状态(T) 进程收到SIGST...原创 2018-03-26 20:47:22 · 20925 阅读 · 0 评论 -
[教你一招]添加多行注释和取消注释
添加注释: 在命令行模式下按Ctrl-V进入visual block模式 (可视化模式)选中需要注释的行,再按大写的I,输入//,最后按两下Esc即可。 如果想要让前进Tab个位,则在大写的I操作后,输入Tab即可。 取消注释: 按Ctrl-V进入visual block模式,选中需要注释的行,按d即可取消注释。...原创 2018-03-26 19:12:45 · 6601 阅读 · 0 评论