Linux
文章平均质量分 81
清枫若待佳人醉
目前就职腾讯,从事推荐引擎相关工作,有感兴趣的可以互相讨论。
展开
-
Linux三个时间: Access,Modify,Change以及-r,-w,-x所对应的权限问题
三个时间的概念:文中图片所要展示的测验数据,全部用红框标出。首先说一下如何查看这三个时间,在Linux下使用stat + 文件名。 Access: 最后一次访问该文件的时间。 Modify:最后一次修改该文件内容的时间。 Change:最后一次改变该文件属性或状态的时间。 接下来说一下Modify和Change的区别。直接晒效果图: 可以发现,我先往file1文件里写入了Hello原创 2017-03-19 22:56:14 · 927 阅读 · 0 评论 -
NAT技术和代理服务器
NATNAT是地址转换协议,将内网地址转换为公网地址。 简单的说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。【优点】 1:节省合法的注册地址, 2:在地址重叠时提供解决方案, 3:提原创 2017-07-27 10:28:19 · 352 阅读 · 0 评论 -
linux下实现简单的进度条
缓冲区想要写一个实现进度条的代码,我们就得先明白缓冲机制。首先看下面这两段代码。#include<stdio.h>#include<unistd.h>int main(){ printf("Hello,World!\n"); sleep(3); return 0;}#include<stdio.h>#include<unistd.h>int main(){原创 2017-04-04 11:10:23 · 1335 阅读 · 2 评论 -
Linux下常用的find指令以及其他查找命令
首先顾名思义“find”就是查找的意思,那么接下来说一下find指令的重要性吧,因为在Linux操作系统”一切皆文件“的理念下,我们已经不是靠文件的后缀名来识别一个文件了。这时候你要想找到一个特定的文件就变得相对困难了,那么你有必要了解一个find这个强大的指令了。find命令的格式:find [指定的目录] [查找规则] [查找到后进行的操作] 1、根据文件名来查找 -name :区分大小原创 2017-04-02 16:45:41 · 1583 阅读 · 0 评论 -
linux下硬连接与软连接
linux下的文件管理是通过inode和block来保存的,一个文件内的实际内容是保存在block中的,而文件的属性,权限之类以及该文件的block都在在inode当中,一个文件会占用一个inode,而当一个文件过大时,它是会占用多个block的,而这些block都在inode当中记录着。有了上面这个认识之后,就具体来看看两种连接究竟是什么样子。硬连接(hard link)ln [-参数] 源文件原创 2017-08-23 23:07:10 · 415 阅读 · 0 评论 -
exit()函数
进程的终止方式: 有8种方式使进程终止,其中前5种为正常终止,它们是 1:从 main 返回 2:调用 exit 3:调用 _exit 或 _Exit 4:最后一个线程从其启动例程返回 5:最后一个线程调用pthread_exit 异常终止有3种,它们是 6:调用 abort 7:接到一个信号并终止 8:最后一个线程对取消请求做出响应exit()函数整个过程: 1、调用atex原创 2017-05-07 13:21:02 · 981 阅读 · 1 评论 -
进程的基本控制
前言:整个操作系统都在围绕进程这一概念具体展开,所以对于进程的控制就显得十分重要,这篇文章主要讲述以下几点:1. 进程创建 2. 进程退出 3. 进程等待 4. 进程程序替换进程创建在操作系统中,对于父子进程的概念非常重要,必要linux自带的bash,对于你在命令行输入的一些指令,它是不会自己去处理你这些请求的,而是通过创建子进程去处理,它只需要知道子进程返回的消息就好了。为什么要基于原创 2017-12-10 23:19:37 · 581 阅读 · 0 评论 -
基础I/O总结
引言对于文件I/O,即打开文件,读文件,写文件这个应该都不太陌生,这篇文章会首先回忆一下C语言中的一些基础I/O,进而引入到Linux下的文件I/O。C语言中的文件I/O打开文件#include<stdio.h>FILE *fopen(const char *path,const char *mode) 返回值:FILE* :文件指针参数:path:文件路径mode:打开方式这里的打开方式一原创 2017-12-21 14:45:26 · 264 阅读 · 0 评论 -
理解vfork函数
前言vfork这个函数,起初是在fork函数没有实现写实拷贝机制的时候出现的一个东西。然而现在的fork的函数早已经支持写实拷贝。 提到写实拷贝就多说几句,在操作系统中,创建一个子进程你就得给他分配进程所需的资源,如果每次创建子进程后都要拷贝父进程的资源有点太降低效率了。就是在这个环境下衍生出了vfork这个函数,父子进程同时使用同一份内存空间,虽然省去了重新开辟和拷贝的动作,但却非常危险。写实拷原创 2017-12-13 15:51:01 · 1099 阅读 · 0 评论 -
线程同步和线程死锁
线程同步前面刚介绍了有关线程的基本认识,那我们先来思考一个小问题,两个线程之间有没有可能同时对一个资源发起访问呢,答案是肯定,那么在某些情况下这样的同时访问会引发一系列冲突,先来看一个简单的例子。创建两个线程,各自将count增加2500次,然后输出最后的结果,如下:#include<stdio.h>#include<pthread.h>int count = 0;void *thread_co原创 2017-06-13 20:41:12 · 672 阅读 · 0 评论 -
僵尸进程详解
僵尸进程简介“僵尸”进程是什么?通常情况下,造成僵尸进程的成因是因为该进程本应该已经执行完毕,但是该进程的父进程却无法完整的将该进程结束掉,而造成该进程一直存在于内存中。那么如何查看一个进程是否为僵尸进程呢?ps:将某个时间点的进程运行状态选取下来ps aux //查看系统所有的进程数据-A:所有的进程均显示出来-a:不与terminal有关的所有进程-u:有效用户相关的进程-x:通常原创 2017-05-01 22:59:47 · 8092 阅读 · 1 评论 -
linux下的信号是怎么回事
信号的产生Linux下信号这个概念可以来说是非常重要的,先来说下如何产生信号,然后在逐一解释:键盘组合键硬件异常错误通过一些指令软件条件调用系统函数1、键盘组合键这个很好理解,下面以一个简单的实例来说明。#include<stdio.h>int main(){ printf("pid is: %d\n",getpid()); while(1); return 0原创 2017-07-02 22:21:45 · 367 阅读 · 0 评论 -
如何向面试官解释线程
你有几次面试的经历,你就被问到过几次关于线程问题,当然,前提你面的是技术岗。文章会大概说一下需要答的几个点,改怎么答,具体的每个点的详解,可以参考其他博文,只想记录一下相关的知识,加深印象。一、什么是线程,为什么要有线程?线程是操作系统能够进行调度的最小单位包含在进程内部,是进程的实际执行单位一个线程是进程单一顺序的控制流一个进程可以有多个线程,每个线程执行不同的任务为什么有?真正想问的是原创 2018-04-13 11:49:17 · 642 阅读 · 1 评论 -
39条常见的Linux系统简单面试题
本文系转载:原文链接:http://www.cnblogs.com/chengjian-physique/p/8313175.html1、如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?答:[root@centos6 ~ 10:55 #35]# cat /proc/cpuinfo|grep -c 'physical id'4[root@centos6 ~ 1...转载 2018-06-03 15:30:42 · 673 阅读 · 0 评论 -
URG-PSH
URG(紧急位): 急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。T C P的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的) PSH(急迫位): 在一个交互程序中,当客户发送一个命令给服务器时,它设置P U S H标志并停下来等待原创 2017-07-27 10:26:06 · 233 阅读 · 0 评论 -
TIME_WAIT机理
注:本文系转载,尊重原作者原文链接TIME_WAIT状态原理通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。 客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。 下图是以客户端主动关闭连接为例,说明这一过程的。TIME_WAIT状态存在的理由TCP/IP协议就是这样设计的,是转载 2017-07-22 16:29:38 · 397 阅读 · 0 评论 -
进程以及task_struct结构体
进程1、进程的概念首先在linux操作系统下,当你触发任何一个事件时,系统都将它定义为一个进程,并且给予这个进程一个ID,即PID。 那么如何产生一个进程呢?简单来说就是“执行一个程序或命令”。2、进程与程序的区别程序一般是以物理文件的形式储存在硬盘等存储媒介中。 进程可以看做在内存中正在运行的程序。3、子进程与父进程一个进程创建的另一个新进程称为子进程。相反地,创建子进程的进程称为父进程。原创 2017-04-15 17:04:21 · 2457 阅读 · 0 评论 -
孤儿进程
孤儿进程简介当一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。首先看下面一段代码:#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>int main(){ pid_t pid; pid = fork();//创建一个子进程 if (pid <原创 2017-05-03 16:38:04 · 428 阅读 · 0 评论 -
FILE结构体与fd文件标识符
FILE结构体我们通常对文件进行操作时,都会使用一些与文件相关的函数,比如:打开文件:FILE *fopen(const char *path,const char* mode)关闭文件:int fclose(FILEE *fp)读文件:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)写入文件:size_t fwrite原创 2017-05-13 20:23:36 · 4248 阅读 · 0 评论 -
Linux小技巧-配置vim编辑器
简介vim :首先vim很一款很强大的编辑器,它的功能肯定会超出你的想象。所以相对的,它需要你掌握的东西也很多很多,接下来我就介绍一些平日里常用的一些配置。 我所介绍的是没有使用插件的配置文件,只需将文件写入你的.vimrc中即可。 说到这里,就先来说一下vim的配置文件,当你的系统中安装了vim编辑器后,就会有一个默认的vimrc文件,它里面就是你vim默认的一些格式。如下图,vimrc在你原创 2017-04-03 12:52:54 · 774 阅读 · 0 评论 -
Linux进程间通信-消息队列
首先上篇文章我们说到了Linux下进行进程间通信的一种方法或机制匿名管道和命名管道,那么这里要说的是另外一种与之不同的通信方法,即消息队列,两者之间有相同也有不同的地方,具体的下面就一一介绍。一、什么是消息队列?首先它也是一种进行进程间通信的方式,通过一个进程向另外一个进程发送数据块的方式,每个数据块都被认为是有一个类型的,而接受者进程接收的数据块可以有不同的类型。二、消息队列结构体cat /usr原创 2017-06-06 19:58:58 · 325 阅读 · 0 评论 -
Linux进程间通信-匿名管道和与命名管道
管道命令(pipe)首先提到管道,大家都不会太陌生,生活中也处处可见管道,如自来水管道,天然气管道,无疑它们的作用就是作为两个事物的中间桥梁,起着导通的作用,那么在Linux中亦是如此。Linux命令行中,我们常使用“ | ”这个符号,因为管道的作用就是作为数据之间的导向,即大多数情况将一个进程的输出导向另外一个进程的输入。 如查看/etc下面的文件ls -al /etc但结果是/etc下的文件太原创 2017-06-03 22:01:59 · 466 阅读 · 0 评论 -
编写一个简单的shell
Shell实现代码#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<syslib.h>#include<stdlib.h>void myshell(){ while(1) { printf("[myshell@myhostname test]# "); fflus原创 2017-05-20 17:45:43 · 624 阅读 · 0 评论 -
Linux进程间通信-信号量
一、什么是信号量 首先信号量的本质是一种数据操作锁,它本身不具备数据交互的能力,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信的,它本身是一种标识,主要在过程中负责数据操作的互斥、同步功能。为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独原创 2017-06-08 16:49:36 · 380 阅读 · 0 评论 -
Linux进程间通信-共享内存
接着前面几种进程间的通信方式,接下来要说的是进程间速度最快的一种通信方式,首先顾名思义,从名字就可以看出来它是直接实现内存的共享,而进程间通信的本质就是让两个不同的进程,看到一份公共的资源,使用内存共享无疑是最快的,就拿命名管道来说,它是通过在磁盘建立一个文件,让两个进程通过这个中间文件实现信息交互呢,而我们都知道,在程序运行过程过,只要一旦经过磁盘读取这个环节,那么它的速度便会大大降低,这与磁盘的原创 2017-06-09 16:07:36 · 348 阅读 · 0 评论 -
生产者与消费者模型
前面讲了线程之前的各种关系,以及它的概念之类的东西,下面就介绍一种特殊的线程间的关系,即生产者消费者模型,它是将实际开发过程中的数据产生模块和处理模块形象的用生产者消费者来表示。 但是仅有生产者和消费者还是不够的,还需要一块缓冲区来作为媒介,举 一个寄信的例子(虽说这年头寄信已经不时兴,但这个例 子还是 比较贴切的)。假设你要寄 一封平信,大致过程如下:1、你把信写好——相当于 生产者制造数据2、原创 2017-06-29 19:36:02 · 506 阅读 · 0 评论 -
读者写者模型
前一节介绍完了生产者消费者模型,它是一种一方生产数据,另一方消费数据的模式,下面介绍另外一种不同于生产消费的模型。即读者写者模型。两者相同: 和前面的模型相比,读写模型中写者与写者之间还是互斥关系,写者与读者之间还是互斥与同步关系。 两者差异: 和生产消费模型不同的一点是,当一个写者写入数据后,可以有多个读者进行读取数据,举个简单易懂的例子就是,老师布置的作业,你写完后,可以让你的其他舍友都抄原创 2017-07-01 23:16:18 · 344 阅读 · 0 评论 -
Linux下,实现一个sleep函数
alarm函数首先,想要实现这个sleep函数,就得先做一些铺垫知识,所以就得先了解一下alarm函数,调用alarm函数可以设定一个闹钟,也就是告诉内核(kernel)在seconds秒之后给当前进程发送一个SIGALRM信号,该信号的默认动作是终止当前进程。这个函数的返回值是0,或者离你设定闹钟时间所剩下的秒数。举个简单的例子,你订了一个30分钟的闹钟,如果你一直没被打扰,当半小时后你的闹钟响了原创 2017-07-02 10:19:55 · 1152 阅读 · 0 评论 -
线程-Linux下的轻量级进程
首先我们知道,每个进程都是在各自独立的地址空间上运行,如果要同时完成好几个任务,比如你一边在下载软件,另一边在进行着其他的操作。那么试想一下,可不可以在一个进程里面把这几个事件同时进行呢,这里就要提到线程的概念了,但其实Linux中,并没有确切的线程的概念,普遍的就是将线程称为是一个轻量级的进程(Lightweight Process,LWP)。线程简介线程是在进程的地址空间上运行的,所以同一进程的原创 2017-06-13 18:04:36 · 436 阅读 · 0 评论 -
ubuntu安装ssh无法连接解决日志(已解决,可连接)
原文链接http://bbs.chinaunix.net/thread-3585704-1-1.html网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务。最终成功的方法如下:sudo apt-get install openssh-serverUbuntu...转载 2018-07-27 09:00:06 · 5486 阅读 · 0 评论