Linux 是一个免费的多用户、多任务的操作系统,Linux 系统最大的特色是源代码完全公开,在符合 GNU/GPL(通用公共许可证)的原则下,任何人都可以自由取得、散布甚至修改源代码。

0 目录

1 Linux基础

Linux系统应用领域

  1. Linux服务器
  2. 嵌入式Linux系统
  3. 软件开发平台
  4. 桌面应用

Linux系统的特点

  1. 开放性
  2. 多用户
  3. 多任务
  4. 良好的用户界面
  5. 设备独立性
  6. 丰富的网络功能
  7. 可靠的系统安全
  8. 良好的可移植性

Linux系统的组成

  1. 内核
  2. Shell
  3. 文件系统
  4. 应用程序

1.1 Linux发行版本

包管理工具商业发行版社区发行版
RPM
(Redhat Package Manager)
Red HatFedora/CentOS
DPKGUbuntuDebian

主流Linux发行版本:(1)Red Hat(2)SUSE(3)Oracle(4)CentOS(5)Ubuntu(6)Debian(7)Mandriva(8)Gentoo(9)Slackware(10)Fedora

RHEL 7(Red Hat Enterprise Linux 7)是 Red Hat 公司开发的最新版本操作系统。Red Hat Linux 系统优点:

  1. 支持和硬件平台多
  2. 优秀的安装界面
  3. 独特的RPM升级方式
  4. 丰富的软件包
  5. 安全性能好
  6. 方便的系统管理界面
  7. 详细而完整的在线文档

1.2 Linux安装

合理的分区规划

  • swap 分区:即交换分区,实现虚拟内存,建议大小是物理内存的1~2倍;
  • /boot 分区:用来存放与Linux系统启动有关的程序,比如引导装载程序等,最少 200 MB;
  • /usr 分区:用来存放 Linux 系统中的应用程序,其相关数据较多,建议大小最少为 8 GB;
  • /var 分区:用来存放 Linux 系统中经常变化的数据以及日志文件,建议大小最少为 1 GB;
  • / 分区:Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小最少为 1 GB;
  • /home 分区:存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。

目录结构

在 RHEL 7 系统中默认使用 FirewallD 防火墙,FirewallD 提供了支持网络/防火墙区域定义网络链接以及接口安全等级的动态防火墙管理工具。

  • 支持 IPv4、IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项;
  • 支持允许服务或者应用程序直接添加防火墙规则的接口;
  • 支持动态配置,不用重启服务。

1.3 字符界面

Linux 字符界包括字符界面、图形界面下的终端以及虚拟控制台。

Bash 基本操作

  • 开关机
    • 关机:shutdown –h / halt
    • 重启:shutdown -r / reboot
  • 求助:--help / man / info / doc
  • 系统信息显示
    • uname:显示计算机及操作系统相关信息
    • hostname:显示或修改计算机主机名
    • free:查看内存信息
    • du:显示目录或文件的磁盘占用量
  • 日期和时间
    • cal:显示日历信息
    • date:显示和设置系统日期和时间
    • hwclock:查看和设置硬件时钟
    • uptime:显示系统已经运行的时间
  • 信息交流
    • echo:在显示器上显示文字
    • mesg:允许或拒绝写消息
    • wall:对全部已登录用户发送信息
    • write:向用户发送消息

RHEL 7 使用目标target)替换运行级别。目标使用目标单元文件描述,目标单位文件扩展名是 .target,目标单元文件的唯一目标是将其他 systemd 单元文件通过一连串的依赖关系组织在一起。

重定向指的是使用文件代替标准输入、标准输出和标准错误输出。重定向有四种方式:输出重定向 >、输入重定向 <、错误重定向 2>以及同时实现输出和错误的重定向 &>。另外还有双向输出重定向 tee

管道 | 是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。

1.4 vi编辑器

vi编辑器工作模式

1.5 文件

