Linux
Steve_Abelieve
致虚极,守静笃。
展开
-
Linux命令复习
如何30分钟熟悉常用命令以及概念:判断常用文件是否存在:#shell判断文件夹是否存在#如果文件夹不存在,创建文件夹if [ ! -d "/myfolder" ]; then mkdir /myfolderfi#shell判断文件,目录是否存在或者具有权限folder="/var/www/"file="/var/www/log"# -x 参数判断 $folder 是...原创 2019-11-15 11:51:49 · 133 阅读 · 0 评论 -
网路端口号的分类
1.什么是端口号?根据ip地址我们可以确定一台主机的位置,但一台主机上运行了多个服务,主机为了区分这些服务,所以给每台主机都分配一个端口号, 端口号唯一的标示这台主机的某个服务,所以IP地址——端口号就表示网络中唯一标识的一个服务。客户端通常对他所使用的端口号并不关心,只要保证该端口号在本主机中上是一致的就可以了,所以客户端口号又叫临时端口号,这是因为他们通常只是在用户运行该客户程序是临时分配的。原创 2017-07-17 21:32:05 · 600 阅读 · 0 评论 -
arp协议以及脚本编写
前言:若两个计算机都在同一个局网内,发送方还需要知道接收方的MAC地址(硬件地址)。如果发送方不知道接收方的MAC地址, 就无法发送信息,得问ARP 。ARP会在局网里向所有的计算机广播:你的地址是这个接收方的地址吗?如果是,请告诉我你的MAC地址。但ARP只适用于局网,如果目的计算机位于另一个局网,两者得用路由器相连,而路由器的一个重要作用是把洪泛局限在一个局网之内,防止洪泛蔓延到其他局网。所以A原创 2017-07-17 20:38:30 · 995 阅读 · 0 评论 -
小结守护进程
1.守护进程守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独⽴立于控制终端并 且周期性地执⾏行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。2.为什么一般进程受登录。注销影响,而守护进程却不受影响呢?登录时,会创建会话,注销时,摧毁会话。而守护进程是一个独立的会话,父进程是1.3.查看系统下的守护进程我们⽤用ps axj命令查看系统中的进程。参数a表⽰示不仅列当原创 2017-07-17 18:14:12 · 328 阅读 · 0 评论 -
子进程的异步等待方式
子进程的异步等待方式我们之前用wait和waitpid函数清理僵⼫进程,父进程可以阻塞等待子进程结束,也可 以⾮非阻 塞地查询是否有⼦子进程结束等待清理(也就是轮询的⽅方式)。采⽤用第⼀种方式,父进程 阻塞了就不 能处理⾃己的工作了;采用第二种方式,⽗进程在处理⾃己的工作的同时还要记得 时不时地轮询⼀ 下,程序实现复杂。其实,子进程在终⽌止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略原创 2017-06-26 09:06:04 · 414 阅读 · 0 评论 -
线程安全与可重入函数
1.线程安全线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据【概述】如果代码所在的进程中右多个进程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而原创 2017-06-25 22:27:34 · 532 阅读 · 0 评论 -
编写规避竞态条件的mysleep
1. 编写普通版本mysleep【基本操作函数】#include <signal.h>int sigaction(int signo, const struct sigaction *act, structsigaction *oact);//信号处理函数,作用与signal类似struct sigaction { void (*sa_handler)(in原创 2017-06-25 17:35:54 · 310 阅读 · 0 评论 -
读者写者模型
一、问题描述有一个多个进程共享的数据区,这个区域可以是一个文件或者一块内存空间,甚至可以是一组寄存器。有一些进程(reader)只读取这个数据去的数据,一些进程(writer)只往数据区写数据;除外还必须满足以下条件:1) 任意多个进程可以同时读这个文件(共享关系) 2)一次只有一个写进程可以写文件(互斥关系) 3)如果一个进程正在写文件,禁止任何读进程读文件(互斥关系)也就是说,读进程是不需要原创 2017-06-24 21:24:00 · 359 阅读 · 0 评论 -
Linux 系统定时任务
系统定时任务 目的: 让我们的计算机在指定的时间完成指定的任务,可以是系统的一个命令,也可以是我们之前写好的一个脚本。比如说,我们的服务器晚上的时候(压力比较小),定时拷贝数据库,日志。可以让我们可以从重复劳动中解脱。windows当中也有这样的功能:在附件中的 任务计划程序at 一次性定时任务 crontab循环定时任务(可以每天每周每月执行)系统的crontab设置 an原创 2017-07-02 22:18:28 · 320 阅读 · 0 评论 -
gdb下的多进程多线程的调试
多进程调试命令:1、默认设置下,在调试多进程程序时GDB只会调试主进c程(prarent)。但是设置follow-fork-mode的话,就可调试多个进程。 set follow-fork-mode parent|child:进入gdb后默认调试的是parent,要想调试child的话,需要设置set follow-fork-mode child,然后进入调试。当然这种方式只能同时调试一个进原创 2017-07-02 20:03:08 · 788 阅读 · 0 评论 -
三种I/O复用的比较
相同点:1.select、poll、epoll这三组I/O复用系统调用都能同时监听多个文件描述符, 2。他们都通过timeout参数指定要等待的时间。直到事件就绪时返回 3.返回值就是就绪的文件描述符的数量。不同点:epoll高效的原因:1>、底层采用回调机制激活某个节点,将已经就绪的文件描述符添加到就绪队列中去;2>、当有新的事件发生的时候,该结点会被插入到epoll模型中的红黑树中去,红黑树转载 2017-08-04 21:08:15 · 385 阅读 · 0 评论 -
Shell实现斐波那契数列、希尔排序
1.shell实现斐波那契数列##实现一arr[0]=1arr[1]=1i=0read maxwhile [ $i -le $max ]do let arr[$i+2]=arr[$i+1]+arr[$i] let i++doneecho ${arr[$max]}#实现二function fib(){ temp=$1 if [ $temp -lt 2原创 2017-08-07 20:25:31 · 1989 阅读 · 0 评论 -
select服务器编写
select与多进程/多线程服务器进行对比 优点1)不需要建立多个线程、进程就可以实现一对多的通信。 2)可以同时等待多个文件描述符,效率比起多进程多线程来说要高很多。 3)select()的可移植性更好,在某些Unix系统上不支持poll() 4)select() 对于超时值提供了更好的精度:微秒,而poll是毫秒缺点1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在原创 2017-08-04 21:36:56 · 341 阅读 · 0 评论 -
Shell语法训练
1. 计算出1+2+3+..+100的结果。可以使⽤用多种⽅方法解答。str=""sum=0for i in {1..100}do if [ "X$str" = "X" ]; then str=$i else str=$str"+"$i fi#let sum+=$i((sum+=i))donestr=$str"="${sum}ec原创 2017-08-07 00:15:39 · 461 阅读 · 0 评论 -
TCP的粘包问题
本文转载自:http://www.cnblogs.com/qiaoconglovelife/p/5733247.html1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。2 为什么出现粘包现象 (1)发送方原因 我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才转载 2017-08-06 12:52:54 · 317 阅读 · 0 评论 -
Shell中字符串的切割、拼接、比较、替换
【截取】一、Linux shell 截取字符变量的前8位,有方法如下:1.expr substr “$a” 1 82.echo $a|awk ‘{print substr(,1,8)}’3.echo $a|cut -c1-84.echo $5.expr $a : ‘(.\).*’6.echo $a|dd bs=1 count=8 2>/dev/null 补充: expr(选项)(参数原创 2017-08-06 11:34:53 · 68481 阅读 · 3 评论 -
Shell的两种命令替换与eval 命令
转载自:http://blog.csdn.net/lf_2016/article/details/654474571.shell中有两种命令替换:他们之间的区别在于 在多层次的复合替换命令中,倒引号需要加”\”转义,$()则不需要。举例: 2.eval 命令1)用于重新运算求出参数的内容。 语法:eval cmdline功能:eval会对后面的cmdline扫描两遍,第一遍扫描之后如果cmdl转载 2017-08-06 09:57:41 · 1414 阅读 · 0 评论 -
线程池模拟实现
线程池的应用场景1)需要大量的线程来完成任务,且完成任务的时间比较短。 比如WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大。但对于长时间的任务,比如一个Telnet连接请求,线程池的优点就不明显了。因为Telnet会话时间比线程的创建时间大多了。2)对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。3)接受突发性的大量请求,但不至于使服务器因此产生原创 2017-08-06 08:09:47 · 538 阅读 · 0 评论 -
多进程多线程服务器编写
多线程int main(int argc,char* argv[]){ if(argc!=3) { printf("Usage:%s [service ip][service port]\n",argv[0]); return 1; } int sock=socket(AF_INET,SOCK_STREAM,0); //create原创 2017-08-04 22:20:07 · 334 阅读 · 0 评论 -
套接字编程
UDP 编写server.c#include<stdio.h>#include<string.h>#include<sys/socket.h>#include<sys/types.h>#include<arpa/inet.h>#include<netinet/in.h>void Usage(char* prc){ printf("Usage: %s [local ip][loc原创 2017-08-04 22:07:50 · 287 阅读 · 0 评论 -
内存池、线程池、进程池
池的概念由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。很显然,直接从池中取得所需资源比动态分配资源的速度要转载 2017-08-04 18:37:54 · 260 阅读 · 0 评论 -
浅谈死锁
【基本概念】死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永在互相等待的进远程称为死锁进程。【产生的条件】产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不原创 2017-06-11 10:22:36 · 328 阅读 · 0 评论 -
线程的控制
【前言】 我们知道,进程在各⾃自独⽴立的地址空间中运⾏行,进程之间共享数据需要⽤map或者进程间通 信机制,接下来我们学习如何在⼀一个进程的地址空间中执⾏行多个线程。(多个线程共享一个进程内存空间,通过页表映射,可以看到一块物理内存,那这有会引入什么问题呢?临界资源的保护,同步、互斥机制)有些情况需要在⼀一个进 程中同时执 ⾏多个控制流程,这时候线程就派上了⽤用场。一、什么是线程?线程就原创 2017-06-10 22:13:12 · 322 阅读 · 0 评论 -
chattr与lsattr指令
资料来源于:http://www.ha97.com/5172.html 有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。 通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保转载 2017-07-01 17:50:26 · 248 阅读 · 0 评论 -
僵尸进程
僵尸进程 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init(id号为1) 来接管他,成为他的父进程1.解释原创 2017-05-02 14:38:47 · 358 阅读 · 0 评论 -
进程环境
1.main函数当内核使⽤用⼀一个exec函数执⾏行C程序时,在调⽤用main函数之前先调⽤用⼀一个特殊的启动例程, 可执⾏行程序将此例程指定为程序的起始地址。启动例程从内核获取命令⾏行参数和环境变量, 然后为调⽤用main函数做好准备。2.进程终⽌进程终⽌止的⽅方式有8种,前5种为正常终⽌止,后三种为异常终⽌止: 1 从main函数返回; 2 调⽤用exit函数; 3 调⽤用_exit或原创 2017-05-01 21:51:32 · 364 阅读 · 0 评论 -
如何使用Xshell
入门及安装使用教程 这里不再赘述,下面介绍几种常见的获取ip的方式: 方式一:/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"or/sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\原创 2017-05-01 20:51:47 · 370 阅读 · 0 评论 -
进程与进程描述符(task_struct)
一、 进程进程(Process) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。————————————————————————————————————————————————原创 2017-04-18 18:33:21 · 9682 阅读 · 8 评论 -
vim 的基本配置
首先发张效果图诱惑一下, 配置vim其实就是改写根目录下的.vimrc文件 我们往其中加一下指令,就可以完成一些基本的配置: 接下来跟着指令一步一步也可以达到同样的效果: 提纲: 1.下载并安装Taglist插件 2.下载安装浏览器和窗口管理器–插件:WinManager 3.建立源码索引 –插件 : Ctags1.进入浏览器下载插件:http://www.vim.org/script原创 2017-04-04 02:39:39 · 626 阅读 · 0 评论 -
linux下编写的一个最简单的Makefile文件
Makefile核心要点: 1.会不会写makefile从侧面说明了一个人是否具备完成大型项目开发大型工程的能力 2.makefile是用来编译链接文件的,实现了自动化编译 3.与make指令搭配,一条make指令就完成了整个工程完全自动编译,极大的提高了软件开发的效率。编法: 两点: 1.建立依赖关系 2.编写依赖方法接下来,我们来自动化编译一个源文件,我们要实现一个进度条 1.源文原创 2017-04-03 15:09:41 · 17664 阅读 · 3 评论 -
linux粘滞位
权限粘滞位 通常情况下⽤用户只要对某个⽬目录具备w写⼊入权限,便可以删除该⽬目录中的任何⽂文件,⽽而不论这个⽂文件的权限是什么。看现象,我们在超级用户下,创建一个目录,在该目录下创建一个文件test.c,默认文件权限是644[root@bogon 3_29]# mkdir temp[root@bogon 3_29]# lltotal 4drwxr-xr-x. 2 root root 4096原创 2017-03-29 02:25:14 · 337 阅读 · 0 评论 -
Linux下的find命令详解
**在搜索命令中有 1.文件搜索命令locate 2.命令搜索命令whereis与which 3.文件搜索命令find 4.字符串搜索命令grep**** 几种命令,其中find命令最为强大,我们重点学习一下。 我们对于find命令进行分类总结一下: 1.按文件名 我们看一下实际工作环境中是怎样的呢?1.1精确查找[admin@bogon steve]$ ls3_20 3_2原创 2017-03-29 00:47:00 · 603 阅读 · 0 评论 -
Linux下创建、进入、查看至少需要什么权限
首先,看一下进入一个文件至少要什么权限: 通过 chmod u-[r/w/x]指令时,我们发现对于普通用户,至少要有执行权限时,才可以进入。 而对于超级用户则没有任何限制。【创建】 :在超级用户下,不管目录对拥有者是否开放权限,都可以在目录下创建文件 在普通用户下,要在目录下创建文件,需要目录对拥有者开放写权限和可执行权限,若要读取目录下的文件列表,则要对拥有者开放读翻译 2017-03-22 00:20:34 · 343 阅读 · 0 评论 -
孤儿进程以及孤儿进程组
孤儿进程 正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。解释: 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被in原创 2017-05-02 15:27:44 · 817 阅读 · 0 评论 -
进程间通信-匿名管道
匿名管道一、特点1.只适合单向通信。(如果需要双向通信,则需要两个匿名管道来进行完成)2.只适合具有血缘关系的进程进行通信3.管道是文件,生命周期随进程,进程结束后,文件就不在了4.管道是基于字节流方式来进行通信的5.父进程和子进程访问的公共资源叫做临界资源,所有临界资源都是需要被保护起来的,多个进程进行访问时必须要保证原子性。(任一时刻保证只有一个人访问)6.管道内部自己已经实现同步性,能保证数据原创 2017-05-12 13:26:20 · 465 阅读 · 0 评论 -
Linux下的查找命令
which指令:(重要)我们经常在linux要查找某个⽂文件,但不知道放在哪⾥里了,可以 使⽤用下⾯面的⼀一些命令来搜索: Which 查看可执⾏行⽂文件的位置。 whereis 查看⽂文件的位置。 locate 配合数据库查看⽂文件位置。 Find 实际搜寻硬盘查询⽂文件名称。which命令的作⽤用是,在PATH变量指定的路径中,搜索某原创 2017-07-01 17:37:59 · 559 阅读 · 0 评论 -
什么是Bash、什么是shell?
什么是Shell? shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities原创 2017-07-01 15:53:59 · 43191 阅读 · 1 评论 -
进程间通信-共享内存
前言共享内存允许两个进程或多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,这是最快的一种IPC。使用共享存储要掌握的唯一窍门是,在多个进程之间同步访问一个给定的存储区。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应当去取这些数据通常,信号量用于同步共享存储访问。(也可以用记录锁或者互斥量), 也就是说,我们需要确保一个进程在写的时候,另外一个原创 2017-06-03 14:33:26 · 341 阅读 · 0 评论 -
进程间通信-信号量
前言 信号量的本质是⼀一种数据操作锁,它本⾝身不具有数据交换的功能,⽽而是通过控制其他的通信资源(⽂文件,外部设备)来实现进程间通信,它本⾝身只是一种外部资源的标识。信量在此过程中负责数据操作的互斥、同步等功能。当请求⼀一个使⽤信号量来表⽰示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,⽆无资源可用,进程会进⼊入睡眠状态直⾄至资源可⽤用。 当进程不再使原创 2017-06-03 10:27:08 · 494 阅读 · 0 评论 -
生产者消费者模型的实现
线程同步与互斥的几种实现方法: A:mutex(互斥量) B:. Condition Variable (条件变量) C:Semaphore(信号量) D: 读写锁 【实现一】:基于链表实现单线程生产者消费者模型/************************************************************************* >原创 2017-06-17 22:48:04 · 357 阅读 · 0 评论