随笔分类 - Linux

摘要:笔者在前文《Linux job control》中介绍了进程组(job)的概念以及常见的 job control 操作,本文接着介绍 session 的概念。本文中演示部分使用的环境为 ubuntu 18.04。 session 是什么? 我们常见的 Linux session 一般是指 shell 阅读全文
posted @ 2020-01-17 10:45 sparkdev 阅读(16436) 评论(0) 推荐(2) 编辑
摘要:Linux 系统中有一个 job control 的概念,本文简单介绍什么是 job,以及常见的 job control 命令。本文中演示部分使用的环境为 ubuntu 18.04。 进程组(job) 执行一个命令会创建一个或多个进程,这些进程被称为一个进程组(process group)。进程组中 阅读全文
posted @ 2019-12-04 09:01 sparkdev 阅读(2127) 评论(0) 推荐(2) 编辑
摘要:通过《Linux 终端(TTY)》一文我们了解到:我们常说的终端分为终端 tty1-6 和伪终端。使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vSphere console 等虚拟化方案,其它情况下使用的都是伪终端。本文将介绍伪终端的基本概念。本文中演示部分 阅读全文
posted @ 2019-09-29 08:45 sparkdev 阅读(40617) 评论(0) 推荐(9) 编辑
摘要:TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设备。为了支持这些 TTY 设备,Linux 实现了一个叫 阅读全文
posted @ 2019-09-05 08:45 sparkdev 阅读(46076) 评论(3) 推荐(6) 编辑
摘要:为了执行权限检查,Linux 区分两类进程:特权进程(其有效用户标识为 0,也就是超级用户 root)和非特权进程(其有效用户标识为非零)。 特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证(通常为有效 UID,有效 GID 和补充组列表)进行完全权限检查。 以常用的 passwd 命令为例 阅读全文
posted @ 2019-08-28 08:42 sparkdev 阅读(7668) 评论(3) 推荐(0) 编辑
摘要:Ubuntu(16.04/18.04) 默认会每天自动安装系统的安全更新,但是不会自动安装包的更新。本文梳理 Ubuntu 16.04/18.04 系统的自动更新机制,并介绍如何配置系统自动更新所有的包。说明:简单起见,本文中使用 Ubuntu 指代 Ubuntu 16.04/18.04。 系统需要 阅读全文
posted @ 2019-08-21 08:58 sparkdev 阅读(5580) 评论(0) 推荐(1) 编辑
摘要:apt 命令是一个功能强大的命令行工具,它不仅可以更新软件包列表索引、执行安装新软件包、升级现有软件包,还能够升级整个 Ubuntu 系统(apt 是 Debian 系操作系统的包管理工具)。与更专业的 APT(Advanced Packaging Tool) 工具 apt-get 和 apt-ca 阅读全文
posted @ 2019-08-15 13:14 sparkdev 阅读(3403) 评论(0) 推荐(0) 编辑
摘要:apt-get 命令是 Ubuntu 系统中的包管理工具,可以用来安装、卸载包,也可以用来升级包,还可以用来把系统升级到新的版本。本文介绍 apt-get 命令的基本用法,演示环境为 Ubuntu 18.04。 基本语法语法格式:apt-get [options] command 配置文件:早期 a 阅读全文
posted @ 2019-08-13 08:45 sparkdev 阅读(9367) 评论(0) 推荐(2) 编辑
摘要:Grep 是 Global Regular Expression Print 的缩写,它搜索指定文件的内容,匹配指定的模式,默认情况下输出匹配内容所在的行。注意,grep 只支持匹配而不能替换匹配到的内容。 基本语法 语法格式:grep [OPTIONS] PATTERN [FILE...]grep 阅读全文
posted @ 2019-08-05 08:40 sparkdev 阅读(40376) 评论(1) 推荐(1) 编辑
摘要:Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称为硬链接文件、实体链接文件,Symbolic Link 文件则常被称为符号链接、软链接文件。 ln 命令用来在文件之间建立链接。在介绍 ln 命令前,让我们先来搞清楚究竟什么是硬链接,什 阅读全文
posted @ 2019-08-01 08:41 sparkdev 阅读(13242) 评论(5) 推荐(10) 编辑
摘要:笔者在前文《Linux EXT2 文件系统中》中介绍了 EXT2 文件系统中的基本概念,本文继续以 EXT2 文件系统为例介绍文件系统是如何管理文件存储的。 inode 在前文介绍文件系统时我们提到了 inode 和 data block。在 EXT2 文件系统中,inode 用来存放文件的元信息, 阅读全文
posted @ 2019-07-29 08:56 sparkdev 阅读(464) 评论(1) 推荐(0) 编辑
摘要:AUFS 的英文全称为 Advanced Mult-Layered Unification Filesystem,曾经是 Another Mult-Layered Unification Filesystem,显然,现在的内涵规格更高些。说明:本文的演示环境为 ubuntu 16.04。 Union 阅读全文
posted @ 2019-07-25 09:01 sparkdev 阅读(1887) 评论(0) 推荐(0) 编辑
摘要:磁盘是用来储文件的,但是必须先把磁盘格式化为某种格式的文件系统,才能存储文件。文件系统的目的就是组织和管理磁盘中的文件。在 Linux 系统中,最长见的是 ext2 系列的文件系统。其早期版本为 ext2,后来又发展出 ext3 和 ext4。ext3 和 ext4 虽然对 ext2 进行了增强,但 阅读全文
posted @ 2019-07-22 09:00 sparkdev 阅读(521) 评论(0) 推荐(1) 编辑
摘要:本文介绍 Linux 文件系统相关的基本概念。 硬盘的物理组成 盘片硬盘其实是由单个或多个圆形的盘片组成的,按照盘片能够容纳的数据量,分为单盘(一个硬盘里面只有一个盘片)或多盘(一个硬盘里面有多个盘片)的硬盘。下面是一张盘片的示意图(此图来自互联网): 磁道和柱面硬盘中有磁头在盘片上读写数据,磁头固 阅读全文
posted @ 2019-07-18 08:51 sparkdev 阅读(3849) 评论(0) 推荐(0) 编辑
摘要:前文中笔者介绍了管道,本文接着介绍命名管道。文中演示所用环境为 Ubuntu 18.04 desktop。 命名管道(named pipe)又被称为先进先出队列(FIFO),是一种特殊的管道,存在于文件系统中。命名管道与管道非常类似,但是又有自身的显著特征: 命名管道可以用于任何两个进程间的通信,而 阅读全文
posted @ 2019-06-12 13:06 sparkdev 阅读(1868) 评论(0) 推荐(1) 编辑
摘要:管道(pipe)是进程间通信的一种实现方式。在 Linux 系统中,管道本质上是一种特殊的文件,它的主要用途是实现进程间的通信。文中演示所用环境为 Ubuntu 18.04 desktop。 在 shell 中执行下面的命令: echo 命令的输出通过管道作为了 cat 命令的输入。这里面的具体操作 阅读全文
posted @ 2019-06-11 13:08 sparkdev 阅读(294) 评论(0) 推荐(0) 编辑
摘要:其实准确点儿的描述应该是:Ubuntu Server 18.04 ,设置 LVM,安装完成后根目录的容量为什么只有 4G?只有 Server 版有问题,Desktop 版没有问题,Ubuntu 16.04 的 Server 版和 Desktop 版都没有这样的问题。 笔者在 vSphere 中安装虚 阅读全文
posted @ 2019-03-14 08:58 sparkdev 阅读(3423) 评论(4) 推荐(3) 编辑
摘要:随着 systemd 成了主流的 init 系统,systemd 的功能也在不断的增加,比如对系统日志的管理。Systemd 设计的日志系统好处多多,这里笔者就不再赘述了,本文笔者主要介绍 systemd journal 收集日志的三种方式: 程序使用 libc 库中的 syslog() 函数输出的 阅读全文
posted @ 2019-03-11 13:19 sparkdev 阅读(1774) 评论(0) 推荐(2) 编辑
摘要:Ubuntu Desktop 版本默认自带了图形化的备份/还原工具 Déjà Dup。该工具主要用来备份和还原用户的数据,当然我们也可以用它来备份/还原系统的数据。本文主要介绍 Déjà Dup 的主要功能和用法,如果没有特殊的说明,我们在文中称演 Déjà Dup 为备份工具。本文的演示环境为 U 阅读全文
posted @ 2019-03-04 13:30 sparkdev 阅读(2774) 评论(0) 推荐(1) 编辑
摘要:iostat 命令是 I/O statistics(输入/输出统计)的缩写,用来报告系统的 CPU 统计信息和块设备及其分区的 IO 统计信息。iostat 是 sysstat 工具集的一个工具,在 Ubuntu 系统中默认是不带 iostat 命令的,需要自行安装:$ sudo apt insta 阅读全文
posted @ 2019-02-25 11:28 sparkdev 阅读(1928) 评论(0) 推荐(3) 编辑
摘要:stress 命令主要用来模拟系统负载较高时的场景,本文介绍其基本用法。文中 demo 的演示环境为 ubuntu 18.04。 基本语法 语法格式:stress <options> 常用选项:-c, --cpu N 产生 N 个进程,每个进程都反复不停的计算随机数的平方根-i, --io N 产生 阅读全文
posted @ 2019-02-08 14:50 sparkdev 阅读(7666) 评论(1) 推荐(2) 编辑
摘要:本文介绍如何使用 sudo 将输出重定向到当前用户没有权限的文件。注意:本文中 demo 的演示环境为 ubuntu 18.04。 Permission denied 问题 如果当前用户没有某个文件的写权限,又要通过输出重定向往该文件中写入内容。结果只能是 "Permission denied"。比 阅读全文
posted @ 2019-01-21 13:23 sparkdev 阅读(1305) 评论(0) 推荐(1) 编辑
摘要:lsof(list open files)是一个查看进程打开的文件的工具。 在 linux 系统中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息。本文将介绍 lsof 阅读全文
posted @ 2019-01-16 08:52 sparkdev 阅读(13170) 评论(3) 推荐(8) 编辑
摘要:LVM 机制还提供了对 LV 做快照的功能,也就是说可以给文件系统做一个备份,这也是设计 LVM 快照的主要目的。LVM 的快照功能采用写时复制技术(Copy-On-Write,COW),这比传统的备份技术的效率要高很多。创建快照时不用停止服务,就可以对数据进行备份。说明:LVM 还支持 thin 阅读全文
posted @ 2019-01-08 08:58 sparkdev 阅读(6008) 评论(5) 推荐(7) 编辑
摘要:有扩展就有缩减,我们在前文《LVM : 扩展文件系统的容量》中介绍了通过 LVM 扩展文件系统的方法,本文我们接着前文的 demo 介绍通过 LVM 缩减文件系统的方法。说明:本文的演示环境为 ubuntu 16.04。前文中我们把文件系统 /dev/mapper/nickvg-nicklv00 的 阅读全文
posted @ 2019-01-04 09:18 sparkdev 阅读(3731) 评论(3) 推荐(5) 编辑
摘要:如果发现文件系统的容量不足了,可以通过 LVM 轻松的进行扩展(当然也可以进行缩减操作)。本文将紧接前文中的 demo 详细的介绍扩展文件系统的操作过程。说明:本文的演示环境为 ubuntu 16.04。 警报:可用磁盘空间不足 当我们收到可用磁盘空间不足的警报时,就需要去诊断磁盘空间相关的问题了。 阅读全文
posted @ 2018-12-20 08:55 sparkdev 阅读(1767) 评论(2) 推荐(3) 编辑
摘要:在对磁盘分区的大小进行规划时,往往不能确定这个分区要使用的空间的大小。而使用 fdisk、gdisk 等工具对磁盘分区后,每个分区的大小就固定了。如果分区设置的过大,就白白浪费了磁盘空间;如果分区设置的过小,就会导致空间不够用的情况出现。对于分区过小的问题,可以从新划分磁盘的分区,或者通过软连接的方 阅读全文
posted @ 2018-12-18 08:54 sparkdev 阅读(3357) 评论(2) 推荐(4) 编辑
摘要:Linux 系统中所有的硬件设备都是通过文件的方式来表现和使用的,我们将这些文件称为设备文件,硬盘对应的设备文件一般被称为块设备文件。本文介绍磁盘设备在 Linux 系统中的表示方法以及如何创建磁盘分区。说明:本文的演示环境为 ubuntu 16.04。 磁盘分类 比较常见的磁盘类型有消费类市场中的 阅读全文
posted @ 2018-12-11 08:58 sparkdev 阅读(5416) 评论(2) 推荐(4) 编辑
摘要:在学习 Linux 系统权限相关的主题时,我们首先关注的基本都是文件的 ugo 权限。ugo 权限信息是文件的属性,它指明了用户与文件之间的关系。但是真正操作文件的却是进程,也就是说用户所拥有的文件访问权限是通过进程来体现的。本文主要介绍进程的权限,并通过示例解释用户身份与进程权限之间的关系。说明: 阅读全文
posted @ 2018-09-28 08:47 sparkdev 阅读(16036) 评论(11) 推荐(17) 编辑
摘要:笔者在《Linux ACL 权限》一文中介绍了 Linux ACL 权限的基本用法,本文笔者将尝试探究 ACL 中的基本概念和实现原理,希望能够通过进一步的加深对 Linux 权限系统的理解。说明:本文的演示环境为 ubuntu 16.04。 ACL 中的基本概念 ACL 的类型 access AC 阅读全文
posted @ 2018-09-25 09:00 sparkdev 阅读(23187) 评论(11) 推荐(18) 编辑
摘要:新建一个文件或目录,它的默认权限是什么?如果要修改一个用户创建的文件和目录的默认权限该如何做?本文将介绍相关的内容。说明:本文的演示环境为 ubuntu 16.04。 文件的默认权限 为了查看用户创建的文件和目录的默认权限,我们用一个普通的用户创建文件 myfile 和目录 mydir 并查看它们的 阅读全文
posted @ 2018-09-20 08:59 sparkdev 阅读(9027) 评论(2) 推荐(1) 编辑
摘要:setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写。我们一般会再次把它们缩写为 suid 和 sgid。它们是控制文件访问的权限标志(flag),它们分别允许用户以可执行文件的 owner 或 阅读全文
posted @ 2018-09-17 08:53 sparkdev 阅读(12935) 评论(1) 推荐(3) 编辑
摘要:Linux 系统中文件的 ugo 权限是 Linux 进行权限管理的基本方式。本文将介绍 ugo 权限的基本概念。说明:本文的演示环境为 ubuntu 16.04。 文件的所有者和组 Linux 文件的 ugo 权限把对文件的访问者划分为三个类别:文件的所有者、组和其他人。所谓的 ugo 就是指 u 阅读全文
posted @ 2018-09-06 07:05 sparkdev 阅读(10314) 评论(5) 推荐(9) 编辑
摘要:Cgroups 是 linux 内核提供的一种机制,如果你还不了解 cgroups,请参考前文《Linux cgroups 简介》先了解 cgroups。当 Linux 的 init 系统发展到 systemd 之后,systemd 与 cgroups 发生了融合(或者说 systemd 提供了 c 阅读全文
posted @ 2018-08-27 08:50 sparkdev 阅读(22091) 评论(6) 推荐(15) 编辑
摘要:cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单说,cgroups 可以限制、记录任务组所使用的物理资源。本质上来说,cgroups 阅读全文
posted @ 2018-08-22 09:01 sparkdev 阅读(13341) 评论(8) 推荐(19) 编辑
摘要:User namespace 是 Linux 3.8 新增的一种 namespace,用于隔离安全相关的资源,包括 user IDs and group IDs,keys, 和 capabilities。同样一个用户的 user ID 和 group ID 在不同的 user namespace 中 阅读全文
posted @ 2018-08-16 08:33 sparkdev 阅读(12019) 评论(8) 推荐(14) 编辑
摘要:Network namespace 在逻辑上是网络堆栈的一个副本,它有自己的路由、防火墙规则和网络设备。默认情况下,子进程继承其父进程的 network namespace。也就是说,如果不显式创建新的 network namespace,所有进程都从 init 进程继承相同的默认 network 阅读全文
posted @ 2018-08-13 08:24 sparkdev 阅读(11238) 评论(8) 推荐(12) 编辑
摘要:PID namespace 用来隔离进程的 PID 空间,使得不同 PID namespace 里的进程 PID 可以重复且互不影响。PID namesapce 对容器类应用特别重要, 可以实现容器内进程的暂停/恢复等功能,还可以支持容器在跨主机的迁移前后保持内部进程的 PID 不发生变化。说明:本 阅读全文
posted @ 2018-08-09 08:53 sparkdev 阅读(21565) 评论(5) 推荐(8) 编辑
摘要:Mount namespace 为进程提供独立的文件系统视图。简单点说就是,mount namespace 用来隔离文件系统的挂载点,这样进程就只能看到自己的 mount namespace 中的文件系统挂载点。进程的 mount namespace 中的挂载点信息可以在 /proc/[pid]/m 阅读全文
posted @ 2018-08-06 08:38 sparkdev 阅读(10383) 评论(7) 推荐(8) 编辑
摘要:IPC namespace 用来隔离 System V IPC 对象和 POSIX message queues。其中 System V IPC 对象包含共享内存、信号量和消息队列,笔者在《System V IPC 之共享内存》、《System V IPC 之信号量》和《System V IPC 之 阅读全文
posted @ 2018-08-02 08:55 sparkdev 阅读(4674) 评论(3) 推荐(4) 编辑
摘要:UTS namespace 用来隔离系统的 hostname 以及 NIS domain name。UTS 据称是 UNIX Time-sharing System 的缩写。 hostname 与 NIS domain name hostname 是用来标识一台主机的,比如登录时的提示,在 Shel 阅读全文
posted @ 2018-07-30 08:45 sparkdev 阅读(14986) 评论(6) 推荐(14) 编辑
摘要:在初步的了解 docker 后,笔者期望通过理解 docker 背后的技术原理来深入的学习和使用 docker,接下来的几篇文章简单的介绍下 linux namespace 的概念以及基本用法。 namespace 的概念 namespace 是 Linux 内核用来隔离内核资源的方式。通过 nam 阅读全文
posted @ 2018-07-26 08:17 sparkdev 阅读(30977) 评论(6) 推荐(14) 编辑
摘要:iptables 是 Linux 管理员用来设置 IPv4 数据包过滤条件和 NAT 的命令行工具。iptables 工具运行在用户态,主要是设置各种规则。而 netfilter 则运行在内核态,执行那些设置好的规则。 查看 iptables 的链和规则 查看规则的命令格式为:iptables [- 阅读全文
posted @ 2018-07-23 08:55 sparkdev 阅读(13663) 评论(10) 推荐(19) 编辑
摘要:netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制。iptables 则是一个命令行工具,用来配置 netfilter 防火墙。下图展示了一个带有防火墙的简单网络拓扑结构: 图中的 Linux 主机既充当了路由器的角色,同时又充当了防火墙的角色。本文我们将以该拓 阅读全文
posted @ 2018-07-19 08:59 sparkdev 阅读(4803) 评论(3) 推荐(5) 编辑
摘要:df 命令 检查磁盘空间占用情况(并不能查看某个目录占用的磁盘大小)。 命令格式:df [option] -h 以容易理解的格式(给人看的格式)输出文件系统分区使用情况,例如 10kB、10MB、10GB 等。-k 以 kB 为单位输出文件系统分区使用情况。-m 以 mB 为单位输出文件系统分区使用 阅读全文
posted @ 2018-07-08 20:26 sparkdev 阅读(5240) 评论(0) 推荐(2) 编辑
摘要:Linux 默认带有 ip forward 功能,只不过因为各种原因,默认的配置把该功能关闭了。本文通过 demo 来演示 Linux 的 ip forward 功能,具体场景为:开启 Linux 的 ip forward 功能,让 Linux 称为具有路由能力的主机,从而支持在两个局域网之间转发数 阅读全文
posted @ 2018-07-05 09:04 sparkdev 阅读(3612) 评论(3) 推荐(4) 编辑
摘要:ip netns 命令用来管理 network namespace。它可以创建命名的 network namespace,然后通过名字来引用 network namespace,所以使用起来很方便。 ip netns 命令格式如下:ip [ OPTIONS ] netns { COMMAND | h 阅读全文
posted @ 2018-07-02 19:26 sparkdev 阅读(7154) 评论(2) 推荐(3) 编辑
摘要:笔者在《Linux mount 命令》一文中介绍了 mount 命令的基本用法,本文我们接着介绍 mount 命令的一些高级用法,比如 bind mounts(绑定挂载)和 shared subtree。 bind mounts 一个绑定挂载就是相关目录树的另外一个视图。典型情况下,挂载会为存储设备 阅读全文
posted @ 2018-05-17 08:47 sparkdev 阅读(11951) 评论(4) 推荐(4) 编辑
摘要:mount 命令用来挂载文件系统。其基本命令格式为:mount -t type [-o options] device dirdevice:指定要挂载的设备,比如磁盘、光驱等。dir:指定把文件系统挂载到哪个目录。type:指定挂载的文件系统类型,一般不用指定,mount 命令能够自行判断。opti 阅读全文
posted @ 2018-05-09 17:10 sparkdev 阅读(58874) 评论(8) 推荐(9) 编辑
摘要:目录 Help 输出所有的日志记录 匹配(match) 把日志保存到文件中 限定日志所能占用的最高容量 查看某次启动后的日志 查看指定时间段的日志 同时应用 match 和时间过滤条件 按 unit 过滤日志 通过日志级别进行过滤 实时更新日志 只显示最新的 n 行 控制输出 按可执行文件的路径过滤 阅读全文
posted @ 2018-04-12 13:15 sparkdev 阅读(31083) 评论(3) 推荐(6) 编辑
摘要:消息队列和共享内存、信号量一样,同属 System V IPC 通信机制。消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问。使用消息队列的好处是对每个消息指定了特定消息类型,接收消息的进程可以请求接收下一条消息,也可以请求接收下一条特定类型的消息。 相关数据结构 与其他两 阅读全文
posted @ 2018-04-06 09:03 sparkdev 阅读(12651) 评论(3) 推荐(5) 编辑
摘要:本文继《System V IPC 之共享内存》之后接着介绍 System V IPC 的信号量编程。在开始正式的内容前让我们先概要的了解一下 Linux 中信号量的分类。 信号量的分类 在学习 IPC 信号量之前,让我们先来了解一下 Linux 提供两类信号量: 内核信号量,由内核控制路径使用。 用 阅读全文
posted @ 2018-04-03 08:55 sparkdev 阅读(21755) 评论(2) 推荐(6) 编辑
摘要:IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 和其他进程共享一段内存区 System V IPC 最初是在一个名为 "Columbus Unix 阅读全文
posted @ 2018-03-29 08:34 sparkdev 阅读(15550) 评论(2) 推荐(4) 编辑
摘要:chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 /,即以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 / 位置。 基本语法 chroot NEWROOT [COMMA 阅读全文
posted @ 2018-03-15 10:32 sparkdev 阅读(11833) 评论(4) 推荐(7) 编辑
摘要:我们运行 linux 服务器的主要目的是通过运行程序提供服务,比如 mysql、web server等。因此管理 linux 服务器主要工作就是配置并管理上面运行的各种服务程序。在 linux 系统中服务程序的管理主要由 init 系统负责。如同笔者在《初识 systemd》一文中的介绍,linux 阅读全文
posted @ 2018-03-08 08:50 sparkdev 阅读(10112) 评论(4) 推荐(9) 编辑
摘要:目录 预热 管理单个 unit 查看系统上的 unit 管理不同的操作环境(target unit) 检查 unit 之间的依赖性 相关的目录和文件 systemctl daemon-reload 子命令 总结 笔者在前文中概要的介绍了 systemd 的基本概念和主要特点。由于 systemd 相 阅读全文
posted @ 2018-03-01 08:37 sparkdev 阅读(22914) 评论(2) 推荐(9) 编辑
摘要:从 init 系统说起 linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 PID 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有的用户进程。init 进程 阅读全文
posted @ 2018-02-17 08:18 sparkdev 阅读(11007) 评论(6) 推荐(7) 编辑
摘要:ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使 阅读全文
posted @ 2018-02-06 18:54 sparkdev 阅读(18140) 评论(4) 推荐(6) 编辑
摘要:本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。 内核空间和用户空间 对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。操作系统的核心是内核(kernel),它 阅读全文
posted @ 2018-02-03 18:14 sparkdev 阅读(17154) 评论(10) 推荐(15) 编辑
摘要:Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信。socket 原本是为网络通讯设计的,但后来在 socket 的框架上发展出一种 IPC 机制,就是 UNIX domain soc 阅读全文
posted @ 2018-01-27 17:40 sparkdev 阅读(34549) 评论(1) 推荐(6) 编辑
摘要:在 TCP/IP 协议中,"IP地址 + TCP或UDP端口号" 可以唯一标识网络通讯中的一个进程,"IP地址+端口号" 就称为 socket。本文以一个简单的 TCP 协议为例,介绍如何创建基于 TCP 协议的网络程序。 TCP 协议通讯流程 下图描述了 TCP 协议的通讯流程(此图来自互联网): 阅读全文
posted @ 2018-01-24 13:15 sparkdev 阅读(7593) 评论(2) 推荐(6) 编辑
摘要:Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态。例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止。如果子进程已经终止,那么,它的终止代号将告诉父进程这个任务是否已成功地完成。为了遵循这些设计原则,不允许 L 阅读全文
posted @ 2018-01-15 08:49 sparkdev 阅读(7517) 评论(1) 推荐(3) 编辑
摘要:Linux 操作系统紧紧依赖进程创建来满足用户的需求。例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令。Linux 系统中通过 fork/vfork 系统调用来创建新进程。本文将介绍如何使用 fork/vfork 系统调用来创建新 阅读全文
posted @ 2018-01-11 08:47 sparkdev 阅读(28101) 评论(4) 推荐(9) 编辑
摘要:top 命令主要用于查看进程的相关信息,同时它也会提供系统平均负载,cpu 信息和内存信息。下面的截图展示了 top 命令默认提供的信息: 系统平均负载 top 命令输出中的第一行是系统的平均负载,这和 uptime 命令的输出是一样的: 13:05:49 表示系统当前时间。up 7 days 表示 阅读全文
posted @ 2018-01-03 08:45 sparkdev 阅读(14764) 评论(3) 推荐(11) 编辑
摘要:在 azure 上创建的虚机默认会分配两个磁盘,分别是系统盘和一个临时磁盘。如果我们要在系统中安装使用 mysql 等软件,需要再创建并挂载单独的数据盘用来保存数据库文件。这是因为临时磁盘被定义为:用于临时数据处理的操作。特点是性能好(SSD),但是空间有限且存放在上面的数据没有保障(在一些情况下数 阅读全文
posted @ 2017-12-26 07:54 sparkdev 阅读(19424) 评论(4) 推荐(6) 编辑
摘要:默认情况下容器可以使用的主机 CPU 资源是不受限制的。和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难。本文将介绍如何限制容器可以使用的 CPU 资源。本文的 demo 中会继续 阅读全文
posted @ 2017-12-19 08:32 sparkdev 阅读(81421) 评论(12) 推荐(24) 编辑
摘要:默认情况下容器使用的资源是不受限制的。也就是可以使用主机内核调度器所允许的最大资源。但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存。 为什么要限制容器对内存的使用? 限制容器不能过多的使用主机的内存是非常重要的。对于 linux 主机来说,一 阅读全文
posted @ 2017-12-14 07:46 sparkdev 阅读(82450) 评论(14) 推荐(34) 编辑
摘要:free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。 如果加上 -h 选项,输出的结果会友好很多: 有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数: 上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。(Ubu 阅读全文
posted @ 2017-12-07 08:52 sparkdev 阅读(27303) 评论(7) 推荐(15) 编辑
摘要:在容器的使用过程中,如果能及时的掌握容器使用的系统资源,无论对开发还是运维工作都是非常有益的。幸运的是 docker 自己就提供了这样的命令:docker stats。 默认输出 docker stats 命令用来显示容器使用的系统资源。不带任何选项执行 docker stats 命令: 默认情况下 阅读全文
posted @ 2017-11-13 08:17 sparkdev 阅读(38488) 评论(7) 推荐(21) 编辑
摘要:dig 命令主要用来从 DNS 域名服务器查询主机地址信息。 查询单个域名的 DNS 信息 dig 命令最典型的用法就是查询单个主机的信息。 dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。第一部分显示 dig 命令的版本和输入的参数。第二部分显示服务返回的一些技术详情,比较重要的是 阅读全文
posted @ 2017-11-06 08:24 sparkdev 阅读(18850) 评论(7) 推荐(14) 编辑
摘要:登录相关的日志涉及到系统的安全,所以是系统管理中非常重要的一部分内容。本文试图对登录相关的日志做一个整理。 /var/log/auth.log 这是一个文本文件,记录了所有和用户认证相关的日志。无论是我们通过 ssh 登录,还是通过 sudo 执行命令都会在 auth.log 中产生记录。执行 上图 阅读全文
posted @ 2017-10-20 09:36 sparkdev 阅读(19961) 评论(5) 推荐(8) 编辑
摘要:在 Bash 脚本中我们一般会使用 test 命令来进行条件检查。test 命令的返回值为 0 或 1。0 表示 true, 1 表示 false。简单起见,我们可以直接认为 test 的结果为 true 或 false。 还可以使用中括号代替 test,需要注意的是括号和表达式之间一定要留有空格, 阅读全文
posted @ 2017-10-16 08:41 sparkdev 阅读(19345) 评论(3) 推荐(8) 编辑
摘要:我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程。这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互。比如我们可以向容器中的应用发送一个重新加载信号,容器中的应用程序在接到信 阅读全文
posted @ 2017-09-27 09:18 sparkdev 阅读(24982) 评论(10) 推荐(23) 编辑
摘要:ls 命令是 Linux 下最常用的命令之一,用来查询目录下的内容(list directory contents)。本文将介绍其基本的用法和一些典型的用例。笔者使用的测试环境为 ubuntu 16.04。 基本输出 直接在命令行中输入 ls 并回车。这是最精简的用法,因为我们省略了所有的选项和参数 阅读全文
posted @ 2017-09-06 08:33 sparkdev 阅读(14359) 评论(13) 推荐(17) 编辑
摘要:Bash 提供了两种类型的数组,分别是索引数组(indexed array)和关联数组(associative array)。本文主要介绍索引数组的基本用法。 索引数组的基本特点 Bash 提供的数组都是一维数组。任何变量都可以用作索引数组。通过 declare 关键字可以显式的声明一个索引数组。数 阅读全文
posted @ 2017-07-15 10:07 sparkdev 阅读(12325) 评论(13) 推荐(14) 编辑
摘要:sed 是一个流编辑器(stream editor),主要用来执行文本替换。但 sed 的主要设计目的是以批处理的方式而不是交互的方式来编辑文件。 命令简介 基本命令格式 sed [常用选项] 命令文本 输入 常用选项 -n (--quiet, --silent):安静模式。在 sed 的基本用法中 阅读全文
posted @ 2017-07-10 08:25 sparkdev 阅读(32943) 评论(21) 推荐(22) 编辑
摘要:在局域网内部署 Docker Registry 可以极大的提升平时 pull、push 镜像的速度,从而缩短自动化操作的过程。同时也可以缓解带宽不足的问题,真是一举多得。本文将从创建单机的 Docker Registry 开始,逐步完成局域网内可用的 Docker Registry 的创建,并重点解 阅读全文
posted @ 2017-05-22 19:41 sparkdev 阅读(14218) 评论(27) 推荐(33) 编辑
摘要:SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结。 远程执行命令 如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主 阅读全文
posted @ 2017-05-11 21:33 sparkdev 阅读(106537) 评论(29) 推荐(55) 编辑
摘要:kill 命令的用途 kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的。我们来看一下 man page 对它的解释:kill - send a signal to a process. 从官方的解释不难看出,kill 是向进程发送信号的命令。当然我们可以向进程发送一个终止运行的信号,此 阅读全文
posted @ 2017-04-02 19:57 sparkdev 阅读(35609) 评论(11) 推荐(13) 编辑
摘要:简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并 阅读全文
posted @ 2016-12-17 14:15 sparkdev 阅读(102804) 评论(7) 推荐(17) 编辑
摘要:笔者在前文中介绍了 TeamCity Server 的安装过程,本文介绍在 Ubuntu Server 14.04 中安装 TeamCity Agent。Ubuntu Server 上已经创建了用户 tcuser。 安装JDK 请参考笔者之前的博文《Ubuntu14.04安装JDK》安装 JDK。 阅读全文
posted @ 2016-10-04 22:03 sparkdev 阅读(16356) 评论(7) 推荐(11) 编辑
摘要:本文介绍在 Ubuntu Server 14.04 中安装 TeamCity Server 10.0.1。Ubuntu Server 上已经创建了用户 tcuser。TeamCity 的安装包为 TeamCity-10.0.1.tar.gz,使用 Postgresql 9.4 代替 TeamCity 阅读全文
posted @ 2016-10-01 20:17 sparkdev 阅读(19156) 评论(16) 推荐(18) 编辑
摘要:习惯了使用 windows 的计划任务,使用 linux 中的 crontab 管理定时任务时很不适应。 所以把基本的用法总结如下。 创建一个简单的定时任务 每分钟输出一次当前的时间,输出到用户家目录下的 time.log 文件中。 crontab 程序的路径为 /usr/bin/crontab。 阅读全文
posted @ 2016-09-11 16:44 sparkdev 阅读(27230) 评论(4) 推荐(6) 编辑
摘要:在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观。以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作。本文主要描述笔者在学习使用 useradd 命令时的一些测试结果。 说明:本文中的所有试验都是在 Ubuntu14.04 上完成。 功能 阅读全文
posted @ 2016-08-30 20:07 sparkdev 阅读(72778) 评论(4) 推荐(7) 编辑
摘要:安装前的检查 首先查看是否已经安装了旧版本: 如果已经安装了某个版本的postgresql,请先卸载。 安装postgresql 添加postgresql源: 把下面这行数据添加到pgdb.list文件中: 执行下面的命令添加postgresql安装包的秘钥: 接下来就可以安装了: 一切顺利的话就可 阅读全文
posted @ 2016-07-24 12:17 sparkdev 阅读(9401) 评论(7) 推荐(5) 编辑
摘要:下载oracle jdk包 从oracle官网下载jdk包,请选择Linux的tar包: 如果想使用命令行下载工具进行下载,可以先获得下载地址,然后运行curl进行下载: 解压缩 把jdk包解压缩到/usr/lib目录下: 到/usr/lib目录下,查看一下解压缩后的目录: 设置环境变量 打开 /e 阅读全文
posted @ 2016-07-08 08:58 sparkdev 阅读(2712) 评论(3) 推荐(3) 编辑
摘要:ACL 是什么 ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权 阅读全文
posted @ 2016-05-28 11:32 sparkdev 阅读(9087) 评论(8) 推荐(11) 编辑