linux
文章平均质量分 65
午饭要阳光
热爱编程
展开
-
ftp服务器实现
在模拟实现FTP服务器之前,我们先来了解一下有关FTP的功能以及工作原理。一、什么是FTP ftp(File Transfer Protocol)文件传输协议。ftp是应用层协议,基于C/S结构,底层使用TCP/IP协议来保证可靠性。 ftp使得主机间可以共享文件,简单来说就是可以在两台计算机之间来回拷贝文件。 ftp服务的基本过程就是:建立连接、传输数据与释放连接。由原创 2017-06-09 22:59:36 · 10599 阅读 · 4 评论 -
shell编程之符号与变量
一、shell特殊字符 1、一般通配符 2、模式表达式 3、引号 在shell中引号分为三种,单引号、双引号和倒引号。 3.1、双引号 由双引号括起来的字符(除$,倒引号(),和反斜杠(\)外),其余字符均视为普通字符。对这三种字符仍然保持特殊功能。$表示变量替换,倒引号()表示命令替换,反斜杠表示转移字符。 例:i=10; echo “i”输出:103.2、单引号由单引号括起来原创 2017-03-23 20:47:46 · 1391 阅读 · 0 评论 -
shell中的命令替换
在shell里面有倒引号”“”和$()两种命令替换方式: 如: 那么这两条命令有什么不同呢? 在多层次的复合替换命令中,倒引号需要加”\”转义,$()则不需要。 例:conmand1 conmand2conmand3。 原意是先执行conmand3,将结果交给conmand2处理,最后再将conmand2的结果交给conmannd1处理。 但实际由于两个倒引号进行了嵌套,最终将conma原创 2017-03-23 18:55:19 · 1223 阅读 · 0 评论 -
linux命令之eval
1、linux的eval命令用于重新运算求出参数的内容。 语法:eval cmdline 功能:eval会对后面的cmdline扫描两遍,第一遍扫描之后如果cmdline是个普通命令的话,则执行此命令。如果cmdline中含有变量的间接引用,用变量的值代替变量。 例1:变量i的值是”>”,用i进行重定向的话,结果如下: 可见,eval将间接引用解释成变量的值。 例2:使用eval可以创原创 2017-03-23 13:14:54 · 669 阅读 · 0 评论 -
linux下各目录含义
1、/ 根目录,系统中所有目录均是从根目录开始的。 2、/bin:bin是binary的缩写,该目录存放了使用则最常用的命令。 3、/boot:引导核心的程序目录,主要存放Linux Loader(Linux装配程序)LILO使用的各种文件。 4、/dev:dev是device(设备)的缩写,这个目录包含了Linux所有的外部设备名。 5、/etc:etc是etcetera(其他事项)的缩写原创 2017-03-23 13:11:53 · 1016 阅读 · 0 评论 -
三种I/O复用方式的比较
select、poll、epoll这三组I/O复用系统调用都能同时监听多个文件描述符,他们都通过timeout参数指定要等待的时间。直到事件就绪时返回,返回值就是就绪的文件描述符的数量。下面我们从事件集、最大支持文件描述符数量,工作模式和具体实现方面比较一下他们的异同:1、事件集 select的参数没有将文件描述符和事件绑定,他仅仅是一个文件描述符的集合,所以select需要分别用三个参数原创 2017-03-21 12:09:23 · 1299 阅读 · 0 评论 -
I/O多路转接之epoll
一、epoll函数 epoll是linux特有的I/O复用函数,它比select和poll要高效的多。epoll用一个事件表来保存用户关心的文件描述符,但是这个事件表需要一个文件描述符来标识。1、内核事件表#include<sys/epoll.h>int epoll_create(int size);功能:创建一个事件表,并返回这个事件表的文件描述符。这个文件描述符就代表一个epoll模原创 2017-03-20 23:09:40 · 906 阅读 · 0 评论 -
shell脚本语法随笔
1、循环1.1、类C循环例:求1到100的和sum=0for ((i=1;i<=100;i++))do let sum+=idone1.2、for in循环例:输出参数列表所有参数for i in $@do echo $idone1.3、while循环例:求 1到100的和sum=0x=1while x<=100do let sum+=x原创 2017-03-27 22:42:45 · 948 阅读 · 0 评论 -
终端、守护进程、作业
一、进程组,作业,会话 1、进程组 每个进程除了有一个进程ID之外,还属于一个进程组。进程组是多个进程的集合,同一个进程组的进程的组ID相同,每一个进程组都有一个唯一的组ID。 每个进程组都有一个组长,组长的pid与gid相同。组长可以创建一个进程组,创建该组中的进程,然后终止。只要进程组内任意一个进程存在,那么这个进程组就存在,与组长进程是否终止无关。 通常进程组都原创 2017-02-26 23:27:02 · 877 阅读 · 0 评论 -
crond定时任务
1、什么是crond??? crond是linux用来定期执行命令或指定程序任务的一种服务。安装完操作系统后,默认会启动crond任务调度服务。crond服务会定期检查系统中是否有要执行的任务。如果有要执行的任务便会自动执行该任务。crond定时任务服务就像我们早上使用的闹钟一样 查看crond服务状态: 命令:service crond status 启动crond服务: 命令:serv原创 2017-02-26 08:42:37 · 1377 阅读 · 1 评论 -
创建守护进程fork一次与fork两次的区别
1、守护进程的特点 1.1、独立于控制终端。 1.2、父进程是1号进程(init),所以守护进程也是孤儿进程 1.3、守护进程是独自成组进程的。 1.4、守护进程独自成一个成为会话的会话首进程,或者是一个会话中的某个进程组。 1.5、守护进程的运行不受用户登录和注销的影响。2、为什么要有守护进程??? 控制终端因为某些原因会发送一些信号,接受到信号的进程去执行这些信号的默认处理动作会导致原创 2017-02-26 08:38:30 · 2026 阅读 · 7 评论 -
线程间同步与互斥
一、同步与互斥概念 进程/线程之间的关系主要有两种,同步与互斥。 互斥: 互斥就是指某一资源同时只能允许一个访问者对其进行访问,具有唯一性和排他性,但是互斥无法限制访问者对资源的访问顺序,即访问时无序的。 对于线程来说,互斥就是说两个线程之间不可以同时运行,他们之间会相互排斥,必须等一个线程运行完毕之后,另一个才能运行。 同步: 同步是指在互斥的基础上(大多数情况原创 2017-02-22 11:47:39 · 1443 阅读 · 0 评论 -
线程安全与可重入
1、什么是线程安全 当一个函数被多个线程反复调用的时候,他会一直产生正确的结果,那么这个函数就是线程安全的。线程安全函数解决了多个线程调用函数时访问临界资源的冲突问题。2、可重入 在多线程或有异常控制流的情况下,当某个函数原型到中途时,控制流有可能被打断去执行另一个函数,而这”另一个函数”有可能是他本身,如果在这种情况下不会出现问题,比如与说数据或状态不被破坏,而且原创 2017-02-24 22:29:07 · 1019 阅读 · 3 评论 -
shell脚本执行过程
一、先看一个简单的脚本执行过程 shell脚本中以#表示注释。但是如果#位于第一行并且后面是感叹号,它表示该脚本使用后面指定的解释器解释执行。#!/bin/bash叫做shebang,它指定了解释器。 因为编写好的shell脚本文件是一个普通文本文件,所以我们要对它赋予可执行权限才可以执行。或者直接使用解释器对文本文件进行解释执行。 二、shell的执行过程 1、原创 2017-03-24 10:14:18 · 10220 阅读 · 0 评论 -
syslogd日志简介(1)
1、什么是syslogd syslogd是一个守护进程,这个守护进程提供了一个记录特殊事件和消息的标准机制。通俗的讲,syslogd守护进程用于解决系统守护进程的日志记录问题。 syslogd记录的日志文件都是文本文件,一般都放在/var/log目录中。标准C函数库提供了syslogd的接口。 openlog是可选的,如果不调用openlog,则在第一次调用syslog时,原创 2017-04-06 09:48:16 · 3005 阅读 · 0 评论 -
半同步/半反应堆线程池
一、什么是线程池 线程池是服务器预先创建的一组线程,这些线程运行着相同的代码,并具有相同的属性。当有新的任务到来的时候,主线程通过某种方式选择线程池中的某一个线程来为之服务,服务完之后又放回线程池中。二、为什么要有线程池 相比于动态创建线程来说,线程池可以提高速度。因为线程的创建和销毁是需要时间的,如果我们预先创建好,用完之后再回收的话,则会节省不少时间。一般线程池中线程的数量原创 2017-05-28 21:21:04 · 2639 阅读 · 0 评论 -
两种高效的并发模式
并发编程的目的是让程序”同时”执行多个任务。如果程序是计算密集型的,并发编程并没有什么优势,反而由于任务的切换使效率降低。但如果程序是I/O密集型的,那就不同了。 I/O操作通常分为两个阶段,即等待和数据搬迁,通常等待所花费的时间比较多。而I/O操作的速度远远低于CPU的计算速度,所以让程序阻塞在I/O操作将浪费大量的时间。如果程序有多个执行线程,则当前被I/O操作阻塞的线程可以放弃CP原创 2017-05-25 15:01:07 · 2396 阅读 · 0 评论 -
shell知识体系框图
grep工具:sed工具:cut工具:awk工具:sort工具uniq工具diff和patch原创 2017-04-22 22:25:07 · 2124 阅读 · 5 评论 -
diff和patch
一、diff和patch diff命令是linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方,常用于svn和git中。diff会在命令行中打印每一个行的改动。diff程序的输出称为补丁(patch),patch命令可以根据diff的输出将a.c的内容更新为b.c的内容,或者是将b.c的内容还原成a.c的内容。二、diff命令介绍 1、命令格式:di原创 2017-04-24 12:47:38 · 1337 阅读 · 0 评论 -
Reactor模式和Proactor模式
一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应用程序自己读取或写入数据。(Reactor模式需要用户自己进行I/O操作)。 并发系统常用Reactor模式代替常用的多线程的处理方式,节省系统的资源,提高系统吞吐量。 2、使用同步I/O模原创 2017-05-25 09:41:18 · 1452 阅读 · 0 评论 -
uniq命令
uniq这个命令用于读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多的重复的行将被删除。行比较是根据所用字符集的排序序列进行的。命令格式: uniq option 文件 常用option: -c:显示输出中,在每行行首加上本行在文件中出现的次数(注意是连续出现的行)。 -d:只显示重复的行。 -u:只显示不重复的行。例:原创 2017-04-23 22:58:42 · 1109 阅读 · 0 评论 -
sort命令
一、sort将文件的每一行作为一个单位,相互比较,比较的原则是从首字符向后,依次按ASCII码进行比较。 例: 二、命令格式 命令格式: sort option 文件 常用option:1、-u:去除重复行 例1:取出重复行 2、-r:默认是升序,加-r选项变为降序 例2:去重并降序排列 3、-o:sort默认将结果输出到标准输出,所以要使用重定向才能将结果写入文件,但是要将排序结原创 2017-04-23 22:40:12 · 1187 阅读 · 0 评论 -
cut工具
1、cut工具 cut命令可以从一个文本文件或文本流中提取文本列。cut是以每一行为一个处理对象的。2、命令格式 cut option 范围 option: -b:按照字节截取。 -c:按照字符截取。 -d:指定域分隔符 -f:指定要截取那几个域。例1: 例2: 例3: 可以看到用cut和awk都能对列进行截取。原创 2017-04-22 22:03:50 · 1429 阅读 · 0 评论 -
awk工具
一、什么是awk awk也是文本处理工具,与sed相比,awk不仅能以行为单位处理文件,还可以以列为单位处理文件。awk的缺省行分隔符是”\n”,缺省列分隔符是空格或tab,但是行分隔符和列分隔符都是可以自定义。awk还是一门很复杂的脚本语言,具有像C语言一样的分支和循环结构。二、awk命令格式 awk option ‘编辑命令’ file1 file2 … awk option -f原创 2017-04-22 21:22:00 · 2400 阅读 · 3 评论 -
sed工具
一、什么是sed sed叫做流编辑器,在shell脚本和Makefile中作为过滤一使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换成为另一种格式输出。sed是一种在线编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到原创 2017-04-22 16:18:18 · 2716 阅读 · 6 评论 -
grep简单用法
grep是一种强大的文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行统计出来。 命令:grep [选项] [–color=auto] ‘搜索字符串’ filename 常用参数: -c:统计符合条件的字符串出现的次数。 -E:支持扩展正则表达式。 -i:忽略字符大小写。 -n:在显示匹配到的字符串前面加上行号。 -v:显示没有”搜索字符串”内容的那一行原创 2017-04-19 17:54:08 · 1337 阅读 · 0 评论 -
基础正则表达式
一、什么是正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割、匹配、查找以及替换操作。 描述一个正则表达式需要字符类、数量限定符、位置限定符。规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式。二、正则表达式语法规范 字符类:在模式中表示一个范围,但是取值范围是一类字符中的任原创 2017-04-19 16:12:47 · 1119 阅读 · 0 评论 -
生产者消费者模型
一、什么是生产者消费者模型 在实际的开发中,经常会碰到如下场景:某个模块负责生产数据,这些数据由另一个模块来负责处理。产生数据的模块就形象的称为生产者,而处理数据的模块就称为消费者。只有生产者和消费者还不够,这个模型还必须要有一个缓冲区处于生产者和消费者之间,作为中介。生产者把数据放入缓冲区,而消费者从缓冲区中取出数据。 二、为什么要使用生产者消费者模型 1、解耦 假设生产者和消费者原创 2017-02-20 23:33:26 · 2024 阅读 · 6 评论 -
基于进程的并发编程
基于进程的并发编程原创 2016-12-10 20:42:15 · 1500 阅读 · 0 评论 -
linux常用指令(2)
1、chattr&lsattr 1.1、chattr:改变文件属性 说明: chattr命令的作用很大,和chmod相比,chmod知识改变文件的读写、执行权限,更底层的属性控制由chattr来改变的。通过chattr命令修改属性能够提高系统的安全性,但是他并不适合所有的目录。chattr不能保护:/、/dev、/tmp、/var目录。命令:chattr [-RV] [-v versi原创 2017-01-09 15:40:53 · 1010 阅读 · 0 评论 -
Linux常用命令(1)
1、查看文件与目录 命令:ls [参数] 目录名称 -a :列出目录下所有的文件,包括以”.”开头的隐藏文件。 上面图中有三个隐藏文件,”.”表示当前目录,”..”表示上级目录。-i:输出文件的inode编号。 -l:列出文件的详细信息。 ls -l可以简化成ll。-s:在文件名后面输出文件的大小。 -S:以文件大小进行排序。 2、切换目录 命令:cd 目录名称 常用快原创 2016-12-30 16:18:15 · 9701 阅读 · 0 评论 -
GDB调试指南(初级)
GDB是Linux环境下的代码调试工具。如果我们在linux下面写代码的话,可以用GDB对程序进行调试。源代码经过编译之后生成的程序程序有两种:relese版本和debug版本。要想对程序进行调试的话就要在debug版本下面进行调试,因为debug版本下面加入了许多调试信息。在linux下面编写出来的代码是relese版本的,所以我们要想对程序进行调试的话,就必须在生成源代码的时候加上-g选项。原创 2017-01-07 12:41:15 · 5999 阅读 · 0 评论 -
Linux中的权限
一、linux中的权限在linux系统下,一切东西都可以看做是文件。针对一个文件而言,不同的用户对它有不同的权限。试想一下,假如有一个系统的配置文件,普通用户都可以对它进行修改,那么这将是多麽可怕的事情。所以,我们将根据不同的文件访问者设置不同的权限。在linux中,我们可以将文件的访问者分为三类,针对这三类访问者我们可以对他们设置不同的权限。 1、文件访问者的分类: 文件和文件目录的所有者:u原创 2016-12-29 23:11:07 · 2531 阅读 · 0 评论 -
find指令
我们知道,linux下面一切皆文件,所以对于像linux操作系统来说find是一条很重要的命令。linux下面的find指令用于在目录结构中搜索文件,并执行指定的操作。它提供了相当多的查找条件,功能很强大。在不指定查找目录的情况下,find会在对整个系统进行遍历。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,原创 2016-12-27 13:55:17 · 2859 阅读 · 1 评论 -
vim系列(1)——初识vim
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2016-12-26 17:45:55 · 504 阅读 · 0 评论 -
touch指令
linux中的touch指令有两个功能,第一是修改文件的时间戳,第二是创建一个不存在的文件。1、命令格式 touch [参数选项] 文件名2、命令参数 -a 或–time=atime或–time=access或–time=use只更改存取时间。 -c 或–no-create 不创建任何文档 -m 或–time=mtime或–time=modify 只更改变动时间。 -r 将指定文件或目录的原创 2016-12-24 21:12:11 · 2891 阅读 · 0 评论 -
软连接和硬连接
一、文件的存储 我们知道,文件存储在硬盘上,硬盘的最小存储单位叫做”扇区”(sector),每个扇区存储512B,操作系统读取硬盘的时候,为了提高速度他不会一个扇区一个扇区这样的读取,他会一次连续读取多个扇区,也就是一次读取一个”块”(block)。这种由多个扇区组成的”块”是文件存取的最小单位,一般常见的块的大小是4k。 文件内容存储在”块”上,而文件的基本信息则存储在inod原创 2016-12-24 13:29:37 · 2201 阅读 · 0 评论 -
Linux文件类型
一、linux下面所有东西都是文件,既然是文件那么这些文件类型又是如何进行区分的呢??? 在windows下面是通过文件的扩展名来区分文件类型的,但是在linux中却不是这儿样的。在linux中就没有所谓的文件扩展名,一个linux文件能不能被执行时取决于它的属性中是否有x,与文件名一点关系都没有。一般我们所看到的文件扩展名只是为了给我们用户自己看的。提到文件的话就不得不先来简单了解一下i原创 2016-12-23 22:59:27 · 4109 阅读 · 0 评论 -
Linux环境变量
一、什么是环境变量??? 环境变量是在操作系统中具有一个特定名字的对象,它包含了一个或多个应用程序所将要使用到的信息。环境变量相当于给系统或用户应用程序设置的一些参数,具体什么作用这当然和具体的环境变量有关。二、linux下的环境变量 linux是一个多用户的操作系统,每个用户登录系统之后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认的环境实际上就是一组环原创 2016-12-23 20:24:40 · 5461 阅读 · 0 评论 -
linux下查询命令
1、which: which命令是在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。也就是说,使用which命令,就可以看到系统命令是否存在,以及执行的到底是哪一个位置的命令。命令格式:which 可执行文件名称 which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。2、whereis: whereis命令用于程序名原创 2017-01-01 23:02:28 · 6409 阅读 · 3 评论