
Linux学习之路
文章平均质量分 73
我的Linux学习
LLZK_
这个作者很懒,什么都没留下…
展开
-
NAT与NAPT网络地址转换
专用地址专用地址又叫可重用IP地址,为了节省全球IP地址,RFC 1918指明了一些专用地址,专用地址只能用于专用网(机构内部,本地网)内主机间的通信,并不能用于和因特网上主机的通信。在因特网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。IPV4的专用地址:10.0.0.0~10.255.255.255 1个A类172.16.0.0~172.31.25原创 2017-03-10 16:58:55 · 6032 阅读 · 0 评论 -
Tcpdump抓包工具
tcpdump工具选项-c +数字 -----指定要抓取包的数量,如果不指定数字,则会一直抓取直到输入Ctrl+c-nn -----直接以IP和端口号来显示,而非主机名和服务名称-w -----将抓取的数据包保存到指定的文件内。后面加文件名-i ----- 抓取指定网络接口的数据包,后面跟网络接口。-A----- 将抓取的数据包以ASCII的形式显示,一般原创 2017-03-10 20:17:53 · 1249 阅读 · 0 评论 -
I/O多路转换之select与select服务器
select高效的原因首先要知道一个概念,一次I/O分两个部分(①等待数据就绪 ②进行I/O),减少等的比重,增加I/O的比重就可以达到高效服务器的目的。select工作原理就是这个,同时监控多个文件描述符(或者说文件句柄),一旦其中某一个进入就绪状态,就进行I/O操作。监控多个文件句柄可以达到提高就绪状态出现的概率,就可以使CPU在大多数时间下都处于忙碌状态,大大提高CPU的性能。达到高效服务器的原创 2017-03-15 20:29:00 · 1074 阅读 · 0 评论 -
Linux常用指令-----ldd
今天面试被问到了,写个博客警惕下。很难受,这个指令我以前还学过。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。ldd —– list, dynamic, dependencies。 列出所有的动态依赖关系。ldd—-列出程序所使用的动态函数库的信息。ldd –version 列出ldd的版本号[root@bogon thread_tcp]# ldd --versionl原创 2017-03-20 22:00:52 · 1460 阅读 · 0 评论 -
【shell】反引号(`)与$()的作用与区别
linux下的反引号(`)和$()执行的是命令替换的功能。1、将命令的执行结果赋给一个变量反引号:DATE=`date` //变量=`命令`echo $DATE执行结果为:[lzk@bogon Signal_shell]$ sh -x myshell.sh++ date+ DATE='Wed Mar 22 22:43:08原创 2017-03-23 10:26:39 · 2665 阅读 · 0 评论 -
shell的字符串截取
1、#号截取格式:${var#*c}将截取后的字符串赋给a,#号是截取运算符,*号后跟提示字符c,表示将c之前的(包含c)的字符串都截取丢弃,保留剩下的。例:var='http://www.baidu.com'a=${var#*/}echo $a结果:[lzk@localhost 33_clas原创 2017-03-27 15:44:05 · 2451 阅读 · 0 评论 -
shell字符串大小写转换
1、typedet 有两个选项 -l 代表小写 -u 代表大写。用法:typeset -u namename='asdasdas'echo $nametypeset -l ameame='asdasdas'echo $ame结果:[lzk@localhost 33_class_3_26_shell]$ bash test.sh原创 2017-03-27 15:45:03 · 48524 阅读 · 0 评论 -
shell的5个小程序
1、计算1+2+3+4....+100的结果:函数递归法:(参数从命令行传入)sum=0function fun{ if [ $1 -eq 0 ];then echo $sum else let sum+=$1 fun $(($1-1)) fi}fun $1原创 2017-03-27 15:46:54 · 5605 阅读 · 1 评论 -
Linux进程间通信之消息队列
消息队列我们可以把消息队列理解为共享的消息链表,它存储在内核中,由消息队列标识符标识。消息队列传输数据的单位是有类型的数据块,这点与管道不同,管道的信息传输是基于字节流。 不同进程发送的数据块可被认为都有自己的类型,而接受端进程接受的数据块可以有不同的类型。 消息队列与管道相同的地方在于他们都是有限的。及既然他们都是一块共享的内存,那么他们必定有大小。 msgmax,每个消息的最大长度是有上限原创 2017-03-03 16:07:36 · 1345 阅读 · 1 评论 -
Linux进程间通信之共享存储
共享存储所谓共享存储,就是一块共享的内存区域,它可被多个进程以读或写的形式访问,以达到进程间通信的目的。 因为这个通信方式,发送端与接收端不需要来回复制要发送接收的信息,所以共享存储是最快的一种IPC(进程间通信方式)。 既然共享存储允许多个进程去访问,那么它必须满足同步与互斥原则,在发送端正在写的时候,接收端不应该去读。通常我们使用信号量或者互斥量来达到这一目的。共享内存同消息队列,信号量相同原创 2017-03-03 21:59:27 · 2261 阅读 · 1 评论 -
TCP的三次握手与四次挥手
参考资料《计算机网络》谢希仁为什么是三次握手?目的:防止已失效的连接请求又传到了服务器端。 场景(A为客户,B为服务器):A向B发送一个请求连接报文,但是这个报文在网络中阻塞了,并没有传到B。所以B也无法向A发送确认报文,在A的重传计时器到达之后,A再次向B发送请求连接报文,这个报文B收到了,并且向A做出应答,建立连接,传输数据。数据传输完后,关闭连接。问题来了,就在B关闭连接之后,A第一次发送的原创 2017-03-10 13:09:14 · 1188 阅读 · 0 评论 -
TCP定时器的分类
重传定时器主要为了防止报文丢失或者阻塞。当A向B发送报文时,就会启动重传定时器,若在定时器到达之后,仍没有收到B的确认报文,则A会重新发送上次发送的报文。同时,令重传定时器复位。继续计时。坚持计时器此计时器针对下面场景: 当B向A发送了0窗口报文,B此时已经没有空间接受A发送的数据了,通知A停止发送。A在收到后即停止发送,等待一段时间后,B有了一些空间,可以继续接收了。此时再向A发送非0窗口报文。原创 2017-03-10 13:11:06 · 1368 阅读 · 0 评论 -
TCP协议首部分析
源端口和目的端口–> 各两个字节,用来表明源和目标。和UDP类似。 序号–>用来指定发送数据的编号。TCP的数据是按字节编号的,这里的序号就指本报文段数据的第一个字节的编号。 确认号–>用于向发送方发送确认信息,表示“我收到你发送的数据”,接收到数据的最后一个字节的序号加1 4位首部长度–>指报文段的首部的总长度。4位能表示最大数为15,一个单位为4字节,所以首部最大长度为4*15=60字节,原创 2017-03-10 13:16:58 · 1524 阅读 · 0 评论 -
Linux下gdb调试多线程
gdb调试多线程,目前我知道的就以下几条指令,当然编译的时候需要加-g选项。info threads 显示所有线程,系统会给每个线程都分配一个编号,编号前带“*”的,是当前正在调试的线程。 上图中LWP指的是轻量级进程,Linux下没有真正意义上的线程,所有的线程都是用进程模拟的。所以线程又叫轻量级进程。 __kernel_vsyscall(),是Linux系统调用的辅助机制,原创 2017-03-01 21:39:55 · 1594 阅读 · 0 评论 -
CRC校验算法
基本原理及概念CRC校验算法是在通信方面常用的一种差错检测的手段。原理是在将原始帧数据发送之前,在n个bit位的原始数据后面再加上通过特定运算得到的k位校验序列,组成新的帧再发送给接受端。接受端会根据原始数据后的校验序列再次进行特定运算,若结果正确,则接受;若结果错误,则丢弃。 我们将上面所述的k位校验序列称为帧检验序列FCS。 特定运算为多项式模2运算。(我更喜欢将它理解为异或运算)CRC原创 2017-03-02 18:11:35 · 4140 阅读 · 0 评论 -
Linux例行性工作调度cron
什么是例行性工作?比如太阳每天从东方升起,学校的上课铃总是不厌烦的定时响起,老妈的喊叫声总在每天的固定时刻叫你起床等。这些都是例行性工作。Linux系统也有自己的定时要办的事情,比如日志文件的轮替,whatis数据库的建立等等。 Linux例行性工作分一次性的(at)和循环执行的(cron),本篇博客探讨的就是循环执行的例行性工作。 它主要分为两类:用户级用户想要建立自己的循环性工作调度时,使用原创 2017-03-01 16:45:43 · 3082 阅读 · 2 评论 -
Linux进程间关系之终端与终端登录
终端介绍在Linux/Unix系统中,用户总是通过终端登录系统后得到一个shell进程,进而在shell命令行上输入命令与系统进行交互。说白了,终端就是系统与用户进行“交流”的窗口,而所有在这个终端下创建的进程都“属于”这个终端。这个终端也就是这些进程的控制终端。 (控制终端是保存在PCB信息中的,而fork子进程会复制PCB中的信息。所以shell创建的所有进程的控制终端都是这个终端。) 我们原创 2017-03-01 13:05:05 · 4193 阅读 · 0 评论 -
Linux进程间关系之进程组,作业,会话与作业控制。
本片博客用到的相关指令fg,bg,jobs,ps等可自行查阅。进程组每个进程除了有一个进程ID之外还有一个进程组ID。每个进程都属于一个进程组。进程组是一个或多个进程的集合。每个进程都有一个唯一的进程组ID。每个进程都有一个组长进程。 组长进程标志:其所属进程组ID等于其进程ID。 进程组就是进程的集合,这些进程并不是孤立的,他们彼此之间或者存在父子、兄弟关系,或者在功能上有相近的联系。每个进程原创 2017-02-27 13:22:57 · 1574 阅读 · 0 评论 -
Linux进程间关系之守护进程
概念守护进程也称精灵进程,是运行在后台的一种特殊进程。守护进程独立于控制终端并且周期性的执行某种任务或者等待处理某些打算的事件。可认为守护进程目的就是防止终端产生的一些信号让进程退出特点所有的守护进程都没有控制终端,其终端名(TTY)设置为问号(?)。自成会话,自成进程组。不与其他会话或进程组相互关联,干扰。所以一般一个守护进程的进程ID,组ID,会话ID都相同。(自成进程组这点说的也不太严谨,原创 2017-02-27 16:05:56 · 4274 阅读 · 0 评论 -
Linux多线程编程(四)-----读写锁
概述读写锁类似于互斥锁(互斥量),不过读写锁允许更高的并行性,主要体现在读者方面。这种锁有利于读的机会多,写的机会少的共享数据。它可分为以下两种情况:写者竞争到锁资源。在写者加锁,正在写的情况下,所有试图竞争这个锁的读者写者线程都会被阻塞。读者竞争到锁资源。在读写加锁,正在读的情况下,为了体现并行性,当有新读者试图读取并且申请加锁的时候,将被允许。也就是说,一块共享数据可以同时被多个读者读取。但原创 2017-02-27 18:20:18 · 1319 阅读 · 0 评论 -
Linux多线程编程(二)-----同步与互斥
Linux多线程编程(一):http://blog.youkuaiyun.com/llzk_/article/details/55670172 由上篇博客我们可以知道,多个线程是共享同一份内存的。这就意味着这么多线程共享同一份数据资源。这时就很可能出现多个线程因竞争同一份资源而发生冲突的问题。就算从程序不挂掉,运行结果也不会太正确。 例如,现在有两个线程A,B分别要对一个数据a = 5执行加1操作。正常来说原创 2017-02-19 17:10:40 · 1605 阅读 · 0 评论 -
Linux多线程编程(三)-----生产者与消费者(条件变量,信号量)
Linux多线程编程(一):http://blog.youkuaiyun.com/llzk_/article/details/55670172 Linux多线程编程(二):http://blog.youkuaiyun.com/llzk_/article/details/55805851 在前两篇文章中我们探讨了线程的概念,同步与互斥概念以及互斥锁。本文将剖析一种操作系统中重要的模型—–生产者与消费者。其中会涉及条件变量原创 2017-02-22 21:02:27 · 4369 阅读 · 0 评论 -
Linux信号(Signal)
信号的概念信号是操作系统正常运行一个必不可少的工具。正如我们生活中负责协调交通的红绿灯一样,若没有了红绿灯信号,那岂不是一幅人间大乱的场景。 每个信号都有一个名字,并且大写的英文字母,开头都是“SIG”。我们在Linux系统下可以调用kill -l指令来查看所有信号。 注意上图,所有信号的编号是从1到64,但是没有32,33。所以信号共有62个,我们将前31个信号称为普通信号,后31个称为实原创 2017-02-24 10:03:35 · 2244 阅读 · 0 评论 -
Linux多线程编程(一)
什么是线程先来举一个我们生活中的实例,我们都使用过一个强大的软件—迅雷。那你必然知道迅雷有一个边下边播的功能,我们在下载的时候还能同时进行观看。这就是一个多线程实例。 线程是进程内部的执行分支。打开迅雷软件—–向系统内核索要资源,启动“迅雷”进程,。开始下载一个电影—–从索要的资源中调度分配一部分资源,启动下载线程。开始播放电影—–再索要的资源中调度分配一部分资源次从,启动播放线程。由上我原创 2017-02-18 19:25:22 · 2444 阅读 · 6 评论 -
Linux下的静态库与动态库
库在windows和Linux下都存在着大量的库,库是什么呢?本质上来说,库时一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有什么用呢?我们通常将一些公用函数写成函数库,所以库是别人写好的,现有的,成熟的,可以服用的代码,你可以使用但要必须得遵守许可协议。在我们现实开发过程中,不可能每一份代码都从头编写,当我们拥有库时,我们就可以直接将我们所需要的文件链接到我们的程序中。可以为我们节省大原创 2017-02-18 09:17:13 · 14282 阅读 · 6 评论 -
Linux进程间通信之信号量
信号量信号量,我们可以理解为一种计数器,记录的是可共享资源的数量。信号量主要被用于协调多个进程对同一共享资源的占用访问。 如果一个进程想要获得并使用共享资源,需经历以下过程:测试查看控制该共享资源的信号量。若该信号量的值大于0,则进程可以使用该资源。资源分配给该进程以后,信号量的值减1。表示该资源分配出去到了一个单位。若该信号量的值等于0,则该进程将被挂起,进入休眠等待状态。直到资源被释放,原创 2017-02-16 21:52:09 · 1064 阅读 · 0 评论 -
Linux下实现简单进度条
我们在使用计算机不免有拷贝文件或者下载文件的时候,总会看到行行色色的进度条,如下图的两种:下载文件: 拷贝文件: 在实现进度条之前首先要明白两个问题:回车与换行的区别printf的缓冲区问题可能你不明白为什么一个小小的进度条关这俩兄弟什么事,但请耐心往下看!回车与换行在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的东西,每秒钟可以打10个字符。但是它有一原创 2016-12-31 21:28:48 · 1145 阅读 · 0 评论 -
【Linux】Linux指令学习之find
find指令是我们在使用Linux系统时比较常用并且十分重要的一条指令。它的指令格式如下: find pathname [-options] [...] *** pathname:你要查找的目录[- options]:查找方式[…]:查找方式对应的查找条件***:搭配使用的指令options 查找方式(查找方式有很多,下面只剖析了几种常用的)-name 按照文件名进行查找 eg:原创 2016-12-30 20:18:19 · 1204 阅读 · 0 评论 -
Linux环境变量及其设置
简介环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。分类根据环境变量的生命周期我们可以将其分为永久性变量和临时性变量,根据用户等级的不同又可以将原创 2016-12-22 17:33:20 · 35757 阅读 · 4 评论 -
Linux文件的三个时间参数atime,mtime,ctime;
在windows系统下查看过文件属性的朋友可能都知道,每个文件都有三个时间参数,分别为:创建时间、修改时间、访问时间。如图:同样的,Linux文件系统下对应每个文件也有三个时间参数,但与windows下略有不同,三个时间分别为:Access(atime):访问时间,指文件最后一次被访问的时间;Modify(mtime):修改时间,指文件内容最后一次被修改的时间。这里的文件内容指文件内的数据;C原创 2016-12-29 21:54:21 · 5878 阅读 · 3 评论