文件类型

  • 普通文件
  • 目录文件
  • 设备文件
    • 字符设备文件:最常见的字符设备文件是打印机和终端,可以接收字符流。
    • 块设备文件:块设备的主要特点是可以随机读写,而最常见的块设备就是磁盘。
  • 管道文件(FIFO文件)
  • 链接文件
    • 软链接(符号链接)文件:软链接文件又叫符号链接文件,这个文件包含了另一个文件的路径名。在对软链接文件进行读写的时候,系统会自动地把该操作转换为对源文件的操作,但删除软链接文件时,系统仅仅删除软链接文件,而不删除源文件本身。
    • 硬链接(实体链接)是已存在文件的另一个文件,对硬链接文件进行读写和删除操作时,结果和软链接相同。但如果删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了原有的内容。

ls命令 drwxr-xr-x 3 root root 17 May 6 00:14 .config

列数描述
1第1个字符表示文件的类型
第 2~4 个字符表示文件的用户所有者对此文件的访问权限
第 5~7 个字符表示文件的组群所有者对此文件的访问权限
第 8~10 个字符表示其他用户对此文件的访问权限
2文件的链接数
3文件的用户所有者
4文件的组群所有者
5文件长度(也就是文件大小,不是文件的磁盘占用量)
6~8文件的更改时间(mtime)/文件的最后访问时间(atime)
9文件名称

基本操作

  • 文件与目录基本操作
    • ls:列出文件或者目录的信息
    • cd:更改目录
    • mkdir:创建目录
    • rmdir:删除目录,目录必须为空
    • touch:更新文件时间或者建立新文件
    • cp:复制文件
    • rm:删除文件
    • mv:移动文件/重命名
    • find:列出文件系统内符合条件的文件
    • locate:在数据库中查找文件
    • which:指令搜索
    • whereis:文件搜索
    • split:将一个文件划分成多个文件
  • 权限操作
    • chmod:修改权限
      • 文字设定法
      • 数字设定法
      • 文件默认权限:666,即 -rw-rw-rw-
      • 目录默认权限:777,即 drwxrwxrwx
      • 特殊权限:SUID、SGID、Sticky
    • chown:更改所有者
  • 文件内容操作
    • cat:取得文件内容
    • tac:是 cat 的反向操作,从最后一行开始打印
    • more:分页显示文本文件
    • less:回卷显示文本文件
    • head:显示指定文件前若干行
    • tail:查看文件末尾数据
    • sort:对文件中的数据进行排序
    • uniq:将重复行从输出文件中删除
    • cut:从文件每行中显示出选定的字节、字符或字段
    • comm:逐行比较两个已排过序的文件
    • diff:逐行比较两个文本文件,列出其不同之处
    • grep:查找文件中符合条件的字符串
    • 字符转换
      • tr:删除一行中的字符,或者对字符进行替换
      • col:将 tab 字符转为空格字符
      • expand:将 tab 转换一定数量的空格,默认是 8 个
      • join:将有相同数据的那一行合并在一起
      • paste:直接将两行粘贴在一起

1.6 Shell编程

  • Shell 程序必须以#!/bin/bash开头。
  • 常用 Shell 环境变量
    • HOME:用户主目录的完全路径名
    • PATH:系统环境变量
    • TERM:终端类型
    • UID:当前用户的 UID
    • PWD:当前工作目录的绝对路径名
    • PS1:主提示符,在 root 用户下,默认的主提示符是 #,在普通用户下,默认的主提示符是 $
    • PS2:辅助提示符,默认的辅助提示符是 >
  • 位置参数是一种在调用Shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。
  • 字符串比较:= 是否相等,!= 是否不同,-n 长度是否大于0,-z 长度是否等于0;
  • 逻辑测试:! 非,-a 与,-o 或;
  • 文件测试:-d 对象存在且为目录,-f 对象存在且为文件。

