
linux
swjtufq
这个作者很懒,什么都没留下…
展开
-
Linux 进程间通信之pipe和FIFO
在上一篇文章中我们说了,每个进程有自己的虚拟内存,互不想通,那如果想完成进程间通信,就需要借助一些机制,在Linux中不管是什么方式的进程间通信,最终操作的都是内存,今天就总结下Linux进程间通信的pipe和FIFO方式,pipe是无名管道,只能是父子进程或兄弟进程可以通信,FIFO是有名管道,没有了pipe的限制,可以在不同进程间通信,两者的区别就在于此,基本原理差不多,如下图: 1 pipe原创 2016-11-28 15:30:40 · 727 阅读 · 0 评论 -
Linux启动管理
一 系统运行级别 如果想查看运行级别,用runlevel init 运行级别 就可以改变系统运行级别系统默认级别,也就是开机进入哪个级别,在/etc/inittab中 二 启动过程 首先是BIOS加载MBR,MBR里有个扇区,里面有启动引导程序,如果是单系统,直接加载内核,如果是多系统,调用其他分区的启动引导程序,然后加载内核,内核解压并自检,这个时候需要加载驱动,但是由于还没有加载原创 2016-11-21 13:43:56 · 276 阅读 · 0 评论 -
Linux日志管理
一 日志服务简介 在linux系统中,日志服务是由rsyslogd服务提供的,我们先来查看这个日志服务是否启动和自启动 我们可以看到这个服务是默认开机自启动的 下面我们来看下常见的日志文件的作用 除了系统默认日志外,采用RPM包方式安装的系统服务也会默认把日志记录在/var/log/目录中,(源码包安装的服务日志在源码包指定的目录中),不过这些日志不是由rsyslogd服务来记录和管理的原创 2016-11-21 09:59:28 · 345 阅读 · 0 评论 -
Linux Socket编程
前面我们总结了Linux网络编程基础,今天会用到大部分前一篇所讲的内容,我们知道Socket是可以利用TCP或者UDP协议进行通信的,下面来分别看下两个流程图: 1 基于TCP协议的流程图: 2 基于UDP协议的流程图: 下面我就用例子来分别演练 在进行演练之前,我们先把一些需要用到的结构体或者变量列出来:struct sockaddr_un { sa_family_t sun_famil原创 2016-12-02 18:02:06 · 495 阅读 · 0 评论 -
Linux系统管理
一 进程管理 进程是一个正在执行的程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占有一定的内存 查看系统中的所有进程 ps aux 查看系统中的所有进程,使用BSD操作系统格式 ps -le 查看系统中的所有进程,使用Linux标准命令格式USER:该进程是由哪个用户产生的 PID:进程的ID号 %CPU:该进程占有CPU资源的百分比,占用越高,该进程越耗费资源原创 2016-11-19 11:13:09 · 396 阅读 · 0 评论 -
Linux 网络编程基础
大家在面试的时候,经常会被问到TCP,UDP的一些东西,我们平时在工作中,直接用封装好的网络请求,很少关注这些,今天我就来总结下这些基本的知识,在早期的时候有一个OSI网络模型 其实后来的各种协议,并没有完全使用这七层结构,比如我们熟知的TCP/IP,是四层网络模型 我们常用的网络传输Socket,就是应用了这些协议进行通信,这个我们后面说。 TCP UDP属于传输层,他们的区别如下:原创 2016-12-01 16:08:06 · 401 阅读 · 0 评论 -
Linux Shell编程-条件判断
1 按照文件类型进行判断 -b 文件:判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) -c 文件:判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真) -d 文件:判断该文件是否存在,并且是否为目录文件(是目录文件为真) -e 文件:判断该文件是否为真(存在为真) -f 文件:判断该文件是否存在,并且是否为普通文件(是普通文件为真) -L 文件:判断该文件是否存原创 2016-11-15 14:48:57 · 363 阅读 · 0 评论 -
Linux服务管理
一 服务的分类与简介 1 服务的分类 Linux服务包含RPM包默认的安装服务和源码包安装的服务,RPM包默认安装的服务又分为独立的服务和基于xinetd服务,独立的服务相当于直接在内存中,只要用到这个服务,就会有响应,基于xinetd的服务不在内存中,需要xinetd去调起相应的服务,但是xinetd服务是独立的服务2 启动与自启动 服务启动:就是在当前系统中让服务运行,并提供服务 服原创 2016-11-18 10:15:20 · 347 阅读 · 0 评论 -
Linux Shell编程-字符截取和处理命令
一 cut命令 cut 选项 文件名 -f 列号,列号 :提取第几列,多个列用,分隔 -d 分隔符:按照指定分隔符分隔列比如有一个文件student.txt 注意,每个列直接用的TAB键 cut -f 2,3 student.txt 截取第2列和第3列cut -d “:”-f 1,3 /etc/passwd cut命令的局限 如果想以” “空格来分割,截图第3列,是截原创 2016-11-14 15:31:45 · 881 阅读 · 0 评论 -
Linux备份与恢复
一 备份概述 1 Linux系统需要备份的数据 安装服务的数据 2 备份策略 完全备份:把所有需要备份的数据全部备份,这样比较慢,恢复起来也比较慢 增量备份: 就是每天只备份新增的部分,这样备份最快,缺点是恢复的时候比较麻烦,需要一步一步往回恢复 差异备份 这种效率介于上面两者之间二 dump和restore命令 1 dump命令 dump 选项 备份之后的文件名原创 2016-11-21 14:31:41 · 298 阅读 · 0 评论 -
Linux gdb调试
今天来分享下gdb的简单调试,我这里写了个例子 三个.c文件 func1.c func2.c main.c 首先生成可调试的执行文件 gcc -g func1.c func2.c main.c -o main 然后gdb main,进入调试模式 list列出源代码,可以用开头字母l,按回车往下翻 break 行号可以打断点 可用开头字母b 行号 break 函数名也可以打断原创 2016-11-22 14:31:22 · 382 阅读 · 0 评论 -
Linux http网络协议
N年前,去一家比较大型的公司面试,被面试官问到http返回的状态行里的数字404是什么意思,500是什么意思,403是什么意思,503是什么意思,我当时只知道200是正常返回,一时被问懵了。。。还有一次面试,被问到http头信息里都包含哪些东西,我当时就在想,丫的平时直接调用接口,用http请求,然后返回数据不就行了,问的这些又用不上,有什么意义,现在回想起来,可能是面试官想考察下是否真的理解了ht原创 2016-12-05 15:31:26 · 559 阅读 · 0 评论 -
Linux 进程管理
在开始今天的分享以前,我想先说点什么,如果是一直在看我博客的朋友应该会发现,我在刚开始写博客的时候,分享了一些android上层的东西,也是因为我做了很多年的android上层,对它比较熟悉,所以写的内容也比较(自认为全面或深度还可以),但是我长期规划的目标是往底层走,所以我最近一段时间开始分享Linux的一些文章,前期是Linux基本操作,然后是Linux应用开发,最后我还打算研究Linux底层内原创 2016-11-28 11:42:20 · 447 阅读 · 0 评论 -
Linux chmod opendir readdir closedir
我们在用shell敲命令的时候有一个chmod,大家都很熟悉了,其实chmod还是一个函数,我们可以在程序中给文件权限: 我们先创建一个hello文件,看一下权限 然后看代码 执行,再看hello的权限 下面我们来看下opendir,readdir closediropendir 函数原型 DIR* opendir (const char * path ); (获取path子目录下的原创 2016-11-26 11:04:35 · 380 阅读 · 0 评论 -
Linux fcntl函数 建议锁 强制锁
在多个进程访问同一个文件的时候,我们肯定不希望在一个进程写入或修改文件时,另外一个进程也可以修改文件内容,这样就乱了,Linux在底层通过加锁的方式来避免这种文件,我们可以通过fcntl函数来给文件上锁,锁又分为建议锁和强制锁,建议锁,顾名思义,相对温柔一些,在对文件进行锁操作时,会检测是否已经有锁存在,并且尊重已有的锁,但是另外的进程还可以修改文件。在一般的情况下,内核和系统都不使用建议锁。强制性原创 2016-11-26 10:33:12 · 1850 阅读 · 0 评论 -
Linux 文件系统调用函数open close read write lseek perror
Linux系统中操作文件有两种方式,一种是标准C的文件执行函数,一般以f开头,fopen,fread,fwrite等等,这种操作执行是带缓存的,一般系统会对它进行优化,另外一种是系统调用,open, close, read, write, lseek,也就是我们今天要分享的,这种不带缓存,直接读和写都是真实的数据,一般在驱动中需要用到这种方式,今天先来分享系统调用的几个函数,明天再分享标准C的文件操原创 2016-11-24 11:07:52 · 2416 阅读 · 0 评论 -
Linux 标准IO操作函数fopen fclose fread fwrite fgetc fputc fgets fputs
昨天我分享了Linux文件系统调用的一些函数,是不带缓存的,一般是底层调用,今天来分享下上层的标准IO操作函数,也就是跨平台的,一般以f开头 1 fopen 函数原型 FILE * fopen(const char *path,cost char *mode)作用:打开一个文件,返回指向该文件的指针参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式注:mod原创 2016-11-25 14:35:04 · 1056 阅读 · 0 评论 -
Linux eclipse安装及使用
我们在搞上层开发的时候,都是在windows下使用eclipse,那么如果是Linux应用开发,就必须要在Linux中安装eclipse,用于C/C++开发,当前是要在Linux带界面的系统中运行了,我这里就重新安装了一个带界面的CentOS6.3 首先打开浏览器,找到jdk的官网,下载Linux下的jdk8的gz包 这个下载过程我就不演示了,然后打开eclipse的官网,下载eclipse C原创 2016-11-23 19:58:10 · 1181 阅读 · 0 评论 -
Linux AutoTools工具
我们前面分析了Makefile的编写,其实一个大的项目,如果手工去写Makefile的话会比较累,那么我们可以用AutoTools的一系列工具来生成Makefile 大家在Linux中下载的任何源码包都需要先执行configure的配置文件,这个就是用来生成Makefile的 AutoTools其实是一系列工具,包含aclocal、autoscan、autoconf、autoheader、和au原创 2016-11-23 17:31:05 · 713 阅读 · 0 评论 -
Linux Makefile编写
我之前总结了gcc的用法,那么在实际工作中,每次用gcc会很麻烦,尤其是一些大型项目,有很多的目录结构,这个时候我们就需要编写Makefile文件,然后在实际工作中,用make来编译大型的项目,相信搞过android开发的一定对make,make install,make clean不陌生,分别是编译,安装和清理,下面我就用一个例子来说明Makefile怎么编写,还是上一讲的三个文件 func1.原创 2016-11-23 16:59:18 · 511 阅读 · 0 评论 -
Linux 线程管理
相信大家用java语言写线程已经很熟悉了,今天我们就来看下,在Linux下开发的时候怎么进行线程的管理 1 pthread_create函数 创建一个线程 函数原型:int pthread_create((pthread_t thread, pthread_attr_t *attr, void (start_routine)(void ), void *arg) 第一个参数原创 2016-11-30 16:11:34 · 1468 阅读 · 0 评论 -
Linux 进程间通信之信号量
信号量是解决因多个程序同时访问一个共享资源而引发的一系列问题的,信号量是0代表其他程序要暂时挂起,不能访问信号量控制的代码区,信号量为1,代表其他程序可以访问信号量控制的代码区,这个信号量也是在内核区的共享内存存放的,我们来看几个关键函数: 1 semget函数 它的作用是创建一个新信号量或取得一个已有信号量,原型为: int semget(key_t key, int num_sems, i原创 2016-11-30 14:52:16 · 302 阅读 · 0 评论 -
Linux下gcc编译过程,静态链接库和动态链接库
一 gcc编译过程 我们知道gcc是一个强大的编译器,很多Linux下的GNU工具都是用C语言写的,并且用gcc编译的,那么gcc的编译过程是怎样的呢,先来看一个总的流程图,我自己简单画的,凑合着看 1首先是源文件经过预加载变成了.i结尾的文件,可以通过-E这个参数来生成这个中间文件,这里主要是把一些include的头文件和一些宏定义,放到源文件中。 2从预加载的文件经过编译就会变成汇编语原创 2016-11-08 17:39:04 · 1294 阅读 · 0 评论 -
Linux压缩和解压缩命令
刚看了下之前总结的,已经总结了36个命令了,现在继续,来看下Linux下压缩和解压缩的命令 一 gzip:压缩文件,压缩后的文件是.gz格式的文件 我先创建一个boduo的文件,然后对boduo文件进行压缩 我们发现生成了一个boduo.gz,原来的boduo文件没了二 gunzip:解压文件,跟gzip对应的 我们对刚刚的boduo.gz文件进行解压缩 或者用gzip -d命令,原创 2016-10-27 16:17:18 · 1410 阅读 · 0 评论 -
Linux帮助命令和用户管理命令
最近是彻底迷上兄弟连linux了,我觉得沈超老师和李明老师很像足球界的董路和李欣,让我在学习的过程中不会感觉枯燥,好了,今天总结下Linux帮助命令和常用的用户管理命令 一 man:英文名manual,获取帮助信息,配置文件信息 我们知道linux命令非常多,我们不可能全部牢记,所以有些命令在用的时候查一下帮助手册即可 先看一下man ls 这很类似我们用more或less命令来查看一个原创 2016-10-27 11:00:29 · 497 阅读 · 0 评论 -
Linux文件系统管理
一 分区 1 分区类型 主分区:总共最多只能分4个 扩展分区:只能有1个,也算主分区的一种,也就是说主分区+扩展分区最多只能有4个,但是扩展分区不能存储数据和格式化,必须再划分为逻辑分区才可用 逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘,Linux最多支持11个逻辑分区2 分区表示方法 也就是说逻辑分区只能原创 2016-11-07 17:28:13 · 986 阅读 · 0 评论 -
Linux权限管理ACL权限,文件特殊权限,chattr权限,sudo权限
一 ACL权限 ,我们来假设这么一种场景,在真实项目中有一个目录project,它的所属主的权限是rwx,它的所属组的权限也是rwx,其他人没有任何权限,我们的员工一般都会划分到所属组里,来完成日常工作,但是这个时候来了一个新员工,这个员工对linux操作不太熟悉,管理员只想给它分配读和执行的权限,不想给它写的权限,防止他误删文件或是其他,我们该怎么办呢,新建一个组?文件夹只能有一个所属组,把其他原创 2016-11-07 11:42:33 · 498 阅读 · 0 评论 -
Linux文件搜索命令
今天继续分享linux常用命令,搜索相关命令,首先来看第一个命令 一 find :搜索文件或目录 语法: find [搜索范围] [匹配条件] 1 find /etc -name init 在etc目录下搜索名字为init的文件或目录,如下: 我们看到了相应的搜索结果,但是这只是搜索确定名字的文件或目录,如果我想搜索文件名中包含init的怎么办呢,很简单,用*号即可 *号代表任意字原创 2016-10-26 15:07:45 · 420 阅读 · 0 评论 -
Linux权限管理命令
在说权限管理命令前,我无意中发现了一个命令 ll,验证了一下,发现跟ls -al效果是一样的,这个确实方便些,好了,接下来看下几个权限管理的命令: 一 chmod:改变文件或目录的权限 第一种用法chmod [{ugoa} {+-=} {rwx}] [文件或目录] u代表user g代表group o代表other a代表all +代表增加权限 -代表减少权限 =代表赋予权限 下面看个例子原创 2016-10-25 15:14:55 · 249 阅读 · 0 评论 -
Linux用户和用户组管理
一 用户配置文件 1 用户信息文件 /etc/passwd 我们先打开这个文件看一下 这里涉及到一些格式,我们还记得用man可以查看配置信息的帮助 man 5 passwd 这里看到:分割的每一项都有做详细说明,我们来总结下这里 第1个字段:用户名称第2个字段:密码标志,我们可以看到都是x,那么真实的密码在哪里呢,我们来看/etc/shadow文件 这里我们看到root对应原创 2016-11-02 15:59:06 · 799 阅读 · 0 评论 -
Linux常用网络命令和关机重启命令
今天这篇文章有点特殊,为什么特殊呢,因为今天学到的一些网络命令在我这个Linux环境可能无法实践,有些人可能会说,环境有问题就去改啊,我不是不愿意去改,只是希望跟着兄弟连的步伐循序渐进,所以我今天只能大概总结出来,无法像之前文章那样,给出实践的截图,而只是简要说明,好,下面看第一个命令 一 write:给用户发信息 比如我想给fuqiang用户发信息write fuqiang,回车,然后就可以输原创 2016-10-27 20:38:58 · 781 阅读 · 0 评论 -
Linux文本编辑器vim的一般用法
vim的前身是vi,vim是vi的加强版,现在基本都用vim了,它的作用的建立,编辑,显示文本文件,vim没有菜单,只有命令,vim的用法还是非常多的,今天我只分享vim的常用用法,以满足日常工作需求为主。 先来看一张vim的使用图,借用兄弟连课件里的图: 还是很清晰的,分为命令模式,插入模式和编辑模式,在命令模式可以按i,a或者o键进入插入模式,在插入模式按ESC键返回命令模式,在命令模式原创 2016-10-29 11:10:13 · 523 阅读 · 0 评论 -
Linux Shell基础-脚本执行方式和Bash基本功能
一 概述 1 Shell是一个命令行解释器,它为用户提供了一个向内核发送请求以便运行程序的界面系统级程序 Shell还是一个功能强大的编程语言,易编写,易调试,灵活性较强,Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令2 Shell的分类 Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为s原创 2016-11-10 10:39:49 · 995 阅读 · 0 评论 -
Linux Shell编程-正则表达式
一 正则表达式与通配符 1 正则表达式是用在文件中匹配符合条件的字符串,正则是包含匹配,grep,awk,sed等命令可以支持正则表达式 2 通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls,find,cp这些命令不支持正则表达式,所以只能用Shell自己的通配符来进行匹配了。 二 基础正则表达式 这里引用兄弟连的测试文本 1 * 前一个字符匹配0次或任意多次 grep “a原创 2016-11-14 14:52:32 · 1126 阅读 · 0 评论 -
Linux Shell基础-环境变量配置文件
一 简介 环境变量配置文件中,主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量 主要是下面这个5种 我们之前设置的一些变量,都是临时生效,如果想要让变量重启后还生效,就需要写入这些配置文件中,写完之后,如果不想重启,立即生效用source 配置文件或者. 配置文件,说到这里,让我想起了编译android系统时的一个配置原创 2016-11-14 10:40:14 · 1140 阅读 · 1 评论 -
Linux Shell基础-Bash变量
一 用户自定义变量 1 变量定义 name=”shen chao” 注意 变量名不能以数字开头,可以不加双引号,但如果有空格,就必须加双引号或单引号 2变量叠加 如果需要增加变量的值,那么可以进行变量值的叠加,形式可以是 3 查看变量set 4 删除变量unset 变量名 比如unset aa二 环境变量 1 环境变量是什么 用户自定义变量只能在当前Shell中生原创 2016-11-11 14:17:29 · 554 阅读 · 0 评论 -
Linux Shell编程-流程控制
一 if语句 1 单分支if语句 if [ 条件判断式 ];then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 注意点: if语句使用fi结尾,跟一般语言使用大括号结尾不同 中括号和条件判断式直接必须有空格 then后面跟符合条件之后执行的程序,可以放在[]之后用;分隔,也可以换行写入,就不需要;了例子:判断分区使用率原创 2016-11-16 10:48:15 · 386 阅读 · 0 评论 -
Linux 进程间通信之消息队列
说到消息队列,大家一定能想到android中的消息队列,有一个Looper不断的去消息队列中取消息的模型,Linux进程间通信的消息队列是在内存中建立一个消息队列(其实是一个链表),两个进程就可以通过发消息和收消息达到通信的目的 我们可以通过ipcs -q来查看当前系统中的消息队列 我们发现目前还没有消息队列1 msgget函数 该函数用来创建和访问一个消息队列。它的原型为:int msgge原创 2016-11-29 15:28:01 · 375 阅读 · 0 评论 -
Linux 进程间通信之共享内存
我们在前面的进程管理文章中描述过进程的虚拟内存模型 那么我们在共享内存的时候其实是两个步骤,首先需要在内存中开辟一段空间作为共享内存,然后需要把内存中的共享内存映射到每个进程的虚拟内存中,完成通信 首先可以通过ipcs -m来查看当前系统中有没有共享内存 我们发现,目前还没有1 shmget函数 该函数用来创建共享内存,它的原型为:int shmget(key_t key, size原创 2016-11-29 14:44:46 · 320 阅读 · 0 评论 -
Linux 进程间通信之信号
一 信号(signal) 在说信号之前,先来谈谈硬中断和软中断,硬中断就是我们的硬件模拟的中断,比如我们敲击键盘,Linux本来在运行或者休眠,这个时候发出一个中断,来响应我们的事件,软中断就是从程序上模拟的中断,我们可与在程序中给系统发送一个信号,来响应中断,可以用kill -l来查看系统支持哪些中断 我们只查几个看看什么意思 SIGINT 程序终止(interrupt)信号, 在用户原创 2016-11-29 11:14:04 · 333 阅读 · 0 评论