Linux
文章平均质量分 87
Linux 系统是程序员必备技能,本专栏一步一步带你学习 Linux 系统的基础知识,包学包会。
登龙
这个作者很懒,什么都没留下…
展开
-
从 0 开始学习 Linux 系列之「01.安装 Linux 软件的 3 种方法」
前言学习 Linux 必须要学会如何安装和卸载应用程序,这次就来简单介绍下在 Linux 上安装和卸载软件的几种方法。我使用的是 Ubuntu,不过对于安装应用程序来说,只要是 Linux 都是大同小异的。 应用程序安装的原理我们知道,在 Windows 下双击安装包即可安装软件,非常的简单方便,但是这种方法是针对大部分普通用户的,作为计算机高手,你可不能止步与表面功夫。因此,我...原创 2018-04-09 09:58:03 · 413 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「02.如何安装 Linux 服务器程序」
前言之前的一篇文章 如何在 Linux 上安装普通应用程序? 介绍在 Linux 下安装应用程序的方法,主要针对普通应用程序,而在 Linux 上安装服务器程序,不仅需要我们会安装,而且还要求我们会配置服务。因此,本次就带大家了解服务器程序的安装和配置的基本方法。在此之前,我们先来了解一些与服务相关的知识以帮助我们理解 Linux 的服务的运行原理。Linux 运行级别Linux ...原创 2018-04-09 10:08:43 · 165 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「03.vim 基础教程」
vim 简介 vim 被称为编辑器之神在 Linux 下我们经常使用 vim 来写程序,学会使用它可以说是学习 Linux 的必经之路。Linux 系统默认是安装了 vi 编辑器,而 vim 是 vi 的升级版,功能更强,所以我们更经常用 vim,这次就来介绍使用 vim 的正确姿势,废话不多说,先来安装 vim。安装 vim使用最简单的方法来安装:sudo ap...原创 2018-04-09 10:10:11 · 184 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「04.安装 4 个必备的 vim 插件」
前言之前说过要教大家配置 Vim 插件,那么今天这篇博客就主要介绍 vim 常用插件的安装配置方法,你可以学到下面这些内容:掌握 vim 安装插件的方法,即使系统不同,也能有把握安装成功掌握常用 vim 插件的配置和使用方法通过本篇博客学会类比,掌握解决问题的有效方法我最想教你的是如何去思考,遇到问题如何使用「英文搜索 + Google + stackoverflow + Gi...原创 2018-04-09 10:11:41 · 174 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「05.解析 Linux 命令机制」
为何要了解 Linux 命令机制?如果你每天都在使用 Linux 命令,那么你了解命令的基本原理吗?你学习 Linux 命令的时候,老师告诉你这些命令在哪里了么?系统是如何调用这些命令的呢?如何写一个命令自己调用呢?如果你有兴趣,请看看我的见解。解析 ls 命令如果你经常使用 Linux,相信你对 ls 这个命令不会陌生,这次就借这个命令来分析 Linux 命令的实现和调用机制。...原创 2018-04-09 10:15:58 · 190 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「06.Shell 编程基础」
前言本文主要介绍 Linux Shell 编程的基础知识,包含下面 8 个方面:Shell 编程概述Shell 关键字Shell 变量Shell 运算Shell 语句Shell 函数Shell 调试Shell 易错点下面一一介绍。Shell 编程概述在 Linux 下有一门脚本语言叫做:Shell 脚本,这个脚本语言可以帮助我们简化很多工作,例如编写自定义命令...原创 2018-04-09 10:18:48 · 178 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「07.gcc 编译基础」
前言这篇文章主要介绍 gcc 相关的技术,包括以下 8 个方面: 1. gcc 简介 2. gcc 参数 3. gcc 编译 C 程序 4 个过程 4. 实验一:编译多个 C 程序 5. 实验二:打包静态库并调用 6. 实验三:打包动态库并调用 7. g++ 简介 8. 结语我是一个比较强调实践的人,我写的技术文章也是,还希望看完有兴趣一定要实践,出错不可怕,害怕出错才可怕...原创 2018-04-09 10:22:22 · 226 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「08.15 个 gdb 调试基础命令」
gdb 简介gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都直接在命令行中用 gdb 来调试程序,相比 Windows 上的集成开发环境 IDE 提供的图形界面调试,一开始使用 gdb 调试可能会让你感到生无可恋,但是只要熟悉了 gdb 调试的常用命令,调试出程序会很有成就感。一方面因为这些命令就类似图形界面调试按钮背后的逻辑,另一方面用命令行来调试程序...原创 2018-04-09 10:27:38 · 198 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「09.Makefile 基础语法」
Makefile 简介Makefile 是一个管理项目的配置文件,它主要有 2 个作用: 1. 组织工程文件,编译成复杂的程序 2. 安装及卸载程序Makefile 是被 make 这个程序执行的,当执行 make 时,如果发现当前目录下有 Makefile 或者 makefile 文件,那么 make 命令就会根据这个文件的内容来找到相关的文件,然后去执行编译,链接,安装,卸载等操作...原创 2018-04-09 10:33:12 · 123 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「10.Autoconf 打包软件」
Autoconf 简介Autoconf 是一种用于生成 shell 脚本的工具,可自动配置软件源代码包,以适应多种类型的类似 Posix 的系统。你可以简单地把它看为打包源码的工具,例如你在 GNU 官网下载的那些 xxx.tar.gz 格式的软件包,我们使用这个工具最终目的就是将源代码打成一个包来提供给别人使用。本次就跟大家分享下如何打包一个基本的 Hello World 给别人使用,掌...原创 2018-04-09 10:35:06 · 204 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「11.IO 概述」
IO 概述这篇文章主要介绍 Linux IO 的基本知识和学习方法,掌握这些再学习 IO 操作会更加游刃有余,更加系统。上层开发与 kenel 的关系在学习 Linux 的 IO 操作之前,我们先来了解下上层开发和 kernel 底层的关系,也就是说上层大体上是如何调用底层的。我们以在 Linux 上开发的 C 程序为例简单介绍一下,因为这部分详细介绍很复杂,而我们开发上层只需要了...原创 2018-04-12 22:16:05 · 132 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「12.必须掌握的 5 个底层 IO 函数」
底层输入输出(Low-Level Input/Output)这篇博客主要介绍 Linux 原生的 IO 操作(Low IO),你可能会想不是有跨平台的 ANSI C 可以使用么,为啥还要学习底层 IO ? 有以下 4 个原因: 1. 用于读取大块的二进制文件 2. 在解析之前将整个文件读入内核 3. 执行数据传输以外的操作 4. 将描述符传递给子进程你需要知道这 4 个使用底层 I...原创 2018-04-12 22:19:01 · 189 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「13.标准 IO 库」
标准 IO 库上一篇文章我们学习了 5 个底层的 IO 函数,这次我们来学习标准的 IO 函数,既然是标准那肯定在多个平台都有使用到,例如 Linux,Windows…,上层应用用标准库开发还是很常见的,因为它们可以跨平台。标准 IO 库是由 Dennis Ritchie 在 1975 年左右写的,后来被美国国际标准化组织(ISO)制定成了 C 语言的标准库,称为 ANSI C。因为现在所...原创 2018-04-17 09:15:00 · 155 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「14.文件锁定」
文件锁简介锁是保护共享资源的一种方法。在许多 UNIX 系统上,如果一个文件同时被多个进程编辑,该文件的最后状态取决于写该文件的最后一个进程。但是对于一些特殊的程序,如数据库有时需要独占一个文件,这时就不能让这个文件被多个进程同时操作了。于是 UNIX 系统提供了文件锁来实现这种独占文件的功能。文件锁:当一个进程正在读或者或者修改文件的某个部分时,使用锁可以阻止其他进程修改同一个文件区域,...原创 2018-04-17 09:18:48 · 177 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「15.目录操作」
Linux 目录简介在 Linux 下一切皆是文件。目录也是文件,在 glibc 中定义了一些对目录项的操作,例如使用 opendir 打开目录,readdir 读取目录项等等,这篇文章介绍 Linux 目录相关的概念和操作。目录项数据结构就像文件有专门的数据结构表示一样,目录项在内核中也有相关表示。目录项:struct dirent#include <dir...原创 2018-04-17 09:21:20 · 167 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「16.进程基本概念」
进程基本概念这篇文章带你了解 Linux 进程的基本概念,不解释了,快点上车…程序和进程先看看程序和进程的区别,程序是一个磁盘上的文件,而进程通常被定义为一个正在运行的程序实例,进程由两部分组成: 1. 操作系统用来管理进程的内核对象:内核对象用来存放进程的统计信息 2. 独立的内存地址空间:包含可执行模块的代码和数据,还包含分配的内存空间,例如堆,栈进程运行过程运...原创 2018-04-17 09:26:58 · 179 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「17.进程控制」
前言这篇文章主要介绍 Linux 系统中进程控制相关的 API,包括创建,执行,终止等操作。基本的进程相关的概念在上一篇文章中已经介绍过了,不太熟悉的可以再回去了解了解。进程标识每个进程都有一个非负整数表示的唯一的进程 ID,因为进程 ID 标识符总是唯一的,所以常常把 ID 作为其他标识符的一部分用来保证唯一性,并且进程的 ID 也是可以复用的,当一个进程终止后,其进程 ID 就...原创 2018-04-17 09:28:55 · 164 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「18.守护进程」
什么是守护进程?守护进程可以简单的理解为后台的服务进程,很多上层的服务器都是以守护进程为基础开发的。例如 Linux 上运行的 Apache 服务器,Android 系统的 Service 服务,它们的底层都由 Linux 的守护进程提供服务。这篇文章介绍的是在 Linux 编写守护进程的方法。编写守护进程的 6 个步骤先来看看整体的编写步骤: 1. 重新设置 umask(0...原创 2018-04-17 09:31:10 · 168 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「19.无名管道 Pipe」
Linux 进程间通信当系统中有了多个进程时,进程之间的通信就显得格外必要了,进程就相当于现实世界中的人,人跟人之间的交流就相当与进程之间的通信了。Linux 的进程间通信(Inter Process Communication,IPC)主要有 7 种: 1. 无名管道 Pipe 2. 有名管道 Fifo 3. 信号 Signal 4. 消息队列 Message Queue 5. 共...原创 2018-04-17 09:33:38 · 146 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「20.有名管道 FIFO」
FIFO 和 Pipe 的区别上一篇文章我们了解了无名管道 Pipe 的原理,这篇文章我们来学习 IPC 的第二种方式 FIFO 有名管道,既然同为管道,它们两个有什么区别呢?相同点:Pipe 和 FIFO 都用管道来进行 IPC相同点:Pipe 和 FIFO 的管道数据都存在内核内存的缓冲区中不同点:Pipe 不在磁盘上建立管道文件,FIFO 在磁盘上建立管道文件不同点:Pipe...原创 2018-04-17 09:35:37 · 239 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「21.信号 Signal」
信号(Signal)简介软中断信号 Signal,简称信号,用来通知进程发生了异步事件,进程之间可以互相通过系统调用 kill 等函数来发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件,但是要注意信号只是用来通知进程发生了什么事件,并不给该进程传递任何数据,例如终端用户键入中断键,会通过信号机制停止当前程序。Linux 中每个信号都有一个以 SIG 开头的名字...原创 2018-04-17 09:39:11 · 385 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「22.共享内存 Shared Memory」
共享内存 Shared Memory这次我们来学习在 Linux 中最快的一种 IPC 方式:共享内存 Shared Memory,它的基本原理是:内核开辟一片内存区域,然后多个用户进程可以将这片区域映射到它们自己的地址空间中进行读写。为什么这种方式最快?因为数据不需要在进程之间复制,只要一个进程写入数据,另一个进程就能马上读取数据了,但是读取和写入必须同步。共享内存属性我们可以在...原创 2018-04-17 09:41:07 · 272 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「23.消息队列 Msg Queue」
消息队列 Msg Queue如果你在 Windows 上开发过应用程序,想必你应该听过消息队列这个概念。在 Windows 中每个程序都有一个消息队列,整个程序在一个 loop 中等待从消息队列中取消息并执行,所以称 Windows 上的程序为事件驱动型。同样在 Linux 开发中也有消息队列这个概念,不过 Linux 中的消息队列是用来进行 IPC 的,本质上跟共享内存一样也是内存维护的一片...原创 2018-04-25 09:29:40 · 297 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「24.信号量 semaphore」
信号量 semaphore信号量(semaphore)与之前介绍的管道,消息队列的等 IPC 的思想不同,信号量是一个计数器,用来为多个进程或线程提供对共享数据的访问。信号量的原理常用的信号量是二值信号量,它控制单个共享资源,初始值为 1,操作如下: 1. 测试该信号量是否可用 2. 若信号量为 1,则当前进程使用共享资源,并将信号量减 1(加锁) 3. 若信号量为 0,则当...原创 2018-04-25 09:32:07 · 515 阅读 · 1 评论 -
从 0 开始学习 Linux 系列之「25.Posix 线程」
多线程概念多线程技术是应用开发中非常重要的技术之一,几乎大型的应用软件都使用这个技术,这次一起来学习下 Linux 中的多线程开发基础(其他的系统中概念也是类似的)。在 Linux 中,一个简单的进程可以看成只有一个单线程(主线程),因为只有一个线程,所以进程在某一个时刻只能做一件事。为了能够使得进程可以在同一时刻做多件事情,可以让这个进程内部产生多个线程来分工同时完成。例如典型的字处...原创 2018-04-25 09:35:47 · 200 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「26.网络编程基础 」
网络编程基础概念网络编程中有许多基础概念必须了解,比如 OSI,TCP/IP,字节序列等,这些都是开发网络应用的基础,可以帮助我们更好的理解网络程序的工作原理,来一起学习下一些比较重要的概念。OSI 开放系统互联模型OSI(Open System Interconnection)是国际标准化组织(ISO)制定的计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI 模型把网...原创 2018-04-25 09:37:27 · 236 阅读 · 0 评论 -
从 0 开始学习 Linux 系列之「27.Socket 编程基础(TCP,UDP)」
Socket 接口简介Socket 套接字是由 BSD(加州大学伯克利分校软件研发中心)开发的一套独立于具体协议的网络编程接口,应用程序可以用这个接口进行网络通信。要注意:Socket 不是一套通信协议(HTTP,FTP 等是通信协议),而是编程的接口,即我们在程序中使用的网络函数。TCP/IP 网络编程底层就是使用 Socket 接口来通信,所以在学习 TCP/IP 编程之前必须知道 Soc...原创 2018-04-25 09:40:11 · 215 阅读 · 0 评论