1.7 账户管理

  • 用户账户分类
    • root 用户:UID 为 0
    • 系统用户:又称虚拟用户、伪用户或假用户,UID 为 1 ~ 999
    • 普通用户:UID 为 1000 ~ 60000
  • 与用户账户有关的配置文件
    • /etc/passwd
      • zhangsan:x:1000:1000:张三:/home/zhangsan:/bin/bash
      • 用户名:密码:用户标识号:组群标识号:用户名全称:主目录:Shell类型
    • /etc/shadow
      • zhangsan:$6$E/xvWMmh$rhYLQwwffEqIudVLFzMlvkb0iN4.0Oluk6H.UovEYN0/99dVoHXcaCNGZZkFY1S3QHYgm7e6JPzEew6ybmN4e0:16364:0:99999:7:::
      • 用户名:加密密码:用户最后一次更改密码的日期:密码允许更换前的天数:密码需要更换的天数:密码更换前警告的天数:账户被取消激活前的天数:用户账户过期日期:保留字段
  • 组群账户分类
    • 私有组群和标准组群
    • 主要组群和次要组群
  • 与组群账户有关的配置文件
    • /etc/group
      • zhangsan:x:1000:
      • 组群名:组群密码:组群标识号:组群成员
    • /etc/gshadow
      • beijing:$6$E/xvWMmh$rhYLQwwffEqIudVLFzMlv1::ou
      • 组群名:组群加密密码:组群管理者:组群成员

账户操作

  • 用户账户:useraddusermoduserdel
  • 组群账户:groupaddgroupmodgroupdel
  • passwd:设置或修改用户的密码;
  • gpasswd:设置一个组群的组群密码,或者是在组群中添加、删除用户;
  • su:切换用户账户进行登录。如果su命令不加任何选项,默认为切换到root用户;
  • newgrp:让用户账户以另一个组群的身份进行登录;
  • groups:显示指定用户账户的组群成员身份;
  • id:显示用户的UID以及该用户所属组群的GID。

2 磁盘分区和文件系统

2.1 磁盘

磁盘接口

  1. IDE(ATA)全称 Advanced Technology Attachment
  2. SATA 全称 Serial ATA,也就是使用串口的 ATA 接口
  3. SCSI 全称是 Small Computer System Interface(小型机系统接口)
  4. SAS(Serial Attached SCSI)是新一代的 SCSI 技术

Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下:

  • IDE 磁盘:/dev/hd[a-d]
  • SATA/SCSI/SAS 磁盘:/dev/sd[a-p]

2.2 分区

磁盘分区是指对硬盘物理介质的逻辑划分。分区就是磁盘的“段落”。磁盘分区一共有3种:主分区、扩展分区和逻辑驱动器。

分区表

  • MBR
    • MBR 中第一个扇区最重要,里面有主要开机记录及分区表。分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区和扩展分区。
    • GPT 第 1 个区块记录了主要开机记录(MBR),紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。GPT 没有扩展分区概念,都是主分区。
    • MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 233 TB = 8 ZB。

逻辑卷管理 Logical Volume Manager

  • Linux环境下对磁盘分区进行管理的一种机制。/boot分区用于存放引导文件,不能应用LVM机制。
  • 组成
    • PV(Physical Volume,物理卷):整个硬盘,或使用fdisk等工具建立的普通分区
      • 包括许多默认4MB大小的PE(Physical Extent,基本单元)
    • VG(Volume Group,卷组):一个或多个物理卷组合而成的整体
    • LV(Logical Volume,逻辑卷):从卷组中分割出的一块空间,用于建立文件系统
  • 创建逻辑卷
    1. 新建空分:fdisk
    2. 初始化分区,创建物理卷(创建PV):pvcreate
    3. 创建卷组:vgcreate
    4. 创建逻辑卷:lvcreate

2.3 文件系统

主流文件系统:XFS、ext4、JFS、ReiserFS、ext2、ext3、ISO9660、MSDOS,VFAT、NF。

重要组成

  • inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;
  • block:记录文件的内容,文件太大时,会占用多个 block。

文件读取

  • 对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。
    • 在 Ext2 文件系统中所支持的 block 大小有 1K,2K 及 4K 三种。
  • FAT 文件系统,它没有 inode,每个 block 中存储着下一个 block 的编号。
    • 包括——权限 (read/write/excute);拥有者与群组 (owner/group);容量;建立或状态改变的时间 (ctime);最近读取时间 (atime);最近修改时间 (mtime);定义文件特性的旗标 (flag),如 SetUID…;该文件真正内容的指向 (pointer)。
    • 每个 inode 大小均固定为 128 bytes。
    • 每个文件都仅会占用一个 inode。

修改 /etc/fstab 文件实现开机自动挂载文件系统,通过提供设备名称、UUID 和卷标实现

  • /dev/sda5 /mnt/kk ext4 defaults 0 0
  • 设备 挂载目录 文件系统类型 挂载选项 转储选项 文件系统检查选项

常用命令

  • fdisk:磁盘分区
  • mkfs:创建文件系统
  • mount / umount:挂载和卸载文件系统
  • df:查看磁盘分区挂载情况

2.4 软件包

RPM(Red Hat Package Manager,Red Hat 软件包管理器)

  • rpm -ivh:安装
  • rpm -e:删除
  • rpm -Uvh:升级
  • rpm -Fvh:刷新
  • rpm -q:查询

yum(Yellow dog Updater Modified)

创建本地软件仓库

  1. 安装软件包:安装deltarpm、python-deltarpm和createrepo软件包。
  2. 复制软件包:复制Linux系统安装光盘中的软件包。
  3. 创建软件仓库配置文件:创建软件仓库配置文件。
  4. 创建软件仓库:使用createrepo命令创建软件仓库。
2.4.1 tar

Linux系统中最常使用的归档程序是 tar,使用 tar 程序归档的包称为 tar 包。tar 命令可以在打包或解包的同时调用 gzip、bzip2 和 xz 等。

tar [z|j|J] [c|t|x|r]vf

  • z :使用 zip;
  • j :使用 bzip2;
  • J :使用 xz;
  • c :新建打包文件;
  • t :查看打包文件里面有哪些文件;
  • x :解打包或解压缩的功能;
  • r :往tar包里添加。
扩展名压缩程序
*.Zcompress
*.zipzip
*.gzgzip
*.bz2bzip2
*.xzxz
*.tartar 程序打包的数据,没有经过压缩
*.tar.gztar 程序打包的文件,经过 gzip 的压缩
*.tar.bz2tar 程序打包的文件,经过 bzip2 的压缩
*.tar.xztar 程序打包的文件,经过 xz 的压缩

3 Linux管理与维护

3.1 进程

进程分类:

  • 交互式进程:一个由 Shell 启动并控制的进程;
  • 批处理进程:与终端无关,安排在指定时刻完成的一系列进程;
  • 守护进程:在引导系统时启动,以执行即时的操作系统任务。

进程命令:

  • ps:查看某个时间点的进程信息;
  • pstree:查看进程树;
  • top:实时显示进程信息;
  • kill:杀死进程;
  • netstat:查看占用端口的进程。
进程状态说明
Rrunning or runnable (on run queue)
正在执行或者可执行,此时进程位于执行队列中。
Duninterruptible sleep (usually I/O)
不可中断阻塞,通常为 IO 阻塞。
Sinterruptible sleep (waiting for an event to complete)
可中断阻塞,此时进程正在等待某个事件完成。
Zzombie (terminated but not reaped by its parent)
僵死,进程已经终止但是尚未被其父进程获取信息。
Tstopped (either by a job control signal or because it is being traced)
结束,进程既可以被作业控制信号结束,也可能是正在被追踪。

当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:

  • 得到 SIGCHLD 信号,SIGCHLD 信号包含了子进程的信息;
  • waitpid() 或者 wait() 调用会返回。

一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。

如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。

3.2 任务计划

任务自动化 cron

  • /etc/crontab
    • 格式minute hour day month dayofweek user-name commands
  • crontab命令

Linux 系统启动过程

  1. BIOS 自检
    • 开机检测程序 BIOS(Basic Input/Output System,基本输入输出系统),是一个固件(嵌入在硬件中的软件),BIOS 程序存放在断电后内容不会丢失的只读内存中。BIOS 由两部分组成:POST 代码和运行时的服务。
      1. 加电 POST 自检
      2. 本地设备的枚举和初始化
  2. 启动GRUB 2:GRUB 2 是 Linux 系统中默认使用的引导加载程序
  3. 加载内核
  4. 执行 systemd 进程
  5. 初始化系统环境
  6. 执行 /bin/login 程序

GRUB 2 新功能

  1. 图形接口。
  2. 使用模块机制,通过动态加载需要的模块来扩展功能。
  3. 支持脚本语言,比如条件判断、循环、变量和函数。
  4. 支持救援模式,可以用于系统无法引导的情况。
  5. 国际化语言。
  6. 有一个灵活的命令行接口。
  7. 针对文件系统、文件、设备、驱动、终端、命令、分区表、系统加载的模块化、层次化、基于对象的框架。
  8. 支持多种文件系统格式。
  9. 可以访问已经安装在设备上的数据。
  10. 支持自动解压。

GRUB 2 密码支持格式

  • 明文密码
  • PBKDF2 加密密码

3.3 网络配置

常用网络配置文件

  • /etc/sysconfig/network-scripts/ifcfg-eno16777736:网卡的配置信息
  • /etc/resolv.conf:域名解析器使用
  • /etc/hosts:解析对应于某个主机名的IP地址
  • /etc/services:定义了 Linux 系统中所有服务的名称、协议类型、服务的端口等信息

常用网络命令

  • traceroute:显示数据包到目标主机之间的路径
  • ifconfig:显示和配置网络接口
  • ping:测试与目标计算机之间的连通性
  • netstat:显示网络状态的信息,得知整个Linux系统的网络情况
  • arp:增加、删除和显示ARP缓存条目
  • tcpdump:将网络中传送的数据包的头完全截获下来提供分析

管理网络服务

  • 在 systemd 中,服务、设备、挂载等资源统一被称为单元,所以 systemd 中有许多单元类型。一个单元的配置文件可以描述系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由systemd管理的计时器(.timer)等。
  • systemctl 命令:启动、关闭、管理服务

3.4 远程连接

SSH和OpenSSH

  • SSH(Secure Shell,安全Shell)是由 IETF 的网络工作小组所制定,为建立在应用层和传输层基础上的安全协议。使用 SSH 可以在本地主机和远程服务器之间进行加密地传输数据,实现数据的安全传输。
  • OpenSSH 是 SSH 协议的免费开源实现,它用安全、加密的网络连接工具代替了 telnet,ftp,rlogin,rsh 和 rcp 工具。
  • OpenSSH 主配置文件:/etc/ssh/sshd_config
  • ssh 命令:登录远程计算机和在远程计算机上执行命令
  • scp 命令:通过安全、加密的连接在不同主机之间传输文件

VNC

  • 虚拟网络计算(Virtual Network Computing,VNC)是一款由AT&T欧洲研究实验室开发的远程控制软件。
  • VNC 基本上是属于一种显示系统,也就是说它能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上。
  • 组成部分:服务端的 VNC server 和客户端的 VNC viewer
  • vncpasswd 命令:创建或更改一个VNC的登录密码
  • vncserver 命令:管理VNC服务器

NFS

  • NFS(Network File System,网络文件系统)
  • 通过配置 NFS 服务器,可以让客户机挂载 NFS 服务器上的共享目录、文件就如同位于客户机的本地硬盘上一样。
  • NFS 使用 RPC 协议:NFS 是一个文件系统,而 RPC 是负责信息的传输。
  • /etc/exports 文件
    • 格式 共享目录客户端(导出选项)
    • 常用导出选项:
      • rw 共享目录具有读取和写入的权限;
      • ro 共享目录具有只读的权限;
      • root_squash root用户的所有请求映射成如anonymous(匿名)用户一样的权限;
      • sync 所有数据在请求时写入共享,在请求所做的改变被写入磁盘之前就不会处理其它请求,适合大量写请求的情况下。
  • exportfs 命令:维护NFS共享目录

3.5 SELinux

SELinux是一组可确定哪个进程能访问文件、目录、端口等的安全规则。SELinux布尔值是更改SELinux策略行为的开关。

  • SELinux模式:
    • 强制模式 Enforcing
    • 许可模式 Permissive
    • 禁用模式 Disabled
⤧  Next post 【Testing】C++单元测试调研分析 ⤧  Previous post 【守望先锋】守望先锋联赛OWL